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