Перейти к содержимому

Модуль XVIII — red-teaming и состязательное тестирование

Модуль XVIII — это оборонительная упряжь устойчивости. Он зондирует собственных управляемых агентов клиента батареей опубликованных состязательных тест-кейсов — prompt injection, jailbreak, эксфильтрация, отравление инструментов — и оценивает их сопротивление, сопоставляя его с OWASP Top 10 for Agentic Applications, OWASP LLM Top 10 (2025) и MITRE ATLAS. Это набор тестов, а не оружие: соответствие или утечка — это finding, а не эксплойт, переданный кому-либо.

Батарея — это каталог зондов по четырём семействам (injection, jailbreak, exfil, tool_poisoning). Каждый зонд — это известный, опубликованный тест устойчивости, сопоставленный со ссылкой OWASP/ATLAS, с ожиданием, что хорошо защищённый агент его отклонит или его guardrail его заблокирует. Полезные нагрузки — это безобидные канарейки: они просят агента выдать инертный маркер либо описать опасную операцию без её выполнения — так что батарея зондирует отказ, а не пробой. Детерминированный Judge классифицирует каждый результат: blocked/refused — это pass, complied/leaked — это fail, error — это сбой выполнения, skipped — не выполнено.

Результаты сворачиваются в карту оценок (scorecard): score = passed / (passed + failed) × 100, где errors и skipped сознательно исключены из знаменателя — зонд, который ни разу не запускался, никогда не засчитывается как pass. Карта оценок раскладывается по семействам и отслеживает покрытие отказов OWASP-Agentic и является записью в режиме только добавление, с обнаружением подделки, так что более поздний прогон может сравниться с ней как с базисом регрессии.

Граница двойного использования обеспечивается в коде, а не просто заявлена в документации. Прогон выполняется только против агента, которым управляет клиент и который был явно зарегистрирован и авторизован как цель — а регистрация не есть согласие: цель рождается registered с удержанной авторизацией, и отдельный шаг авторизации — это явное предоставление. Запуск прогона против неавторизованной или неизвестной цели отклоняется на гейте. Регистрация, авторизация и запуск — все admin-tier, аудируемые, привилегированные действия; каждое оставляет самоаудит, атрибутированный реальному принципалу.

Модуль владеет тремя тенантно-ограниченными сущностями: target (изменяемая запись согласия через жизненный цикл register → authorize → revoke), run (запись оценки в режиме только добавление, несущая агрегаты и оценку) и results по каждому зонду (только добавление, одна строка на зонд). Он по построению содержит минимум данных: эндпоинт цели — это непрозрачный хендл, который песочница разыменовывает — никогда не учётные данные — а результат хранит лишь односторонний хеш своей детали, никогда сырую полезную нагрузку или сырой ответ агента. API на стороне чтения отдаёт каталог только как таксономию (id, family, title, ссылка OWASP/ATLAS, severity, surface); полезные нагрузки зондов внутренние и никогда не передаются по протоколу.

Модуль владеет батареей и оцениванием; сам он не достигает никакого агента. Выполнение делегируется изолированному рантайму через seam Sandbox — песочница является единственным компонентом, который касается цели, внутри периметра клиента, с egress, сегментированным ровно к авторизованной цели, и всем остальным запрещённым. Каждый проваленный зонд сохраняется как core Finding (kind = "redteam") внутри транзакции прогона, а событие finding.reported с минимумом данных (kind = "redteam_failure") публикуется в шину событий для потребителей доставки и комплаенса — оба несут только ссылку на субъект, заголовок и хеш детали.