這是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 的桌面環境上對此進行了測試。可能需要一些小的調整。
用法範例: 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}, }