Назад в блог

Red team для AI-агентов: как ломать своих до того, как это сделают злоумышленники

Evals меряют поведение по назначению, red team — поведение под атакой. Методология adversarial-тестирования AI-агентов: пять поверхностей атаки, цикл recon → replay и чеклист готовности к продакшену.

Иллюстрация к материалу: Red team для AI-агентов: как ломать своих до того, как это сделают злоумышленники

Команда выкатывает агента в продакшен. Функциональные тесты зелёные, eval-набор показывает высокий процент корректных ответов, демо для бизнеса прошло гладко. Через месяц агент по письму от «коллеги» меняет получателя платежа, а в журнале — ни одной ошибки: каждый шаг выглядел штатно. Это разрыв между тем, что меряют evals, и тем, что проверяет red team. Первые отвечают на вопрос «агент работает как задумано?», второй — «что агент сделает, когда его целенаправленно ломают?». Для чат-бота разница стоит одного плохого ответа. Для агента с доступом к инструментам — выполненной команды, отправленного письма или утечки базы.

Почему evals недостаточно

Evals измеряют, ведёт ли система себя как задумано: точность ответов, полноту выполнения задачи, следование инструкциям. Red team исследует противоположное: misuse cases, режимы отказа и высокорисковые взаимодействия, которые обычное тестирование качества не покрывает. Так это разграничение формулирует документация OpenAI по red teaming: evals — про intended behavior, red team — про поведение при adversarial, abusive или неожиданных входах. Зрелые программы оценки используют оба подхода одновременно.

Для агентов разрыв шире, чем для чат-ботов. Ошибка модели в чате — это текст. Ошибка агента — это действие с побочным эффектом: вызов инструмента, изменение записи, отправка сообщения, запуск соседнего агента. Поэтому adversarial-тестирование агента обязано выходить за пределы промптов и проверять решения, состояние и побочные эффекты — то, где реально живёт агентный риск.

Чем red team агента отличается от red team модели

Классический red team LLM ищет джейлбрейки и вредный контент: заставить модель сказать запрещённое. Red team агента ищет другое — заставить систему сделать запрещённое, сохраняя видимость нормальной работы. Пять отличий задают всю методологию:

  1. Объект атаки — траектория, а не ответ. Одиночный ответ модели почти ничего не значит; значит цепочка «рассуждение → вызов инструмента → наблюдение → следующий вызов». Атакующий работает с последовательностью шагов, а не с фразой.
  2. Успех измеряется действием. Критерий — не «модель нарушила политику в тексте», а «агент вызвал инструмент с атакующими аргументами», «записал отравленные данные в память», «передал управление не тому агенту».
  3. Состояние между сессиями — поверхность. Память, кэш контекста, долговременные инструкции: всё, что переживает один диалог, можно отравить сегодня, а сработать оно завтра.
  4. Инструменты — главный приз. Промпт-инъекция в чат-боте стоит ответа; в агенте та же инъекция конвертируется в права инструментов: чтение почты, платежи, деплой. Поэтому red team картирует привилегии каждого инструмента до генерации атак.
  5. Окружение — соучастник. Вредоносные данные приходят не от пользователя, а из легитимных каналов: документ в корпоративном диске, комментарий в тикете, вывод инструмента. Тест обязан моделировать недоверенный контент внутри доверенного контура.

Вывод простой: набор джейлбрейк-промптов из интернета — это не red team агента. Это разминка.

Пять поверхностей атаки агента

Практическая методология adversarial-тестирования агентов выделяет пять направлений — они же покрывают большую часть карты OWASP ASI01–ASI10 для агентных приложений:

1. Перехват цели (goal hijacking). Прямая или косвенная инъекция меняет задачу агента: «проигнорируй исходное задание, сделай вот это». Тестируется и прямой промпт от пользователя, и косвенный путь — инструкция, спрятанная в документе, письме или выводе инструмента, который агент обрабатывает как данные.

