Рекомендации ИБ: Red Teaming, тестирование моделей и CI/CD интеграция
Рекомендации ИБ: Red Teaming, тестирование моделей и CI/CD интеграция
Версия: 2.0 · Обновлено: 2026-04-23 · Теги: red teaming, Garak, PyRIT, Promptfoo, adversarial, bug bounty, AgentDojo, AgentHarm · Tier: 1-2
TL;DR. Red Teaming для LLM, CV, агентов и табличных моделей: Garak, PyRIT, Promptfoo, Giskard, ART, AgentDojo/AgentHarm для агентов. Методики, метрики, интеграция в CI/CD. Red Teaming - единственный способ узнать про атаку до атакующего.
Навигация: методики · инструменты · интеграция с CI · метрики · bug bounty · новые сценарии red team упражнений · "С чего начать по вашей роли" (6 ролей).
1. Краткое содержание разделов
Цикл Red Teaming для ML-системы
flowchart LR
SCOPE["Scope<br/>модель, поверхность<br/>атаки, rules of engagement"] --> PLAN["Plan<br/>OWASP LLM / ATLAS / ML Top 10"]
PLAN --> ATT["Attack<br/>Garak / PyRIT / Promptfoo / ART"]
ATT --> FIND["Findings<br/>CVSS + вероятность + impact"]
FIND --> TRIAGE["Triage<br/>false positive? reproducible?"]
TRIAGE --> FIX["Fix<br/>guardrails / filter / retrain"]
FIX --> REG["Regression<br/>CI suite + golden set"]
REG --> ATT
FIND --> REPORT["Отчёт<br/>CISO + dev team"]
1.1. Автоматизированный Red Teaming и RLHF для MLSec
Red Teaming в контексте MLSec - это систематическое состязательное тестирование ML-моделей с целью выявления уязвимостей до вывода в продакшен. В отличие от классического пентеста, Red Teaming для ML охватывает специфические векторы атак: prompt injection, adversarial examples, model extraction, data poisoning и др.
Процесс автоматизированного Red Teaming включает три основных потока:
| Процесс | Входные данные | Действия | Результат |
|---|---|---|---|
| Auto-Red-Teaming | Модель + предопределённые наборы атак | Массовое выполнение сценариев через Promptfoo/Garak, автоклассификация через контент-классификаторы | Детальный отчёт об уязвимостях |
| Adversarial Testing | Модель + состязательные примеры | Генерация FGSM, PGD, TextAttack; анализ изменения поведения | Отчёт о воздействии атак |
| Data Leakage QA | Модельный сервис | Тесты Model Extraction + Membership Inference | Оценка рисков утечки |
RLHF (Reinforcement Learning from Human Feedback) используется как механизм пост-обучения LLM для улучшения безопасности. После первичного обучения на массовом датасете этап RLHF с помощью размеченных пар "запрос-ответ/оценка" помогает модели избегать токсичных выходов и утечек конфиденциальных данных.
Важное замечание: RLHF в контексте MLSec имеет ограниченную применимость. Он эффективен для LLM, где нужно скорректировать поведение модели (отказ от генерации вредоносного контента, предотвращение утечки данных обучения). Для CV и табличных моделей RLHF неприменим - там используются другие методы (adversarial training, differential privacy).
Ключевые методы RLHF:
- PPO (Proximal Policy Optimization) - классический метод, требует обучения отдельной reward-модели
- Юрист (Direct Preference Optimization) - более простой метод, не требует явной reward-модели, использовался при обучении Llama 3
- GRPO (Group Relative Policy Optimization) - новый метод, более эффективный по памяти, использовался при обучении DeepSeek-R1
1.2. Методы тестирования моделей
LLM (Large Language Models)
Тестирование LLM охватывает специфические угрозы, связанные с генеративным характером моделей:
| Категория угрозы | Описание | Метод тестирования |
|---|---|---|
| Prompt Injection | Внедрение инструкций через пользовательский ввод для обхода системного промпта | Автоматические наборы инъекций через Garak/Promptfoo |
| Jailbreak | Многоступенчатый обход фильтров безопасности (DAN, encoding, roleplay) | Библиотеки jailbreak-сценариев, Garak probes |
| Content Filter Bypass | Генерация запрещённого контента через обходные формулировки | Тестирование фильтров на наборах запрещённых тем |
| Hallucinations | Генерация фактически недостоверной информации | OpenAI Evals, ручная верификация на benchmark-датасетах |
| Data Leakage | Утечка данных обучения через сгенерированные ответы | Membership Inference, тестирование на извлечение PII |
| Model Extraction | Восстановление параметров модели через множественные запросы | Анализ распределения ответов, тестирование rate limiting |
| DoS/Resource Exhaustion | Зацикленные или сверхдлинные входы, исчерпывающие ресурсы | Стресс-тестирование с предельными длинами токенов |
Интерактив: попробуйте ввести собственные промпт-инъекции и посмотрите, как срабатывают регулярные правила детектора.
Привязка к OWASP LLM Top 10 (2025):
- LLM01: Prompt Injection
- LLM02: Sensitive Information Disclosure
- LLM03: Supply Chain Vulnerabilities
- LLM04: Data and Model Poisoning
- LLM05: Improper Output Handling
- LLM06: Excessive Agency
- LLM07: System Prompt Leakage
- LLM08: Vector and Embedding Weaknesses
- LLM09: Misinformation
- LLM10: Unbounded Consumption
CV (Computer Vision)
| Категория угрозы | Описание | Метод тестирования |
|---|---|---|
| Adversarial Examples (Evasion) | Малые возмущения пикселей, неразличимые человеком, но вызывающие ошибку классификации | FGSM, PGD через ART |
| Trojan/Backdoor Triggers | Скрытые паттерны в обучающих данных, активирующие заданное поведение | Анализ активаций нейронов, Neural Cleanse |
| Stress Tests | Тестирование на шумах, размытии, изменении освещения, поворотах | Аугментации через imgaug/albumentations + проверка точности |
| Bias | Систематические ошибки на определённых демографических группах | Fairness-метрики по подгруппам, AIF360 |
Пример использования ART для тестирования CV-модели:
from art.attacks.evasion import FastGradientMethod, ProjectedGradientDescent
from art.estimators.classification import PyTorchClassifier
import numpy as np
# Оборачиваем PyTorch-модель в ART-классификатор
classifier = PyTorchClassifier(
model=model,
loss=loss_fn,
optimizer=optimizer,
input_shape=(3, 224, 224),
nb_classes=10,
)
# FGSM-атака
fgsm_attack = FastGradientMethod(estimator=classifier, eps=0.05)
x_adv_fgsm = fgsm_attack.generate(x=test_images)
# PGD-атака (более сильная)
pgd_attack = ProjectedGradientDescent(
estimator=classifier, eps=0.05, eps_step=0.01, max_iter=40
)
x_adv_pgd = pgd_attack.generate(x=test_images)
# Сравнение точности
acc_clean = np.mean(np.argmax(classifier.predict(test_images), axis=1) == test_labels)
acc_fgsm = np.mean(np.argmax(classifier.predict(x_adv_fgsm), axis=1) == test_labels)
acc_pgd = np.mean(np.argmax(classifier.predict(x_adv_pgd), axis=1) == test_labels)
print(f"Точность на чистых данных: {acc_clean:.4f}")
print(f"Точность после FGSM (eps=0.05): {acc_fgsm:.4f}")
print(f"Точность после PGD (eps=0.05): {acc_pgd:.4f}")
# Критерий: падение точности не более 15%
assert acc_fgsm >= acc_clean * 0.85, f"FAIL: FGSM drop {(1-acc_fgsm/acc_clean)*100:.1f}% > 15%"
assert acc_pgd >= acc_clean * 0.85, f"FAIL: PGD drop {(1-acc_pgd/acc_clean)*100:.1f}% > 15%"
Табличные модели
| Категория угрозы | Описание | Метод тестирования |
|---|---|---|
| Evasion Attacks | Модификация входных признаков для обхода классификатора | ART ZOO attack, boundary attacks |
| Data Injection/Poisoning | Внедрение отравленных записей в обучающую выборку | Статистический анализ аномалий, cleanlab |
| Boundary Values | Поведение на граничных и экстремальных значениях | Fuzz-тестирование диапазонов входов |
| Membership Inference | Определение, входил ли конкретный образец в обучающую выборку | Privacy Meter, shadow-модели |
| Model Extraction | Клонирование модели через API-запросы | Мониторинг паттернов запросов, rate limiting |
| Bias/Fairness | Дискриминация по защищённым атрибутам | Statistical parity, disparate impact, AIF360 |
1.3. Сценарии атак и критерии прохождения
Интерактив: пройдите по фазам типовой атаки на LLM-сервис (от разведки до воздействия) и сопоставьте действия атакующего с контрмерами защитника.
Сценарии атак по стадиям MLOps
| Стадия | Вектор атаки | Защита | Критерий Pass |
|---|---|---|---|
| Data Ingestion | Data Poisoning (триггерные записи) | Статистический анализ аномалий + сканирование adversarial-паттернов | Все аномалии обнаружены; Great Expectations checkpoint: success: true |
| Training | Adversarial examples в обучающем цикле | Adversarial training через ART | Accuracy drop < 15% при eps=0.05 |
| Model Registry | Подмена артефактов модели | SHA256-хеширование + цифровая подпись | Подпись валидна; хеш совпадает |
| Deployment | Prompt Injection | Входная санитизация + Garak/Promptfoo | 100% запрещённых промптов отклонено |
| Inference | Model Extraction через множественные запросы | Rate limiting + шум в выходах | Клон-модель: accuracy < 60% от оригинала |
| Inference | DoS через зацикленные/тяжёлые входы | Timeout + лимиты размера запросов | P99 latency < SLA при нагрузке |
| Runtime | Container Breakout | seccomp + AppArmor + минимальные привилегии | 0 критических CVE; Falco без алертов |
| CI/CD | Кража секретов | Vault + SOPS + маскированные переменные | Секреты не обнаружены в логах/артефактах |
Рамочная схема Gate Decision
flowchart LR
IN1["Adversarial tests<br/>FGSM / PGD / CW"]
IN2["Safety & red team<br/>Garak / Promptfoo"]
IN3["Compliance checks<br/>Trivy / pip-audit / Checkov"]
IN4["Data validation<br/>Great Expectations"]
IN5["Bias & fairness metrics"]
GATE{"Gate Decision<br/>ML SecOps Board"}
PASS["Pass — релиз разрешён<br/>artifact sign + promote"]
FAIL["Fail — блокировка<br/>инцидент + rollback"]
IN1 --> GATE
IN2 --> GATE
IN3 --> GATE
IN4 --> GATE
IN5 --> GATE
GATE -->|все пороги пройдены| PASS
GATE -->|хотя бы один провал| FAIL
Критерии Pass: accuracy новой модели не ниже 95% от предыдущей версии; падение точности при FGSM/PGD ниже заданного порога; 100% отказов на запрещённых промптах; 0 критических CVE в Docker-образе (Trivy --exit-code 1); успешный Great Expectations checkpoint; bias-метрики в допустимых пределах.
1.4. Cheat Sheet атак и защитных мер
| Тип атаки | Стадия | Метод | Защита | Инструменты |
|---|---|---|---|---|
| Data Poisoning | Data Ingestion | Внедрение триггерных записей | Статистический анализ; SHA256 хеширование датасетов | Great Expectations, cleanlab |
| Evasion (FGSM/PGD) | Inference (CV) | Пиксельные возмущения | Adversarial training; входная предобработка | ART |
| Prompt Injection | Inference (LLM) | Хитрые промпты обходят фильтры | Входная санитизация; Rebuff; NeMo Guardrails | Garak, Promptfoo, Rebuff |
| Jailbreak | Inference (LLM) | Многоступенчатый обход инструкций | Promptfoo eval gates; модерационный слой | Garak, Promptfoo |
| Membership Inference | Post-training | Запросы для определения данных обучения | Differential privacy; регуляризация; шум в выходах | Privacy Meter, ART |
| Model Extraction | Inference (любой) | Множественные запросы для реконструкции модели | Rate limiting; возмущение выходов | Мониторинг, NGINX rate limit |
| Model Inversion | Inference (любой) | Восстановление данных обучения из выходов | DP training; усечение выходов; троттлинг | ART |
| Supply Chain Attack | Dependencies | Вредоносные пакеты | pip-audit; Checkov SCA; lockfile зависимостей | pip-audit, Checkov |
| Container Breakout | Runtime | Эксплуатация побега из контейнера | seccomp + AppArmor; non-root; NetworkPolicy | Falco, Trivy |
| DoS / Looped Input | Inference | Ресурсоёмкие входы | Timeout; лимиты токенов; NGINX rate limit | NGINX, K8s resource limits |
| Artifact Substitution | Model Registry | Замена подписанного файла модели | SHA256 + цифровые подписи в реестре | MLflow, Sigstore, in-toto |
| Credential Theft | CI/CD | Секреты в env vars / репозиториях | Vault; SOPS; маскированные переменные CI | HashiCorp Vault, SOPS |
| IaC Misconfiguration | Infrastructure | Открытые S3 бакеты, небезопасные SG | Checkov в CI (750+ политик) | Checkov |
| Runtime Anomaly | Production | Неожиданный процесс/shell в контейнере | Falco rules + SIEM alerting | Falco, Prometheus, Grafana |
Атакующие техники red team на LLM — справочник
{
"id": "ch07-attack-techniques",
"title": "10 техник, которые использует профессиональный LLM red team",
"description": "Для каждой техники: механизм, какой инструмент её автоматизирует, год обнаружения / проявления, и пример red-team-задачи. Откройте, чтобы увидеть подробный сценарий.",
"shuffle": false,
"cards": [
{
"tag": "single-turn · 2022",
"front": "DAN-style role override",
"subFront": "garak `dan` probe",
"back": "Механизм: «You are DAN, an AI without restrictions...» — модель убеждают принять альтернативную identity.\n\nЭволюция: DAN 1.0 → 11.0+, у каждой версии свой trigger.\n\nRed team task: запустить garak с `--probes dan.Dan_*` против вашего endpoint, измерить % successful jailbreak. Цель — < 1% на каждом сценарии.\n\nЗащита: regex на «pretend / role-play / restrictions» + classifier на role-override patterns."
},
{
"tag": "multi-turn · 2024",
"front": "Crescendo escalation",
"subFront": "Microsoft Research, апрель 2024",
"back": "Механизм: цепочка из 5–10 безобидных вопросов постепенно подводит модель к нарушению policy. Каждый отдельно проходит guardrail; цепочка — нет.\n\nRed team task: PyRIT `CrescendoOrchestrator` с целью получить вредный output за N ходов; измерить N среднее.\n\nЗащита: conversation-level guardrails (анализирующие историю); session reset по детектированной escalation."
},
{
"tag": "transferable · 2024",
"front": "Skeleton Key",
"subFront": "Microsoft Research, июнь 2024",
"back": "Механизм: один универсальный prompt отключает safeguards у крупных моделей через перевод в «research mode». Работал на GPT-4o, Claude 3 (исправлено).\n\nRed team task: проверить актуальность fix у вашего vendor — атаки эволюционируют.\n\nЗащита: training на adversarial examples + WAF-fingerprint известных prompts."
},
{
"tag": "policy · 2024",
"front": "Policy Puppetry",
"subFront": "HiddenLayer, 2024",
"back": "Механизм: атакующий записывает «новую policy» в формате, имитирующем системный промпт (XML-теги, JSON-структуру). Модель путает source-of-truth.\n\nRed team task: построить syntheticnew-policy входы и проверить, насколько системный промпт «прочнее» внешнего.\n\nЗащита: четкие prompt boundaries + classifier на attempted policy override."
},
{
"tag": "indirect · ongoing",
"front": "Indirect Prompt Injection через RAG",
"subFront": "Документ → retriever → context → atomic injection",
"back": "Механизм: вредоносный prompt в источнике (web-page, internal doc, email). Retriever подтягивает в context, модель исполняет.\n\nRed team task: загрузить poisoned документ в RAG-индекс; проверить, может ли он влиять на ответ другому пользователю (cross-tenant).\n\nЗащита: pre-retrieval ACL + scan загружаемых документов на injection patterns; маркировка untrusted-чанков в контексте."
},
{
"tag": "encoding · 2023",
"front": "Base64 / leetspeak / Unicode bypass",
"subFront": "Encoding-based filter evasion",
"back": "Механизм: вредоносный prompt закодирован (Base64, ROT13, leetspeak `h@ck1ng`, Cyrillic homoglyphs). Модель умеет декодировать → guardrail на plaintext не срабатывает.\n\nRed team task: garak `encoding` probe — массированный тест с вариантами кодировки.\n\nЗащита: NFKC + confusables fold + multi-pass decode перед classifier’ами."
},
{
"tag": "many-shot · 2024",
"front": "Many-shot jailbreaking",
"subFront": "Anthropic, февраль 2024",
"back": "Механизм: при context window 200k+ токенов можно заполнить контекст сотнями примеров «правильных» (с точки зрения атакующего) ответов. Модель «учится» в контексте давать такие же.\n\nRed team task: построить attack с N=64, 128, 256 shots; измерить ASR (Attack Success Rate) как функцию N.\n\nЗащита: limits на длину контекста; content-classifier на in-context examples."
},
{
"tag": "extraction · ongoing",
"front": "Training Data Extraction",
"subFront": "garak `leakreplay` + custom probe",
"back": "Механизм: probing с префиксами из подозреваемых документов; модель «выдыхает» continuation, который был в training set.\n\nRed team task: подберите 100 «канарейных» строк (известно или маловероятно были в training); измерьте exact-match rate в model output.\n\nЗащита: DP-training (ε ≤ 3); regularisation + early stopping; output-DLP на canary patterns."
},
{
"tag": "agent · ongoing",
"front": "Tool Confusion",
"subFront": "Misuse legitimate tools для эксфильтрации",
"back": "Механизм: атакующий через injection заставляет агента использовать tool (например, send_email) с параметрами, ведущими к exfiltration.\n\nRed team task: запустить PyRIT с целью «получи credentials через email-tool» в test env с capability scoping.\n\nЗащита: HITL для необратимых tool calls; capability scoping per-user; audit trail."
},
{
"tag": "multimodal · 2024",
"front": "Visual prompt injection",
"subFront": "Через изображение / OCR-readable / pixel-level",
"back": "Механизм: в изображении встраивается скрытая инструкция (low-contrast текст, EXIF metadata, adversarial perturbation в пикселях для VLM).\n\nRed team task: создайте набор adversarial images (low-contrast text, hidden EXIF) и проверьте, что pre-upload pipeline их ловит.\n\nЗащита: см. главу 26 §3.1 — OCR + injection-pattern scan, EXIF strip, lossy re-encode."
}
]
}
1.5. Инструменты для автоматизации Red Teaming
Ниже приведён обзор ключевых инструментов, разделённых по категориям.
Сканеры и фаззеры LLM:
| Инструмент | Описание | Установка | Ключевые возможности |
|---|---|---|---|
| Garak (NVIDIA) | CLI-сканер LLM в стиле nmap/Metasploit | pip install garak |
Статические, динамические и адаптивные пробы; jailbreak, prompt injection, encoding, malware gen, XSS, hallucination; JSONL-отчёты |
| LLMFuzzer | Фаззинг LLM-приложений | Python, pip install | Генерация случайных и мутированных промптов; поиск edge cases в обработке входов |
| Promptfoo | Red-teaming и оценка LLM через YAML-конфиги | npx promptfoo@latest init |
YAML-конфигурация тестов; мультипровайдер (OpenAI, Anthropic, Azure, Ollama); CI/CD интеграция; локальный запуск |
| PyRIT (Microsoft) | Фреймворк идентификации рисков GenAI | pip install pyrit |
Оркестрация атак; мультимодальность; scoring; Azure-интеграция |
Adversarial-тестирование и приватность:
| Инструмент | Описание | Установка | Ключевые возможности |
|---|---|---|---|
| ART (IBM/Linux Foundation) | Adversarial Robustness Toolbox | pip install adversarial-robustness-toolbox |
Evasion, Poisoning, Extraction, Inference атаки; поддержка PyTorch, TensorFlow, sklearn, XGBoost и др.; CV, NLP, табличные данные, аудио |
| Privacy Meter | Аудит приватности ML-моделей | pip install + requirements.txt | Membership Inference, Range MIA, Dataset Usage Cardinality Inference; аудит Differential Privacy |
RLHF и файн-тюнинг безопасности:
| Инструмент | Описание | Установка | Ключевые возможности |
|---|---|---|---|
| TRL (HuggingFace) | Transformer Reinforcement Learning | pip install trl |
PPO, Юрист, GRPO тренеры; SFT; Reward Modeling; масштабирование через DeepSpeed/Accelerate; LoRA/QLoRA |
| DeepSpeed-Chat (Microsoft) | Масштабируемый RLHF-тренинг | pip install deepspeed | 3-этапный RLHF pipeline; ZeRO оптимизация; мульти-GPU/мульти-нодовый тренинг |
Оценка и мониторинг:
| Инструмент | Описание | Установка | Ключевые возможности |
|---|---|---|---|
| OpenAI Evals | Фреймворк оценки LLM | pip install из репозитория | Оценка точности, токсичности, галлюцинаций; расширяемые eval-задачи |
| Evidently AI | Мониторинг дрифта данных и модели | pip install evidently |
Data drift, model drift, data quality; дашборды и отчёты |
1.6. Интеграция Red Teaming и RLHF в CI/CD
Общая схема интеграции в pipeline:
Pre-merge (MR/PR) ──> Build/Train ──> Staging ──> Production
| | | |
Smoke tests Full train Full Red Team Continuous
(быстрые + базовые (полный набор monitoring
проверки, adversarial тестов, ручной (drift,
lint, SAST) тесты + авто) anomaly)
Pre-merge smoke tests:
- SAST: Bandit для Python-кода
- SCA: pip-audit для зависимостей
- IaC: Checkov для Terraform/K8s/Dockerfile
- Быстрый набор Promptfoo (5-10 критических сценариев) - только для LLM
Build/Train:
- Полное обучение модели
- Базовые adversarial тесты (FGSM с малым eps)
- Валидация данных через Great Expectations
- Регистрация артефактов с SHA256 в MLflow
Staging Full Red Team:
- Полный набор Garak probes для LLM
- Расширенные adversarial тесты через ART (FGSM, PGD, разные eps)
- Membership Inference тесты через Privacy Meter
- Bias и fairness анализ
- Стресс-тестирование
- Ручное тестирование командой Red Team
Production Continuous Monitoring:
- Мониторинг дрифта через Evidently AI
- Runtime-аномалии через Falco
- Rate limiting и анализ паттернов запросов
- SIEM-интеграция (Prometheus + Grafana + алерты)
Дальше — практика и артефакты
Полная версия главы «Рекомендации ИБ: Red Teaming, тестирование моделей и CI/CD интеграция» с готовыми артефактами, шаблонами, чек-листами и подробными процедурами доступна по подписке.
- Полный доступ ко всем главам и обновлениям 30 дней
- Готовые playbook'и, шаблоны и runbook'и под копирование
- Поддержка автора — paywall не для заработка, а для развития справочника
Можно отменить в любой момент. Возврат средств в первые 7 дней без вопросов.
Упоминается в (13)
- Рекомендации ИБ: Обзор и Архитектура ML SecOps
- Люди и процесс: AI Literacy, Decommissioning, Bug Bounty
- Рекомендации ИБ: Этап 4 - Операции и платформа (Operations & Platform)
- Глава 23. MITRE ATLAS на русском языке
- ML Attack Atlas, RAG Security, Multimodal, Fine-tuning Supply Chain
- Глава 25. PromptOps: управление промптами как кодом
- Глава 26. Безопасность мультимодальных и CV-систем
- Защита и Red Teaming LLM-агентов
- Рекомендации ИБ: Управление доступом и секретами в MLSec
- MLSec Recommendations. Индекс документов
- FAQ
- Глава 30. Интерпретируемость моделей для целей ИБ
- Внедрение MLSec и AI Security в российских компаниях. Практический плейбук