Pular para o conteúdo
Menu
Preciso disso?O que um agente alcança na sua máquinaComo funcionaAs camadas entre o agente e o seu sistemaCompararSandboxes embutidos, Docker e VMsConfigurarAbra só o que a tarefa precisaSegurançaO modelo de ameaças e seus limitesInstalar
Segurança

Uma camada útil, com limites conhecidos

O ai-jail mantém um agente de código com IA longe das suas chaves, do seu diretório home e do resto da sua máquina. Ele é um sandbox de processo, então compartilha o seu kernel. Quando o código é hostil, ele não substitui uma máquina virtual descartável.

O que ele foi feito para barrar

Uma página web, um pacote ou um arquivo no repositório pode convencer um agente a se comportar mal. É isto que ele vai procurar nessa hora, e não vai encontrar.

O agente e o projeto ficam dentro de um muro de grades. Seis setas saem do agente e batem no muro. Do lado de fora, apagados e gradeados, estão o seu home e as suas chaves, os segredos do seu shell, a rede, a sua tela e o clipboard, o seu terminal e a política da jaula.
Os padrões. Cada item do lado de fora continua lá até você mesmo abrir.

Fora de alcance

  • Seu diretório home e as credenciais que estão nele. O agente recebe um home novo e vazio, então ~/.ssh e ~/.aws não existem lá dentro.
  • Segredos no seu shell. As variáveis de ambiente são reduzidas a uma allowlist pequena, então os tokens exportados ficam de fora.
  • A rede. Ela fica desligada, então nada do que o agente lê pode ser enviado para lugar nenhum.
  • A memória compartilhada do host, o seu servidor gráfico e o seu clipboard. A saída do agente passa por um filtro que descarta sequências de terminal de clipboard e de consulta.
  • Digitar no seu terminal. O Linux bloqueia a chamada TIOCSTI, que simula teclas, e o macOS restringe o controle de terminal ao único terminal que o ai-jail criou para aquela execução.
  • As próprias regras. Um arquivo .ai-jail dentro de um repositório não é confiável: ele pode apertar o sandbox, nunca abrir.
Como cada camada faz isso

Onde o muro acaba

A jaula e o seu sistema se apoiam no mesmo kernel. Um bug nesse kernel, num driver ou no backend do sandbox é um caminho por fora do muro, e o ai-jail não tem o que fazer a respeito. Uma máquina virtual traz o próprio kernel, e por isso é a fronteira mais forte.

À esquerda, o seu sistema e a jaula do ai-jail com o agente dentro se apoiam numa única laje compartilhada, o seu kernel, e uma linha tracejada vai do agente até o seu sistema passando pela laje. À direita, uma VM descartável cerca um agente apoiado num kernel próprio e separado.
Um sandbox divide o chão com aquilo que protege, e uma VM traz o próprio chão.

O que continua em risco

  • Vulnerabilidades de kernel e de drivers. Todo processo em sandbox fala com o mesmo kernel que o resto da sua máquina.
  • Bugs no seu emulador de terminal, principalmente com --terminal-passthrough, que desliga o filtro de saída.
  • Defeitos no próprio backend do sandbox: bubblewrap, Landlock e seccomp no Linux, sandbox-exec no macOS.
  • Segredos dentro do projeto. Um arquivo .env no repositório pode ser lido, a menos que você o mascare. Veja como mascarar arquivos.
  • As máscaras cobrem só os caminhos que existem quando o sandbox inicia. Um arquivo de segredos criado depois, durante a sessão, não fica escondido.
  • Side channels e algumas classes de comunicação entre processos.
  • No macOS, o sandbox-exec foi marcado como obsoleto pela Apple e não equivale ao isolamento do Linux. Veja as diferenças no macOS.

Opções que abrem o muro

Tudo o que está abaixo fica desligado até você ligar, e cada item dá acesso real ao agente. Como definir cada um está na página Configurar.

