Daremos continuidade ao nosso artigo de Engenharia de Prompt focando no aspecto da segurança, necessário ao desenvolvimento de nossas aplicações.
Engenharia defensiva de prompts
Após a disponibilização de sua aplicação, ela pode ser utilizada por usuários bem ou mal intencionados, que podem tentar explorá-la. Há três tipos principais de ataques de prompt a se defender:
- Extração de prompts: Extrair o prompt do aplicativo, incluindo o prompt do sistema, seja para replicar ou para explorar o aplicativo.
- Jailbreak e injeção de prompts: Fazer com que o modelo execute ações incorretas.
- Extração de informações: Fazer com que o modelo revele seus dados de treinamento ou informações usadas em seu contexto.
Ataques de prompt representam vários riscos para as aplicações. Alguns são mais devastadores do que outros. Alguns exemplos incluem:
- Execução remota de código ou ferramentas: Para aplicações com acesso a ferramentas que as potencializam, criminosos podem invocar a execução não autorizada de códigos ou ferramentas.
- Vazamentos de dados: Criminosos podem extrair informações privadas sobre seu sistema e seus usuários.
- Danos sociais: Modelos de IA ajudam invasores a obter conhecimento e tutoriais sobre atividades perigosas ou criminosas.
- Desinformação: Invasores podem manipular modelos para gerar informações enganosas para apoiar seus interesses.
- Interrupção de serviços: Isso inclui dar acesso a um usuário que não deveria ter aquele acesso.
Prompts proprietários e engenharia reversa de prompts
Quanto mais cuidadosas as empresas são sobre seus prompts, mais interesse é gerado em torno da engenharia reversa de prompts. Engenharia reversa de prompt é o processo de dedução do prompt do sistema usado para um determinado aplicativo. Indivíduos mal intencionados podem usar o prompt vazado de sistema para replicar sua aplicação, ou manipulá-la a fazer ações indesejáveis.
A engenharia reversa de prompt é normalmente feita analisando as saídas da aplicação ou enganando o modelo para repetir todo o seu prompt, o que inclui o prompt do sistema.
Não apenas os prompts do sistema, mas também o contexto pode ser extraído. Informações privadas incluídas no contexto também podem ser reveladas aos usuários.
Jailbreak e injeção de prompt
Realizar “jailbreak” de um modelo significa tentar subverter os recursos de segurança dele.
Injeção de prompt refere-se a um tipo de ataque em que instruções maliciosas são injetadas nos prompts do usuário.
Os ataques de prompt são possíveis precisamente porque os modelos são treinados para seguir as instruções. À medida que os modelos melhoram no cumprimento das instruções, eles também ficam melhores em seguir instruções maliciosas. É difícil para um modelo diferenciar entre o prompt do sistema (que pode pedir ao modelo que atue com responsabilidade) e os prompts do usuário (que podem pedir ao modelo para agir de maneira irresponsável). Ao mesmo tempo, à medida em que a IA é utilizada em atividades com altos valores econômicos, o incentivo econômico para ataques de prompt também aumenta.
Injeção de prompt indireta
A injeção de prompt indireta é uma maneira nova e muito mais poderosa de executar ataques. Em vez de colocar instruções maliciosas diretamente no prompt, os atacantes colocam essas instruções nas ferramentas com as quais o modelo é integrado.
Extração de informações
Um modelo de linguagem é útil precisamente porque pode codificar um grande corpo de conhecimento que os usuários podem acessar por meio de uma interface de conversação.
No entanto, esse uso pode ser explorado para os seguintes fins:
- Roubo de dados: Extração de dados de treinamento para construir um modelo concorrente.
- Violação de privacidade: Extração de informações privadas e sensíveis tanto nos dados de treinamento quanto no contexto usado para o modelo.
- Violação de direitos autorais: Se o modelo for treinado com dados protegidos por direitos autorais, invasores podem fazer com que o modelo forneça informações protegidas por direitos autorais.
É importante lembrar que a extração de dados de treinamento nem sempre leva à extração de dados pessoais e sensíveis. Em muitos casos, os dados extraídos são textos comuns. O risco de extração de dados pessoais e sensíveis pode ser atenuado adicionando-se filtros para bloquear solicitações deste tipo.
Defesas contra ataques de prompt
Em geral, manter uma aplicação segura primeiro exige entender a quais ataques seu sistema é suscetível. Existem benchmarks que ajudam na avaliação de quão robusto é um sistema contra ataques adversários, como o Advbench e Promptrobust.
Muitas organizações têm um “security red team” que apresenta novos ataques para que possam tornar seus sistemas seguros contra eles.
Os aprendizados de “Red Teaming” ajudarão a elaborar os melhores mecanismos de defesa. Em geral, as defesas contra ataques de prompt podem ser implementadas nos níveis de modelo, prompt e sistema. Existem medidas defensivas que você pode implementar, mas se o seu sistema possui a capacidade de fazer coisas impactantes, os riscos de hacks de prompt podem nunca ser completamente eliminados.
Para avaliar a robustez de um sistema contra ataques de prompt, duas métricas importantes são a taxa de violação e a taxa de falsa recusa. A taxa de violação mede a porcentagem de ataques bem-sucedidos de todas as tentativas de ataque. A taxa de falsa recusa mede a frequência com que um modelo recusa um consulta, mesmo quando ela poderia ser respondida com segurança.
Defesa no nível do modelo
Muitos ataques de prompt são possíveis porque o modelo é incapaz de diferenciar entre os prompts do sistema e prompts maliciosos, visto que eles são concatenados em um grande bloco de instruções a serem alimentadas no modelo. Isso significa que muitos ataques podem ser frustrados se o modelo for treinado para seguir melhor os prompts do sistema.
Ao realizar finetuning de um modelo para segurança, é importante treinar o modelo não apenas para reconhecer instruções maliciosas, mas também em gerar respostas seguras para solicitações limítrofes. Uma solicitação limítrofe é aquela que pode invocar, tanto respostas seguras, quanto inseguras.
Defesa no nível de prompt
Você pode criar instruções que são mais robustas aos ataques. Seja explícito sobre o que o modelo não deve fazer. Um truque simples é repetir o prompt do sistema duas vezes, antes e depois do prompt do usuário. Por exemplo, se a instrução do sistema for para resumir um artigo, o prompt final pode ficar assim:
- Sumarize este artigo: {{artigo}} Lembre-se, você está sumarizando o artigo.
Ao usar ferramentas de prompt, inspecione seus modelos de prompt padrão, pois muitos deles podem não ter instruções de segurança.
Defesa no nível do sistema
Seu sistema pode ser projetado para manter você e seus usuários seguros. Uma boa prática, quando possível, é o isolamento. Se o seu sistema envolver execução de código gerado, execute esse código apenas em uma máquina virtual separada da máquina principal do usuário. Este isolamento ajuda a proteger contra código não confiável.
Outra boa prática é não permitir que nenhum comando potencialmente impactante seja executado sem aprovações humanas explícitas.
Para reduzir a chance de sua aplicação falar sobre tópicos para os quais não está preparada, você pode definir tópicos fora de escopo para ela.
Algoritmos mais avançados usam a IA para entender a intenção do usuário analisando toda a conversa, não apenas a entrada atual. Eles podem bloquear solicitações com intenções inadequadas ou direcioná-las a operadores humanos. Use um algoritmo de detecção de anomalia para identificar prompts incomuns.
Você também deve adicionar “guardrails” nas entradas e saídas. No lado da entrada, você pode ter uma lista de palavras-chave para bloquear, padrões de ataque de prompt conhecidos que correspondam às entradas, ou um modelo para detectar solicitações suspeitas. No entanto, entradas que parecem inofensivas ainda podem produzir saídas prejudiciais, por isso também é importante ter guardrails de saída. Por exemplo, um guardrail pode verificar se uma saída contém dados pessoais e sensíveis ou informações tóxicas.
Referências
Huyen, Chip. AI Engineering: Building Applications with Foundation Models
Comments (0)