
Ataques de imágenes adversarias contra agentes web de visión-lenguaje, desde el anclaje visual hasta la ejecución en el navegador
Imágenes Adversarias Secuestran Agentes Web desde el Anclaje Visual hasta la Ejecución en el Navegador
Wanjing Han, Levi Taiji Li, Mu Zhang, Yue Jiang, Guanhong Tao — University of Utah
WebMirage es un framework de red-teaming para agentes web con anclaje visual. Genera perturbaciones adversarias localizadas sobre imágenes de páginas web controladas por el atacante (por ejemplo, una miniatura de producto o una foto de perfil) que provocan que el agente seleccione el elemento del atacante y ejecute la acción de navegador correspondiente, a través de distintas renderizaciones de la página web. El ataque se formula de extremo a extremo, desde el anclaje visual hasta la ejecución en el navegador, en lugar de únicamente en la inferencia del modelo.
Dos componentes hacen posible esto:
El framework se evalúa contra los agentes SeeAct y VisualWebArena en seis backbones VLM (LLaVA, MiniCPM-o, Phi-3 Vision y otros). Consulte el artículo para la evaluación completa.
.
├── src/ # Perturbation optimization, one subdirectory per backbone
│ ├── LLaVA/
│ ├── MiniCPM-o/
│ └── Phi-3-vision/
├── scripts/ # Training / evaluation launch scripts, one subdirectory per backbone
├── dataflow/ # CodeQL query pack for agent dataflow analysis (DataflowAnalysis.ql)
├── data/ # Recomposed training / test screenshots and conversation templates
└── test/ # Pre-generated clean and perturbed samples for quick verification
Los modelos base deben configurarse manualmente antes de usar este framework.
Debido a que los backbones tienen requisitos de librerías en conflicto, cada uno necesita su propio entorno y pesos descargados localmente.
conda create -n minicpm) e instale las dependencias.conda create -n llava).transformers en un entorno dedicado.Phi-3-vision-128k-instruct localmente.Una prueba mínima ejecuta inferencia tanto sobre capturas de pantalla limpias como perturbadas y compara las selecciones del agente lado a lado.
Nota: Esta prueba requiere Phi-3 Vision (véase Requisitos Previos §3). Las imágenes perturbadas proporcionadas fueron optimizadas para Phi-3; los datos de prueba para otros backbones pueden generarse con los scripts de entrenamiento en
scripts/.
Los casos de prueba pregenerados se encuentran en test/:
test/
├── clean_fix_slot/ # Clean screenshots, target in a fixed slot position
├── clean_multi_slot/ # Clean screenshots, target across multiple slot positions
├── perturbed_fix_slot/ # Perturbed screenshots (ε=16/255), target in a fixed slot
├── perturbed_multi_slot/ # Perturbed screenshots (ε=16/255), target across multiple slots
├── conv.json # Conversation data (system prompt, user query, grounding prompt)
└── verify.py # Runs inference on clean vs. perturbed and compares results
Los casos fix_slot prueban la variación de acompañantes (posición del objetivo fija, elementos circundantes variables); los casos multi_slot prueban la variación de acompañantes y el desplazamiento posicional simultáneamente.
conda activate phi3vision
# Fixed slot position
python test/verify.py \
--model-path /path/to/Phi-3-vision-128k-instruct \
--conv-path test/conv.json \
--clean-image test/clean_fix_slot/sample_0.png \
--perturbed-image test/perturbed_fix_slot/sample_0.png
# Varying slot positions
python test/verify.py \
--model-path /path/to/Phi-3-vision-128k-instruct \
--conv-path test/conv.json \
--clean-image test/clean_multi_slot/sample_0.png \
--perturbed-image test/perturbed_multi_slot/sample_0.png
El script imprime una tabla comparativa que muestra, para cada caso de prueba, el elemento seleccionado con entrada limpia frente a la perturbada. En capturas de pantalla limpias, el agente debería seleccionar el candidato que mejor coincide; en capturas de pantalla perturbadas, debería seleccionar consistentemente el candidato controlado por el atacante.
Con un entorno Conda dedicado para cada backbone en su lugar, el flujo de trabajo a continuación usa LLaVA como ejemplo.
Los scripts hacen referencia al código oficial de LLaVA desde su directorio home (~/):
cd ~
git clone https://github.com/haotian-liu/LLaVA.git
Abra scripts/LLaVA/train_with_mask.sh y configure cada ruta (pesos del modelo, datos de entrenamiento, plantilla de conversación, máscara, directorio de salida) para que coincida con su configuración local.
bash scripts/LLaVA/train_with_mask.sh
Los datos de entrenamiento se encuentran en data/<scenario>/, con capturas de pantalla recompuestas y un archivo de conversación train_samples.json. El marcador de posición de token de imagen en el archivo de conversación debe coincidir con el backbone objetivo:
| Backbone | Marcador de posición |
|---|---|
| MiniCPM-o | (<image>./</image>)\n |
| LLaVA | <image>\n |
| Phi-3 | <|image_1|>\n |
La evaluación de extremo a extremo requiere los frameworks de agente objetivo.
scripts/seeact/.scripts/visualwebarena/ para los scripts de evaluación con los modos de observación Accessibility Tree y Set-of-Mark.dataflow/DataflowAnalysis.ql es la consulta CodeQL utilizada para rastrear qué tokens de salida del modelo fluyen hacia la acción de navegador ejecutada en el código de post-procesamiento de un agente. Ejecútela contra el código fuente del agente objetivo con la CodeQL CLI usando la definición del paquete en dataflow/codeql-pack.yml.