- BrainTools - https://www.braintools.ru -

Работа ИБ в продуктовой разработке — это не только поиск сложных уязвимостей и редких атакующих сценариев. Значительная её часть состоит из регулярной операционной нагрузки: нужно разбирать новые задачи, смотреть изменения в коде, проверять релизы, собирать контекст и вовремя замечать потенциальные риски.
Именно на этом уровне возникает основной объём рутины. Инженер по безопасности снова и снова выполняет одни и те же базовые действия: читает постановку, анализирует контекст, проверяет типовые паттерны, отсеивает очевидные проблемы. Эта работа необходима, но она отнимает кучу времени, которое должно уходить на более сложный анализ и принятие решений.
Увеличивать команду ради такой нагрузки — не всегда лучший путь, поскольку вместе с экспертностью масштабируется и рутина. Поэтому для нас следующим логичным шагом стало использование AI — не как замены инженера, а как инструмента, который берёт на себя первичный слой проверки.
Мы посмотрели на процесс ИБ внутри релизного цикла и выделили участки с наибольшей повторяемостью. Таких точек оказалось три: первичный разбор Security Check-задач, анализ кода в merge request и динамическое тестирование приложений. Во всех этих сценариях сначала выполняется типовая работа, и только потом начинается действительно экспертная часть.
Именно этот слой мы и решили автоматизировать тремя практическими инструментами:
сервис для первичного ревью Security Check-задач, который помогает быстрее обрабатывать входящий поток и выделять потенциальные риски;
AI Code Review, встроенный в процесс проверки кода и помогающий находить типовые уязвимости и ошибки [1];
AI DAST — мультиагентная система для автоматизации динамического тестирования, которая работает как «робот-пентестер» на уровне junior-специалиста.
Важно уточнить, что во всех этих сценариях AI не принимает финальных решений. Он снимает рутинную нагрузку, ускоряет сбор контекста и помогает инженеру быстрее переходить к тому, что действительно требует экспертизы: оценке рисков, разбору нетривиальных кейсов и выбору решений.
Ниже мы — директор по информационной безопасности Дмитрий Морев [2], руководитель команды продуктовой безопасности Никита Иванов [3] и инженер по информационной безопасности RuStore Алексей Крохин — подробно расскажем, как внедряли эти инструменты, как встроили их в существующие процессы разработки и какие результаты уже получили.
Внутри продуктового цикла у нас есть Security Check — обязательный контур, который позволяет оценивать изменения с точки зрения [4] безопасности ещё на стадии работы с задачей. Идея простая: любая производственная задача потенциально может повлиять на безопасность, а значит её надо хотя бы быстро и адекватно отфильтровать.
Проблема в том, что далеко не каждая задача действительно требует глубокого участия ИБ. В релизном потоке всегда много изменений, которые не несут значимого риска: правки интерфейса, изменение текстов, feature-флаги, нерелевантные технические корректировки, второстепенные рефакторинги без влияния на функциональность и доступы. Но чтобы понять, что задача нерелевантна, инженер всё равно тратит время.
Именно этот этап мы и решили автоматизировать.
Мы разработали сервис RuStore Security Check Review, который подключается к задаче после появления Merge Request и работает на стадиях от code review до ready for deploy. Он собирает контекст из нескольких источников: описание задачи, связанные артефакты, код из Merge Request, архитектурные записи, API-спецификации и другие доступные данные, которые помогают понять смысл изменений.
После этого сервис формирует два ключевых результата.
Первый — суммаризацию изменений с акцентом на безопасность. По сути, это краткий разбор того, что именно поменялось в коде и какие классы рисков здесь вообще имеют смысл. Например: есть ли изменения в логике [5] авторизации, появляются ли новые эндпоинты, меняются ли сценарии доступа к данным, добавляются ли потенциально чувствительные операции, затрагиваются ли SQL-запросы или механизмы фильтрации.
Второй — предварительный вердикт о релевантности задачи для команды ИБ. Если по содержанию MR видно, что задача не влияет на функциональность, безопасность и модель доступа, сервис может пометить её как нерелевантную и закрыть автоматически. Если же изменения значимы, он не подменяет собой решение инженера, а наоборот помогает быстрее начать осмысленный анализ: показывает, где смотреть в первую очередь и какие риски наиболее вероятны.
Именно здесь AI даёт заметный эффект. Раньше такой первичный разбор занимал от 5 минут до часа — в зависимости от объёма изменений, качества описания и необходимости уточнять детали у разработчиков. Теперь базовый анализ происходит за секунды.

