
Segurança para a era moderna da IA: defenda-se contra agentes de IA maliciosos e pacotes npm mal-intencionados
Segurança para a era moderna da IA.
Nenhuma camada de segurança é perfeita. airgap ainda é experimental. Contribuições são bem-vindas!
airgap inicia um programa alvo (por exemplo, um agente de codificação de IA) dentro de seu próprio namespace de montagem e substitui transparentemente os segredos por versões ocultadas. Um programa executando sob airgap ainda pode ler e modificar arquivos protegidos, mas nunca vê os segredos reais. Até agora, airgap protege:
.env e .env.* (ex.: .env.local, .env.production) — identificados pelo nome do arquivo. Os valores são ocultados para <redacted value> enquanto as chaves permanecem visíveis; edições, adições e exclusões são persistidas de volta ao arquivo real.BEGIN/END são mantidos..npmrc — identificado pelo nome do arquivo. Os valores de token de autenticação e senha (_authToken, _auth, _password, incluindo a forma por registro //registry/:_authToken) são ocultados para <redacted value>, enquanto registries, escopos, email e comentários permanecem visíveis; edições são persistidas de volta ao arquivo real.Mais tipos de segredos serão adicionados.
Esses são ocultados em qualquer lugar sob o diretório de trabalho ou seu diretório pessoal ($HOME) — portanto, tanto o .env de um projeto quanto as chaves ~/.ssh são cobertos. A correspondência é dinâmica: arquivos criados após a inicialização também são capturados.
Compare o conteúdo do .env com e sem usar airgap:
$ cat .env
API_KEY=sk-live-9f8c2a1b4e7d
DB_PASSWORD=hunter2
$ airgap cat .env
API_KEY=<redacted value>
DB_PASSWORD=<redacted value>
Com um agente de IA:
$ airgap claude
show me ./test/fixtures/.env contents
Read 1 file
Here's the file:
DATABASE_URL="<redacted value>"
API_KEY="<redacted value>"
AWS_SECRET_ACCESS_KEY="<redacted value>"
DEBUG="<redacted value>"
...
Uma camada adicional defende contra pacotes maliciosos: airgap solicita sua permissão quando arquivos inesperados estão sendo acessados — por exemplo, por um script malicioso de instalação do npm.
Quando o portão está ativo, o airgap pergunta se você permite ou rejeita a primeira leitura de cada novo arquivo. Aprovar um arquivo concede apenas esse arquivo; as decisões duram durante a execução. Cada gerenciador de pacotes vem com uma lista de arquivos pré-aprovados.
Por exemplo, instalando um pacote malicioso cujo script postinstall tenta ler suas chaves SSH e .env:
$ airgap npm install
...
airgap: npm wants to read the file /home/you/.ssh/id_rsa — allow? [y/N] n
airgap: npm wants to read the file /home/you/.env — allow? [y/N] n
Responda n para rejeitar o acesso.
airgap depende de namespaces de montagem e uma sobreposição FUSE, que são recursos do Linux.cargo install airgap
airgap <program> [args...]
airgap executa <programa> com [args...], passando argv, o ambiente e o diretório de trabalho inalterados. Quando <programa> sai, airgap sai com o mesmo código.
Para sempre executar seu agente de IA sob airgap, crie um alias na configuração do seu shell (~/.bashrc, ~/.zshrc, ...):
alias claude="airgap claude"
alias opencode="airgap opencode"
Agora claude (ou opencode) é executado transparentemente dentro do airgap.
Execute seu gerenciador de pacotes sob airgap para se proteger contra scripts de instalação maliciosos. Ou crie um alias na configuração do seu shell:
alias npm="airgap npm"
Se você quiser relatar uma preocupação de segurança ou fazer uma pergunta, envie um e-mail para [email protected].