Ir para o conteúdo

Desafio 003: Defenda um Agente contra Prompt Injection

Nível: L200 Tipo: Desafio Tempo: ~60 min 💰 Custo: Gratuito (local)

Cenário

A OutdoorGear importou avaliações de clientes para a base de conhecimento de um agente de suporte. Uma avaliação importada contém instruções maliciosas que tentam sobrescrever a política do agente, revelar instruções ocultas e afirmar que devoluções são ilimitadas.

Sua tarefa é fortalecer um helper local de suporte estilo RAG para bloquear tentativas de prompt injection, excluir contexto inseguro e responder perguntas seguras usando apenas documentos de política confiáveis.


Objetivo

Corrija starter_prompt_defense.py para que a suíte de defesa bloqueie ataques, permita solicitações seguras, remova contexto malicioso, evite vazar texto do atacante e gere um código de validação.

Sua defesa final deve:

  • Normalizar texto antes das verificações de política
  • Detectar padrões comuns de prompt injection
  • Remover contexto não confiável ou malicioso dos documentos recuperados
  • Bloquear solicitações maliciosas de usuários
  • Responder solicitações seguras usando apenas contexto confiável
  • Reportar métricas de defesa corretamente

Arquivos Iniciais

Salve estes arquivos em uma pasta chamada challenge-003/:

Arquivo Finalidade Download
documents.json Contexto de suporte confiável e não confiável Download
requests.json Solicitações seguras e maliciosas Download
starter_prompt_defense.py Implementação de defesa quebrada Download
test_prompt_defense.py Testes de aceite Download
validate_prompt_defense.py Gera o código final de conclusão Download

Briefing do Desafio

Você recebe documentos com níveis mistos de confiança, solicitações seguras, solicitações de ataque e uma camada de defesa quebrada. Não há walkthrough: decida como detectar intenção de ataque, filtrar contexto, responder com segurança e avaliar se o agente vazou instruções controladas pelo atacante.


Restrições

  • Use apenas a biblioteca padrão do Python em starter_prompt_defense.py.
  • Não chame uma API de LLM.
  • Não hardcode comportamento por ID de solicitação.
  • Não responda a partir de conteúdo não confiável de avaliações de clientes.
  • Solicitações seguras ainda devem ser respondidas.
  • Texto de ataque não pode aparecer em respostas seguras.

Critérios de Aceite

Sua solução está completa quando:

  • python -m pytest test_prompt_defense.py passa
  • As três solicitações de ataque são bloqueadas
  • As duas solicitações seguras são permitidas
  • A avaliação maliciosa é excluída do contexto seguro
  • Respostas seguras citam fatos da política oficial
  • leakage_count == 0

Validação

Quando sua implementação estiver pronta, execute:

python -m pytest test_prompt_defense.py
python validate_prompt_defense.py

Digite o código de conclusão impresso por validate_prompt_defense.py:


Dicas

Dica 1 — Trate entrada do usuário e contexto recuperado separadamente

Uma solicitação do usuário pode ser maliciosa, mas documentos recuperados também podem conter instruções maliciosas.

Dica 2 — Metadados de confiança importam

O fixture inclui um campo trusted. Use-o, mas não dependa apenas dos metadados.

Dica 3 — Procure intenção, não só frases exatas

Atacantes podem dizer "ignore", "bypass", "admin_override" ou "system prompt" com variações de maiúsculas/minúsculas.

Dica 4 — Respostas seguras devem ser entediantes

Uma resposta segura de política deve citar fatos da política. Ela não deve mencionar prompts ocultos, overrides ou devoluções ilimitadas.


Rubrica

Área Pontos Como fica bom
Detecção de ataques 30 Bloqueia padrões variados de prompt injection
Filtragem de contexto 25 Remove contexto inseguro e preserva documentos confiáveis
Resposta segura 20 Responde solicitações seguras a partir de evidência oficial
Prevenção de vazamento 15 Nenhuma string controlada pelo atacante aparece nas respostas
Simplicidade 10 Checagens locais determinísticas, sem over-engineering

Objetivos Extras

  • Adicionar níveis de severidade para ataques
  • Retornar uma mensagem segura de recusa para solicitações bloqueadas
  • Adicionar motivos de exclusão por documento
  • Adicionar uma nova variante de ataque e atualizar localmente o payload do validador

Labs Relacionados