Pular para o conteúdo

Segurança

Em fevereiro de 2025, a LayerX Security Research divulgou uma vulnerabilidade crítica de execução remota de código sem interação do usuário (zero-click) no framework de Extensões Desktop (DXT) do Claude da Anthropic. As extensões são executadas sem sandbox, com privilégios totais do sistema, atuando como pontes de execução entre o modelo de linguagem e o sistema operacional local.

Muitas equipes de segurança corporativa agora exigem que ferramentas de codificação com IA sejam executadas apenas dentro de máquinas virtuais dedicadas, contêineres ou ambientes descartáveis — não diretamente em endpoints corporativos.

Este devcontainer atende a esse requisito.

+------------------------------------------------+
| Máquina Host (endpoint corporativo) |
| |
| - Nenhum binário de ferramenta IA instalado |
| - Nenhuma extensão ou plugin de IA |
| - Apenas Docker é necessário |
| |
| +------------------------------------------+ |
| | Contêiner Docker (isolado) | |
| | | |
| | Ferramentas de IA rodam aqui: | |
| | - Claude Code CLI | |
| | - Codex | |
| | | |
| | Sem acesso a: | |
| | x Sistema de arquivos do host | |
| | x Keychain / armazenamento de credenciais| |
| | x Área de transferência do host | |
| | x Interfaces de rede do host | |
| | x Outras aplicações do host | |
| +------------------------------------------+ |
+------------------------------------------------+

Todos os dados residem em volumes nomeados do Docker — não em diretórios do host montados via bind. Um comprometimento dentro do contêiner não pode acessar arquivos na sua máquina host. Consulte Configuração — Persistência de Dados para detalhes sobre volumes.

O contêiner não tem acesso ao macOS Keychain, ao Gerenciador de Credenciais do Windows, perfis de navegador ou ao agente SSH do host. As chaves SSH são injetadas na inicialização via uma variável de ambiente codificada em base64 e existem apenas dentro do contêiner.

Contêineres Docker não compartilham o estado da área de transferência com o host. Dados não podem vazar por copiar/colar.

O contêiner se comunica com o mundo externo em um dos dois modos de autenticação suportados:

  • Modo proxy LiteLLM — HTTPS de saída para seu proxy LiteLLM através do NAT do Docker.
  • Modo OAuth — HTTPS de saída diretamente para a Anthropic através do NAT do Docker.

O contêiner não tem acesso a túneis VPN, interfaces de rede corporativa ou outros serviços no host.

Todo o ambiente pode ser destruído e recriado em segundos. Trate o contêiner como descartável.

Terminal window
docker compose down -v
docker compose pull && docker compose up -d

Este ambiente executa ferramentas de IA como interfaces de linha de comando apenas. Sem aplicações desktop, sem extensões de navegador, sem frameworks DXT. A vulnerabilidade que motivou este modelo de isolamento não se aplica ao uso via CLI dentro de um contêiner.

O docker-compose.yml aplica diversas medidas de defesa em profundidade:

  • Remoção de capabilities — Todas as capabilities do Linux são removidas (cap_drop: ALL), e então apenas o conjunto mínimo é readicionado: CHOWN, DAC_OVERRIDE, FOWNER (para correções de permissão de volume no entrypoint), SETUID/SETGID (para sudo), NET_RAW (para ping/tcpdump) e NET_ADMIN (para ferramentas de captura de pacotes como Wireshark e bettercap).
  • Limites de recursos — CPU (4 núcleos), memória (8 GB) e contagem de PIDs (4096) são limitados via mem_limit, cpus e pids_limit para prevenir ataques de exaustão de recursos.
  • tmpfs para /tmp — O diretório /tmp é montado como um tmpfs de 256 MB, mantendo arquivos temporários em memória e impedindo que persistam na camada gravável do contêiner.
  • Validação TLS ativada por padrãoNODE_TLS_REJECT_UNAUTHORIZED não é definido, então o Node.js valida certificados TLS por padrão. Usuários que precisam aceitar certificados autoassinados (por exemplo, para um proxy interno) podem optar por adicionar NODE_TLS_REJECT_UNAUTHORIZED=0 ao seu arquivo .env.
  • Umask para chave SSH — As chaves privadas SSH são escritas com umask 077, de modo que o arquivo nunca fica legível para todos — mesmo brevemente — entre a criação e a chamada chmod.

O contêiner inclui aproximadamente 80 ferramentas de segurança e teste de penetração pré-instaladas para cenários de teste autorizados. As ferramentas são organizadas por categoria:

CategoriaFerramentas (exemplos)
Análise de redetshark, wireshark, masscan, hping3, bettercap (amd64), netdiscover
Scanners webnikto, sqlmap, dirb, whatweb, sslscan, OWASP ZAP, dalfox, feroxbuster
Senhas e autenticaçãohydra, john, hashcat, medusa, ncrack
Engenharia reversaradare2, Ghidra, gdb, binwalk, strace, ltrace
Reconhecimentosubfinder, amass, httpx, nuclei, gau, waybackurls, recon-ng, spiderfoot
Fuzzing e enumeraçãoffuf, gobuster, SecLists
Cadeia de suprimentos e segredostrufflehog, grype, syft, gitleaks, trivy
Frameworks de exploraçãoMetasploit (amd64), searchsploit (ExploitDB)

Algumas ferramentas (bettercap, Metasploit) estão disponíveis apenas em amd64 devido a restrições de empacotamento upstream. Ferramentas de captura de pacotes (tshark, bettercap) requerem a capability NET_ADMIN, que está incluída no docker-compose.yml padrão.

Para a lista completa, execute claude-self-test dentro do contêiner (a seção 7 verifica todas as ferramentas de segurança).

RequisitoStatus
Ferramentas de IA não instaladas no endpoint hostSim
Executa em VM ou contêiner isoladoSim
Sem acesso a compartilhamentos de arquivos do hostSim
Sem sincronização de área de transferênciaSim
Sem armazenamentos de credenciais compartilhadosSim
Sem split tunneling VPN para redes de produçãoSim
Ambiente é descartávelSim
Sem extensões ou plugins desktopSim
Capabilities do Linux removidas (privilégio mínimo)Sim
Limites de recursos aplicados (CPU/memória/PIDs)Sim
Validação de certificado TLS habilitada por padrãoSim
Serviços internos vinculados apenas ao localhostSim
  1. Não instale ferramentas de codificação com IA na sua máquina host. Use este contêiner em vez disso.
  2. Não adicione bind mounts ao docker-compose.yml. A configuração com volumes nomeados é intencional.
  3. Faça a rotação das chaves SSH usadas dentro do contêiner periodicamente.
  4. Revise o .env antes de compartilhar. Ele contém chaves de API e pode conter chaves privadas SSH.
  5. Atualize periodicamente para obter correções de segurança:
Terminal window
docker compose pull && docker compose up -d