UC伯克利 & Meta 最新研究:如何防御LLM提示词注入攻击?

UC伯克利和Meta提出防御LLM提示词注入攻击的新方法,通过安全前端分离指令和数据,并改进模型训练,显著降低攻击成功率。

原文标题:USENIX Sec'25 | LLM提示词注入攻击如何防?UC伯克利、Meta最新研究来了

原文作者:机器之心

冷月清谈:

大型语言模型(LLM)的广泛应用也带来了安全风险,其中提示词注入攻击尤为突出。这种攻击利用LLM对输入指令的盲目服从而控制模型行为,例如在外部数据中插入恶意指令,误导LLM执行非预期的操作。UC伯克利和Meta的研究人员针对这一问题提出了新的防御框架,核心思路包括两个方面:
1. **安全前端:** 通过在LLM输入中使用系统独有的分隔符,明确区分指令和数据,阻止攻击者在数据中嵌入恶意指令。
2. **改进LLM训练:** 研究者提出了两种训练方法:结构化指令微调和安全对齐。结构化指令微调通过模拟攻击场景,训练模型忽略数据中的恶意指令,只遵循系统指令;安全对齐则通过偏好数据集训练模型,使其对正确指令的响应优先于对恶意指令的响应。
研究人员将这两种防御策略分别命名为StruQ和SecAlign,并进行了实验验证。结果表明,StruQ和SecAlign在保持LLM原有性能的同时,都能有效降低提示词注入攻击的成功率,其中SecAlign的效果更为显著,即使面对基于优化的攻击,成功率也能控制在15%以下。

怜星夜思:

1、文章提到的安全前端和改进LLM训练两种方法,哪一种在实际应用中更具可行性?
2、除了文中提到的防御方法,大家还能想到哪些方法可以有效防御提示词注入攻击?
3、提示词注入攻击的发展趋势会是什么?未来的防御策略又该如何演变?

原文内容

图片
AIxiv专栏是机器之心发布学术、技术内容的栏目。过去数年,机器之心AIxiv专栏接收报道了2000多篇内容,覆盖全球各大高校与企业的顶级实验室,有效促进了学术交流与传播。如果您有优秀的工作想要分享,欢迎投稿或者联系报道。投稿邮箱:[email protected][email protected]

本文介绍对 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

© THE END 
转载请联系本公众号获得授权
投稿或寻求报道:[email protected]


攻击肯定会越来越复杂,现在只是简单的插入指令,未来可能会出现更隐蔽的攻击方式,例如利用LLM的漏洞进行代码注入等等。防御策略也要不断升级,才能跟得上攻击者的步伐。

我认为改进LLM训练的长期效益更大。安全前端只是在输入层面做了防护,治标不治本,攻击者可能会找到绕过安全前端的方法。而改进LLM训练是从模型本身提高安全性,更具根本性。

我觉得可以从用户体验的角度出发,设计一些交互机制,例如让用户确认LLM生成的文本是否符合预期,从而及时发现并阻止攻击。

或许可以借鉴网络安全的思路,建立一个类似防火墙的机制,对LLM的输入和输出进行监控和过滤。

也许可以从LLM的底层机制入手,例如研究LLM是如何理解和执行指令的,从而找到更有效的防御方法。

可以考虑引入一些外部工具,例如语法分析器,对输入进行预处理,识别并过滤掉潜在的恶意指令。

这两种方法其实并不冲突,最好是结合起来使用。安全前端可以作为第一道防线,过滤掉大部分攻击,而改进LLM训练则可以进一步提高模型的鲁棒性,应对更复杂的攻击。