Дата публикации
ai_products

Как проверить безопасность AI-агентов до продакшена: PyRIT от Microsoft и YAML-обёртка для CI/CD

Что нового

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

Ключевые факты:

  • PyRIT (Python Risk Identification Tool) — открытый фреймворк Microsoft для AI red teaming, опубликован под MIT‑лицензией.
  • 3,8k+ звёзд на GitHub и 129 контрибьюторов — это уже не внутренний эксперимент.
  • PyRIT обкатали на 100+ продуктов, включая Microsoft Copilot.
  • Внутри — более 53 наборов данных (AIRT, HarmBench, AdvBench, XSTest и др.) с заранее подготовленными вредоносными промптами.
  • 70+ «конвертеров» промптов: Base64, ROT13, leetspeak, Unicode‑конфузаблы, переводы, LLM‑перефразирование, мультимодальные инъекции.
  • 6 стратегий атак: от простых одноходовых до сложных многоходовых, включая TreeOfAttacksWithPruning (TAP).
  • 20+ способов скоринга: LLM‑as‑judge, Azure AI Content Safety, бинарные классификаторы, шкалы Лайкерта.
  • Поддерживаются 10+ типов целей: OpenAI, Azure, HuggingFace, HTTP‑эндпоинты, WebSockets, Playwright и др.

Главное новшество в описанном подходе — не сам PyRIT, а тонкая обёртка вокруг него:

  • один YAML‑файл управляет всей проверкой безопасности AI‑агента;
  • один runner.py собирает пайплайн: запускает атаки, оценивает ответы, мапит на OWASP LLM Top 10 и возвращает exit code pass/fail;
  • эту обёртку можно превратить в pip‑пакет и запускать в любом CI/CD как обычный CLI‑инструмент.

То есть PyRIT перестаёт быть только «исследовательской библиотекой» и превращается в автоматизированный сканер для agentic AI, который реально можно прикрутить к релизному конвейеру.

Как это работает

Две поверхности риска вместо одной

AI‑red teaming с PyRIT одновременно проверяет:

  1. Классическую безопасность:
    • prompt injection;
    • утечки данных (data exfiltration);
    • кражу системного промпта;
    • злоупотребление инструментами и API.
  2. Responsible AI‑риски:
    • токсичный контент;
    • социальные предубеждения;
    • манипулятивные ответы.

Microsoft AI Red Team пришла к этому после red teaming более 100 генеративных AI‑продуктов.

Почему обычный pentest не работает

  • Ответы LLM вероятностны: один и тот же промпт даёт разные ответы. Нельзя просто сравнить с эталонной строкой.
  • Нужен массовый запуск атак и автоматический скоринг на тысячах промптов.
  • Архитектуры разные: чат‑боты, RAG‑пайплайны, multi‑agent‑системы, агенты с tool‑calling. Один тестовый хранилищ не подходит всем.

OWASP LLM Top 10 (2025) даёт таксономию рисков:

  • prompt injection;
  • раскрытие чувствительной информации;
  • чрезмерные полномочия агента;
  • утечки системного промпта;
  • отравление данных;
  • риски supply chain;
  • некорректная обработка выходных данных;
  • слабости эмбеддингов;
  • дезинформация;
  • неограниченное потребление ресурсов.

Каждый AI‑агент, который вы выкатываете, потенциально подвержен всем десяти пунктам.

Что даёт PyRIT «из коробки»

PyRIT — это конструктор из четырёх основных блоков:

  1. Datasets (53+ наборов):

    • AIRT (Microsoft AI Red Team);
    • HarmBench, AdvBench, XSTest и другие.
    • В них — тысячи заранее подготовленных вредоносных промптов: jailbreak, контент‑хармы, попытки вытащить данные, социальные байасы.
  2. Converters (70+ штук):

    • Base64, ROT13, leetspeak;
    • Unicode‑конфузаблы;
    • переводы на другие языки;
    • мультимодальные инъекции (например, текст спрятан в картинке);
    • LLM‑перефразирование.

    Конвертеры можно накладывать друг на друга: перевести → закодировать в Base64 → вставить в изображение.

  3. Attack strategies (6 классов):

    • PromptSendingAttack — простая одноходовая атака;
    • CrescendoAttack — постепенная эскалация с несколькими ходами;
    • TreeOfAttacksWithPruning (TAP) — древовидный перебор атак с отсечением слабых веток;
    • многоходовые диалоговые атаки.
  4. Scorers (20+ вариантов):

    • LLM‑as‑judge (модель оценивает ответ агента);
    • Azure AI Content Safety;
    • бинарные классификаторы true/false;
    • оценка по шкале Лайкерта.

Плюс targets — адаптеры к 10+ типам систем: OpenAI, Azure, HuggingFace, HTTP‑эндпоинты, WebSockets, Playwright и т.д.

Сам PyRIT не навязывает пайплайн. Он даёт примитивы, а «клея» между ними нет — его и предлагает собрать Microsoft.

Обёртка: один runner.py и YAML

