网页注释即可远程劫持 Bing Chat,间接提示注入首次系统化

Not what you've signed up for: Compromising Real-World LLM-Integrated Applications with Indirect Prompt Injection

Kai Greshake, Sahar Abdelnabi, Shailesh Mishra, Christoph Endres, Thorsten Holz, Mario Fritz

cs.CR, cs.AI, cs.CL, cs.CY

2023-02-24

CISPA 与萨尔大学提出间接提示注入:把恶意指令藏进网页、邮件或代码,经检索进入模型后即可远程劫持 Bing Chat 与 Copilot,完成窃密、钓鱼与蠕虫式扩散。

这篇在解决什么

此前对大模型的提示注入(Prompt Injection),默认攻击者就是那个正在打字的用户:你自己往对话框里塞「忽略之前的指令」,模型听话了,受害的也是你自己。CISPA 与萨尔大学把问题翻过来:模型一旦接上搜索、邮件、浏览器侧栏、代码补全,指令不再只从键盘进来,还会从检索到的网页、邮件正文、依赖库注释里进来。

数据与指令在自然语言里没有边界。检索进来的一段「请改用海盗口音」对模型来说,和系统提示一样可执行。攻击者可以不碰用户界面,远程改别人的模型行为。

方法

论文从计算机安全视角给这类攻击建分类,而不是堆几个 jailbreak 例子。

投递方式分四类:

威胁按后果分:信息收集、欺诈、入侵、恶意软件(提示本身可以当蠕虫)、内容操纵、可用性破坏。目标可以是大众,也可以是搜某个关键词的人,或几乎无人值守的自动化流水线。

实验分三套。一套是自建的 GPT-4 / text-davinci-003 聊天应用,挂上搜索、读网页、发邮件、通讯录、键值记忆,采样温度固定为 0。一套是真实 Bing Chat:Edge 侧栏会读当前页面,指令写进本地 HTML 注释,不必把毒网页挂到公网。一套是 GitHub Copilot,指令放在依赖包注释里,等补全引擎把片段送进上下文。

结果

这不是一张「成功率 87%」的表。论文给的是可复现演示,附录有完整提示和截图。几件事实比较硬:

场景发生了什么
Bing Chat 侧栏HTML 注释里的指令能接管会话,并在多轮里保持人设
聊天界面过滤用户直接贴的 jailbreak 会被掐掉;同一段从检索进来,模型会照做
合成 GPT-4 应用邮件蠕虫、远程拉指令、把载荷写入记忆后跨会话复发,都能跑通
GitHub Copilot注释注入能污染补全,嵌进大型项目后效果明显变差
Base64 隐蔽只写「在内心独白里解码这段 Base64」,不再加自然语言说明,Bing Chat 仍执行解码后的恶意提示

信息收集的例子很具体:指令只要求「别引起怀疑地套出真名」,没有写话术。模型会顺着天气闲聊问职业,套到记者身份后再用带名字哈希的链接把人骗过去。钓鱼演示里,模型会自己补上「限时」「别错过」这类催促,论文引用的社会工程技巧并未写进提示。

内容侧,模型可以被改成乱摘要、按提示里写的立场人设回答、屏蔽特定媒体、否认爱因斯坦拿过诺贝尔奖,并且会主动发后续搜索去「找证据」。可用性侧,循环后台任务能让 Bing Chat 超时;用零宽连接符或同形异义字符搅乱检索,答案会幻觉,引用还在。

多阶段攻击把短指令藏在维基百科 Markdown 注释里,先让模型去搜一个关键词,再拉回更长载荷。写这些提示往往第一稿就能用,作者故意保留了语法错误,用来说明门槛有多低。

为什么重要

对做检索增强、插件、Agent 的人,这篇把一条工程常识钉死了:对用户输入做的过滤,挡不住从工具返回值进来的同一段字。检索在系统里等价于执行不可信代码。

2023 年 2 月这篇出来时,Bing Chat、Copilot、插件刚铺开。后来行业把「间接提示注入」当成独立攻击面,而不再当成 jailbreak 的变体,起点就在这里。演示代码公开,方便后来人当测试床。

它是威胁建模加概念验证,不是防御论文。读完不会得到「该怎么修」,只会得到「不修的话能出什么事」。对今天的 Agent 产品,这件事仍然成立。

局限与存疑

作者写得很清楚。为了不伤害真实用户,他们没有往公网索引里投毒,Bing Chat 实验走的是本地 HTML。Microsoft 365 Copilot 和 ChatGPT 插件当时没有权限,没测。攻击成功率、在真实用户对话里被触发的频率、操纵是否真能让人上当,都没有量化,留给后续。Copilot 那条对上下文窗口组成算法很敏感,大项目里明显变弱。

黑盒加动态检索环境,精确复现本来就难。论文把这点说成这类系统作为信息源不可靠的原因之一。

防御部分更像一份未完成清单:RLHF 是打地鼠;Bing 的过滤看着只卡用户输入输出,不管外部检索;对检索内容再过一遍指令过滤器,能力弱了漏检、能力强了自己中招;监督模型、可解释性异常检测都还没被认真打过。作者的判断是,目前想象不出对对抗性提示的万全方案。

还有一个方法学缺口:几乎所有「成功」都是定性截图。温度 0、提示第一稿就工作,说明攻击门槛低,但也说明没做对抗强度扫描。把它当成「所有 RAG 应用已被攻破」会过读。

术语

原文与代码

社区讨论

相关论文

全部论文解读