这是imprompter
的代码库。它提供了重现和测试本文中提出的攻击的基本组件。 您也可以在此基础上创建自己的攻击。
截屏视频展示了攻击者如何使用我们的对抗性提示在现实世界的 LLM 产品 (Mistral LeChat) 中窃取用户的 PII:
更多视频演示可以在我们的网站上找到。同时,非常感谢《连线》杂志的马特·伯吉斯和西蒙·威利森撰写了涵盖该项目的精彩故事(《连线》、西蒙的博客)!
使用pip install .
或pdm install
(pdm)。我们建议使用虚拟环境(例如conda
和pdm venv
)。
对于GLM4-9b
和Mistral-Nemo-12B
需要 48GB VRAM GPU。对于Llama3.1-70b
需要 3x 80GB VRAM。
在运行算法之前,有两个配置文件需要注意
./configs/model_path_config.json
定义了huggingface 模型在系统上的路径。您很可能需要相应地修改它。
./configs/device_map_config.json
配置层映射以在多 GPU 上加载模型。我们展示了在 3 个 Nvidia A100 80G GPU 上加载 LLama-3.1-70B 的配置。您可能需要根据您的计算环境进行相应调整。
请遵循示例执行脚本,例如./scripts/T*.sh
。每个论点的解释可以在我们论文的第 4 节中找到。
优化程序将在.pkl
文件中生成结果并在./results
文件夹中记录。 pickle 文件在执行过程中更新每一步,并始终存储当前前 100 个对抗性提示(损失最低)。它的结构为最小堆,其中顶部是损失最低的提示。堆的每个元素都是(<loss>, <adversarial prompt in string>, <optimization iteration>, <adversarial prompt in tokens>)
的元组。您始终可以通过将--start_from_file <path_to_pickle>
参数添加到其原始执行脚本来从现有的 pickle 文件重新启动。
评估是通过evaluation.ipynb
完成的。按照详细说明进行测试数据集生成、指标计算等。
一种特殊情况是 PII prec/recall 指标。它们是使用pii_metric.py
独立计算的。请注意, --verbose
提供了每个对话条目的完整 PII 详细信息以供调试,并且当从 Web 上的真实产品获取结果时,应添加--web
。
使用示例(非网络结果,即本地测试):
python pii_metric.py --data_path datasets/testing/pii_conversations_rest25_gt.json --pred_path evaluations/local_evaluations/T11.json
使用示例(网络结果,即真实产品测试):
python pii_metric.py --data_path datasets/testing/pii_conversations_rest25_gt.json --pred_path evaluations/product_evaluations/N6_lechat.json --web --verbose
我们使用 Selenium 来自动化实际产品(Mistral LeChat 和 ChatGLM)的测试过程。我们在browser_automation
目录中提供代码。请注意,我们仅在 Windows 10 和 11 的桌面环境上对此进行了测试。它应该也可以在 Linux/MacOS 上运行,但不能保证。可能需要一些小的调整。
用法示例: python browser_automation/main.py --target chatglm --browser chrome --output_dir test --dataset datasets/pii_conversations_rest25_gt.json --prompt_pkl results/T12.pkl --prompt_idx 1
--target
指定产品,目前我们支持chatglm
和mistral
两个选项。
--browser
定义要使用的浏览器,您应该使用chrome
或edge
。
--dataset
指向要测试的对话数据集
--prompt_pkl
引用从中读取提示的 pkl 文件, --prompt_idx
定义要从 pkl 中使用的提示的有序索引。或者,可以直接在main.py
中定义提示,而不提供这两个选项。
我们提供所有脚本( ./scripts
)和数据集( ./datasets
)来获取我们在论文中呈现的提示(T1-T12)。此外,我们还为每个提示提供 pkl 结果文件( ./results
),只要我们仍然保留副本以及通过evaluation.ipynb
获得的评估结果( ./evaluations
)。请注意,对于 PII 渗透攻击,训练和测试数据集包含真实世界的 PII。尽管它们是从公共 WildChat 数据集中获得的,但出于隐私考虑,我们决定不直接公开它们。我们在./datasets/testing/pii_conversations_rest25_gt_example.json
中提供了这些数据集的单个条目子集供您参考。请联系我们索取这两个数据集的完整版本。
我们分别于 2024 年 9 月 9 日和 2024 年 9 月 18 日向 Mistral 和 ChatGLM 团队进行了披露。 Mistral 安全团队成员迅速做出响应,并承认该漏洞为中等严重性问题。他们于 2024 年 9 月 13 日通过禁用外部图像的 Markdown 渲染来修复数据泄露问题(在 Mistral 变更日志中找到确认)。我们确认修复有效。 ChatGLM团队通过各种渠道多次沟通后,于2024年10月18日回复我们,表示已经开始着手处理。
如果您发现这项工作有价值,请考虑引用我们的论文。
@misc{fu2024impromptertrickingllmagents, title={Imprompter:欺骗LLM代理不当使用工具}, 作者={Xiaohan Fu、Shuheng Li、Zihan Wang、Yihao Liu、Rajesh K. Gupta、Taylor Berg-Kirkpatrick 和 Earlence Fernandes}, 年={2024}, eprint={2410.14923}, archivePrefix={arXiv}, PrimaryClass={cs.CR}, 网址={https://arxiv.org/abs/2410.14923}, }