Привет, Хабр! На связи команда информационной безопасности Flowwow — Дмитрий Бабчук и Виктор Соловьев. На протяжении долгого времени мы работали над автоматизацией процессов DevSecOps с помощью ИИ. Сегодня поделимся с вами результатами нашей работы.

Но для начала небольшой оффтоп.

Вы наверняка знаете, насколько трудоемки процессы ручного контроля уязвимостей, назначения задач и мониторинга их исправления. Мы каждый день сталкивались с подобной рутиной, которая отнимала у нас кучу времени и отодвигала действительно важные, но объемные задачи на второй план. В какой-то момент мы стали теми самыми парнями из мема, которые работают даже во сне.

И никто, конечно же, не отменял главной и ключевой проблемы, которую важно было решить нашему отделу, — обеспечить безопасность кода. А это та еще задачка со звездочкой.

Учитывая оба этих фактора, мы разработали DevSecOps-консоль, которая автоматизирует обнаружение, классификацию и назначение ответственных за решение задач по уязвимостям, а также предоставляет удобные инструменты для их устранения.

О том, как мы это сделали и какой результат получили после внедрения, — в этой статье. Но обо всем по порядку. Начнем с основ.

Что такое DevSecOps?

DevSecOps (Development + Security + Operations) — это подход к разработке, который интегрирует безопасность (Security) на всех этапах DevOps-цикла.

Ключевые принципы DevSecOps:

  1. Security as Code — безопасность внедряется автоматически (сканирование кода, инфраструктуры, зависимостей).

  2. Раннее обнаружение уязвимостей — проверка на этапах написания кода, сборки и деплоя.

  3. Автоматизация безопасности — инструменты SAST, DAST, SCA, секреты-сканирование.

  4. Культура shared responsibility — безопасность становится зоной ответственности не только Sec-команды, но и разработчиков, DevOps.

Все эти принципы нам было важно сохранить и учесть в процессе автоматизации. И начали мы с простого.

Шаг 1. Интеграция с GitHub и GitLab

Мы реализовали подключение репозиториев GitHub и GitLab для централизованного управления безопасностью кода.

DevSecOps-консоль. Интеграция с GitHub и GitLab
DevSecOps-консоль. Интеграция с GitHub и GitLab

Теперь в рамках единой консоли мы просматриваем всю необходимую нам информацию, а именно наименование репозитория, его описание, языки программирования и наличие Code Owner на репозитории.

Наличие информации о Code Owner — особенно удобная фича. Это позволяет нам автоматизированно назначать лицо, ответственное за устранение уязвимостей. То есть консоль автоматически назначает разработчика, который должен устранить уязвимость, обнаруженную в его коде. И, что не менее важно, напоминает ему об этой задаче.

Дополнительно мы внедрили механизм подключения или отключения репозитория из списка сканируемых. Но используем его, только если возникает подобная необходимость.

Шаг 2. Борьба с ложноположительные сработками

Еще одна проблема, с которой мы столкнулись в работе, — ложноположительные сработки. Чтобы бороться с этой напастью, мы используем ИИ.

Как это работает? После статического анализатора ИИ берет в контекст код и оценивает ближайший по 9 заданным критериям. На основе этого выставляет определенный балл каждой уязвимости, что позволяет отфильтровать ложноположительные сработки и понять критичность уязвимости.

Таким образом, при помощи ИИ нам удалось сократить количество сработок на ~50–60%.

Шаг 3. Удобный механизм фильтрации задач

Для максимального удобства мы классифицировали все найденные уязвимости и покрыли их фильтрами. Теперь мы можем отсортировать их по репозиториям, дате обнаружения, коммитеру и code owner.

Что это дает? Позволяет оперативно найти необходимые открытые таски и проанализировать их на предмет наличия уязвимостей. Для нас как для команды информационной безопасности это критически важно, поскольку позволяет минимизировать возможные риски.

Удобство в работе с консолью — наше все, поэтому выставленные фильтры сохраняются и не требуют повторного выставления при обновлении страницы или заходе на страницу, даже если зайти через неделю.

Применение фильтров в консоли. Часть 1
Применение фильтров в консоли. Часть 1
Применение фильтров в консоли. Часть 2
Применение фильтров в консоли. Часть 2

Шаг 4. Автоматическое и ручное назначение задач

Как мы уже упоминали ранее, при наличии на репозитории code owner автоматически происходит назначение сотрудника, ответственного за анализ задачи. Но ситуации бывают разные, и не предусмотреть возможность изменить ответственного за таск было бы ошибкой. Поэтому мы реализовали и такой функционал.

Чтобы назначить выполнение задачи на одного или нескольких разработчиков, достаточно указать их электронные почты или имена. Сотруднику же придет уведомление о том, что его назначили ответственным, сразу в корпоративный мессенджер.

Назначение ответственного
Назначение ответственного

Дополнительно мы внедрили механизм, позволяющий оставлять комментарии в задаче, а также возможность призывать заинтересованных коллег для расследования инцидента.

Упоминание заинтересованных лиц
Упоминание заинтересованных лиц

Такие фичи могут показаться мелочью. Но именно из-за них работа над задачами чаще всего тормозит. Ведь сотрудник, ответственный за уязвимость, может быть в отпуске, или уволиться, или элементарно не увидеть, что на него упала задача. Поэтому такие небольшие доработки позволяют нам ускорить устранение уязвимостей.

Шаг 5. Дашборды и мониторинг активности

Аналитика — это главный инструмент руководителя, поэтому к его разработке мы подошли с особой тщательностью.

В первую очередь мы внедрили механизм графического отображения общего количества открытых задач. Не забыли и о статистике по каждому сотруднику в рамках как уже решенных задач, так и открытых. Такие данные позволяют нам отслеживать, укладываются ли сотрудники в дедлайны, и, конечно же, не допускать возможных проблем с игнорированием задач сотрудниками, вовремя напоминать о необходимости закрытия задач.

Диаграмма, отражающая количество задач с разбивкой по их критичности и статусу
Диаграмма, отражающая количество задач с разбивкой по их критичности и статусу
График количества нерешенных задач с разбивкой по ответственным сотрудникам
График количества нерешенных задач с разбивкой по ответственным сотрудникам

Шаг 6. AI-ассистент для разработчиков

Самое сложное в нашей работе — объяснить разработчикам, почему уязвимость опасна, откуда она взялась и как ее исправить. Мы долго пытались понять, как именно можно упростить этот процесс. И нашли очень простой выход — подключили ИИ.

Созданное решение позволяет оперативно понимать суть уязвимости, причины появления, почему это опасно и как это исправить, то есть принимать верные решения для устранения проблем. И, что важно, обучает разработчиков не допускать подобных ошибок в будущем. Так, например, когда сотрудник встречает много однотипных уязвимостей и постоянно исправляет их, в будущем, при написании кода, он начинает задумываться над тем, чтобы не допустить повторения, при написании нового функционала.

Рекомендации от ИИ по устранению уязвимости
Рекомендации от ИИ по устранению уязвимости

Из этих составляющих и состоит наша DevSecOps-консоль. Она значительно упрощает нам процесс контроля над уязвимостями, ускоряет их исправление и делает безопасность частью DevOps-культуры. Благодаря интеграции с популярными Git-платформами, автоматизации назначения задач и AI-ассистенту разработчики тратят меньше времени на рутинные проверки и больше — на создание качественного и безопасного кода.

Оцените нашу разработку в комментариях и задавайте вопросы, если что-то осталось непонятным!

Комментарии (0)