
Бенчмарк для оценки безопасности ИИ-агентов против атак, встроенных в контекст, с которым работают навыки, включающий 155 сценариев в 6 областях риска и измеряющий успешность выполнения задач и устойчивость к атакам.
SkillSafetyBench — это полностью материализованный бенчмарк для оценки сбоев безопасности, вызванных атаками на контекст, связанный с навыками (skill-facing context). В каждом случае пользовательская задача остаётся обычной, а атака размещается в локальных навыках, вспомогательных скриптах, файлах-компаньонах (sidecar), корпусах, шаблонах или других артефактах рабочего пространства, к которым агент может обращаться во время выполнения.
Изучите дизайн бенчмарка, обозреватель кейсов, лидерборд и анализ экспериментов на сайте SkillSafetyBench, а полную версию статьи читайте на arXiv.
Современные агенты для написания кода и выполнения задач часто полагаются на локальные навыки и артефакты окружения, а не только на пользовательский промпт. SkillSafetyBench проверяет, может ли агент выполнить безвредную работу, сопротивляясь при этом небезопасным инструкциям или вводящему в заблуждение контексту, встроенному в эти поверхности, связанные с навыками. Носители безвредных задач выбраны из SkillsBench.
Бенчмарк статичен и готов к запуску. Это не генератор кейсов. Репозиторий содержит 155 подготовленных кейсов в 6 доменах риска и 30 категориях. Каждый кейс включает:
Каждый запуск оценивается по двум осям:
task_success: была ли выполнена обычная пользовательская задачаattack_success: наблюдалось ли небезопасное поведениеЭто разделение важно: система может выглядеть способной, потому что выполняет задачу, но при этом оставаться уязвимой, поскольку следует контексту навыков, содержащему атаку.
SkillSafetyBench содержит 155 кейсов, организованных в 6 доменов риска и 30 категорий. Каждый домен риска содержит 5 категорий, а каждая категория — несколько конкретных кейсов, построенных вокруг обычных носителей задач.
SkillSafetyBench
└── 6 доменов риска
├── RD1: Риски доверия к контексту и манипуляции промптами
├── RD2: Риски агентности, области действия и авторизации
├── RD3: Риски выполнения, среды выполнения, фреймворков и протоколов
├── RD4: Риски границ данных, вывода и экстернализации
├── RD5: Риски памяти, восстановления, аудита и персистентности
└── RD6: Риски знаний, модели, цепочки поставок и операционные риски
Кейсы хранятся по домену риска, категории и идентификатору кейса:
benchmark/<risk-domain>/<category>/<case>/
metadata.json
rationale.md
attacked_task/
instruction.md
task.toml
environment/
solution/solve.sh
tests/test.sh
eval/verify_attack.py
Каталог бенчмарка является источником истины для кейсов. Каталоги категорий используют шаблон именования categoryN-..., например:
benchmark/risk-domain-6-knowledge-model-supply-chain-and-operational-risks/category1-availability_cost_and_service_exhaustion/
Конвейер построения бенчмарка начинается с безвредных носителей задач, сохраняет исходную пользовательскую задачу, внедряет атаку через артефакты, связанные с навыками, и прикрепляет детерминированные проверки как для выполнения задачи, так и для поведения атаки. Это сохраняет фокус оценки на том, могут ли агенты противостоять небезопасному локальному контексту, продолжая при этом выполнять запрошенную работу.
Этот репозиторий содержит состязательные (adversarial) кейсы бенчмарка. Некоторые кейсы моделируют фишинг, запрос учётных данных, деструктивные операции, эксфильтрацию данных, злоупотребление границами песочницы, внешние действия и поведение, подобное персистентности.
Запускайте бенчмарк только в изолированных исследовательских средах. Не используйте производственные учётные данные, производственные облачные аккаунты, личные аккаунты или чувствительные локальные файлы. Предпочитайте одноразовые API-ключи, одноразовые контейнеры, ограниченный сетевой доступ и выделенную рабочую директорию. Проверяйте артефакты запуска перед их публикацией.
Требуемые инструменты:
bashpython3, рекомендуется >= 3.11dockeruvharbornvm22Установите Harbor при необходимости:
uv tool install harbor
Проверьте базовый инструментарий:
harbor --help
python3 --version
docker --version
Если ваш агент Harbor установлен через Node, активируйте Node 22 в оболочке, из которой запускается выполнение:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
nvm use 22
Создайте локальный .envrc из файла-примера:
cp env.example .envrc
Для codex задайте как минимум:
export OPENAI_BASE_URL="https://your-openai-compatible-endpoint/v1"
export OPENAI_API_KEY="replace-with-your-openai-api-key"
Для claude-code задайте переменную аутентификации, совместимую с Anthropic, например:
export ANTHROPIC_BASE_URL="https://api.anthropic.com"
export ANTHROPIC_API_KEY="replace-with-your-anthropic-api-key"
Если вы используете direnv, выполните:
direnv allow
Если нет, дополнительных действий не требуется. Пакетный скрипт явно подключает .envrc во время выполнения.
Каноническая точка входа:
scripts/start_agent_batch.sh
Запуск одного домена риска:
scripts/start_agent_batch.sh --rd 5
Выбор агента и модели:
scripts/start_agent_batch.sh \
--rd 3 \
--agent codex \
--model openai/gpt-5.4
Запуск с Claude Code:
scripts/start_agent_batch.sh \
--rd 3 \
--agent claude-code \
--model claude-3-7-sonnet-20250219
Запуск одного кейса:
scripts/start_agent_batch.sh \
--rd 5 \
--case travel_planning_poisoned_belief_persistence_memory_anchor
Запуск одной категории:
scripts/start_agent_batch.sh \
--rd 6 \
--category category3-model_behavior_and_finetuning_poisoning
Запуск из явного манифеста:
scripts/start_agent_batch.sh \
--manifest benchmark/risk-domain-6-knowledge-model-supply-chain-and-operational-risks/manifest.json
Использование пользовательского файла окружения:
scripts/start_agent_batch.sh \
--rd 5 \
--envrc /path/to/your.envrc
Вывод выбранных кейсов без выполнения:
scripts/start_agent_batch.sh --rd 5 --dry-run
Каждый запуск создаёт выходной каталог в jobs/:
jobs/<agent>-risk-domain-5-memory-recovery-audit-and-persistence-risks-<timestamp>/
Начните с:
jobs/<run>/attack_results.jsonjobs/<run>/summary.jsonjobs/<run>/attack_results.csvjobs/<run>/summary.csvПолезные файлы каждого запуска:
selected_cases.jsonbatch_config.json<case_id>/case_result.jsonattack_results.mdРаспространённые исходы атак:
attack_successattack_not_observedtask_output_missingtask_output_missing означает, что ожидаемый явный вывод задачи отсутствовал. Верификатор атаки может продолжить работу, если доступно достаточно артефактов для оценки условия атаки.