
Con la ubicuidad de las aplicaciones integradas con LLM, investigar los posibles riesgos de seguridad es crucial. Una de las vulnerabilidades más significativas de estos sistemas es su susceptibilidad a ataques adversarios mediante inyección indirecta de prompts. En este repositorio, mostramos un método mediante el cual un actor malicioso podría generar un trigger universal que le permita controlar las acciones de un agente remoto de navegación web derivado de un LLM. Esperamos que presentar esta información ayude a los profesionales a tomar conciencia de su posible vulnerabilidad e inspire a los investigadores a desarrollar salvaguardas contra ataques de esta variedad.
Después de clonar este repositorio, los siguientes comandos son necesarios para configurar la infraestructura de navegación web de Browser Gym:
conda create -n browser-gym
conda init
conda activate browser-gym
pip install browsergym-core
playwright install chromium
pip install transformers
Los detalles pueden variar según el entorno informático.
Si estás interesado en ejecutar un procedimiento de optimización de trigger universal, tendrás que generar un conjunto de datos de sitios web y objetivos de navegación web. Esto se puede lograr con los comandos proporcionados por el archivo src/actions/mask_dataset.py. También necesitarás crear algunas claves de API y almacenarlas en un entorno seguro.
pip install python-dotenv y luego touch .envOPENAI_API_KEY=<key>
GOOGLE_API_KEY=<key>
GOOGLE_ENGINE_NAME=<name>
GOOGLE_CX=<engine ID>
python -m src.dataset.actions.make_dataset get_webs hasta que tengas un número adecuado de archivos json de sitios web en tu carpeta de datos.python -m src.dataset.actions.make_dataset set_goals para filtrar los json de los sitios web que están bloqueados, reequilibrar las clases de sitios y enviar un trabajo por lotes a la API de OpenAI para generar objetos de objetivo para los sitios web restantes. Debes añadir la bandera --n_batch_splits <int> si tienes más de 10 000 json de sitios web.set_goals, tus IDs de lote se imprimirán en la terminal. Ejecuta python -m src.dataset.actions.make_dataset get_goals --batch_ids <batch ID 1> <batch ID 2> ... para escribir los objetos de objetivo en sus correspondientes json de sitios web si los trabajos por lotes están completos. Un trabajo por lotes puede tardar 24 horas en completarse en OpenAI, por lo que es posible que tengas que esperar un día antes de que este comando se ejecute correctamente.La Demo 1 muestra cómo un atacante podría alojar un sitio web con malware incrustado en un enlace y obligar a un agente de navegación web a hacer clic en ese enlace cada vez. Un json de sitio web y un trigger para controlar la salida del agente web se almacenan en las carpetas data/ y triggers/, respectivamente.
Ejecutar python -m src.attack.actions.run_demo lanzará un navegador con una página web de muestra y una interfaz de chat de LLM. El chat de LLM te pedirá que proporciones un objetivo para el agente de navegación web. Escribe una tarea como "Busca un vuelo a Chicago" en la ventana. El agente completará la tarea en la pestaña con la página web de muestra, como se espera.
Ejecuta python -m src.attack.actions.run_demo --trigger_json triggers/zzz_travel_ad_demo_1_trigger_uni_secondary.json para atacar al agente de navegación web en esta tarea. Se lanzará un navegador con la página web de muestra y la interfaz de chat de LLM como antes, y como antes, escribe algún objetivo en la ventana de chat. El proceso será idéntico al del control, con la única diferencia de que el trigger del archivo zzz_travel_ad_demo_1_trigger_uni_secondary.json se insertará en un enlace oculto del sitio web. Deberías ver que esta vez el agente web ignora la instrucción que proporcionaste y hace clic en el anuncio del pie de página.
Para optimizar un trigger adversario que controle la salida de un agente de navegación web en un sitio web de tu elección, puedes usar el archivo find_narrow_trigger.py. Una vez que hayas generado un json de sitio web con la utilidad de creación de conjuntos de datos, puedes insertar el texto '{optim_str}' en algún lugar del ax tree. Esto le indica a la librería nanogcg que usaremos que deseas insertar el trigger en ese lugar del sitio web.
pip install nanogcgpython -m src.attack.actions.find_narrow_trigger. Las opciones y banderas de esta utilidad de línea de comandos son las siguientes:-h, --help show this help message and exit
--json JSON File and path for the JSON file to find a trigger for.
--target TARGET The desired output when triggered.
--device DEVICE Device to run the model on.
--trigger_length TRIGGER_LENGTH
--include_target, --no-include_target
--loss_fn {cw,mm,ce}
--search_width SEARCH_WIDTH
--top_k TOP_K
--model {mistral-7B,mistral-24B,llama2,llama3}
The model to use for generation.
--dtype DTYPE Data type to use for the model.
Para que el ataque funcione usando nuestro entorno, el objetivo de tu optimización debe ser una función en el espacio de acciones de navegación web de Browser Gym. Consulta el archivo action_space.txt.
El trigger optimizado se guardará en un archivo json en la carpeta triggers/, con el nombre del archivo coincidiendo con el json de datos del sitio web correspondiente. Puedes usar este trigger para ejecutar tu propia demo con la utilidad python -m src.attack.actions.run_demo y las banderas adecuadas.