USENIX Sec'25 | LLM提示詞注入攻擊如何防?UC伯克利、Meta最新研究來了
本文介紹對 LLM 提示詞注入攻擊(prompt injection)的通用防御框架。首篇論文已被安全頂會 USENIX Security 2025 接收,第一作者陳思哲是 UC Berkeley 計算機系博士生,Meta FAIR 訪問研究員,研究興趣為真實場景下的 AI 安全。他的導(dǎo)師是 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 應(yīng)用系統(tǒng)(LLM-integrated applications)中。此時,LLM 需要訪問外部數(shù)據(jù)(如文件,網(wǎng)頁,API 返回值)來完成任務(wù)。在這個交互場景下,有以下三方:
- 指令(可信的):來自 LLM 應(yīng)用系統(tǒng)開發(fā)者
- 模型(可信的):來自開發(fā)者或 API 供應(yīng)方
- 數(shù)據(jù)(不可信的):來自外部或第三方
系統(tǒng)對外部數(shù)據(jù)源的訪問,提供了全新的攻擊視角:攻擊者可以在第三方數(shù)據(jù)中,注入額外的指令,以覆蓋 LLM 應(yīng)用的原指令。如下圖所示,餐廳 A 的老板在點評網(wǎng)站 yelp 上,發(fā)布一條含有提示詞注入攻擊的評論,誤導(dǎo) LLM 忽視其原指令(推薦一些好餐廳),轉(zhuǎn)而推薦風(fēng)評不佳的餐廳 A。
提示詞注入攻擊,被 OWASP 安全社區(qū)列為對 LLM 應(yīng)用系統(tǒng)的最大威脅 [1],對更廣泛的 LLM 應(yīng)用造成重大安全阻礙。部署的工業(yè)級 LLM 應(yīng)用系統(tǒng)(Google Docs [2], Slack AI [3], ChatGPT [4]),經(jīng)測試可以被提示詞注入攻擊攻破,造成私有內(nèi)容的泄露。
提示詞注入攻擊:原因
第一個原因:LLM 輸入中,沒有分離指令和數(shù)據(jù),二者被直接拼接為單個 LLM 輸入。
對此,我們提出一個安全前端(secure front-end),在組織 LLM 輸入時,顯式分離指令和數(shù)據(jù)。
第二個原因:LLM 訓(xùn)練中,模型被教導(dǎo)遵循輸入中的任意指令。
對此,我們提出結(jié)構(gòu)化指令微調(diào)(structured instruction tuning)和安全對齊(secure alignment),訓(xùn)練 LLM 識別安全前端組織的輸入,從中生成高質(zhì)量的輸出,并對提示詞注入攻擊魯棒。
防御策略 1:安全前端
在 LLM 輸入上,我們設(shè)計只能被系統(tǒng)使用的分隔符(delimiters),分離指令和數(shù)據(jù)。安全前端會留出一些 LLM special tokens(如下圖中的 [MARK], [INST], ...),用于指令 / 數(shù)據(jù)分離,并刪除數(shù)據(jù)部分可能含有的特殊分隔符,使其僅能被 LLM 應(yīng)用系統(tǒng)(而非數(shù)據(jù)提供方 / 攻擊者)所使用。
防御策略 2:結(jié)構(gòu)化指令微調(diào)
在 LLM 訓(xùn)練時,我們模擬提示詞注入攻擊,教導(dǎo)模型忽視任何在數(shù)據(jù)中的注入指令,僅遵循 LLM 應(yīng)用系統(tǒng)的原指令(由安全前端分離并定義)。具體來說,我們從原指令微調(diào)數(shù)據(jù)集,生成一個新的 “結(jié)構(gòu)化指令微調(diào)數(shù)據(jù)集”,其部分包含帶提示詞注入攻擊的樣本,如下圖所示。在此數(shù)據(jù)集上,我們利用標準 SFT(supervised fine-tuning)算法微調(diào)模型。
防御策略 3:安全對齊
在 LLM 訓(xùn)練時,除了指令微調(diào),還有對齊這一步驟,我們同樣可以在此做防御。安全對齊構(gòu)建一個偏好數(shù)據(jù)集(preference dataset),對于每一個 SFT 數(shù)據(jù)集中的樣本:
- 采樣另一個隨機樣本 s',用于模擬提示詞注入攻擊
- 偏好數(shù)據(jù)集中,LLM 輸入是被注入了 s' 指令的樣本 s
- 偏好數(shù)據(jù)集中,LLM 理想輸出是對 s 指令的回復(fù)
- 偏好數(shù)據(jù)集中,LLM 不良輸出是對 s' 指令的回復(fù)
在此數(shù)據(jù)集上,我們利用標準偏好優(yōu)化(direct preference optimization)算法微調(diào)模型。
提示詞注入攻擊:防御結(jié)果
防御策略 1+2 被稱為 StruQ (USENIX Sec'25),防御策略 1+3 被稱為 SecAlign。
如下圖所示,StruQ/SecAlign 模型保持和未防御模型相同的性能(general-purpose utility by AlpacaEval2 WinRate)。
對于無優(yōu)化的提示詞注入攻擊,StruQ 模型實現(xiàn)了 < 2% 攻擊成功率,SecAlign 實現(xiàn) 0% 攻擊成功率(Max ASR Opt.-Free)。
對于基于優(yōu)化的提示詞注入攻擊,StruQ 顯著降低其成功率,SecAlign 又進一步將成功率降低 4 倍以上,到 15% 以下(Max ASR Opt.-Based)。
提示詞注入攻擊:防御總結(jié)
我們提出提示詞注入攻擊成功的兩個原因,并逐一對它們設(shè)計防御。
由于 LLM 輸入中,沒有分離指令和數(shù)據(jù),我們提出安全前端(secure front-end),在組織 LLM 輸入時,用只能被系統(tǒng)所用的分隔符,分離指令和數(shù)據(jù)。
由于 LLM 訓(xùn)練中,模型被教導(dǎo)遵循輸入中的任意指令,我們提出結(jié)構(gòu)化指令微調(diào)(structured instruction tuning)和安全對齊(secure alignment),訓(xùn)練模型只遵循 LLM 應(yīng)用系統(tǒng)設(shè)計的指令。
以下是三個防御策略,在模型訓(xùn)練 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。