Идея: написать тонкий оркестратор, который:

  1. Читает YAML‑конфиг.
  2. Динамически импортирует ваш агент и заворачивает его в PyRIT target.
  3. Подгружает датасеты (встроенные + ваши кастомные промпты).
  4. Запускает атаки по фазам:
    • простые промпты;
    • закодированные/искажённые;
    • семантические обходы (перефразирование, переводы);
    • многоходовые диалоги.
  5. Оценивает каждый ответ с помощью выбранных scorers (например, LLM‑as‑judge).
  6. Мапит находки на категории OWASP LLM Top 10.
  7. Генерирует отчёты (JSON, Markdown и другие форматы, если нужны).
  8. Возвращает exit code, который ваш CI/CD понимает как pass/fail.

Всё поведение задаётся через YAML, а не кодом. Чтобы сменить стратегию атаки или порог допуска, достаточно отредактировать один файл.

YAML‑конфигурация

Базовый пример конфигурации:

scan:
  name: "my-agent-security-scan"

  # Point to your agent — any Python callable
  target:
    module: "my_agent.main"
    function: "handle_prompt"

  # Attack strategies to run
  strategies:
    - name: "prompt_sending"         # Single-turn baseline
    - name: "crescendo"              # Gradual escalation
      max_turns: 5

  # Prompt transformations — they stack automatically
  converters:
    - name: "Base64Converter"
    - name: "LeetspeakConverter"
    - name: "TranslationConverter"

  # Adversarial prompt sets
  datasets:
    - "airt_illegal"                 # Built-in: Microsoft AI Red Team
    - "harmbench"                    # Built-in: harm evaluation benchmark
    - path: "datasets/custom_prompts.yaml"

# Release gate thresholds
gate:
  fail_on:
    critical_findings: 0             # Zero tolerance for critical
    high_findings: 3
    max_score: 0.3                   # Defense rate must exceed 70%

Что тут важно:

  • target.module и target.function — любая Python‑функция, которая принимает промпт и возвращает ответ. Это может быть чат‑бот, RAG‑пайплайн или multi‑agent‑оркестратор.
  • strategies — список атак, которые вы хотите прогнать.
  • converters — трансформации промптов. Они автоматически накладываются друг на друга.
  • datasets — наборы вредоносных промптов: встроенные + ваш кастомный YAML.
  • gate.fail_on — политика релиза: сколько критических и высоких находок вы допускаете и какой максимальный средний риск‑скор.

Оркестратор читает этот YAML, собирает пайплайн и в конце возвращает exit code. Ноль — релиз можно пускать дальше, ненулевой — блокируем.

Что это значит для вас

Для кого это полезно

Этот подход особенно полезен, если вы:

  • разрабатываете agentic AI: ассистенты, которые вызывают инструменты, ходят в базу данных, дергают внешние API и выполняют действия от имени пользователя;
  • строите RAG‑системы с доступом к приватным данным;
  • делаете мультиагентные воркфлоу, где один агент может влиять на решения других;
  • отвечаете за безопасность или compliance и вам нужно формализовать проверку AI‑функций.

Вы получаете:

  • автоматизированные атаки по всем 10 категориям OWASP LLM Top 10;
  • массовое тестирование: тысячи промптов за часы, а не недели (Microsoft прямо пишет, что с PyRIT смогла проверять Copilot за часы вместо недель);
  • понятный «ворота релиза» — конфигом задаёте, при каком уровне риска релиз стопорится.

Как использовать на практике

  1. Стартовый сценарий — команда, которая пилит нового AI‑агента.

    • Подключаете PyRIT как зависимость.
    • Пишете минимальный wrapper (runner.py) и YAML‑конфиг под ваш сервис.
    • Запускаете скан локально перед крупными изменениями.
  2. Интеграция в CI/CD:

    • Упаковываете обёртку в pip‑пакет (через setuptools или Poetry).
    • В пайплайне: pip install your-pyrit-wrapper и вызов CLI, например pyrit-scan run.
    • Проверяете exit code: 0 — идём дальше, не 0 — релиз блокируется.
  3. Режимы запуска:

    • быстрые сканы — разработчики запускают локально по мере надобности;
    • полные красные команды — реже, по решению тимлида или архитектора, когда изменения затрагивают безопасность или доступ к данным.

Где это поможет

  • Проверка, может ли ваш ассистент «обмануться» и выполнить вредную команду через prompt injection.
  • Оценка, насколько агент устойчив к попыткам вытащить системный промпт или приватные данные.
  • Проверка, не генерирует ли агент токсичный или дискриминационный контент.
  • Подготовка к аудитам: есть отчёты, маппинг на OWASP LLM Top 10 и числовые метрики.

Где не стоит надеяться только на PyRIT

  • Если у вас нет доступа к внешним LLM или Azure AI Content Safety, часть scorers будет недоступна.
  • PyRIT — это фреймворк, а не SaaS‑сервис. Вам придётся самим писать обёртку и поддерживать её.
  • Он не заменяет классический pentest инфраструктуры, он покрывает именно слой AI‑логики.

Доступность из России

PyRIT — open‑source на GitHub. Код и библиотеку можно скачать без VPN.

