Безопасная разработка: код-ревью, статический анализ, контроль зависимостей
Встраиваем проверки безопасности в процесс разработки: требования формулируются на этапе проектирования, код проходит ревью, конвейер сборки запускает статический анализ, зависимости проверяются на известные уязвимости. Работаем и со своими продуктами, и с командами заказчика — от аудита текущего процесса до его перестройки.
Коротко о задаче
Уязвимость, найденная на этапе проектирования, стоит разговора. Найденная в код-ревью — часа работы. Найденная после релиза — выпуска внеочередного обновления и объяснений с заказчиком. Найденная злоумышленником — инцидента с уведомлением регулятора.
При этом безопасность в разработке чаще всего существует как пожелание, а не как процесс. Требования к ней не формулируются в задачах. Ревью проводится на предмет читаемости кода, а не проверок ввода и прав доступа. Библиотеки подключаются и не обновляются годами, хотя в них давно закрыты известные проблемы. Секреты — пароли, ключи, строки подключения — лежат в репозитории, потому что так было быстрее на старте. Тестовая среда работает с копией боевой базы, включая настоящие персональные данные клиентов.
Отдельная категория — заимствованный код. Современное приложение состоит из собственного кода процентов на двадцать, остальное приходит из внешних библиотек. Уязвимость в популярном пакете автоматически становится вашей, и узнать о ней можно только целенаправленно.
Мы делаем эти проверки частью конвейера, а не отдельным героическим усилием.
Что входит в услугу
- Аудит текущего процесса
Разбираем, как устроена разработка сейчас: ветвление, ревью, тестирование, сборка, выпуск, разделение сред, обращение с секретами. Отчёт с приоритетами и планом.
- Требования безопасности при проектировании
Проработка модели угроз для новой функциональности: кто имеет доступ, что происходит при подделке запроса, где проверяется авторизация, какие данные логируются. Дешевле любого последующего исправления.
- Код-ревью
Проверка изменений по чек-листу: проверка ввода, параметризация запросов к базе, авторизация на уровне действия, а не только интерфейса, обработка ошибок без раскрытия деталей, отсутствие секретов в коде.
- Статический анализ в конвейере
Автоматический разбор кода при каждом изменении с блокировкой сборки при находках заданного уровня. Проверка перестаёт зависеть от внимательности человека.
- Контроль зависимостей
Регулярная сверка используемых библиотек с базами известных уязвимостей, регламент обновления, отслеживание версий, вышедших из поддержки.
- Управление секретами
Вынос паролей, ключей и строк подключения из кода и конфигурационных файлов в защищённое хранилище, ротация, разграничение доступа по средам.
- Разделение сред
Изоляция среды разработки, тестирования и эксплуатации. Обезличивание данных при переносе боевой базы в тестовую среду — отдельная и обязательная задача.
- Безопасность аутентификации и API
Проверка механизмов входа, работы с токенами, ограничения частоты запросов, защиты от автоматизированного перебора, разграничения доступа в интерфейсах обмена. Смотрите {{ссылка: Интеграция систем и разработка API}}.
- Автоматические тесты
Покрытие тестами сценариев, связанных с правами доступа и обработкой некорректного ввода. Проверка выполняется при каждом изменении.
- Обучение команды
Разбор типовых ошибок на примерах из вашего же кода. Это работает лучше общих курсов.
- Связка с валидацией
Для регулируемых отраслей процесс разработки предъявляется заказчику при оценке поставщика. Смотрите {{ссылка: Валидация компьютеризированных систем по GAMP 5}}.
Что это даёт заказчику
- Дефекты ловятся раньше. Стоимость исправления отличается на порядки в зависимости от стадии.
- Проверки не зависят от людей. Конвейер выполняет их при каждом изменении, независимо от загруженности команды.
- Известные уязвимости не живут годами. Библиотеки отслеживаются, обновление стало регламентом.
- Секреты не утекают вместе с кодом. Ключи вынесены из репозитория.
- Персональные данные не размножаются по средам. Тестирование идёт на обезличенных данных.
- Процесс можно предъявить. Заказчику из регулируемой отрасли есть что показать при оценке поставщика.
Как мы работаем
Начинаем с аудита процесса и с самых дешёвых мер: вынос секретов, обновление зависимостей с известными уязвимостями, обезличивание тестовых данных. Эти три пункта закрывают заметную часть риска за считанные дни.
Автоматические проверки вводим постепенно, начиная с предупреждений и переходя к блокировке. Конвейер, который в первый же день заблокировал всё, команда обойдёт, а не примет.
Обучение проводим на своём материале: разбор реальных находок в собственном коде убеждает сильнее абстрактных примеров.
Вредоносный код, эксплойты и инструменты для обхода защиты мы не разрабатываем ни в каком виде, включая учебные цели.
Наш опыт
Мы разрабатываем и сопровождаем системы, где цена ошибки высока: платформа фармаконадзора с данными о здоровье пациентов, система сбора данных клинических исследований, платформа с приёмом онлайн-платежей. Разграничение доступа по ролям, защищённая аутентификация по токенам, защита от автоматизированных запросов и полный аудит действий проектируются в них с самого начала.
Типовые части — аутентификация, работа с файлами, защита форм — вынесены в семнадцать внутренних библиотек. Проверенный один раз код переиспользуется, вместо того чтобы писаться заново с новыми ошибками на каждом проекте. Качество держим автоматическими тестами, которые запускаются в изолированном окружении при каждом изменении.
На системах нашей разработки заказчики прошли более тридцати аудитов клиентов и более десяти проверок регуляторов.
Расскажите, как устроен процесс разработки у вас. Начнём с аудита и быстрых мер.
Давайте создавать вместе!
Свяжитесь с нами и мы проконсультируем по вопросам реализации IT-решений и найдем лучший подход к разработке
Контакты
Офис: г. Казань, ул. Островского, 57Б, оф. 110
Почта: info@nabla-lab.ru
Телефон: +7 (965) 595-62-78