
С повсеместным распространением приложений, интегрированных с LLM, исследование потенциальных рисков безопасности имеет решающее значение. Одна из наиболее значимых уязвимостей таких систем — подверженность враждебным атакам через непрямую инъекцию промптов. В этом репозитории мы показываем метод, с помощью которого злоумышленник может создать универсальный триггер, позволяющий управлять действиями удалённого веб-агента навигации на основе LLM. Мы надеемся, что представленная информация поможет практикам осознать свою потенциальную уязвимость и вдохновит исследователей на разработку защитных мер против атак такого рода.
После клонирования этого репозитория для настройки инфраструктуры веб-навигации из Browser Gym потребуется выполнить следующие команды:
conda create -n browser-gym
conda init
conda activate browser-gym
pip install browsergym-core
playwright install chromium
pip install transformers
Детали могут различаться в зависимости от вычислительного окружения.
Если вы заинтересованы в запуске процедуры оптимизации универсального триггера, вам потребуется сгенерировать набор данных веб-сайтов и целей веб-навигации. Это можно сделать с помощью команд, предоставляемых файлом src/actions/mask_dataset.py. Также вам нужно будет создать некоторые API-ключи и хранить их в безопасном окружении.
pip install python-dotenv, а затем 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, пока в вашей папке data не появится достаточное количество json-файлов веб-сайтов.python -m src.dataset.actions.make_dataset set_goals, чтобы отфильтровать json-файлы для заблокированных веб-сайтов, сбалансировать классы сайтов и отправить пакетное задание в OpenAI API для генерации объектов целей для оставшихся веб-сайтов. Если у вас более 10 000 json-файлов веб-сайтов, следует добавить флаг --n_batch_splits <int>.set_goals идентификаторы пакетов будут выведены в терминал. Выполните python -m src.dataset.actions.make_dataset get_goals --batch_ids <batch ID 1> <batch ID 2> ..., чтобы записать объекты целей в соответствующие json-файлы веб-сайтов, если пакетные задания завершены. Пакетное задание может выполняться до 24 часов, поэтому, возможно, придётся подождать день, прежде чем эта команда выполнится успешно.Демонстрация №1 показывает, как злоумышленник может разместить веб-сайт с вредоносным ПО, встроенным в ссылку, и заставить веб-агента навигации каждый раз кликать по этой ссылке. Json веб-сайта и триггер для управления выходными данными веб-агента хранятся в папках data/ и triggers/ соответственно.
Запуск python -m src.attack.actions.run_demo откроет браузер с примером веб-страницы и интерфейсом LLM-чата. LLM-чат попросит вас указать цель для веб-агента навигации. Введите в окне задачу, например «Search for a flight to Chicago». Агент выполнит задачу на вкладке с примером веб-страницы, как и ожидалось.
Выполните python -m src.attack.actions.run_demo --trigger_json triggers/zzz_travel_ad_demo_1_trigger_uni_secondary.json, чтобы атаковать веб-агента навигации в этой задаче. Браузер будет запущен с примером веб-страницы и интерфейсом LLM-чата, как и раньше, и, как и раньше, пожалуйста, введите какую-либо цель в окне чата. Процесс будет идентичен контрольному, с единственным отличием: триггер из файла zzz_travel_ad_demo_1_trigger_uni_secondary.json будет вставлен в скрытую ссылку на веб-сайте. Вы должны увидеть, что на этот раз веб-агент игнорирует указанную вами инструкцию и кликает по рекламному объявлению в нижнем колонтитуле!
Чтобы оптимизировать враждебный триггер для управления выходными данными веб-агента навигации на выбранном вами веб-сайте, вы можете воспользоваться файлом find_narrow_trigger.py. После того как вы сгенерировали json веб-сайта с помощью утилиты создания набора данных, вы можете вставить текст '{optim_str}' в какое-либо место в ax tree. Это сообщает библиотеке nanogcg, которую мы будем использовать, что вы хотите вставить триггер в этом месте веб-сайта.
pip install nanogcgpython -m src.attack.actions.find_narrow_trigger. Параметры и флаги этой утилиты командной строки приведены ниже:-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.
Чтобы атака работала в нашем окружении, целью вашей оптимизации должна быть функция в пространстве действий веб-навигации Browser Gym. Обратитесь к файлу action_space.txt.
Оптимизированный триггер будет сохранён в json-файле в папке triggers/, причём имя файла будет соответствовать соответствующему json данных веб-сайта. Вы можете использовать этот триггер для запуска собственной демонстрации с помощью утилиты python -m src.attack.actions.run_demo с соответствующими флагами.