За 4 месяца после запуска сервис обработал 2538 задач. Из них 617 были закрыты автоматически как нерелевантные для ИБ. Это дало около 24% прироста производительности только за счёт отсечения лишнего потока.
Важно уточнить: речь не идёт о том, что «нейросеть стала делать работу безопасников». Речь о другом. Команда перестала тратить ощутимую часть времени на задачи, которые изначально не требовали ручной проверки. Освободившийся ресурс ушёл туда, где он действительно нужен: на архитектурный анализ, на новые интеграции, на спорные изменения, на более глубокую проработку сложных кейсов.
Снаружи такие истории часто выглядят слишком гладко: придумали сервис, подключили модель, всё сразу заработало. На деле, конечно, было не так.
Одна из проблем была связана не с инфраструктурой, а с качеством ответов модели. На ранних этапах мы давали ей слишком жёсткие и переусложнённые инструкции. Это привело к предсказуемому эффекту: сервис начал выдавать очень усреднённые, стерильные и малоценные ответы. Формально всё выглядело правильно, но практической пользы было мало — вместо релевантных замечаний модель стабильно возвращала «среднюю температуру по больнице».
Пришлось идти в другую сторону: не делать промпты ещё строже, а наоборот — тонко перенастроить правила, дать модели больше пространства для рассуждения и больше автономности в выборе акцентов. После этого качество заметно выросло: ответы стали менее шаблонными и гораздо лучше привязанными к конкретным изменениям.
Это вообще один из самых полезных выводов всей работы: если вы встраиваете LLM в процессы безопасности, не надо думать только в категориях «запретить всё лишнее» и «максимально закрутить промпт». Иногда переизбыток ограничений снижает качество сильнее, чем недостаток.
Security Check Review — это не автомат по принятию решений. Это инструмент предварительного анализа.
Мы регулярно смотрим, какие задачи он закрывает, проверяем его вердикты и отслеживаем, не начинает ли система ошибаться или съезжать в сторону излишней уверенности. Именно поэтому мы говорим не про «полную автоматизацию», а про калибруемый и наблюдаемый AI-контроль.
Для ИБ это принципиально. Нельзя просто увидеть красивую цифру по автозакрытию и решить, что всё теперь работает само. Любой AI-контроль требует обратной связи, периодической валидации и нормального логирования результатов.
Следующий этап — анализ безопасности не задач, а непосредственно кода.
У команды разработки RuStore уже была собственная мультиагентная система AI Code Review, встроенная в процесс работы с Merge Request. Она использовалась для общего анализа качества кода, и мы подключились к этому контуру со своей частью — проверками безопасности. Так появился отдельный security-агент внутри AI Code Review, который анализирует изменения в каждом MR и ищет уязвимости, которые сложно или неудобно ловить классическими статическими анализаторами.
Это важное уточнение. Мы не пытались заменить SAST. Классические сканеры хороши, но у них есть предел. Они не всегда понимают бизнес-контекст, архитектурные особенности, реальные потоки авторизации и нетривиальные сценарии доступа. А для ИБ именно такие вещи часто и оказываются самыми опасными.
На базовом уровне агент анализирует код на предмет типовых проблем безопасности: корректность аутентификации и авторизации, лишняя выдача данных, настройки rate limiting, риски mass assignment, различные варианты инъекций, CORS и ограничения на формат и размер запросов и ответов.
Но ключевое направление для нас — это контроль нарушений доступа, прежде всего IDOR/ BOLA. Такие уязвимости особенно неприятны тем, что они нередко прячутся в «почти правильной» логике. Код может выглядеть аккуратно, запросы могут быть параметризованы, тесты могут проходить, но в реальности пользователь получает доступ к чужому объекту просто потому, что где-то в новой ручке забыли проверить принадлежность сущности или неверно перенесли логику авторизации при смене архитектуры.
В большом продукте, который активно развивается и рефакторится, это очень реальный риск.
В какой-то момент команда RuStore начала активно переводить сервисы на новую архитектуру с gateway-подходом: внешние коммуникации и точки входа унифицировались, менялись паттерны обработки запросов, пересматривались ручки и маршрутизация.
Это было правильное архитектурное движение, но такие изменения всегда опасны с точки зрения деградации старых гарантий безопасности. Можно сохранить бизнес-логику, не сломать функциональность и всё равно незаметно потерять часть контроля доступа.
Собственно, гипотеза о таком риске подтвердилась на практике: один из багбаунти-отчётов как раз принёс IDOR с нарушением доступа между проектами в консоли разработчика. Это стало важным сигналом: подобные вещи нельзя оставлять только на постфактум-проверки и ручной анализ. Нужен обязательный контроль прямо на этапе code review.
Проверки AI Code Review обязательны для запуска: без них релизная ветка не проходит дальше по пайплайну. И это уже само по себе меняет дисциплину — каждый Merge Request гарантированно проходит через AI-анализ с точки зрения безопасности.
Следующий шаг, к которому команда идёт, — не просто блокировать отсутствие проверки, а делать блокирующими сами находки. То есть если security-агент подсветил критичную проблему, MR должен останавливаться до исправления или до осознанного разбора со стороны тимлида и ответственных инженеров.
Это принципиальная разница между «полезной подсказкой» и настоящим защитным контролем.
Здесь тоже не обошлось без шероховатостей.
Первая сложность была в том, что готовая модель поначалу плохо понимала контекст нашего продукта. Например, она не учитывала особенности внутренней авторизации, где часть проверок должна происходить на уровне gateway, а не в каждом внутреннем сервисе. Из-за этого на старте возникало много ложных срабатываний: модель ругалась на случаи, которые в нашей архитектуре были допустимыми.
Проблему пришлось решать не «докручиванием модели» как таковой, а адаптацией промптов и контекста. Мы начали добавлять в инструкции особенности архитектуры, включать примеры из реального проекта и постепенно переводить агент из режима «универсального ревьюера всего подряд» в режим специализированного помощника именно для наших репозиториев и наших паттернов разработки.
Вторая проблема была не технической, а организационной. Даже хороший сигнал бесполезен, если разработчики его игнорируют или читают по диагонали. На первых этапах мы видели, что часть выводов AI Code Review просто теряется в интерфейсе: замечание есть, но оно не выглядит как нечто, требующее внимания [6] прямо сейчас.
Отсюда два вывода. Во-первых, security-сигнал должен быть встроен в реальный путь разработчика, а не жить отдельно «где-то там в логах». Во-вторых, для внутренних AI-инструментов UX тоже критичен. Если вывод перегружен, плохо структурирован или выглядит как очередная «болтовня нейросети», его начнут пропускать.
Поэтому параллельно с точностью анализа мы улучшали и форму выдачи результатов: делали вывод более читаемым, более конкретным и более пригодным для быстрого действия.
Мы не любим рисовать искусственные метрики там, где их нельзя честно посчитать. Для security-агента внутри code review гораздо важнее другой показатель: после внедрения такого контроля мы перестали видеть повторяемые проблемы того класса, ради которого он и создавался — прежде всего нарушения контроля доступа и типовые ошибки, возникающие на фоне архитектурных изменений.
Это не значит, что система стала идеальной. Это значит, что контроль встроился в ежедневную практику и начал отрабатывать там, где раньше ошибки проскакивали до более поздних этапов.
А это для ИБ один из самых ценных эффектов: находить проблему не на багбаунти, не на пентесте после релиза и не в проде, а в моменте, когда разработчик ещё работает с MR.
Если Security Check Review помогает фильтровать задачи, а AI Code Review — анализировать код, то следующая логичная ступень — динамическое тестирование безопасности.
Именно этим занимается наш AI DAST.
Решение практически готово к внедрению в продакшен, и мы уже можем поделиться MVP и рабочими сценариями. По сути, речь идёт о мультиагентной системе для динамического тестирования, которая должна дополнить классический DAST и снять одно из его главных ограничений: неспособность качественно тестировать сложные продуктовые API без живого контекста.
У нас уже был и есть собственный DAST-контур. Он отслеживает API-спецификации, видит изменения и запускает на соответствующие эндпоинты набор инструментов вроде Nuclei, sqlmap, ZAP и других сканеров.
Но у классического динамического анализа есть фундаментальная проблема. Чтобы эффективно тестировать реальные продуктовые ручки, недостаточно просто знать URL и метод запроса. Нужно уметь собрать валидные данные: userId, appId, companyId, токены авторизации, корректные связи между сущностями, формат параметров, допустимые последовательности вызовов. А в крупных сервисах такие данные часто нельзя получить «в один шаг».
В результате обычный DAST хорошо ловит базовые вещи, но быстро упирается в потолок, если перед ним сложный endpoint с нетривиальным контекстом.
Именно этот потолок мы и хотим пробить за счёт AI-агентов.
Внутри системы несколько специализированных агентов, которые работают как небольшая команда.
На вход подаются OpenAPI-спецификация и задача: какой endpoint надо протестировать и на какой класс рисков обратить внимание. Дальше в дело вступает агент, который внутри команды мы называем Request Builder Agent.
Его задача — не просто сгенерировать curl-команду, а построить валидный запрос, который действительно дойдёт до целевого endpoint и вернёт 2xx-ответ. То есть не формально «собрать строку запроса», а реально пройти путь, который проходил бы инженер или пентестер, пытаясь добраться до рабочей точки входа.
Если для запроса уже хватает данных, задача простая: агент быстро формирует корректный вызов и отдаёт его дальше в контур тестирования.
Если данных недостаточно, начинается более интересный сценарий.
Сначала подключается OpenAPI Analyzer. У него есть карта доступных сервисов и эндпоинтов, и он начинает искать, через какие API можно получить недостающие значения. Например, какие ручки позволяют узнать список приложений, связанных с пользователем, или вытащить идентификаторы нужных сущностей. По сути, он строит цепочку вспомогательных вызовов, чтобы добыть недостающий контекст.
Если этого всё ещё недостаточно, подключается Repository Analyzer. Он идёт уже в код монорепозитория, находит реализацию endpoint, прослеживает поток выполнения, понимает схему валидации параметров и смотрит, к каким таблицам и данным обращается конкретная ручка. Это даёт намного более глубокое понимание того, какие значения вообще допустимы и что нужно для успешного прохождения сценария.
Следующий уровень — Database Analyzer. Если система уже поняла, какие данные лежат в конкретной базе и в какой таблице их искать, агент может через предусмотренные механизмы получить реальные значения из dev-стендов. Не абстрактные «примерные appId», а живые идентификаторы, связанные с тестовым пользователем или, наоборот, с чужими сущностями.
Это важно, потому что анализ не ограничивается HTTP-ответом. В ряде сценариев (например, при попытках инъекций — SQL, NoSQL, command, stored XSS или race condition) внешне всё может выглядеть корректно: сервис вернёт 200 OK без явных изменений. Но при этом под капотом может произойти запись в базу или изменение данных.
Database Analyzer позволяет AI DAST проверить это напрямую:
появились ли ошибки или аномалии в логах БД;
изменились ли данные в целевых таблицах;
отработала ли вредоносная нагрузка асинхронно.
За счёт этого система начинает видеть слепые уязвимости, которые классические DAST-сканеры часто пропускают из-за отсутствия контекста выполнения.
И вот здесь начинается та часть, ради которой всё и затевалось.

