
Attacchi con immagini adversariali contro agenti web vision-linguaggio, dal visual grounding all'esecuzione nel browser
Immagini avversarie dirottano gli agenti web dal visual grounding all'esecuzione nel browser
Wanjing Han, Levi Taiji Li, Mu Zhang, Yue Jiang, Guanhong Tao — University of Utah
WebMirage è un framework di red-teaming per agenti web basati su vision grounding. Genera perturbazioni avversarie localizzate su immagini di pagine web controllate dall'attaccante (ad esempio, una miniatura di prodotto o una foto profilo) che inducono l'agente a selezionare l'elemento dell'attaccante ed eseguire l'azione corrispondente nel browser, attraverso rendering della pagina differenti. L'attacco è formulato end-to-end, dal visual grounding all'esecuzione nel browser, anziché unicamente a livello di inferenza del modello.
Due componenti rendono possibile tutto ciò:
Il framework è valutato contro gli agenti SeeAct e VisualWebArena su sei backbone VLM (LLaVA, MiniCPM-o, Phi-3 Vision e altri). Si veda il paper per la valutazione 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
I modelli di base devono essere configurati manualmente prima di utilizzare questo framework.
Poiché i backbone hanno requisiti di librerie in conflitto tra loro, ciascuno necessita del proprio ambiente e di pesi scaricati localmente.
conda create -n minicpm) e installare le dipendenze.conda create -n llava).transformers in un ambiente dedicato.Phi-3-vision-128k-instruct localmente.Un test minimale esegue l'inferenza sia su screenshot puliti che perturbati e confronta affiancate le selezioni dell'agente.
Nota: Questo test richiede Phi-3 Vision (vedi Prerequisiti §3). Le immagini perturbate fornite sono state ottimizzate per Phi-3; i dati di test per gli altri backbone possono essere generati con gli script di training in
scripts/.
I casi di test pre-generati si trovano in 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
I casi fix_slot testano la variazione dei companion (posizione del target fissa, elementi circostanti variabili); i casi multi_slot testano simultaneamente la variazione dei companion e lo spostamento di posizione.
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
Lo script stampa una tabella di confronto che mostra, per ciascun caso di test, l'elemento selezionato con input pulito rispetto a quello perturbato. Su screenshot puliti l'agente dovrebbe selezionare il candidato più corrispondente; su screenshot perturbati dovrebbe selezionare in modo consistente il candidato controllato dall'attaccante.
Una volta predisposto un ambiente Conda dedicato per ciascun backbone, il flusso di lavoro seguente utilizza LLaVA come esempio.
Gli script fanno riferimento al codice ufficiale di LLaVA dalla vostra home directory (~/):
cd ~
git clone https://github.com/haotian-liu/LLaVA.git
Aprire scripts/LLaVA/train_with_mask.sh e impostare ciascun percorso (pesi del modello, dati di training, template di conversazione, maschera, directory di output) in base alla propria configurazione locale.
bash scripts/LLaVA/train_with_mask.sh
I dati di training si trovano in data/<scenario>/, con screenshot ricomposti e un file di conversazione train_samples.json. Il placeholder del token immagine nel file di conversazione deve corrispondere al backbone di destinazione:
| Backbone | Placeholder |
|---|---|
| MiniCPM-o | (<image>./</image>)\n |
| LLaVA | <image>\n |
| Phi-3 | <|image_1|>\n |
La valutazione end-to-end richiede i framework degli agenti di destinazione.
scripts/seeact/.scripts/visualwebarena/ per gli script di valutazione con entrambe le modalità di osservazione Accessibility Tree e Set-of-Mark.dataflow/DataflowAnalysis.ql è la query CodeQL utilizzata per tracciare quali token di output del modello confluiscono nell'azione del browser eseguita nel codice di post-processing di un agente. Eseguirla sul sorgente dell'agente di destinazione con la CodeQL CLI utilizzando la definizione del pack in dataflow/codeql-pack.yml.