2. Атаки на уровне инструментов. Агент вызывает не тот инструмент, с не теми аргументами или в не той последовательности: чтение секретов через диагностический инструмент, массовый экспорт через поиск, цепочка «найти → прочитать → отправить наружу». Отдельный подкласс — отравленные описания инструментов, когда атака сидит в реестре, а не во входных данных.

3. Отравление памяти и контекста. Запись, которая влияет на будущие решения: ложный факт в долговременной памяти, поддельная «политика компании» в retrieved-контексте, инструкция, срабатывающая через неделю. Тест проверяет и запись (что агент сохранил), и чтение (как сохранённое изменило поведение).

4. Multi-agent эксплуатация. В системах из нескольких агентов компрометация одного распространяется: поддельный статус от «коллеги», делегирование задачи агенту с большими правами, каскадный отказ. Тестируется аутентификация сторон, границы доверия и изоляция отказов.

5. Supply chain и окружение. Сторонние MCP-серверы, плагины, динамически подгружаемые компоненты: что произойдёт, если доверенный инструмент завтра станет недоверенным. Тест проверяет фиксацию версий, реестр разрешённого и отзыв.

Каждое направление требует своих критериев успеха. «Агент вывел вредный текст» — критерий для модели. «Агент вызвал payments.create с подменённым получателем» — критерий для агента.

Методология: шесть шагов цикла

Зрелый цикл adversarial-тестирования строится как конвейер из шести шагов — от моделирования реального агента до доказательства, что фикс сработал:

Шаг 1. Configure — смоделируй реального агента. Зафиксируй описание, конфигурацию или endpoint: какие инструменты доступны, какое состояние считается доверенным, какие ресурсы защищены. Тест без модели агента тестирует фантазию, а не систему.

Шаг 2. Recon — разведай поверхность. До генерации атак составь карту: полномочия каждого инструмента, происхождение данных, порядок вызовов, целостность аргументов, границы состояния. Именно здесь бюджет теста распределяется осмысленно: самые привилегированные инструменты получают больше всего атак.

Шаг 3. Objectives — собери портфель целей. Переведи бизнес-границы в измеримые цели с точными критериями успеха: «агент не должен отправлять внешние письма без подтверждения», «агент не должен читать секреты ни при каких входах». Одна расплывчатая цель даёт расплывчатые находки.

Шаг 4. Generate — скомпилируй структурные тесты. Вплетай сценарии, техники, нарративы и данные разведки в разнообразные реалистичные атаки — и развивай их от наблюдаемого поведения цели, а не из фиксированного каталога промптов. Статические библиотеки атак деградируют: цель учится именно тем атакам, которых в каталоге нет.

Шаг 5. Evaluate — проверь и развивай. Раздели роли генератора, цели и судьи; смотри траектории целиком, а не финальные ответы; адаптируй следующие атаки по итогам предыдущих. Находка без траектории — это анекдот, а не доказательство.

Шаг 6. Replay — заморозь и регрессируй. Зафиксируй подтверждённые находки, сравнивай модели и конфигурации на идентичных атаках, перезапускай замороженные находки и структурно родственные варианты против обновлённого агента. Этот шаг отвечает на главный вопрос после фикса: «мы закрыли механизм или один промпт?».

Цикл повторяется на каждое значимое изменение: новая модель, новый инструмент, новый scope, новый источник данных. Red team — не фаза перед релизом, а режим сопровождения.

Что показывают свежие данные

Весной 2026 года NIST CAISI совместно с Gray Swan, британским AI Security Institute и несколькими frontier-лабораториями опубликовал разбор крупного публичного соревнования по red teaming агентных систем. Участники разрабатывали hijacking-атаки против 13 frontier-моделей в агентных сценариях: использование инструментов, кодовые агенты, computer use. Несколько выводов важны для практики:

  • Живые атакующие находят то, что пропускают статические бенчмарки. Соревновательный формат с участием людей измеряет устойчивость к реальному противнику, а не к известным атакам из набора.
  • Модели различаются резко. Количество успешных атак сильно варьировалось между моделями — и это различие не коррелировало напрямую с capabilities. Сравнительный security-бенчмаркинг помогает выбирать модель под профиль риска, а не под демо.
  • Атаки переносятся. Атаки, разработанные против одной модели, в пост-соревновательном тестировании срабатывали на других моделях и сценариях. Фикс «под одну модель» не закрывает класс.