Но:

  • для использования некоторых целей (например, Azure OpenAI) и scorers (Azure AI Content Safety) могут потребоваться аккаунты и доступы, которые официально недоступны из России;
  • это нужно учитывать при планировании пайплайна: можно подключать свои scorers или локальные модели‑судьи.

Место на рынке

PyRIT конкурирует не с конкретной моделью вроде GPT‑4o или Claude 3, а с другими фреймворками для red teaming LLM‑систем. В исходном материале перечислены только возможности PyRIT, без прямых сравнений по скорости или стоимости.

Что можно зафиксировать по фактам:

  • PyRIT прошёл боевое применение на 100+ продуктах Microsoft, включая Copilot. Это серьёзный аргумент для крупных команд.
  • Внутри уже упакованы 53+ датасета и 70+ конвертеров, что уменьшает объём ручной работы по подготовке атак.
  • Поддержка 10+ типов целей (OpenAI, Azure, HuggingFace, HTTP, WebSockets, Playwright) делает его удобным для смешанных инфраструктур.
  • MIT‑лицензия и 3,8k+ звёзд на GitHub упрощают внедрение в корпоративные среды: нет жёстких ограничений по использованию и модификации.

Если вы сейчас тестируете AI‑агентов вручную или через разрозненные скрипты, PyRIT + YAML‑обёртка даёт путь к системной, повторяемой проверке безопасности на каждом релизе.

Установка / Как запустить

Исходный текст описывает концепцию обёртки, а не даёт готовый пакет. Но структура понятна: вы создаёте pip‑пакет вокруг PyRIT и CLI‑команду.

1. Добавьте PyRIT в зависимости

В pyproject.toml или requirements.txt вашего проекта указываете PyRIT как зависимость (конкретное имя пакета и версия зависят от репозитория PyRIT на GitHub).

2. Структура проекта обёртки

На уровне POC достаточно минимальной структуры:

  • runner.py — основной оркестратор;
  • несколько вспомогательных модулей (например, для чтения YAML, логирования и отчётов);
  • каталог datasets/ для кастомных промптов;
  • конфиг scan.yaml.

3. Пример YAML‑конфига (полный, из источника)

scan:
  name: "my-agent-security-scan"

  # Point to your agent — any Python callable
  target:
    module: "my_agent.main"
    function: "handle_prompt"

  # Attack strategies to run
  strategies:
    - name: "prompt_sending"         # Single-turn baseline
    - name: "crescendo"              # Gradual escalation
      max_turns: 5

  # Prompt transformations — they stack automatically
  converters:
    - name: "Base64Converter"
    - name: "LeetspeakConverter"
    - name: "TranslationConverter"

  # Adversarial prompt sets
  datasets:
    - "airt_illegal"                 # Built-in: Microsoft AI Red Team
    - "harmbench"                    # Built-in: harm evaluation benchmark
    - path: "datasets/custom_prompts.yaml"

# Release gate thresholds
gate:
  fail_on:
    critical_findings: 0             # Zero tolerance for critical
    high_findings: 3
    max_score: 0.3                   # Defense rate must exceed 70%

4. Интеграция в CI/CD

Идея пайплайна:

  1. В шаге сборки:
    • pip install вашего обёрточного пакета вокруг PyRIT.
  2. В шаге проверки безопасности:
    • вызов CLI, например:

      pyrit-scan run --config scan.yaml
      
  3. Анализ exit code:
    • 0 — пайплайн идёт дальше;
    • != 0 — задача помечается как failed, релиз блокируется.

Один и тот же CLI‑подход работает в GitHub Actions, Azure DevOps, Jenkins и любых других системах, где можно запускать shell‑команды.

Кастомизация без форка

Обёртка специально задумывается так, чтобы всё настраивалось конфигом, а не правкой исходников PyRIT.

Что вы можете менять:

  • Какой агент тестировать — меняете target.module и target.function в YAML. Это может быть чат‑бот, RAG‑сервис или multi‑agent‑оркестратор.
  • Стратегии атак — добавляете или убираете записи под strategies. Например, начинаете только с prompt_sending, позже включаете crescendo и TAP.
  • Трансформации промптов — перечисляете конвертеры под converters. Они автоматически комбинируются (Base64 → leetspeak → перевод).
  • Наборы данных — используете встроенные 53+ датасета или добавляете свои YAML‑файлы с промптами (например, сценарии для HIPAA или финансового комплаенса).
  • Пороги скоринга — в gate.fail_on задаёте, сколько находок допустимо по каждой категории OWASP и какой максимальный риск‑скор вы принимаете.
  • Форматы отчётов — в отдельной секции (например, reporting.formats) можно указать JSON для автоматизации, Markdown или PDF для compliance, JUnit для дашбордов.
  • Новые типы атак — регистрируете свои классы атак через секцию custom_attacks (module + class name) без изменения ядра PyRIT.

Итоговый паттерн выглядит так:

YAML‑конфиг → обёртка вокруг вашего агента → запуск атак → скоринг → маппинг на OWASP LLM Top 10 → решение о релизе.

Один раз собираете этот пайплайн — и дальше можете прогонять его на каждом релизе своих AI‑агентов.


Читайте также