MÓDULO 3.2

🔒 Prompt Injection e Defesas

Anatomia do ataque mais crítico em IA, indirect injection via web e e-mail, técnicas de detecção e a implementação do safety.py.

6
Tópicos
75
Minutos
Avançado
Nível
Técnico
Tipo
1

💉 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.

2

🌐 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.

3

🔍 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.

4

🛡 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.

5

🚫 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.

6

🗂 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

O que é Prompt Injection — 4 tipos: direct, indirect, stored e compound — cada um com diferentes estratégias de defesa
Indirect Injection via Web e E-mail — Conteúdo externo pode conter injection oculta — isolamento e marcação são as defesas
Técnicas de Detecção — Múltiplas heurísticas com scoring combinado — custo do ataque aumenta com cada camada
safety.py — Implementação — Pipeline sequencial de 5 verificações — falha rápida antes de chegar ao LLM
Blocklist de Comandos Perigosos — Comandos destrutivos, exfiltração, escalada e wipeout — bloqueados permanentemente
Path Traversal Protection — Normalização + sandbox check + symlink resolution = proteção completa contra path traversal

Próximo:

3.3 — Criptografia e Proteção de Segredos