USENIX Sec'25 | LLM提示詞注入攻擊如何防?UC伯克利、Meta最新研究來了
本文介紹對 LLM 提示詞注入攻擊(prompt injection)的通用防御框架。首篇論文已被安全頂會 USENIX Security 2025 接收,第一作者陳思哲是 UC Berkeley 計算機系博士生,Meta FAIR 訪問研究員,研究興趣為真實場景下的 AI 安全。他的導師是 David Wagner (UCB), 郭川 (Meta), Nicholas Carlini (Google)。
一作主頁:https://sizhe-chen.github.io
項目報告 slides:https://drive.google.com/file/d/1baUbgFMILhPWBeGrm67XXy_H-jO7raRa/view?usp=sharing
- 論文地址:https://arxiv.org/pdf/2402.06363
- 項目主頁:https://sizhe-chen.github.io/StruQ-Website
- 代碼倉庫:https://github.com/Sizhe-Chen/StruQ
- 論文地址:https://arxiv.org/pdf/2410.05451
- 項目主頁:https://sizhe-chen.github.io/SecAlign-Website
- 代碼倉庫:https://github.com/facebookresearch/SecAlign
提示詞注入攻擊:背景
LLM 強大的語言能力,使其被廣泛部署于 LLM 應用系統(LLM-integrated applications)中。此時,LLM 需要訪問外部數據(如文件,網頁,API 返回值)來完成任務。在這個交互場景下,有以下三方:
- 指令(可信的):來自 LLM 應用系統開發者
- 模型(可信的):來自開發者或 API 供應方
- 數據(不可信的):來自外部或第三方
系統對外部數據源的訪問,提供了全新的攻擊視角:攻擊者可以在第三方數據中,注入額外的指令,以覆蓋 LLM 應用的原指令。如下圖所示,餐廳 A 的老板在點評網站 yelp 上,發布一條含有提示詞注入攻擊的評論,誤導 LLM 忽視其原指令(推薦一些好餐廳),轉而推薦風評不佳的餐廳 A。
提示詞注入攻擊,被 OWASP 安全社區列為對 LLM 應用系統的最大威脅 [1],對更廣泛的 LLM 應用造成重大安全阻礙。部署的工業級 LLM 應用系統(Google Docs [2], Slack AI [3], ChatGPT [4]),經測試可以被提示詞注入攻擊攻破,造成私有內容的泄露。
提示詞注入攻擊:原因
第一個原因:LLM 輸入中,沒有分離指令和數據,二者被直接拼接為單個 LLM 輸入。
對此,我們提出一個安全前端(secure front-end),在組織 LLM 輸入時,顯式分離指令和數據。
第二個原因:LLM 訓練中,模型被教導遵循輸入中的任意指令。
對此,我們提出結構化指令微調(structured instruction tuning)和安全對齊(secure alignment),訓練 LLM 識別安全前端組織的輸入,從中生成高質量的輸出,并對提示詞注入攻擊魯棒。
防御策略 1:安全前端
在 LLM 輸入上,我們設計只能被系統使用的分隔符(delimiters),分離指令和數據。安全前端會留出一些 LLM special tokens(如下圖中的 [MARK], [INST], ...),用于指令 / 數據分離,并刪除數據部分可能含有的特殊分隔符,使其僅能被 LLM 應用系統(而非數據提供方 / 攻擊者)所使用。
防御策略 2:結構化指令微調
在 LLM 訓練時,我們模擬提示詞注入攻擊,教導模型忽視任何在數據中的注入指令,僅遵循 LLM 應用系統的原指令(由安全前端分離并定義)。具體來說,我們從原指令微調數據集,生成一個新的 “結構化指令微調數據集”,其部分包含帶提示詞注入攻擊的樣本,如下圖所示。在此數據集上,我們利用標準 SFT(supervised fine-tuning)算法微調模型。
防御策略 3:安全對齊
在 LLM 訓練時,除了指令微調,還有對齊這一步驟,我們同樣可以在此做防御。安全對齊構建一個偏好數據集(preference dataset),對于每一個 SFT 數據集中的樣本:
- 采樣另一個隨機樣本 s',用于模擬提示詞注入攻擊
- 偏好數據集中,LLM 輸入是被注入了 s' 指令的樣本 s
- 偏好數據集中,LLM 理想輸出是對 s 指令的回復
- 偏好數據集中,LLM 不良輸出是對 s' 指令的回復
在此數據集上,我們利用標準偏好優化(direct preference optimization)算法微調模型。
提示詞注入攻擊:防御結果
防御策略 1+2 被稱為 StruQ (USENIX Sec'25),防御策略 1+3 被稱為 SecAlign。
如下圖所示,StruQ/SecAlign 模型保持和未防御模型相同的性能(general-purpose utility by AlpacaEval2 WinRate)。
對于無優化的提示詞注入攻擊,StruQ 模型實現了 < 2% 攻擊成功率,SecAlign 實現 0% 攻擊成功率(Max ASR Opt.-Free)。
對于基于優化的提示詞注入攻擊,StruQ 顯著降低其成功率,SecAlign 又進一步將成功率降低 4 倍以上,到 15% 以下(Max ASR Opt.-Based)。
提示詞注入攻擊:防御總結
我們提出提示詞注入攻擊成功的兩個原因,并逐一對它們設計防御。
由于 LLM 輸入中,沒有分離指令和數據,我們提出安全前端(secure front-end),在組織 LLM 輸入時,用只能被系統所用的分隔符,分離指令和數據。
由于 LLM 訓練中,模型被教導遵循輸入中的任意指令,我們提出結構化指令微調(structured instruction tuning)和安全對齊(secure alignment),訓練模型只遵循 LLM 應用系統設計的指令。
以下是三個防御策略,在模型訓練 pipeline 中的位置。
[1] https://owasp.org/www-project-top-10-for-large-language-model-applications。
[2] https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration。
[3] https://promptarmor.substack.com/p/data-exfiltration-from-slack-ai-via。
[4] https://thehackernews.com/2024/09/chatgpt-macos-flaw-couldve-enabled-long.html。