OpçãoO que qualquer coisa no sandbox passa a poder fazer
--networkEnviar para qualquer lugar tudo o que consegue ler. O tráfego é irrestrito e não há filtro por domínio.
--dockerAgir como root na sua máquina por meio do daemon do Docker.
--x11Capturar teclas e tirar screenshots de outras janelas X11.
--systemd-userPedir ao seu gerenciador de usuário do systemd para rodar serviços no host.
--inherit-envLer o ambiente inteiro do seu shell, com os segredos.
--agent-stateUsar o login salvo do agente, por exemplo o ~/.claude do Claude.
--audioGravar e reproduzir áudio enquanto estiver ligada.
--no-private-homeVer o seu diretório home real. É uma exceção ampla; prefira mapear só o caminho de que você precisa.

Na dúvida, ele se recusa a iniciar

Um sandbox que inicia, sem avisar, mais fraco do que você pediu é pior do que um que para com um erro. Nestes casos o ai-jail para.

  • Um arquivo de configuração que existe e está inválido ou ilegível.
  • Um .ai-jail de projeto que é um symlink. Um ~/.ai-jail global que é symlink só é seguido até um arquivo regular que pertence a você, em que ninguém mais pode escrever, fora do projeto.
  • --lockdown quando o Landlock, as regras de sistema de arquivos do próprio kernel, está ausente, parcial ou falha ao ser aplicado. --lockdown --no-landlock também é rejeitado.
  • --allow-tcp-port. Essa interface não consegue restringir UDP, então a flag é aceita por compatibilidade e a inicialização falha.
  • Um BWRAP_BIN que aponta para um binário do bubblewrap que alguém além do root poderia ter trocado. Ele é ignorado com um aviso, e sem um bubblewrap confiável a inicialização falha.

Como o projeto é verificado

Um único mantenedor toca o projeto, tudo em aberto. Abaixo está o que é verificado e o que não é.

19
testes de integração de fuga do sandbox, que tentam escrever em /usr, ler ~/.ssh, chamar ptrace e bpf, e esperam falhar
720
testes unitários na árvore de código-fonte na versão 1.22.0
0
requisições de rede na inicialização. A checagem de atualização é opt-in, com --update-check

Como uma release é feita

  • As tags de release são assinadas, e o CI verifica cada uma contra um fingerprint de chave fixado no repositório.
  • Cada GitHub Action é fixada num SHA de commit, e as actions são restritas a uma allowlist.
  • Os builds usam uma toolchain de Rust fixada e dependências com --locked.
  • Os binários de macOS são assinados e notarizados pela Apple.
  • Cada arquivo compactado vem com um checksum SHA-256, e o job de publicação confere todos de novo.

O que o documento de release diz que ainda falta

  • Os segredos de assinatura e de publicação ainda ficam guardados no nível do repositório e deveriam ir para os ambientes de release.
  • Ainda não há um ruleset que obrigue toda tag v* a ser assinada.
  • Releases imutáveis não estão habilitadas.
  • A publicação no crates.io ainda usa um token. O trusted publishing está planejado.
  • Com um único mantenedor, não há um segundo revisor para as mudanças nem para as releases.

Ler o RELEASE_SECURITY.md

Reportar uma vulnerabilidade

Não abra uma issue pública. Use o relato privado de vulnerabilidades do GitHub, inclua os passos para reproduzir e as versões afetadas, e dê tempo para coordenar uma correção.

Perguntas comuns

O agente consegue escapar?
Os padrões são feitos e testados para bloquear os caminhos comuns: arquivos, ambiente, rede e IPC do host. Um bug de kernel, de driver, de terminal ou do backend do sandbox ainda poderia deixá-lo sair. Todo sandbox de processo tem esse limite, e por isso o lugar de código hostil é uma VM descartável.
É seguro rodar com a rede ligada?
É mais seguro do que rodar o agente sem nada, porque as suas chaves e o seu diretório home continuam fora, sem ter como ser enviados. Tudo o que o agente consegue ler, ele consegue enviar, e o ai-jail não tem filtro por domínio. Mascare antes os segredos dentro do projeto. Veja como mascarar.
Ele já foi auditado?
Internamente, antes da 1.0, com os relatórios publicados no repositório. Nunca passou por auditoria de terceiros. O código é aberto sob a GPL 3.0, e relatos privados de vulnerabilidade são bem-vindos.

Coloque seu agente atrás das grades

O ai-jail é um binário único que não precisa de daemon nem de root. Você acrescenta uma palavra na frente do comando que já usa.

terminal
brew tap akitaonrails/tap && brew install ai-jailai-jail claude