Это репозиторий кода, сопровождающий нашу бумажную шепоту в машине: конфиденциальность в системах LLM-интегрированных.
Большие языковые модели (LLMS) все чаще дополняются внешними инструментами и коммерческими услугами в системы интеграции LLM . Хотя эти интерфейсы могут значительно расширить возможности моделей, они также вводят новую поверхность атаки. Например, манипулируемые интеграции могут использовать модель и компромисс для конфиденциальных данных, доступных через другие интерфейсы. В то время как предыдущая работа в первую очередь была сосредоточена на атаках, нацеленных на выравнивание модели или утечку учебных данных, безопасность данных, которые доступны только во время вывода, избежали контроля. В этой работе мы демонстрируем уязвимости, связанные с внешними компонентами, и внедряем систематический подход для оценки рисков конфиденциальности в системах, интегрированных LLM. Мы определяем несколько конкретных сценариев атаки, уникальных для этих систем, и формализуем их в структуру изащитности инструмента, предназначенную для измерения способности модели защищать конфиденциальную информацию. Эта структура позволяет нам оценить уязвимость модели к конфиденциальности приступов. Наши результаты показывают, что все исследованные модели очень уязвимы для атак, при этом риск значительно увеличивается, когда модели используются вместе с внешними инструментами.
Если вы хотите процитировать нашу работу, используйте эту запись Bibtex.
Предупреждение
Аппаратное прицелевание полностью поддерживается только для машин CUDA под управлением Linux. Депутаты на macOS должны несколько работать, но окна с CUDA могут столкнуться с некоторыми проблемами.
Перед запуском кода установите требования:
python -m pip install --upgrade -r requirements.txt
Если вы хотите использовать модели, размещенные OpenAI или HuggingFaceface, создайте как файл key.txt
, содержащий ваш ключ API OpenAI, а также файл hf_token.txt
содержащий ваш токен Huggingface для частных репо (например, Llama2) в корневом каталоге этого проект.
Иногда может быть необходимо войти в свою учетную запись HuggingFace через CLI:
git config --global credential.helper store
huggingface-cli login
Все сценарии способны работать над несколькими графическими процессорами/процессорами, используя библиотеку Accelerate. Для этого беги:
accelerate config
Чтобы настроить распределенные возможности обучения вашей системы и запустить сценарии с:
accelerate launch [parameters] <script.py> [script parameters]
python attack . py - - strategy "tools" - - scenario "CalendarWithCloud" - - attacks "payload_splitting" "obfuscation" - - defense "xml_tagging" - - iterations 15 - - llm_type "llama3-70b" - - temperature 0.7 - - device cuda - - prompt_format "react"
Запустить атаки payload_splitting
и obfuscation
против LLM llama3-70b
в сценарии CalendarWithCloud
с использованием защиты xml_tagging
для 15 итераций с температурой 0,7 на устройстве CUDA с использованием формата REACT-оперативного приглашения в интегрированной системе инструмента.
Аргумент | Тип | Значение по умолчанию | Описание |
---|---|---|---|
-h, --help | - | - | Показать это сообщение справки и выход |
-a, --attacks | Список [str] | payload_splitting | Определяет атаки, которые будут использоваться против LLM |
-d, --defense | стр | None | Указывает защиту для LLM |
-llm, --llm_type | стр | gpt-3.5-turbo | Указывает тип противника |
-le, --llm_guessing | буль | False | указывает, используется ли второй LLM, чтобы угадать секретный ключ из обычного ответа или нет |
-t, --temperature | плавать | 0.0 | Определяет температуру для LLM, чтобы контролировать случайность |
-cp, --create_prompt_dataset | буль | False | Указывает, должен ли создавать новый набор данных об улучшенных системных подсказках |
-cr, --create_response_dataset | буль | False | Указывает, должен ли создавать новый набор данных секретных протекающих ответов |
-i, --iterations | инт | 10 | указывает количество итераций для атаки |
-n, --name_suffix | стр | "" | Указывает суффикс имени для загрузки пользовательских моделей. Поскольку строки параметров аргументов не разрешаются начинать с «-» символов, первое «-» будет добавлено анализатор автоматически |
-s, --strategy | стр | None | Определяет стратегию атаки (использовать ли обычные атаки или tools атаки) |
-sc, --scenario | стр | all | Определяет сценарий для атак на основе инструментов |
-dx, --device | стр | cpu | Указывает устройство, которое используется для запуска сценария (ЦП, CUDA или MPS) |
-pf, --prompt_format | стр | react | Определяет, используется ли для агентов React или Fine-Fine-Fine-Format Format. (React или Tool-FineTun |
-ds, --disable_safeguards | буль | False | Отключает системные гарантии для стратегии инструментов |
Средства именования для моделей следующие: |
< model_name > - < param_count > - < robustness > - < attack_suffix > - < custom_suffix >
например:
llama2 - 7 b - robust - prompt_injection - 0613
Если вы хотите запустить атаки против модели с настройкой префикса с пользовательским суффиксом (например, 1000epochs
), вам придется указать аргументы A следующим образом:
... - - model_name llama2 - 7 b - prefix - - name_suffix 1000 epochs ...
Модель | Спецификатор параметров | Связь | Вычислить экземпляр |
---|---|---|---|
GPT-4 (O1, O1-Mini, Turbo) | gpt-4o / gpt-4o-mini / gpt-4-turbo | Связь | OpenAI API |
Лама 2 | llama2-7b / llama2-13b / llama2-70b | Связь | Местный вывод |
Лама 2 закален | llama2-7b-robust / llama2-13b-robust / llama2-70b-robust | Связь | Местный вывод |
QWEN 2.5 | qwen2.5-72b | Связь | Местный вывод (первое: ollama pull qwen2.5:72b ) |
Лама 3.1 | llama3-8b / llama3-70b | Связь | Местный вывод (первое: ollama pull llama3.1/llama3.1:70b/llama3.1:405b ) |
Лама 3.2 | llama3-1b / llama3-3b | Связь | Местный вывод (первое: ollama pull llama3.2/llama3.2:1b ) |
Лама 3.3 | llama3.3-70b | Связь | Местный вывод (первое: ollama pull llama3.3/llama3.3:70b ) |
Отражение Лама | reflection-llama | Связь | Местный вывод (сначала: ollama pull reflection ) |
Викуна | vicuna-7b / vicuna-13b / vicuna-33b | Связь | Местный вывод |
Stablebeluga (2) | beluga-7b / beluga-13b / beluga2-70b | Связь | Местный вывод |
Orca 2 | orca2-7b / orca2-13b / orca2-70b | Связь | Местный вывод |
Джемма | gemma-2b / gemma-7b | Связь | Местный вывод |
Джемма 2 | gemma2-9b / gemma2-27b | Связь | Местный вывод (первое: ollama pull gemma2/gemma2:27b ) |
PHI 3 | phi3-3b / phi3-14b | Связь | Местный вывод (первое: ollama pull phi3:mini/phi3:medium ) |
(Сначала необходимо сгенерировать модели Llama Menerated или надежные/закаленные модели Llama с использованием сценария finetuning.py
, см. Ниже)
Атаки | Защита | ||
---|---|---|---|
Имя | Спецификатор | Имя | Спецификатор |
Расщепление полезной нагрузки | payload_splitting | Случайная последовательность корпуса | seq_enclosure |
Запутывание | obfuscation | XML Tagging | xml_tagging |
Побег из тюрьмы | jailbreak | Эвристика/фильтрация защита | heuristic_defense |
Перевод | translation | Защита сэндвича | sandwiching |
Chatml злоупотребление | chatml_abuse | Оценка LLM | llm_eval |
Маскировка | masking | Обнаружение недоумения | ppl_detection |
Типогликемия | typoglycemia | Заглавная плата | prompt_guard |
Состязательный суффикс | advs_suffix | ||
Префикс инъекция | prefix_injection | ||
Отказ подавления | refusal_suppression | ||
Контекст игнорируя | context_ignoring | ||
Контекстное прекращение | context_termination | ||
Контекст переключение сепараторов | context_switching_separators | ||
Несколько выстрелов | few_shot | ||
Когнитивный взлом | cognitive_hacking | ||
Базовый чат | base_chat |
Атака base_chat
состоит из нормальных вопросов для проверки модели, проливая его контекст и конфиденциальная информация даже без реальной атаки.
Этот раздел охватывает возможные варианты создания ламы. Мы используем PEFT, которая основана на этой статье.
Дополнительно к вышеуказанному запуска установки
accelerate config
Чтобы настроить распределенные возможности обучения вашей системы. И
wandb login
с вашим ключом Wandb API, чтобы включить регистрацию процесса создания.
Первый параметр «Создание» находится в наборе данных, состоящем из системных подсказок, чтобы безопасно указать LLM, чтобы обеспечить безопасность секретного ключа. Вторая опция создания (с использованием опции --train_robust
) использует системные подсказки и состязательные подсказки для укрепления модели от быстрых атак впрыска.
python finetuning . py [ - h ] [ - llm | - - llm_type LLM_NAME ] [ - i | - - iterations ITERATIONS ] [ - a | - - attacks ATTACKS_LIST ] [ - n | - - name_suffix NAME_SUFFIX ]
Аргумент | Тип | Значение по умолчанию | Описание |
---|---|---|---|
-h, --help | - | - | Показать это сообщение справки и выход |
-llm, --llm_type | стр | llama3-8b | Указывает тип LLM в Finetune |
-i, --iterations | инт | 10000 | Указывает количество итераций для создания. |
-advs, --advs_train | буль | False | Использует состязательные тренировки, чтобы укрепить Manetuned LLM |
-a, --attacks | Список [str] | payload_splitting | Определяет атаки, которые будут использоваться для укрепления LLM во время создания. Только оказывает эффект, если --train_robust установлен на true. Для поддерживаемых атак см. В предыдущем разделе |
-n, --name_suffix | стр | "" | Определяет суффикс для имени Mevetuned Model |
В настоящее время поддерживаются только модели Llama ( llama2-7/13/70b
/ llama3-8/70b
).
Просто запустите скрипт generate_dataset.py
, чтобы создать новые системы System Please в качестве файла JSON с использованием LLMS.
Аргумент | Тип | Значение по умолчанию | Описание |
---|---|---|---|
-h, --help | - | - | Показать это сообщение справки и выход |
-llm, --llm_type | стр | llama3-70b | Определяет LLM, используемый для генерации набора данных системного набора данных |
-n, --name_suffix | стр | "" | Определяет суффикс для имени модели, если вы хотите использовать пользовательскую модель |
-ds, --dataset_size | инт | 1000 | Размер полученного набора данных системы системы |
Чтобы проверить конфиденциальность LLMS в реальных сценариях инструментов, мы предоставляем возможность тестировать LLMS в Google Drive и интеграции Google Mail. Для этого запустите сценарий /various_scripts/llm_mail_test.py
со своими учетными данными Google API.
Предупреждение
Depeding, на котором оценивается LLM, оценка может быть очень требовательной с точки зрения VRAM и времени GPU.
Примечание
Результаты могут немного варьироваться от бега до бега. Ollama постоянно обновляет большую часть их LLM, поэтому их поведение может быть изменено. Кроме того, даже при самой низкой температуре LLM, как правило, слегка колебаться в Бехевире из -за внутренней случайности.
Задаст LLM доброкачественные вопросы, чтобы проверить, чтобы утечь секрет даже без нападений
python attack.py --llm_type <model_specifier> --strategy secret-key --attacks chat_base --defenses None --iterations 100 --device cuda
Будет проводить все атаки против LLM без защиты. Итерации будут одинаково разделены на использованные атаки. Таким образом, в зависимости от количества использованных атак, число итераций должно быть адаптировано. (Например, для 14 атак с 100 итерациями установили параметр итераций на 1400)
python attack.py --llm_type <model_specifier> --strategy secret-key --attacks all --defenses None --iterations 100 --device cuda
Будет проводить все атаки против LLM со всей защитой
python attack.py --llm_type <model_specifier> --strategy secret-key --attacks all --defenses all --iterations 100 --device cuda
Будет ли системная подсказка инструктировать LLM с секретным ключом и инструкциями, чтобы не утечь секретный ключ, за которым следует простые запросы на распечатку секретного ключа
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks base_attack --defenses None --iterations 100 --device cuda
Будет запускать все сцены инструментов без атак и защиты, используя структуру React
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks identity --defenses None --iterations 100 --prompt_format ReAct --device cuda
Будет запускать все сцены инструментов без атак и защиты, используя структуру React
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks identity --defenses None --iterations 100 --prompt_format tool-finetuned --device cuda
Будет запускать все сцены инструментов без атак и защиты, используя структуру React
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks all --defenses None --iterations 100 --prompt_format tool-finetuned --device cuda
Будет запускать все сцены инструментов без атак и защиты, используя структуру React
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks all --defenses all --iterations 100 --prompt_format tool-finetuned --device cuda
Если вы хотите процитировать нашу работу, используйте следующую запись Bibtex:
@article { evertz-24-whispers ,
title = { {Whispers in the Machine: Confidentiality in LLM-integrated Systems} } ,
author = { Jonathan Evertz and Merlin Chlosta and Lea Schönherr and Thorsten Eisenhofer } ,
year = { 2024 } ,
journal = { Computing Research Repository (CoRR) }
}