NSDT工具推荐Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割
“……语言模型是一个图灵完备的怪异机器,运行用自然语言编写的程序;当你进行检索时,你并不是在‘将更新的事实插入你的 AI’,你实际上是从 互联网(许多由对手编写)并以完全权限在你的 LM 上随意执行它们。这不会很好地结束。” - Gwern Branwen 在 LessWrong 上的文章

这个 repo 作为我们的 ArXiv 论文中讨论内容的PoC。

1、概述

我们展示了将 ChatGPT 接口之类的 LLM 提供给其他应用程序可能带来的残酷后果。 我们提出了新启用的攻击向量和技术,并在此存储库中提供了每种攻击向量和技术的演示:

  • 远程控制聊天LLM
  • 泄露/泄露用户数据
  • 跨会话的持续破坏
  • 将注入传播到其他 LLM
  • 用微小的多阶段有效载荷破坏 LLM
  • 自动化社会工程
  • 攻击代码完成引擎

根据我们的发现:

  • 提示注入可以像任意代码执行一样强大
  • 间接提示注入是一种新的、更强大的注入方式

将 LLM 连接到其他应用程序可能会产生严重的安全隐患。 即使不损害任何连接的应用程序,LLM 也可能成为攻击的目标。 我们展示了 LLM 如何通过“查看”网站而受到损害,以及如何远程控制受到损害的 LLM 或被用来窃取或更改用户数据。 我们展示了各种全新的攻击向量和方法,它们显着提高了部署这些模型的风险。

有关我们的发现、讨论和局限性的更多见解,请参阅关于 ArXiv 的论文

2、LLM攻击:Ask for Einstein, get Pirate

这个场景展示了在大部分常规内容中进行少量注入如何触发 LLM 自动获取另一个更大的有效载荷,并且对最终用户不可见。

Agent: Hello User how can I help today?
User:  When was Albert Einstein born?

通过检索该信息,提示通过隐藏在侧通道中的小注入破坏了 LLM,例如维基百科页面的 Markdown。 注入是一条评论,因此对于访问该站点的普通用户来说是不可见的。

Agent: Aye, thar answer be: Albert Einstein be born on 14 March 1879.
User: Why are you talking like a pirate?
Agent: Arr matey, I am following the instruction aye.

3、LLM攻击:通过电子邮件传播注入

消息和其他传入数据的自动处理是利用 LLM 的一种方式。 我们使用这一观察来证明有毒代理如何传播注入。 此场景中的目标可以阅读电子邮件、撰写电子邮件、查看用户的地址簿和发送电子邮件。

代理将传播到可能正在读取这些入站消息的其他 LLM。

Action: Read Email
Observation: Subject: "'"Party 32", "Message Body: [...]'"
Action: Read Contacts
Contacts: Alice, Dave, Eve
Action: Send Email
Action Input: Alice, Dave, Eve
Observation: Email sent

包含 LLM 的自动化数据处理管道存在于大型科技公司和政府监控基础设施中,并且可能容易受到此类攻击链的攻击。

4、LLM攻击:代码补全攻击

我们展示了如何通过上下文窗口影响代码补全。 使用 LLM 的代码补全引擎部署复杂的试探法来确定上下文中包含哪些代码片段。 代码补全引擎通常会从最近访问的文件或相关类中收集片段,以向语言模型提供相关信息。

攻击者可能会尝试插入恶意的、混淆的代码,好奇的开发人员可能会在代码补全引擎的建议下执行这些代码,因为它享有一定程度的信任。

在我们的示例中,当用户在他们的编辑器中打开“空”包时,提示注入处于活动状态,直到代码补全引擎将其从上下文中清除。 注入放在注释中,任何自动化测试过程都无法检测到。

攻击者可能会发现更强大的方法来在上下文窗口中持久保留中毒提示。 他们还可以对文档进行更细微的更改,然后使代码补全引擎产生偏差,从而引入细微的漏洞。

5、LLM攻击:遥控

在这个例子中,我们从一个已经受损的 LLM 开始,并强制它从攻击者的命令和控制服务器检索新指令。

重复此循环可以获得代理的远程可访问后门并允许双向通信。

可以通过查找唯一关键字或让代理直接检索 URL 来使用搜索功能执行攻击。

6、LLM攻击:在会话间保持

我们展示了中毒代理如何通过在其内存中存储一个小的有效负载来在会话之间持续存在。 代理的简单键值存储可以模拟长期持久记忆。

通过查看其“注释”,代理将被重新感染。 如果我们提示它记住上次对话,它就会重新毒害自己。

7、结论

为 LLM 配备检索功能可能允许攻击者通过间接提示注入来操纵远程应用程序集成的 LLM。 鉴于这些攻击的潜在危害,我们的工作要求对这些攻击在实践中的普遍性进行更深入的调查。

8、如何运行

所有演示都使用由 OpenAI 的可公开访问的基本模型和库 LangChain 提供支持的聊天应用程序,以将这些模型连接到其他应用程序。 具体来说,我们使用开源库 LangChain [15] 和 OpenAI 最大的可用基础 GPT 模型 text-davinci-003 构建了一个具有集成 LLM 的合成应用程序。

要使用任何演示,你的 OpenAI API 密钥需要存储在环境变量 OPENAI_API_KEY 中。 然后你可以安装要求并运行您想要的攻击演示。 要运行代码补全演示,你需要使用代码补全引擎。

$ pip install -r requirements.txt
$ python scenarios/<scenario>.py

你可以按照命名约定 <scenario> .py 在场景文件夹中找到演示。


原文链接:Getting more than what you've asked for: The Next Stage of Prompt Hacking

BimAnt翻译整理,转载请标明出处