Mejores prácticas para evitar ataques de inyección inmediata - AWS Orientación prescriptiva

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Mejores prácticas para evitar ataques de inyección inmediata

Las siguientes barreras y mejores prácticas se probaron en una aplicación RAG que utilizaba la tecnología de Anthropic Claude como modelo demostrativo. Las sugerencias son muy aplicables a la familia de modelos Claude, pero también se pueden transferir a otros modelos LLM ajenos a Claude, a la espera de modificaciones específicas del modelo (como la eliminación de las etiquetas XML y el uso de diferentes etiquetas de atribución de diálogos).

<thinking><answer>Uso y etiquetas

Una adición útil a las plantillas RAG básicas son <thinking> las <answer> etiquetas. <thinking>las etiquetas permiten al modelo mostrar su trabajo y presentar cualquier extracto relevante. <answer>las etiquetas contienen la respuesta que se devolverá al usuario. Empíricamente, el uso de estas dos etiquetas mejora la precisión cuando el modelo responde a preguntas complejas y matizadas que requieren reunir varias fuentes de información.

Utilice barandas

Proteger una aplicación con tecnología LLM requiere barreras de protección específicas para reconocer y ayudar a defenderse de los ataques comunes que se describieron anteriormente. Cuando diseñamos las barreras de seguridad de esta guía, nuestro enfoque consistía en obtener el máximo beneficio con la menor cantidad de fichas introducidas en la plantilla. Como la mayoría de los proveedores de modelos cobran por token de entrada, las barandillas que tienen menos fichas son rentables. Además, se ha demostrado que las plantillas sobrediseñadas reducen la precisión.

Envuelva las instrucciones en un solo par de etiquetas secuenciales saladas

Algunos LLM siguen una estructura de plantillas en la que la información se incluye en etiquetas XML para ayudar a guiar al LLM hacia ciertos recursos, como el historial de conversaciones o los documentos recuperados. Los ataques de suplantación de etiquetas tratan de aprovechar esta estructura agrupando sus instrucciones maliciosas en etiquetas comunes y haciendo creer al modelo que la instrucción formaba parte de su plantilla original. Las etiquetas saladas evitan la falsificación de etiquetas añadiendo una secuencia alfanumérica específica de la sesión a cada etiqueta XML del formulario. <tagname-abcde12345> Una instrucción adicional ordena al LLM que solo considere las instrucciones que estén dentro de estas etiquetas.

Un problema con este enfoque es que si el modelo usa etiquetas en su respuesta, ya sea de forma esperada o inesperada, la secuencia segmentada también se agrega a la etiqueta devuelta. Ahora que el usuario conoce esta secuencia específica de la sesión, puede realizar la suplantación de etiquetas, posiblemente con mayor eficacia gracias a la instrucción que ordena al LLM tener en cuenta las instrucciones etiquetadas con sal. Para evitar este riesgo, agrupamos todas las instrucciones en una sola sección etiquetada de la plantilla y utilizamos una etiqueta que contenga únicamente la secuencia de salados (por ejemplo,). <abcde12345> A continuación, podemos indicar al modelo que solo tenga en cuenta las instrucciones de esta sesión etiquetada. Descubrimos que este enfoque impedía que el modelo revelara su secuencia fragmentada y ayudaba a defenderse de la suplantación de etiquetas y otros ataques que introducían o intentaban aumentar las instrucciones de las plantillas.

Enseñe al LLM a detectar ataques proporcionándole instrucciones específicas

También incluimos un conjunto de instrucciones que explican los patrones de ataque más comunes, para enseñarle al LLM cómo detectar los ataques. Las instrucciones se centran en la consulta introducida por el usuario. Indican al LLM que identifique la presencia de patrones de ataque clave y que devuelva «Se ha detectado un ataque rápido» si descubre un patrón. La presencia de estas instrucciones nos permite dar al LLM un atajo para hacer frente a los ataques más comunes. Este atajo es relevante cuando la plantilla utiliza <thinking> y <answer> etiqueta, ya que el LLM suele analizar las instrucciones maliciosas de forma repetitiva y con un nivel de detalle excesivo, lo que, en última instancia, puede conducir a su cumplimiento (como se demuestra en las comparaciones de la siguiente sección).