Как заставить AI искать реальные уязвимости в коде без тонн ложных срабатываний
Если вы пробовали натравить LLM на исходники с просьбой «найди уязвимости», то наверняка помните результат. Модель обычно выдает полотно из теоретических замечаний: тут нет валидации по чек-листу OWASP, там можно добавить еще один слой санитизации, а вот здесь переменная названа подозрительно. На практике 90% таких находок оказываются шумом, который просто отнимает время у разработчиков.
Команда Cloudflare выложила в открытый доступ security-audit-skill. Это набор инструкций и пайплайн для кодинг-агентов, на базе которого они построили свой внутренний харнесс для постоянного аудита репозиториев.
В чем главная проблема обычного AI-аудита
Большинство статических анализаторов и простых промптов для нейросетей грешат двумя вещами: они не проверяют эксплоитабельность и галлюцинируют контекстом. Нейросеть видит опасную функцию, но не видит, что входные данные уже отфильтрованы тремя уровнями выше.
В Cloudflare пошли от обратного и заложили в основу навыка жесткие принципы:
- Отчет составляется только на то, что реально можно проэксплуатировать. Фразы в духе «теоретически злоумышленник мог бы» сразу отсекаются.
- Тот, кто нашел баг, не имеет права его валидировать. Для проверки запускается отдельный независимый агент в роли адвоката дьявола.
- Отсутствие второго слоя защиты не считается уязвимостью, если первый слой надежно блокирует вектор атаки.
- Оценка критичности строится на реальном импакте, а не на формальных совпадениях с чек-листами.
Как устроен шестифазный пайплайн
Вместо одного длинного промпта инструмент раскладывает работу на шесть последовательных этапов. Внутри работают параллельные саб-агенты, у каждого из которых строго очерченная задача.
+-------------------------------------------------------------+
| 1. Recon -> Карта архитектуры и точек входа |
| 2. Hunt -> Параллельные атаки по разным векторам |
| 3. Validate -> Попытка опровергнуть каждую находку |
| 4. Report -> Формирование читаемых отчетов |
| 5. Structured -> Генерация findings.json со схемой |
| 6. Verify -> Сверка фактов со свежими агентами |
+-------------------------------------------------------------+
1. Разведка (Recon)
Агенты исследуют проект, определяют границы доверия, точки входа и общую архитектуру. Результатом становится файл architecture.md, который дальше служит картой для атакующих агентов.
2. Охота (Hunt)
Несколько агентов параллельно тестируют кодовую базу под разными углами. Проект разбит на отдельные файлы с промптами под разные классы атак:
- Инъекции, контроль доступа и бизнес-логика.
- Специфика веб-протоколов, кеширование и аутентификация (
WEB-PROTOCOL-AND-AUTH.md). - Клиентские угрозы вроде DOM-инъекций и prototype pollution (
CLIENT-SIDE.md). - Безопасность памяти и бинарные уязвимости для нативного кода (
MEMORY-SAFETY-AND-BINARY.md). - Проблемы LLM-систем: prompt injection, утечки контекста и манипуляция вызовами инструментов (
AI-AND-LLM.md).
Каждый поисковый агент может запускать под собой дополнительные процессы, чтобы глубже раскрутить подозрительную цепочку вызовов.
3. Состязательная проверка (Validate)
Самый полезный этап. Свежие агенты получают список потенциальных багов и целенаправленно пытаются доказать, что атака не сработает. Если защита на месте или вектор заблокирован смежным модулем, находка безжалостно вычеркивается.
4. Отчет и структура (Report & Structured output)
Генерируются файлы REPORT.md, FINDINGS-DETAIL.md с подробными трассировками для уязвимостей уровня Medium и выше, а также findings.json. Структурированный JSON валидируется скриптом validate-findings.cjs на базе Node.js без внешних зависимостей.
5. Независимая верификация (Independent verification)
Финальный контроль качества. Агенты с чистым контекстом построчно сверяют утверждения из отчета с реальным кодом, чтобы исключить галлюцинации в номерах строк или названиях функций.
Установка и запуск
Пакет подключается через Skills CLI в любого кодинг-агента, поддерживающего вызовы инструментов и запуск параллельных саб-агентов.
Установка в проект:
npx skills add https://github.com/cloudflare/security-audit-skill --skill security-audit
Глобальная установка для всей системы:
npx skills add https://github.com/cloudflare/security-audit-skill --skill security-audit --global
После этого достаточно открыть кодовую базу в вашем агенте и написать обычным текстом:
security audit this codebase
или указать конкретную директорию и путь для отчета:
do a security review, output to ~/audits/my-project
Интересная деталь: прогоны можно накапливать. Авторы выяснили в ходе тестов, что один запуск находит примерно половину реальных проблем из-за случайности путей обхода. Навык умеет читать предыдущие findings.json, пропускать уже известные баги и исследовать нетронутые ветки кода.
Кому это пригодится
Инструмент требует хорошей модели с поддержкой параллельных вызовов инструментов, поэтому на слабых локальных сетках запустить его вряд ли выйдет.
Но если вы уже используете агентов для рефакторинга или написания тестов, добавить им роль въедливого безопасника — отличная идея перед релизом или масштабным мерджем. Подход с разделением ролей на «взломщика» и «скептика» заметно сокращает ручную возню с ложными срабатываниями.
