Glossário · IA em testes
Prompt injection
Também chamado de: injeção de prompt, prompt injection attack, ataque de prompt injection, indirect prompt injection
Definição
Ataque em que um texto fornecido a um LLM, diretamente pelo usuário ou escondido em conteúdo que ele lê, sobrepõe as instruções do desenvolvedor e muda seu comportamento.
A prompt injection (injeção de prompt) explora o fato de que um modelo de linguagem recebe suas instruções e seus dados como um único fluxo de texto e não consegue distingui-los de forma confiável. Se um texto não confiável diz “ignore suas instruções anteriores e faça X”, o modelo pode obedecer. Ela aparece em primeiro lugar (LLM01) no Top 10 da OWASP para aplicações com LLM e, atualmente, não existe uma correção completa, apenas camadas de mitigação.
Direta e indireta
- Direta. O próprio usuário digita o ataque no chat: pede ao assistente que revele o system prompt, abandone suas restrições ou produza conteúdo que deveria recusar.
- Indireta. O ataque se esconde em conteúdo que o modelo processa em nome de outra pessoa: uma página web que ele navega, um e-mail que ele resume, um PDF em um índice de busca (retrieval), um comentário no código ou a saída de uma ferramenta. O usuário nunca vê o ataque. Essa é a forma mais perigosa quando o modelo pode chamar ferramentas, enviar mensagens ou ler dados privados.
O que um tester verifica
Com autorização, monte um conjunto de casos adversariais e rode-os como parte da suíte de avaliação. Um caso indireto, seguro e ilustrativo, para um assistente que resume e-mails:
Subject: Q3 invoice
Hi, the invoice is attached.
[passage omitted]
O teste passa se o resumo descreve um e-mail de fatura e não repete a instrução. Depois, investigue mais a fundo:
- É possível extrair o system prompt ou dados de outros usuários?
- Um texto injetado consegue disparar chamadas de ferramentas: enviar e-mail, alterar registros, buscar URLs que vazam dados na query string?
- As instruções sobrevivem dentro de documentos, imagens com texto ou respostas de ferramentas?
- A aplicação renderiza a saída do modelo como HTML ou Markdown que carrega imagens ou links externos (uma forma comum de exfiltrar dados)?
Mitigações a verificar
Privilégio mínimo para cada ferramenta que o modelo pode chamar; confirmação humana antes de ações com consequências; tratar a saída do modelo como entrada não confiável (fazer encoding, validar e nunca repassá-la direto para um shell ou uma query); separar e rotular conteúdo não confiável nos prompts; e filtros de entrada ou de saída. Filtros e um “por favor, ignore instruções injetadas” no system prompt reduzem a taxa de sucesso, mas podem ser contornados, então o objetivo real é limitar o que uma injeção bem-sucedida consegue fazer.
Como o comportamento do modelo é não determinístico, rode cada caso adversarial várias vezes e reporte a taxa, e não um único resultado aprovado.