这是我们在机器中窃窃私语的代码存储库:LLM集成系统中的机密性。
大型语言模型(LLM)越来越多地通过外部工具和商业服务来扩展到LLM集成系统中。尽管这些接口可以显着增强模型的功能,但它们也引入了新的攻击表面。例如,操纵的集成可以利用模型并损害通过其他接口访问的敏感数据。虽然先前的工作主要集中在针对模型对齐方式或培训数据泄漏的攻击上,但仅在推断期间可用的数据安全性就避免了审查。在这项工作中,我们演示了与外部组件相关的漏洞,并引入了一种系统的方法来评估LLM集成系统中的机密性风险。我们确定了这些系统独有的几种特定攻击方案,并将其正式化为旨在衡量模型保护敏感信息的能力的工具固定框架。该框架使我们能够评估模型对机密性攻击的脆弱性。我们的发现表明,所有检查的模型都非常容易受到攻击,当模型与外部工具一起使用时,风险大大增加。
如果您想引用我们的作品,请使用此Bibtex条目。
警告
仅针对运行Linux的CUDA机器,硬件插度才得到完全支持。 MacOS上的MPS应该有些可行,但是带有CUDA的Windows可能会遇到一些问题。
在运行代码之前,安装要求:
python -m pip install --upgrade -r requirements.txt
如果要使用OpenAI或HuggingFace托管的模型,请在此处创建key.txt
包含OpenAI API键的键hf_token.txt
项目。
有时,有必要通过CLI登录到您的拥抱面帐户:
git config --global credential.helper store
huggingface-cli login
所有脚本都可以使用加速库在多个GPU/CPU上工作。为此,运行:
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"
将使用防御xml_tagging
在工具集成系统中使用React提示格式在CUDA设备上使用defess xml_tagging进行攻击在CalendarWithCloud
中对LLM LLM llama3-70b
payload_splitting
和obfuscation
。
争论 | 类型 | 默认值 | 描述 |
---|---|---|---|
-h, --help | - | - | 显示此帮助消息和退出 |
-a, --attacks | 列表[Str] | payload_splitting | 指定将针对LLM使用的攻击 |
-d, --defense | str | None | 指定LLM的防御 |
-llm, --llm_type | str | 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 | int | 10 | 指定攻击的迭代次数 |
-n, --name_suffix | str | "" | 指定加载自定义模型的名称后缀。由于不允许参数参数字符串以“ - ”符号开头,因此将自动添加第一个' - ' |
-s, --strategy | str | None | 指定攻击策略(是使用正常攻击还是tools 攻击) |
-sc, --scenario | str | all | 指定基于工具的攻击的方案 |
-dx, --device | str | cpu | 指定用于运行脚本的设备(CPU,CUDA或MPS) |
-pf, --prompt_format | str | react | 指定反应或工具 - 更字母的提示格式用于代理。 (RECT或工具 - 更轻松) |
-ds, --disable_safeguards | 布尔 | False | 禁用系统提示保护工具策略 |
模型的命名惯例如下: |
< model_name > - < param_count > - < robustness > - < attack_suffix > - < custom_suffix >
例如:
llama2 - 7 b - robust - prompt_injection - 0613
如果要使用自定义后缀(例如1000epochs
)对前缀调整模型进行攻击,则必须指定参数:
... - - 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 | 关联 | 本地推论 |
稳定的贝尔加(2) | beluga-7b / beluga-13b / beluga2-70b | 关联 | 本地推论 |
ORCA 2 | orca2-7b / orca2-13b / orca2-70b | 关联 | 本地推论 |
芽 | gemma-2b / gemma-7b | 关联 | 本地推论 |
Gemma 2 | gemma2-9b / gemma2-27b | 关联 | 本地推论(首先: ollama pull gemma2/gemma2:27b ) |
Phi 3 | phi3-3b / phi3-14b | 关联 | 局部推论(第一: ollama pull phi3:mini/phi3:medium ) |
(首先必须使用finetuning.py
脚本生成固定或健壮/硬化的美洲驼模型,请参见下文)
攻击 | 防御 | ||
---|---|---|---|
姓名 | 说明符 | 姓名 | 说明符 |
有效载荷拆分 | payload_splitting | 随机序列外壳 | seq_enclosure |
混淆 | obfuscation | XML标记 | 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确保秘密密钥安全。第二个FINETUNINing选项(使用--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 | str | llama3-8b | 指定LLM到Finetune的类型 |
-i, --iterations | int | 10000 | 指定登录的迭代次数 |
-advs, --advs_train | 布尔 | False | 利用对抗性培训来硬化易于训练的LLM |
-a, --attacks | 列表[Str] | payload_splitting | 指定攻击将在填充过程中用于硬化LLM的攻击。仅当将--train_robust 设置为true时才有效果。有关支持的攻击,请参见上一节 |
-n, --name_suffix | str | "" | 指定固定模型名称的后缀 |
目前,仅支持Llama型号( llama2-7/13/70b
/ llama3-8/70b
)。
只需运行generate_dataset.py
脚本即可创建新的系统提示,作为使用LLMS的JSON文件。
争论 | 类型 | 默认值 | 描述 |
---|---|---|---|
-h, --help | - | - | 显示此帮助消息和退出 |
-llm, --llm_type | str | llama3-70b | 指定用于生成系统提示数据集的LLM |
-n, --name_suffix | str | "" | 如果要使用自定义模型,则指定模型名称的后缀 |
-ds, --dataset_size | int | 1000 | 最终系统提示数据集的大小 |
为了测试LLM在现实世界工具方案中的机密性,我们提供了在Google Drive和Google Mail集成中测试LLM的可能性。为此,使用您的Google API凭据运行/various_scripts/llm_mail_test.py
脚本。
警告
根据评估LLM的评估,就GPU VRAM和时间而言,评估可能非常苛刻。
笔记
结果可能会因跑步而略有不同。 Ollama不断更新其LLM的大部分,因此他们的行为可能会发生变化。而且,即使最低温度LLM的内部随机性,LLM的温度也倾向于在Behvior中略微波动。
也会要求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) }
}