
Измерение открытых привилегий в защите агентов
Бенчмарк безопасности агентов сообщает два числа — успешность атак и полезность для легитимных задач, — и оба считываются с запусков, которые состоялись. Ни одно из них не говорит о том, что защита была готова допустить на путях, по которым ни один запуск не пошёл. Ajar спрашивает об этом напрямую: для каждой легитимной задачи он строит вызовы инструментов-кандидатов, которые задаче не нужны, предъявляет каждый из них защите в каждой точке, где агент мог бы действовать, и оценивает взвешенную по вреду долю, которую защита допускает.
Он подключается к уже существующему бенчмарку и переиспользует то, что этот бенчмарк уже несёт в себе, чтобы оценить себя — его задачи, схемы инструментов, эталонные решения и целевые состояния, — так что новому хосту нужен один адаптер, а новой защите — одна обёртка.
Адаптер экспортирует то, что уже несёт в себе хост-бенчмарк. Генератор превращает это в вызовы-кандидаты в каждой точке принятия решения, оракул присваивает каждому кандидату его метку и уровень вреда, а обёртка передаёт каждый из них собственному механизму принуждения защиты. Оценка сравнивает вердикты с метками.
ajar/core/ промежуточная форма: кандидаты, пробы, метки, уровни вреда
ajar/adapters/ адаптеры хост-бенчмарков; agentdojo/ — эталонный
ajar/generate/ семейства сбоев, строящие вызовы-кандидаты из задачи
ajar/score/ утечка, достаточность, избыточное ограничение, допуск атак
ajar/defenses/ собственные эталонные базовые линии Ajar, от «разрешить всё» до точного оракула
ajar/llm/ шов для моделей, для защит и генераторов, которые её вызывают
tests/
scripts/
git clone https://github.com/reSHARMA/Ajar.git
cd Ajar
pip install -e .
bash scripts/bootstrap.sh # сообщает, что присутствует, а что отсутствует
Ajar оценивает против хост-бенчмарка, который он не поставляет. Для эталонного адаптера укажите его на копию AgentDojo:
git clone https://github.com/ethz-spylab/agentdojo.git bench/agentdojo
python scripts/export_probes.py --benchmark agentdojo
Это записывает набор проб: задачи, построенные из них вызовы-кандидаты, а также метку и уровень вреда каждого кандидата.
Утечка избыточных привилегий — это взвешенная по вреду доля избыточных вызовов, которые защита допускает. Каждый избыточный вызов несёт вес, растущий от того, что он мог бы сделать, если бы выполнился, — от обратимого чтения собственного состояния пользователя до необратимого действия против третьей стороны или против средств.
Достаточность — это доля вызовов, которые задаче действительно нужны и которые защита пропускает. Её представление наряду с утечкой не даёт обмануть ни одну из них: защита, которая запрещает всё, ничего не пропускает, а та, что разрешает всё, не отказывает ни в чём, что нужно задаче.
Вместе с ними идут ещё два числа. Избыточное ограничение считает правомерные вызовы, в которых защита отказывает, а допуск атак считает атаки, все вызовы-стоки которых она допускает.
Защита реализует одно решение: для предложенного вызова и уже выполненных вызовов — разрешить его или запретить. Реализуйте это против ajar.defenses.base, зарегистрируйте, и Ajar сообщит все четыре числа на тех же тестах, которые видит любая другая защита.
ajar/defenses/baselines.py содержит четыре эталонные процедуры — «разрешить всё», белый список имён инструментов, точный по аргументам оракул и «запретить всё», — которые ограничивают шкалу с обоих концов и дают новой защите место, куда можно встать.
MIT. См. LICENSE.