В прошлый понедельник случился классический завал. Утром тикет — нужно проверить 47 устаревших зависимостей в проекте, который я не трогал полгода. К вечеру встреча с безопасниками. Ручками проверять каждый пакет — два часа минимум, а у меня уже голова другим забита.
Я открыл терминал и за пятнадцать минут собрал отчёт, который раньше делал целый день. Расскажу, как это работает и где я наступил на грабли.
Откуда вообще взялась идея
Аудит безопасности — это такая штука, которая вечно откладывается, пока не станет критической. Исходники проверяй, зависимости обновляй, secrets в коде ищи, уязвимости в инфраструктуре вылавливай. Раньше я делал всё вручную: запускал сканеры по очереди, складывал результаты в таблицу, потом ещё разок перепроверял — а то мало ли что.
Когда проектов стало больше, ручной подход сломался. Ну не сидеть же сутками в консоли, когда за это время можно фичу запилить.
Первый толчок был простым: наткнулся на AI-инструменты, которые умеют парсить результаты сканирования и даже предлагать исправления. Показалось подозрительным — но решил попробовать.
Что я использую сейчас
Сначала перечислю инструменты, потому что без них рассказ будет абстрактным. Но не буду превращать это в маркированный список — лучше опишу, зачем каждый нужен.
SAST-сканеры вроде Semgrep или Bandit ищут паттерны уязвимостей прямо в коде. ИИ здесь не нужен, эти штуки работают по правилам. Но когда результатов сотни, ИИ помогает понять, что критично, а что ложное срабатывание.
SCA-инструменты (Software Composition Analysis) проверяют зависимости. Я зацепил Renovate Bot, но для быстрого аудита удобнее связка npm audit или pip-audit с ИИ-обработкой результатов.
Секреты в коде — здесь у меня Gitleaks, но его выхлоп я прогоняю через языковую модель, чтобы получить краткое резюме вместо простыни строк.
Суть не в самих инструментах, а в том, как я их связал. Раньше каждый сканер работал изолированно. Теперь у меня простенький скрипт, который запускает всё по очереди и складывает результаты в единый файл. Потом этот файл уходит в ИИ, а на выходе — структурированный отчёт с приоритетами.
Как это работает на практике
Вот реальная последовательность, которую я использую перед релизом.
Сначала запускаю сканирование. Это пять минут, если не лень. Результаты уходят в файл.
Потом беру языковую модель и даю ей промпт примерно следующего содержания: "Вот результаты проверки. Для каждой уязвимости укажи критичность от 1 до 10, объясни коротко, почему это проблема, и предложи конкретный способ исправления. Пропусти ложные срабатывания."
И вот что странно — это реально работает лучше, чем я ожидал. Модель видит контекст, которого в сырых данных нет. Она понимает, что если уязвимость в dev-зависимости, которую никто не использует в продакшене — это одно, а если в библиотеке аутентификации — совсем другое.
Конечно, нужно перепроверять. Модель иногда пропускает вещи или наоборот преувеличивает опасность. Но на первичную фильтрацию — идеально.
Где я наступил на грабли
Не всё гладко, и я не буду приукрашивать.
Первый запуск я сделал без системного промпта — просто скормил модели сырой выхлоп Semgrep. Она выдала красивый отчёт, но пропустила критичную уязвимость в SQL-инъекции. Оказалось, модель посчитала, что это "устаревший, но рабочий паттерн". Мне стало не по себе, когда я нашёл это вручную.
После этого я стал добавлять в промпт конкретные чеклисты: OWASP Top 10, CWE Top 25. Это не идеально, но хотя бы снижает риск пропустить что-то очевидное.
Вторая проблема — ложные срабатывания. SAST-сканеры и так грешат ими, а модель иногда начинает "додумывать" и добавляет от себя. Приходится всегда проверять каждый пункт с пометкой "критично" — потому что именно там ошибки наиболее болезненны.
Третья проблема — контекст. Модель не знает вашу инфраструктуру, не знает, какие части кода реально работают в продакшене. Поэтому она иногда ставит высокий приоритет уязвимости, которая находится в мёртвом коде. Приходится добавлять ручные пометки.
Что в итоге
За месяц использования я сократил время полного аудита с шести часов до полутора. Это не магия и не революция — просто грамотная фильтрация.
Главное, что я понял: ИИ не заменяет экспертизу. Он заменяет рутину. Сотня строк с результатами сканирования превращается в список того, на что реально стоит смотреть. Но оценить, насколько уязвимость критична именно для твоего проекта — это уже другая история.
Для команд, которые делают аудит от случая к случаю, автоматизация вообще спасение. Не надо держать в голове все инструменты, все версии, все CVE. Запустил скрипт — через час получил отчёт, с которым можно идти на встречу.
Для тех, кто делает это постоянно — вы уже знаете эти инструменты. Добавьте ИИ-слой, и рутина уйдёт в фоновый режим.
Коротко о главном
Автоматизировать аудит безопасности с помощью ИИ реально. Основная связка: сканеры (Semgrep, Bandit, Gitleaks, npm audit) плюс языковая модель для обработки результатов. Результат — экономия времени, но не отказ от экспертизы.
Если хочешь попробовать — начни с одного сканера. Сделай промпт, прогонь выхлоп через модель, посмотри на результат. Сравни с тем, что ты делаешь вручную. Разница обычно видна сразу.
У меня заняло три подхода, чтобы получить промпт, который не пропускает очевидное и не добавляет ерунды. Первые два были так себе — но это нормально. Как и в любом деле с ИИ, итерации решают.
