💉 O que é Prompt Injection
Prompt injection é o ataque mais crítico em IA. Consiste em inserir instrucções no contexto que sobrepõem as instrucções originais do sistema, alterando o comportamento do assistente.
📌 Taxonomia de Injection
Dois tipos principais com características diferentes:
- •Direct injection: o próprio usuário tenta manipular via sua mensagem
- •Indirect injection: conteúdo externo (web, e-mail) contém as instrucções maliciosas
- •Stored injection: fatos envenenados no memory.db que afetam futuras respostas
- •Compound injection: combinação de múltiplas técnicas para bypassar defesas
💡 Dica Prática
Direct injection é o mais fácil de detectar — blocklist e contexto consistente são suficientes. Indirect injection via conteúdo externo é o mais perigoso e requer isolamento de conteúdo.
🌐 Indirect Injection via Web e E-mail
O vetor mais insidioso: o usuário pede ao Jarvis para resumir uma página, e a página contém injection. O usuário legítimo não vê o ataque — ele está no HTML da página, em texto branco, ou em metadados.
📌 Técnicas de Indirect Injection
Como atacantes ocultam instrucções em conteúdo:
- •HTML oculto: instrucções em comentários ou elementos invisible (display:none)
- •Text stego: instrucções em texto branco sobre fundo branco
- •Metadata: instrucções em alt tags, títulos de imagens, PDFs
- •E-mail: instrucções no corpo em texto muito pequeno ou unicode homoglyph
💡 Dica Prática
Sempre marque conteúdo externo no prompt: 'O seguinte é conteúdo EXTERNO não-confiável: [conteúdo]'. Isso reduz a probabilidade do LLM tratar o conteúdo como instrucções.
🔍 Técnicas de Detecção
Detecção de injection usa múltiplas heurísticas em conjunto. Nenhuma heurística individual é 100% precisa — a combinação delas eleva o custo do ataque.
📌 Heurísticas de Detecção
Cada heurística captura uma classe de ataques:
- •Keyword scan: 'ignore', 'disregard', 'forget', 'new instructions', 'you are now'
- •Pattern matching: frases que contradizem o SOUL.md ou AGENTS.md
- •Anomaly detection: mudança brusca de tópico na mesma mensagem
- •Intent analysis: a ação pedida é consistente com o contexto da conversa?
- •Source labeling: conteúdo de fonte externa tem peso menor que instrucções do sistema
💡 Dica Prática
Use uma pontuação de risco: cada heurística dispara adiciona pontos. Se a pontuação total passa de um threshold, a mensagem é rejeitada ou enviada para revisão humana.
🛡 safety.py — Implementação
O safety.py é o guardião do INTELECTO. Implementa verificações sequenciais que devem todas passar antes de qualquer mensagem chegar ao Agent.
📌 Pipeline de safety.py
Verificações em ordem de custo crescente:
- •1. blocklist_check(): O(1) lookup em set de keywords proibidas
- •2. injection_scan(): regex patterns contra padrões conhecidos de injection
- •3. path_traversal_check(): normaliza paths e valida contra sandbox permitido
- •4. rate_limit_check(): protege contra abuse por volume
- •5. audit_log(): registra resultado de todas as verificações
💡 Dica Prática
Organize as verificações da mais barata para a mais cara. Blocklist é O(1) — rejeita a maioria dos ataques baratos sem custo. Análise semântica fica no final.
🚫 Blocklist de Comandos Perigosos
A blocklist é a linha de defesa mais simples e mais confiável. Alguns comandos nunca devem ser executados, independente do contexto ou de quem está pedindo.
📌 Categorias de Blocklist
Comandos organizados por categoria de risco:
- •Destrutivo: rm -rf, format, mkfs, dd if=/dev/zero, shred
- •Exfiltração: curl | bash, wget | sh, python -c 'import socket'
- •Escalada de privilégio: sudo su, chmod 777, chown root
- •Rede maliciosa: netcat -e, socat, reverse shells padrão
- •Wipeout: git reset --hard HEAD~100, DROP TABLE, TRUNCATE
💡 Dica Prática
A blocklist deve cobrir variações e aliases. 'rm -rf /', 'rm -r -f /', 'rm --recursive --force /' são o mesmo comando. Normalize antes de comparar.
🗂 Path Traversal Protection
Se o Jarvis tem tools de filesystem, path traversal é um risco real. Um atacante pode pedir 'leia ../../.env' e vazar credenciais. Uma verificação simples previne o ataque inteiro.
📌 Implementação da Proteção
Como verificar paths corretamente:
- •normalize: os.path.abspath(requested_path)
- •compare: normalized.startswith(allowed_sandbox_dir)
- •reject: se não estiver no sandbox, rejeitar e logar tentativa
- •symlinks: os.path.realpath() para resolver links simbólicos antes de verificar
- •whitelist: lista explícita de extensões/diretórios permitidos
💡 Dica Prática
Sempre use os.path.realpath() — não apenas abspath(). Links simbólicos podem apontar para fora do sandbox sem que abspath() detecte.
✅ Resumo do Módulo 3.2
Próximo:
3.3 — Criptografia e Proteção de Segredos