Как заставить AI искать реальные уязвимости в коде без тонн ложных срабатываний

22 авг 2026
3,004
224
13
2 месяца

Если вы пробовали натравить 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, пропускать уже известные баги и исследовать нетронутые ветки кода.

Кому это пригодится

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

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

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.