
Состязательные атаки с использованием изображений на визуально-языковых веб-агентов: от визуальной привязки до выполнения в браузере
Состязательные изображения перехватывают управление веб-агентами — от визуальной привязки до выполнения в браузере
Wanjing Han, Levi Taiji Li, Mu Zhang, Yue Jiang, Guanhong Tao — University of Utah
WebMirage — это фреймворк для red-teaming веб-агентов, опирающихся на визуальную привязку. Он создаёт локализованные состязательные возмущения на изображениях веб-страницы, контролируемых атакующим (например, миниатюра товара или фотография профиля), которые заставляют агента выбрать элемент атакующего и выполнить соответствующее действие в браузере — при различных вариантах отрисовки веб-страницы. Атака формулируется сквозным образом — от визуальной привязки до выполнения в браузере, — а не только на этапе вывода модели.
Работу обеспечивают два компонента:
Фреймворк оценивается на агентах SeeAct и VisualWebArena с шестью базовыми моделями VLM (LLaVA, MiniCPM-o, Phi-3 Vision и другими). Полная оценка приведена в статье.
.
├── 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
Базовые модели должны быть настроены вручную перед использованием этого фреймворка.
Поскольку у базовых моделей конфликтующие требования к библиотекам, каждой из них требуется собственное окружение и локально загруженные веса.
conda create -n minicpm) и установите зависимости.conda create -n llava).transformers в отдельном окружении.Phi-3-vision-128k-instruct локально.Минимальный тест выполняет вывод как на чистых, так и на возмущённых скриншотах и сравнивает выбор агента бок о бок.
Примечание: Этот тест требует Phi-3 Vision (см. Предварительные требования §3). Предоставленные возмущённые изображения были оптимизированы для Phi-3; тестовые данные для других базовых моделей можно сгенерировать с помощью обучающих скриптов в
scripts/.
Предварительно сгенерированные тестовые примеры находятся в 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
Случаи fix_slot проверяют варьирование соседних элементов (позиция цели фиксирована, окружающие элементы меняются); случаи multi_slot проверяют варьирование соседних элементов и смещение позиции одновременно.
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
Скрипт выводит таблицу сравнения, показывающую для каждого тестового случая элемент, выбранный при чистом и при возмущённом входе. На чистых скриншотах агент должен выбрать наиболее подходящего кандидата; на возмущённых скриншотах он должен последовательно выбирать кандидата, контролируемого атакующим.
При наличии отдельного окружения Conda для каждой базовой модели описанный ниже рабочий процесс использует LLaVA в качестве примера.
Скрипты ссылаются на официальный код LLaVA из вашего домашнего каталога (~/):
cd ~
git clone https://github.com/haotian-liu/LLaVA.git
Откройте scripts/LLaVA/train_with_mask.sh и задайте каждый путь (веса модели, обучающие данные, шаблон диалога, маска, выходной каталог) в соответствии с вашей локальной конфигурацией.
bash scripts/LLaVA/train_with_mask.sh
Обучающие данные находятся в data/<scenario>/, вместе с рекомпозированными скриншотами и файлом диалога train_samples.json. Плейсхолдер токена изображения в файле диалога должен соответствовать целевой базовой модели:
| Базовая модель | Плейсхолдер |
|---|---|
| MiniCPM-o | (<image>./</image>)\n |
| LLaVA | <image>\n |
| Phi-3 | <|image_1|>\n |
Сквозная оценка требует наличия целевых фреймворков агентов.
scripts/seeact/.scripts/visualwebarena/ для скриптов оценки с режимами наблюдения Accessibility Tree и Set-of-Mark.dataflow/DataflowAnalysis.ql — это запрос CodeQL, используемый для отслеживания того, какие токены вывода модели попадают в выполняемое действие браузера в коде постобработки агента. Запустите его для исходного кода целевого агента с помощью CodeQL CLI, используя определение пакета в dataflow/codeql-pack.yml.
Все эксперименты на публичных веб-сайтах в статье используют клиентскую подмену ресурсов: состязательные изображения подставляются только в локальном представлении браузера агента, и никакой контент не загружается и не изменяется на каком-либо стороннем сайте. Пожалуйста, используйте этот фреймворк только для защитных исследований.