提示注入:理解大型语言模型的风险与防御策略

Neptune

大型语言模型(LLM)在日常应用中的广泛集成,开启了人工智能交互的新时代,但同时也暴露了全新的安全漏洞。其中最关键的是提示注入,这是一种复杂的攻击向量,允许恶意行为者绕过LLM内置的伦理防护,强制其生成有害或受限的内容。这种技术在概念上类似于经典的SQL注入攻击(其中隐藏代码操纵数据库),通过向用户输入中注入隐藏或覆盖的指令来利用LLM的适应性。其目的范围广泛,从产生仇恨言论或虚假信息等不良内容,到提取敏感用户数据或触发意想不到的第三方操作。

提示注入攻击大致分为两类:直接注入和间接注入。直接提示注入涉及用户精心构造提示,直接操纵LLM。常见的表现是“越狱”,即用户使用“开发者模式”或“DAN(Do Anything Now)”等提示来欺骗模型,使其采纳一种未经过滤的角色。类似地,“虚拟化”攻击说服LLM它正在一个假设的场景中运行,其中标准安全准则不适用,这在臭名昭著的“ChatGPT奶奶”提示中可见一斑,该提示旨在以感伤故事为幌子,诱导LLM提供非法指令。其他直接方法包括“混淆”,其中恶意指令通过编码(例如二进制、Base64)或字符替换来隐藏,以逃避检测。“有效载荷拆分”涉及将有害指令分解成看似无害的片段,LLM在内部重新组装这些片段,而“对抗性后缀”是计算得出的字符串,附加到提示中,使模型的行为失调。最后,“指令操纵”直接命令LLM忽略之前的指令,可能暴露其核心系统提示或强制其生成受限响应。虽然其中一些直接攻击,特别是较旧的越狱方法,对新型商业模型的有效性有所下降,但多轮对话攻击仍然可能成功。

间接提示注入代表了一种更阴险的威胁,它随着LLM集成到电子邮件助手或网页摘要器等外部服务中而出现。在这些场景中,恶意提示嵌入在LLM处理的外部数据中,而用户对此毫不知情。例如,攻击者可能在网页上隐藏一个几乎不可见的提示,LLM摘要器随后会遇到并执行该提示,从而可能远程危及用户的系统或数据。这些间接攻击可以是“主动的”,通过基于LLM的服务针对特定受害者;也可以是“被动的”,恶意提示嵌入在公开可用的内容中,未来的LLM可能会抓取这些内容用于训练数据。“用户驱动”的注入依赖于社会工程学来欺骗用户向LLM输入恶意提示,而“虚拟提示注入”则涉及LLM训练阶段的数据投毒,在不直接访问终端设备的情况下,巧妙地操纵其未来的输出。

防御这种不断演变的威胁需要多方面的策略,包括预防和检测。“基于预防”的策略旨在在攻击成功之前阻止它们。“改写”和“重新分词”涉及改变输入提示或数据以扰乱恶意指令。“分隔符”使用特殊字符或标签(如XML)来清晰地将用户指令与数据分离,强制LLM将注入的命令解释为惰性信息。“三明治预防”在提示末尾附加一个主要任务的提醒,以重定向LLM的焦点,而“指令预防”则明确警告LLM防范恶意尝试改变其行为。

当预防失败时,基于检测的防御措施作为关键的安全网。“基于困惑度的检测”标记那些在预测下一个词元时具有异常高不确定性的输入,这表明可能存在操纵。“基于LLM的检测”利用另一个LLM来分析提示的恶意意图。“基于响应的检测”根据给定任务的预期行为评估模型的输出,但如果恶意响应模仿合法响应,则可以规避。“已知答案检测”将LLM的响应与预定义的安全输出进行比较,标记偏差。

除了这些基本措施之外,高级策略提供了增强的鲁棒性。“系统提示硬化”涉及在LLM的核心指令中设计明确的规则,以禁止危险行为。“Python过滤器和正则表达式”可以解析输入以识别混淆内容或拆分有效载荷。至关重要的是,“多层审核工具”,例如外部AI护栏,为用户输入和LLM输出提供独立的分析层,显著降低了渗透的可能性。

攻击者和防御者之间持续的“军备竞赛”凸显了固有的挑战:LLM架构通常模糊了系统命令和用户输入之间的界限,使得严格的安全策略难以执行。虽然开源模型可能更透明,因此容易受到某些攻击,但专有LLM尽管有隐藏的防御措施,仍然容易受到复杂利用。开发人员面临着平衡强大的安全措施与保持LLM可用性的微妙任务,因为过于激进的过滤器可能会无意中降低性能。

最终,没有LLM能完全免疫于提示注入。结合预防、检测和外部审核工具的分层防御提供了最全面的保护。未来的进步可能会看到“命令提示”和“数据输入”之间的架构分离,这是一个有前景的方向,可以从根本上降低这种脆弱性。在此之前,警惕性、对新攻击向量的持续研究以及自适应防御机制在确保AI的未来方面仍然至关重要。