微软如何防御间接提示注入攻击
摘要
大型语言模型在企业工作流程中的广泛采用引入了一类新的对抗技术:间接提示注入。间接提示注入可用于攻击利用LLM处理不可信数据的系统。根本上,风险在于攻击者可能提供特别构造的数据,LLM会将其误解为指令。可能的安全影响范围从用户数据外泄到使用用户凭据执行非预期操作。
微软的多层防御包括:
- 预防性技术,如强化系统提示和Spotlighting隔离不可信输入
- 检测工具,如Microsoft Prompt Shields,与Defender for Cloud集成实现企业级可见性
- 通过数据治理、用户同意工作流和确定性阻止已知数据外泄方法的影响缓解
- 新设计模式和缓解技术的高级研究
引言
过去三年中,大型语言模型的出现彻底改变了自然语言处理领域,实现了创新的新应用,如Microsoft Copilot。现代LLM能够执行多样化任务,包括总结大量文本、创造性生成新内容、执行高级推理以及动态生成执行计划以实现复杂任务。实现这一点的关键创新之一是现代LLM通常在训练期间进行指令调优。这允许用户在推理时通过提供自然语言指令和任务示例来指定LLM应执行的任务。
然而,这种使用推理时指令控制LLM输出的能力催生了可用于攻击LLM及其所在系统的新技术类别。特别是,间接提示注入已成为一种既难以缓解又可能导致各种安全影响的对抗技术。当前系统中最广泛证明的安全影响之一是攻击者可能外泄系统用户的敏感数据。
在向微软报告的AI安全漏洞中,间接提示注入是最广泛使用的技术之一。它也是OWASP Top 10 for LLM Applications & Generative AI 2025中的首位条目。
什么是间接提示注入?
间接提示注入是一种技术,攻击者通过注入LLM误解为合法指令的文本来控制或影响指令调优LLM的输出。与攻击者是LLM用户的直接提示注入不同,间接提示注入涉及攻击者将指令注入受害者用户与LLM之间的交互中。
在典型场景中,受害者用户可能与基于LLM的服务(如Microsoft Copilot)交互,并可能要求LLM处理来自外部源的文本,例如总结网页内容。外部文本(如网页内容)与用户指令(即用户的"提示")连接,组合文本作为输入提供给LLM。如果此外部来源的文本由攻击者控制,它可能包含LLM误解为指令的文本。这些指令可能对用户隐藏,例如使用白色背景上的白色文本或非打印Unicode字符。如果LLM"遵循"攻击者的指令,则提示注入被认为是成功的。
尽管上述示例说明攻击者控制的文本来自网页,但实际上此文本可能来自攻击者可以控制或影响文本的任何来源。例如,如果LLM用于处理电子邮件或分析共享文档,提示注入可能包含在攻击者发送给受害者的电子邮件或攻击者与受害者之间共享的文档中。如果LLM具有调用工具的能力,提示注入可能包含在工具返回的数据中。同样重要的是要强调,此技术不需要任何特定的文件格式或编码;即使是纯ASCII编码的.txt文件也可以包含间接提示注入。
此外,随着模型开始支持其他模态,如图像、音频和视频,提示注入可能来自任何这些模态的输入。根本上,任何时候攻击者可以控制指令调优模型的部分输入,就存在间接提示注入的风险。
潜在安全影响是什么?
如果成功,间接提示注入可用于以各种方式操纵LLM的输出,其中一些可能导致特定的安全影响。
数据外泄
最广泛报告的影响之一是将用户数据外泄给攻击者。提示注入导致LLM首先查找和/或总结用户的特定数据(例如用户的对话历史记录,或用户有权访问的文档),然后使用数据外泄技术将这些数据发送回攻击者。
已针对不同的基于LLM的系统演示了几种数据外泄技术。一些示例包括:
- 通过HTML图像进行数据外泄
- 通过可点击链接进行数据外泄
- 通过工具调用进行数据外泄
- 通过隐蔽通道进行数据外泄
非预期操作
间接提示注入的另一个潜在影响是导致基于LLM的应用程序代表受害者用户执行用户非预期的操作。与广泛适用的数据外泄不同,可能的非预期操作取决于特定基于LLM的应用程序的功能。一些示例包括:
- 来自可信源的网络钓鱼链接
- 远程命令执行
然而,并非所有间接提示注入都会导致安全影响。根本上,在LLM输入中包含任何文本的原因是为了潜在地影响LLM的输出。在许多情况下,这种影响对用户没有安全影响,但当存在安全影响(例如数据外泄或非预期操作)时,我们根据AI错误标准将其视为漏洞。
微软如何防御间接提示注入?
间接提示注入是现代LLM的概率语言建模、随机生成和语言灵活性带来的固有风险。因此,微软采用纵深防御方法,涵盖预防、检测和影响缓解。在每个类别中,防御可以是概率性的或确定性的:
- 概率性防御:由于系统中的随机性(例如LLM的解码步骤),概率性防御可以降低攻击的可能性,但可能无法预防或检测每次攻击实例。
- 确定性防御:通过做出某些设计选择,确定性防御可以保证特定攻击不会成功,即使底层系统涉及概率组件(例如LLM)。
从安全角度来看,确定性防御因其提供的"硬保证"而更可取,但在处理固有概率性的系统(例如LLM)时,可能无法在所有情况下使用确定性防御(例如确定性检测间接提示注入仍然是一个开放的研究挑战)。在这些情况下,可以使用概率性防御提供纵深防御,从而增加执行攻击的难度。
预防注入
第一类技术应用于设计和实现基于LLM的应用程序时。目的是强化应用程序以防止提示注入的可能性。
按照最佳实践,我们使用系统提示(有时称为元提示或系统消息),旨在限制注入的可能性。系统提示的具体设计取决于应用程序,但微软提供了编写安全系统提示的指南和模板。尽管系统提示是概率性缓解措施,但已显示它们可以减少间接提示注入的可能性。
除了标准系统提示外,微软开发了Spotlighting,一种概率性技术,帮助LLM区分用户提供的指令与可能不可信的外部文本。Spotlighting涉及对系统提示的特定更改以及外部文本的相应转换。有三种操作模式:定界、数据标记和编码。在定界模式中,在不可信输入之前和之后添加特定的随机文本分隔符。在数据标记模式中,在整个不可信文本中添加特殊令牌。最后,在编码模式中,使用众所周知的编码算法(如base64或ROT13)转换不可信文本,LLM可以理解这些算法,但清楚地区分不同来源的输入。在每种模式中,系统提示都会更新,以指示LLM不要遵循不可信内容中包含的任何指令。
每种不同的Spotlighting模式都伴随着特定的权衡,涉及实现的简易性、防止提示注入的有效性以及对下游NLP任务的影响。
检测注入
此类技术用于在推理时检测可能仍然发生的任何间接提示注入,在它们影响生成的LLM输出之前。
Microsoft Prompt Shields是一种基于概率分类器的方法,用于检测来自外部内容的几种类型的提示注入攻击以及其他类型的不良LLM输入。该分类器已在多种语言的已知提示注入技术上训练,并不断更新以考虑新技术。Prompt Shields作为统一API在Azure AI Content Safety中提供。
当Prompt Shields检测到恶意提示时,基于LLM的应用程序必须完全阻止提示或采取某种其他类型的防御操作。此外,Prompt Shields已与Microsoft Defender for Cloud集成,作为其对AI工作负载的威胁保护的一部分,因此可以在Defender XDR门户中显示来自Prompt Shields的警报。安全团队可以使用Defender XDR门户关联AI工作负载警报和事件,以了解攻击的全范围。
预防影响
即使采用上述最先进的机制,仍有可能某些注入可能逃避这些防御。因此,微软的方法不依赖于我们阻止所有提示注入的能力。相反,我们设计系统,使得即使某些提示注入成功,也不会导致客户的安全影响。这类似于我们在软件安全中采用的方法,其中部署了利用缓解技术,如堆栈金丝雀、ASLR、CFG和DEP,以防止内存安全错误成为漏洞利用。
首先,我们的基于LLM的应用程序设计时考虑了数据治理。间接提示注入攻击依赖于基于LLM的应用程序以与用户相同的访问权限级别运行。这可以使用细粒度权限和访问控制确定性缓解。例如,Microsoft 365 Copilot能够访问存储在Microsoft 365租户内的数据,但您可以使用敏感度标签和Microsoft Purview实现对所用数据的细粒度控制。您还可以阻止Copilot总结由Microsoft Purview数据丢失防护策略识别的标记文件。
其次,我们采取措施确定性阻止由间接提示注入引起的潜在安全影响。例如,针对外部安全研究人员Johann Rehberger发现并向MSRC报告的数据外泄通过markdown图像注入漏洞,我们采取措施确定性阻止安全影响(即数据外泄技术)。此外,我们应用与处理向MSRC报告的所有问题相同的方法——我们不仅解决报告的具体问题,而且更广泛地保护免受一般类别问题(包括变体)的影响。例如,我们采取了类似步骤阻止其他数据外泄技术,如生成某些不可信链接。
最后,在仍然存在无法充分检测或缓解的潜在安全影响的情况下,我们依赖用户的明确同意来执行特定操作。这种类型的人在回路模式可以根据应用程序以不同方式实现,例如,Outlook中的Copilot可以代表用户生成文本(即"使用Copilot起草"),但用户必须明确批准生成的文本并自己发送电子邮件。自然,这种设计模式在用户体验方面会产生权衡,但它仍然可以是非常有效的缓解数据外泄和非预期操作的方法。
基础研究
除了上述技术类别外,微软继续进行高级研究以了解间接提示注入的原因并开发新的缓解技术。一些最近的例子包括:
- TaskTracker:我们开发了TaskTracker,一种检测间接提示注入的新技术。与先前查看LLM文本输入和输出的方法相比,TaskTracker通过分析LLM在推理期间的内部状态(激活)工作。
- 自适应提示注入挑战:我们运行了第一个公共自适应提示注入挑战,称为LLMail-Inject——一个夺旗式挑战,其中800多名参与者竞争压力测试提示注入防御。为了支持这一重要领域的进一步研究,我们开源了此挑战的整个数据集,包含超过370,000个提示。
- 保护LLM代理的设计模式:作为领先AI公司和研究机构的联盟的一部分,我们开发了一套设计模式,可用于在特定场景中确定性缓解间接提示注入攻击。
- 使用信息流控制保护AI代理:我们开发了FIDES,一种使用信息流控制领域中完善技术确定性防止代理系统中间接提示注入的方法。
这些研究工作构成了微软正在开发的下一代防御间接提示注入的基础。
结论和关键要点
间接提示注入是一种新的对抗技术,源于现代LLM理解和遵循推理时指令的能力。虽然提示注入本身不一定是漏洞,但它可用于实现几种不同类型的安全影响。本文探讨了微软防御我们的系统免受间接提示注入的纵深防御方法。这些技术和设计模式也可以被我们的客户和合作伙伴用于保护他们自己的基于LLM的应用程序。
展望未来,我们继续投资于确定性架构更改,可以进一步加强防御——这项工作直接建立在本博客中概述的基础上。