Представим endpoint вида GET /api/users/{userId}/apps/{appId}.
Задача — проверить, можно ли через него получить доступ к чужим данным.
Чтобы сделать это руками, нужно сначала понять, какие userId и appId вообще валидны, какие из них принадлежат текущему пользователю, какие — другим, как выглядит правильный токен, какие связки допустимы и как сервис себя ведёт при подстановке «своих» и «чужих» значений.
Для человека это нормальная работа пентестера. Для классического DAST — почти тупик. А для AI DAST — это как раз типовой сценарий.
Система находит способ получить «свои» данные, затем находит или извлекает из базы чужие значения, а после этого строит два набора запросов: эталонный, который должен работать, и атакующий, который не должен проходить. Если атакующий запрос возвращает успешный ответ, мы получаем полноценный сигнал о нарушении контроля доступа.
То есть AI DAST не просто запускает сканер по API. Он собирает контекст, понимает связи, строит рабочие сценарии и начинает действовать ближе к тому, как действовал бы реальный пентестер.
Ключевая задача при разработке AI DAST, как и в случае с Security Check Review, — найти баланс в инструкциях для агента. Если задать их слишком жёстко, он быстро приходит к результату, но теряет гибкость и начинает хуже работать на сервисах с другой логикой. Если, наоборот, оставить слишком много свободы, агент может уходить в перебор сценариев и тратить время на неэффективный поиск.
Эта проблема становится особенно заметной, если учитывать контекст продукта: у нас разная архитектура и множество сервисов. Настраивать агента под каждый из них отдельно — нецелесообразно. Поэтому одна из ключевых целей — сделать универсальный инструмент, который можно применять без ручной доработки под конкретный сервис.
Отсюда и выбранный компромиссный подход. С одной стороны, мы оставили инструкции достаточно гибкими, чтобы агент мог самостоятельно искать точки входа и строить сценарии. С другой — ограничили его поведение [7] через набор специализированных инструментов в MCP (Model Context Protocol). Каждый инструмент решает конкретную задачу и делает работу агента управляемой: получение и нормализация контекста, вызовы к тестовым стендам, работа с логами и аудитом, генерация и прогон payload, проверка прав доступа, воспроизведение сценариев и фиксация артефактов. За счёт этого мы не зашиваем всю логику в инструкции, а выносим её в инструменты. Это же упрощает развитие системы. Когда появляется новый тип ручной находки, мы не переписываем агента целиком, а добавляем или донастраиваем нужный MCP-инструмент и связываем его с соответствующим сценарием.
Дополнительно мы ввели этап первичного исследования. Перед запуском тестирования агент получает спецификацию API, документацию и другие источники, собирает общий контекст сервиса и сохраняет его в долговременную память [8]. Это позволяет ему не начинать каждый раз с нуля, а опираться на уже собранное понимание.
Параллельно мы постоянно обучаем систему на реальных кейсах. Каждый уникальный баг, найденный вручную, разбираем на ретроспективе и превращаем в улучшения AI DAST: обновляем промпт-правила, добавляем новые цепочки действий для получения контекста и расширяем инструменты MCP. В результате со временем закрываем классы уязвимостей, которые раньше находились только человеком.
Тут эффект шире, чем просто «ещё одна автоматизация».
Во-первых, это снижение нагрузки на небольшую команду ИБ. Базовые сценарии проверки, которые раньше занимали много времени, можно переложить на автономный инструмент.
Во-вторых, это экономия на раннем обнаружении уязвимостей. Найти проблему до релиза почти всегда дешевле, чем ловить её потом через багбаунти, внешний пентест или, тем более, через инцидент.
В-третьих, это возможность глубже покрывать то, что классический DAST не дотягивает без ручного участия. И именно здесь AI становится реальным усилителем защиты.
Есть банальная фраза, что «AI забирает рутину и освобождает время на интересные задачи». Она давно приелась и сама по себе мало что объясняет. На практике для ИБ важнее другая формулировка: AI забирает рутину и освобождает время на важные задачи.
Это не про то, что безопасники теперь сидят и занимаются только чем-то захватывающим. Это про то, что вместо механического просмотра сотен задач, которые не влияют на безопасность, команда может глубже смотреть новые интеграции, архитектурные изменения, нетривиальные сценарии доступа, сложные бизнес-риски и действительно опасные классы уязвимостей.
Именно так мы на это и смотрим: всё, что можно отдать условному «джуну в виде нейронки», можно и нужно отдавать. Но решение по значимым вопросам, особенно архитектурным и рискованным, всё равно остаётся за инженером.
За время работы над этими инструментами у нас сформировалось несколько выводов, которые, как нам кажется, полезны любой продуктовой команде.
Первый: не пытайтесь строить универсальный AI-контроль с нуля. Гораздо лучше работает другой подход — взять существующий процесс и встроить в него AI как дополнительный слой. Там, где уже есть Security Check, code review или DAST, внедрение получается намного приземлённее и эффективнее.
Второй: модели не понимают ваш продукт автоматически. Их придётся калибровать под архитектуру, паттерны авторизации, внутренние правила и реальные сценарии. Чем ближе AI-контроль к вашей предметной области, тем выше шанс, что он будет реально полезен.
Третий: слишком жёсткие инструкции могут ухудшать результат. Иногда качественный ответ появляется не тогда, когда вы максимально зарегламентировали модель, а когда дали ей достаточно контекста и достаточно свободы для осмысленного вывода.
Четвёртый: AI в безопасности нельзя оставлять без наблюдения. Нужны логи, дашборды, выборочная ручная проверка, регулярная калибровка. Если перестать смотреть на его результаты, очень быстро можно потерять доверие либо к инструменту, либо к собственному процессу.
И пятый: блокирующий контроль почти всегда полезнее рекомендательного, если речь идёт о действительно значимых рисках. Но внедрять его важно постепенно — параллельно с доработками и повышением уверенности в качестве самих проверок. Иначе даже полезные контроли могут вызвать сопротивление у разработки и бизнеса.
Сегодня вокруг AI в безопасности много крайностей. Кто-то считает, что нейросети скоро заменят половину ИБ-процессов. Кто-то, наоборот, уверен, что всё это игрушки и модный шум. Наш опыт [9] пока говорит о более приземлённой и, как нам кажется, более полезной вещи.
AI хорошо работает там, где у команды уже есть зрелый процесс и понятная задача. Он не заменяет экспертизу, но отлично усиливает контуры, в которых раньше люди тратили слишком много времени на однотипные действия: сбор контекста, первичную фильтрацию, поиск типовых проблем, подготовку валидных сценариев для тестирования.
Именно в этом месте и появляется реальная ценность. В RuStore мы уже используем AI для ревью Security Check-задач и для анализа Merge Request’ов в пайплайне. Следующий шаг — довести до промышленного использования AI DAST и закрыть ещё один большой пласт рутинной, но дорогой по времени работы.
Главный вывод для нас очень простой: в ИБ не нужно выбирать между «делать всё руками» и «полностью довериться AI». Рабочий путь — строить инструменты, которые помогают команде быстрее видеть важное, раньше находить риски и тратить человеческую экспертизу там, где она действительно незаменима.
Автор: feynrich
Источник [10]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/28839
URLs in this post:
[1] ошибки: http://www.braintools.ru/article/4192
[2] Дмитрий Морев: https://habr.com/ru/users/Vi0lat0r/
[3] Никита Иванов: https://habr.com/ru/users/f0resteR/
[4] зрения: http://www.braintools.ru/article/6238
[5] логике: http://www.braintools.ru/article/7640
[6] внимания: http://www.braintools.ru/article/7595
[7] поведение: http://www.braintools.ru/article/9372
[8] долговременную память: http://www.braintools.ru/article/9500
[9] опыт: http://www.braintools.ru/article/6952
[10] Источник: https://habr.com/ru/companies/vk/articles/1023662/?utm_campaign=1023662&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.