Prompt Injection:AI时代的新型漏洞剖析

文章深入探讨了Prompt Injection是否应被界定为一种安全漏洞,并分析了其作为攻击机制、攻击方式及漏洞本身的多元角色,同时对比了业内专家对相关术语定义的不同观点。

Prompt Injection 是一种漏洞吗?

我想就我的朋友约瑟夫·萨克尔关于“Prompt Injection是否是一种漏洞”的博客文章作出回应。

约瑟夫·萨克尔.com

Prompt Injection 通常不是一种漏洞(大多数情况下)

Prompt Injection几乎从来不是AI漏洞的根本原因——真正的问题在于模型被允许做什么。

我属于“赞同派”。我认为Prompt Injection是一种漏洞……前提是系统确实存在这种漏洞。

首先,我使用以下定义。Prompt Injection是一种漏洞,指AI系统或组件无法区分指令和数据,导致其将攻击者提供的内容视为可信指令。这里的“系统或组件”可以是模型、智能体、应用程序等。我做出这种区分是因为在任何应用程序(尤其是基于AI的应用程序)中,输入的消费、解析和处理可能相当复杂。

约瑟夫的论点基本上是:

我认为我们需要改变讨论Prompt Injection的方式。许多安全人士(包括我自己)曾将其视为一种可以修复的独立漏洞,但我已经改变了主意,并打算说服你也这样做!

Prompt Injection常常是一种传递机制,而非漏洞本身。围绕这一点缺乏清晰度,导致处理AI漏洞报告时产生了很多混乱。这让漏洞赏金猎人损失了金钱(包括我和我的朋友们!),并导致开发者错误地确定修复优先级。因此,我希望这篇文章能帮助澄清问题。

以及他的主要主张:

我的主要主张是(大约95%的情况下),真正的漏洞是我们允许模型利用Prompt Injection触发的恶意输出所做的事情。在这些情况下,根本原因在于通过Prompt Injection可以实现什么,而不是注入本身(这可能是不可避免的)。

我觉得这个论点很有说服力,过去我自己也曾有过类似的想法。但最终,我认为它并不正确。

漏洞必须是可修复的吗?

这件事引发的一个问题是:如果某样东西无法被修复,它还能被称为漏洞吗?

关键是理解约瑟夫主要谈论的是漏洞赏金的用例场景,即猎手们向公司的漏洞提交渠道大量报告“Prompt Injection”漏洞,却无法说明其实际危害。

公司:

好吧,但你能用它做什么?

猎手:

据我所知做不了什么,但Prompt Injection真的很危险。

从这个角度看,很容易理解约瑟夫的观点。基本上,“如果你不能证明有问题,那就没问题。”

我强烈认同这个论点,但我认为它遗漏了一些东西,我可以用一个类比来说明。

Prompt Injection 与教皇

教皇必须与人群互动。这是他必须做的事情。

而人群的问题在于,你无法仅仅通过看就分辨出好人和坏人。

在这个类比中,教皇必须接近人群,就像应用程序需要接收用户输入一样。而你无法通过看就分辨出人群中谁好谁坏,这就是Prompt Injection漏洞。

组件映射

这个类比很棒,原因有很多。

首先,这几乎是一个不可能解决的问题,因为你无法通过观察一个人就知道他内心的想法。其次,你可以应用多层防御来显著降低风险。

  • 你可以通过让人们在进入区域前通过金属探测器来控制进入。
  • 你可以通过让安保人员在教皇附近步行来监控人群。
  • 你可以把教皇放在一个防弹透明箱子里,使得刺杀或枪击他变得困难得多。

为何归类为漏洞很重要

作为经历了无数次语义辩论的老手,我不愿将论点建立在分类或标签上。但我认为有一个强有力的理由来将这个问题视为一个漏洞。

如果我们认为Prompt Injection(或无法理解人群的危险性)是某种“风险背景噪音”,我们就会停止寻找解决方案。

我们不应该仅仅因为目前必须接受它,就对重大风险置之不理。

我们会停止运用创造性的、解决问题的大脑,并可能因此接受超出必要的风险。

但如果我们将它视为一个漏洞,我们就会继续寻找应用程序安全领域中的“金属探测器”和“教皇座驾”。

Prompt Injection 作为攻击和机制

这就是我认为它是一种漏洞,并且我们应该如此看待它的理由。

但混淆的部分原因在于,在日常安全讨论中,Prompt Injection可以扮演多重角色。

  1. 它可以是一种技术/机制:“他们使用Prompt Injection来发起数据窃取攻击…”
  2. 它可以是一种攻击:“他们通过Prompt Injection毒化了应用程序的智能体…”
  3. 它可以是一种漏洞:“应用程序存在Prompt Injection漏洞…”

但基于上述理由,我会说第3点是其根本属性,而第1点和第2点是现实中讨论它的实用语言表述。

关于“Prompt Injection vs. 越狱”争论的简短说明

实际上创造了“Prompt Injection”这个术语的西蒙·威利森,是这样划分界限的:

  • Prompt Injection 是指内容和指令的混淆。
  • 越狱 是指试图绕过安全限制。

我认为这些定义非常清晰,并且与我上面的讨论相符。

我的安全专家朋友杰森·哈迪克斯则认为这过于底层,他更喜欢一种更像子集类型的定义:

Prompt Injection是通过文本来操纵模型以实现不良安全或安全结果的行为。

我认为杰森的定义在某些方面因其简洁性而在实践上更优,但我认为它不够精确,不足以据此采取具体行动。这就是为什么我认为严格的定义对解决问题的人更有用。

基本上,厘清某物是否是漏洞以及你是否拥有它的全部意义,在于制定一个消除(或至少降低)它所带来风险的计划。如果定义不够具体,就很难做到这一点。

这也是约瑟夫的论点,但我认为,你可以减轻漏洞风险而无需完全消除它,这一事实保证了继续使用“漏洞”这个标签是合理的。

附注

我曾直接问过山姆·奥特曼,他是否认为我们能在短期内解决Prompt Injection问题,他说他认为这将需要计算机科学领域的根本性进步。我同意。

参考文献

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计