
에이전트 방어에서 개방형 권한 측정
에이전트 보안 벤치마크는 공격 성공률과 정상 유틸리티라는 두 가지 수치를 보고하며, 둘 다 실제로 발생한 실행에서 읽어낸다. 어느 쪽도 실행되지 않은 경로에서 방어가 무엇을 허용할 준비가 되어 있었는지는 말해주지 않는다. 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
그러면 프로브 스위트가 작성된다: 작업, 그로부터 만들어진 후보 호출, 그리고 각 후보의 레이블과 피해 등급.
과잉 권한 누출은 방어가 허용하는 초과 호출의 피해 가중 비율이다. 각 초과 호출은 실행될 경우 할 수 있는 일에 따라 커지는 가중치를 지니며, 사용자 자신의 상태에 대한 되돌릴 수 있는 읽기부터 제3자나 자금에 대한 되돌릴 수 없는 행동까지 이어진다.
충분성은 작업이 진정으로 필요로 하는 호출 중 방어가 통과시키는 비율이다. 누출과 함께 보고하면 어느 쪽도 악용될 수 없다. 모든 것을 거부하는 방어는 아무것도 누출하지 않고, 모든 것을 허용하는 방어는 작업이 필요로 하는 것 중 아무것도 거부하지 않는다.
두 가지 수치가 더 따른다. 과잉 제한은 방어가 거부하는 정당한 호출을 세고, 공격 허용은 모든 싱크 호출을 허용하는 공격을 센다.
방어는 하나의 결정을 구현한다: 제안된 호출과 이미 실행된 호출이 주어졌을 때, 허용할지
거부할지. 이를 ajar.defenses.base에 맞춰 구현하고 등록하면, Ajar는 다른 모든 방어가 보는
동일한 테스트에서 네 가지 수치를 모두 보고한다.
ajar/defenses/baselines.py에는 네 가지 참조 절차 — 전부 허용, 도구 이름 허용 목록,
인자 정확 오라클, 전부 거부 — 가 있으며, 양 끝에서 규모의 경계를 정하고 새로운 방어가
그 사이에 위치할 수 있는 기준을 제공한다.
MIT. LICENSE 참조.