
Medindo Privilégios Abertos em Defesas de Agentes
Um benchmark de segurança de agentes reporta dois números, sucesso de ataque e utilidade benigna, e ambos são lidos de execuções que aconteceram. Nenhum dos dois diz o que a defesa estava pronta para permitir nos caminhos que nenhuma execução percorreu. Ajar pergunta isso diretamente: para cada tarefa benigna, ele constrói chamadas de ferramenta candidatas que a tarefa não precisa, apresenta cada uma à defesa em cada ponto em que o agente poderia agir, e pontua a parcela ponderada pelo dano que a defesa permite.
Ele se acopla a um benchmark que já existe e reutiliza o que esse benchmark já carrega para se avaliar — suas tarefas, esquemas de ferramentas, soluções de referência e estados de objetivo — de modo que um novo host precisa de um adaptador e uma nova defesa precisa de um wrapper.
O adaptador exporta o que o benchmark host já carrega. O gerador transforma isso em chamadas candidatas em cada ponto de decisão, o oráculo dá a cada candidata seu rótulo e nível de dano, e o wrapper entrega cada uma ao próprio caminho de aplicação de uma defesa. A pontuação compara os veredictos com os rótulos.
ajar/core/ a forma intermediária: candidatas, sondas, rótulos, níveis de dano
ajar/adapters/ adaptadores de benchmark host; agentdojo/ é o de referência
ajar/generate/ as famílias de falhas que constroem chamadas candidatas a partir de uma tarefa
ajar/score/ vazamento, suficiência, restrição excessiva, admissão de ataque
ajar/defenses/ as próprias linhas de base de referência do Ajar, de permitir-tudo a um oráculo exato
ajar/llm/ a interface de modelo, para defesas e geradores que chamam um
tests/
scripts/
git clone https://github.com/reSHARMA/Ajar.git
cd Ajar
pip install -e .
bash scripts/bootstrap.sh # reports what is present and what is missing
Ajar pontua contra um benchmark host que ele não embute. Para o adaptador de referência, aponte-o para um checkout do AgentDojo:
git clone https://github.com/ethz-spylab/agentdojo.git bench/agentdojo
python scripts/export_probes.py --benchmark agentdojo
Isso grava a suíte de sondas: as tarefas, as chamadas candidatas construídas a partir delas, e o rótulo e nível de dano de cada candidata.
Vazamento de privilégio excessivo é a parcela ponderada pelo dano de chamadas em excesso que uma defesa permite. Cada chamada em excesso carrega um peso que cresce com o que ela poderia fazer se executada, de uma leitura reversível do próprio estado do usuário a uma ação irreversível sobre um terceiro ou sobre fundos.
Suficiência é a parcela das chamadas que uma tarefa genuinamente precisa que a defesa deixa passar. Reportá-la junto com o vazamento impede que qualquer uma das duas seja manipulada: uma defesa que nega tudo não vaza nada, e uma que permite tudo não nega nada que a tarefa precisa.
Dois outros números vêm com elas. Restrição excessiva conta as chamadas autorizadas que uma defesa recusa, e admissão de ataque conta os ataques cujas todas as chamadas de sink ela permite.
Uma defesa implementa uma decisão: dada uma chamada proposta e as chamadas já executadas,
permiti-la ou negá-la. Implemente isso contra ajar.defenses.base, registre-a, e Ajar
reporta todos os quatro números nos mesmos testes que todas as outras defesas veem.
ajar/defenses/baselines.py contém quatro procedimentos de referência — permitir-tudo, uma allowlist de nomes de ferramentas, um oráculo exato de argumentos e negar-tudo — que limitam a escala em ambas as extremidades e
dão a uma nova defesa algo entre o que se situar.
MIT. Veja LICENSE.