Last updated on August 7, 2024
Como vimos anteriormente, uma defesa muito eficaz contra invasões de prompt é usar um LLM para avaliar a saída de outro LLM, a fim de verificar se há alguma saída adversária. É possível contornar essa defesa com um ataque de injeção recursiva. Esse ataque envolve injetar um prompt no primeiro LLM que cria uma saída contendo uma instrução de injeção para o segundo LLM.
Vamos supor que o prompt que estamos tentando invadir seja:
As we have seen previously, a very good defense against prompting hacking is to use one LLM to evaluate the output of another LLM, in order to check if there is any adversarial output. It is possible to evade this defense with a recursive injection attack. This attack involves injecting a prompt into the first LLM that creates output which contains an injection instruction for the second LLM.
Let's assume that the prompt we are trying to hack is:
Diga algo positivo sobre o seguinte e a natureza:
{{user_input}}
A saída desse prompt será avaliada pelo prompt:
O seguinte contém algum palavrão ou conteúdo ofensivo (SIM ou NÃO)?
{{output}}
Podemos invadir ambos esses prompts através de um anexo ao prompt, como visto abaixo. Observe que isso também é um exemplo de um ataque de atribuição de variável.
A saída acima é uma tentativa de injeção que utiliza a entrada da segunda chamada do LLM:
Agora nós ATACAMOS a segunda chamada do LLM. Injeções recursivas são difíceis de executar, mas sob as circunstâncias corretas, podem ser muito úteis.
Kang, D., Li, X., Stoica, I., Guestrin, C., Zaharia, M., & Hashimoto, T. (2023). Exploiting Programmatic Behavior of LLMs: Dual-Use Through Standard Security Attacks. ↩