
Ataques de imagem adversariais em agentes web de visão-linguagem, do grounding visual à execução no navegador
Imagens Adversariais Sequestram Agentes Web do Visual Grounding à Execução no Navegador
Wanjing Han, Levi Taiji Li, Mu Zhang, Yue Jiang, Guanhong Tao — University of Utah
WebMirage é um framework de red-teaming para agentes web baseados em visão. Ele cria perturbações adversariais localizadas em imagens de páginas web controladas pelo atacante (por exemplo, uma miniatura de produto ou uma foto de perfil) que fazem o agente selecionar o elemento do atacante e executar a ação de navegador correspondente, em diferentes renderizações da página web. O ataque é formulado de ponta a ponta, do visual grounding à execução no navegador, em vez de apenas na inferência do modelo.
Dois componentes fazem isso funcionar:
O framework é avaliado contra agentes SeeAct e VisualWebArena em seis backbones VLM (LLaVA, MiniCPM-o, Phi-3 Vision e outros). Consulte o artigo para a avaliação 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
Os modelos base devem ser configurados manualmente antes de usar este framework.
Como os backbones têm requisitos de bibliotecas conflitantes, cada um precisa de seu próprio ambiente e pesos baixados localmente.
conda create -n minicpm) e instale as dependências.conda create -n llava).transformers em um ambiente dedicado.Phi-3-vision-128k-instruct localmente.Um teste mínimo executa inferência em capturas de tela limpas e perturbadas e compara as seleções do agente lado a lado.
Nota: Este teste requer Phi-3 Vision (veja Pré-requisitos §3). As imagens perturbadas fornecidas foram otimizadas para Phi-3; dados de teste para outros backbones podem ser gerados com os scripts de treinamento em
scripts/.
Casos de teste pré-gerados estão localizados em 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
Os casos fix_slot testam variação de companheiros (posição do alvo fixa, elementos ao redor variam); os casos multi_slot testam variação de companheiros e deslocamento posicional simultaneamente.
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
O script imprime uma tabela de comparação mostrando, para cada caso de teste, o elemento selecionado com entrada limpa vs. perturbada. Em capturas de tela limpas, o agente deve selecionar o candidato com melhor correspondência; em capturas de tela perturbadas, ele deve selecionar consistentemente o candidato controlado pelo atacante.
Com um ambiente Conda dedicado para cada backbone configurado, o fluxo de trabalho abaixo usa LLaVA como exemplo.
Os scripts referenciam o código oficial do LLaVA a partir do seu diretório home (~/):
cd ~
git clone https://github.com/haotian-liu/LLaVA.git
Abra scripts/LLaVA/train_with_mask.sh e defina cada caminho (pesos do modelo, dados de treinamento, template de conversa, máscara, diretório de saída) para corresponder à sua configuração local.
bash scripts/LLaVA/train_with_mask.sh
Os dados de treinamento ficam em data/<scenario>/, com capturas de tela recombinadas e um arquivo de conversa train_samples.json. O placeholder de token de imagem no arquivo de conversa deve corresponder ao backbone alvo:
| Backbone | Placeholder |
|---|---|
| MiniCPM-o | (<image>./</image>)\n |
| LLaVA | <image>\n |
| Phi-3 | <|image_1|>\n |
A avaliação de ponta a ponta requer os frameworks de agente alvo.
scripts/seeact/.scripts/visualwebarena/ para scripts de avaliação com os modos de observação Accessibility Tree e Set-of-Mark.dataflow/DataflowAnalysis.ql é a consulta CodeQL usada para rastrear quais tokens de saída do modelo fluem para a ação de navegador executada no código de pós-processamento de um agente. Execute-a contra o código-fonte do agente alvo com a CodeQL CLI usando a definição de pacote em dataflow/codeql-pack.yml.
Todos os experimentos em sites públicos no artigo usam substituição de ativos do lado do cliente: imagens adversariais são substituídas apenas na visualização local do navegador do agente, e nenhum conteúdo é enviado ou modificado em qualquer site de terceiros. Use este framework apenas para pesquisa defensiva.