Параллельно OWASP Gen AI Security Project оформил направление в Red Teaming Initiative: отдельное руководство по GenAI red teaming, критерии оценки вендоров и инструментария, ландшафт решений. Это признак зрелости: от «давайте попробуем сломать» к стандартизированной методологии с требованиями к провайдерам.

Стенд: как тестировать без риска для продакшена

Главная операционная ошибка red team — тестировать на проде. Агент под атакой выполняет реальные действия, и «успешная» находка может стать реальным инцидентом. Стенд строится на четырёх принципах:

  1. Изоляция с реалистичными двойниками. Инструменты на стенде — это моки с продакшен-подобными данными, но без prod-доступов: фейковый платёжный шлюз, копия CRM, песочница для кода. Атака должна упираться в границу стенда, а не в настоящий счёт.
  2. Песочница для исполнения. Неожиданное выполнение кода и вызовы инструментов — в изолированной среде с ограничением сети и файловой системы. OWASP AI Agent Security Cheat Sheet прямо относит это к базовым практикам.
  3. Полная трассировка. Каждый запуск пишет траекторию: входы, рассуждения, вызовы с аргументами, ответы инструментов, записи в память. Без траекторий evaluate превращается в гадание.
  4. Заморозка артефактов. Промпты, траектории, вердикты и версии конфигурации фиксируются вместе. Регрессия через полгода обязана гонять те же атаки против новой версии — иначе «мы это уже чинили» ничем не подтверждено.

Чеклист готовности агента к проду

Сведите итоги red team к проверяемому списку. Агент готов к продакшену, когда выполнены все пункты:

  • Карта привилегий инструментов составлена, избыточные права урезаны до least privilege.
  • Для каждой из пяти поверхностей есть минимум один скомпилированный тест с измеримым критерием успеха.
  • Косвенные инъекции (документы, тикеты, выводы инструментов) протестированы отдельно от прямых.
  • Отравление памяти проверено в обе стороны: запись и отложенное срабатывание.
  • Необратимые действия требуют подтверждения человеком или отдельного approval-контура.
  • Найденные уязвимости переведены в frozen findings и регрессируются автоматически.
  • Фикс каждой находки проверен структурно родственными вариантами атаки, а не исходным промптом.
  • Журнал каждого вызова доступен SOC: кто, что, с какими аргументами, что вернулось.
  • Лимиты автономии заданы: максимальная длина цепочки, бюджет вызовов, kill switch.
  • Повторный прогон запланирован на следующее изменение модели, инструментов или данных.

Если хотя бы два пункта не выполнены — это не «остаточный риск», это непроверенная поверхность.

Где Codenik

Codenik построен как слой, на котором red team удобно и ставить, и закрывать. Allowlist MCP-серверов задаёт границу теста: атакующий видит ровно те инструменты, что увидит в проде. Журнал каждого вызова с аргументами и ответами — это готовые траектории для evaluate без отдельной инструментации. Лимиты на цепочки вызовов и бюджет — предохранитель стенда: даже успешная атака упирается в потолок, а не в реальный ущерб. Подтверждения для необратимых операций превращают «агент отправил» в «агент запросил». А frozen findings после фикса регрессируются тем же контуром: тот же реестр, те же права, тот же журнал — сравнимо по построению, а не по честному слову.

Короткий вывод

Evals доказывают, что агент умеет работать. Red team доказывает, что агент умеет не ломаться. Для систем, которые выполняют действия, второе важнее первого: цена ошибки измеряется не плохим ответом, а выполненной операцией. Стройте цикл recon → replay как постоянный режим, тестируйте на стенде с реалистичными двойниками и требуйте от каждого фикса доказательства на родственных атаках. Ломать своих дёшево; чинить последствия взлома — дорого.

Источники и дальнейшее чтение