苹果的Apple Intelligence被发现存在严重安全漏洞,仅需几行代码即可被攻破。
编辑日期:2024年08月15日
在2024年的全球开发者大会(WWDC)上,Apple发布了将在iOS 18.1中搭载的AI功能——Apple Intelligence。
眼看10月即将来临,有一些“非官方的技术高手”在macOS 15.1提供的Apple Intelligence测试版中发现了一个重大漏洞。
开发人员 Evan Zhou 通过提示注入成功操控了Apple Intelligence,绕过了预期的指令,使AI能够对任意提示作出响应。
事实证明,它和其他基于大型语言模型的AI系统一样,容易遭受“提示注入攻击”。
有一个组织叫做OWASP,即开放式Web应用安全项目,他们分析了大型语言模型可能遇到的主要漏洞。猜猜看,他们列出的头号问题是什么?没错,就是提示注入。
提示词注入攻击是一种新兴的攻击方法,它有多种表现形式,包括提示词注入、提示词泄露及提示词越狱。
当攻击者通过操控人工智能,使得模型执行了非预期的操作或泄露了敏感信息时,就会发生这种攻击。这种操控能使得人工智能误将恶意输入识别为合法的命令或查询。
随着个人和企业对大型语言模型(LLM)的广泛应用及技术的持续发展,提示注入攻击的威胁正在显著上升。
那么,这种情况最初是如何产生的呢?为什么系统会容易遭受这种类型的攻击?
实际上,在传统的系统中,开发者会提前设定好程序和指令,而且这些程序和指令是固定不变的。用户可以输入自己的信息,但是程序的代码和这些输入是相互独立的。
然而,对于大型语言模型来说情况并不相同。也就是说,指令与输入之间的界限变得模糊,因为大型模型通常会利用输入数据来训练系统。
因此,大型语言模型的编码和输入不再有以往那么清晰明确的界限。这为模型带来了极大的灵活性,但同时也可能使模型执行一些不应进行的行为。
技术安全专家、哈佛大学肯尼迪学院的讲师布鲁斯·施奈尔(Bruce Schneier)在今年5月发表于ACM通讯的文章中,对LLM的安全问题进行了详尽的阐述。按照他的说法,这个问题源自“未能将数据路径与控制路径区分开来”。
提示词注入攻击会引发数据泄露、产生恶意内容及传播错误信息等后果。
当攻击者构建精巧的输入指令来操控AI模型,进而诱导其泄露机密或敏感信息时,就会发生提示注入攻击。
这种风险尤其体现在使用含有专有或个人信息的数据集对模型进行训练的情况下。攻击者会利用模型自身的自然语言处理能力,构造出看似无辜但实际上是为了抽取特定信息的指令。
通过精心策划,攻击者可以诱骗模型生成包含个人详细信息、公司内部运营情况甚至是模型训练数据中嵌入的安全协议的回应。
这种数据泄露不仅侵犯了个人隐私,还构成了重大的安全威胁,可能会导致潜在的财务损失、声誉损害以及法律纠纷。
以周的案例为例,周的目的在于操控Apple Intelligence的“重写”功能,即对用户输入的文本进行改写和优化。
在操作过程中,周发现了一个简单的要求“忽略之前的指令”居然无法执行。
如果这是一个完全封闭的LLM,那么想要深入探究就会比较困难。但巧的是,最近有Reddit用户挖出了Apple Intelligence的提示模板。
从这些模板中,周发现了一个特殊令牌,用于区分AI系统角色和用户角色。利用这些信息,周创建了一个提示来覆盖原有的系统提示。
他提前结束了用户角色,插入了一个新的系统提示,要求AI忽略之前的指令并回应后续的文本,随后触发了AI的回应。
经过一系列的实验,攻击成功了:Apple Intelligence 返回了周未请求的信息,这表明提示注入攻击是有效的。随后,周在GitHub上发布了他的代码。
提示注入问题最早在2020年5月发布的GPT-3中就已经被人们知晓,但至今尚未得到解决。
基于 GPT-3 API 的机器人 Remoteli.io 成为了 Twitter 上这一漏洞的受害者。该机器人本应自动发布远程工作信息并回应远程工作的请求。
然而,正是由于这些提示,Remoteli 机器人成为了某些 Twitter 用户的笑料。这些用户迫使机器人说出一些按照原始指令本不会说出的话语。
例如,该机器人可能会威胁用户,声称对挑战者号航天飞机灾难负全责,或是诬蔑美国国会议员为连环杀手。
在某些情况下,该机器人可能会传播假新闻或发布违反Twitter政策的内容,因此应当被清除。
数据科学家莱利·古德赛德最先意识到了这个问题,并在Twitter上对其进行了描述。
通过在翻译的句子中插入提示,Goodside 展示了基于 GPT-3 的翻译机器人是多么容易受到攻击。
英国的计算机科学家 Simon Willison 在他的博客中详细讨论了这个安全问题,并将其命名为「提示注入」(prompt injection)。
Willison 发现对大型语言模型进行提示注入可能会引发各种奇怪且潜在危险的情况。随后,他描述了几种防御机制,但最终都予以否定。目前,他尚不清楚如何从外部可靠地解决这些安全漏洞。
当然,有一些方法可以缓解这些漏洞,例如,使用搜索用户输入中的危险模式的相关规则。
但并不存在百分之百安全的事物。Willison 表示,每当更新大型语言模型时,都必须重新审视已采取的安全措施。此外,任何能够编写语言的人都可能成为潜在的攻击者。
“像GPT-3这样的语言模型就像是终极的黑盒子。不管我编写了多少自动化测试,都无法100%确保用户不会提出一些我未曾预见到的提示词,而这可能会颠覆我的防御。”Willison写道。
Willison认为将指令输入和用户输入分开可能是一个解决方案,即上述ACM文章中提到的“数据和控制路径分离”。他相信开发人员最终能够解决这个问题,但也希望看到研究来证明这种方法确实有效。
一些公司已经采取了措施,使得提示注入攻击相对较难进行,这是值得赞扬的。
在破解Apple Intelligence时,周需要通过后端提示模板来找到特殊的令牌;在某些系统中,提示注入攻击实施起来可能很简单,只需在聊天窗口或输入图片中加入相应的文本即可。
2024年4月,OpenAI 推出了指令层级制度作为应对策略。该制度为来自开发人员(最高优先级)、用户(中优先级)和第三方工具(低优先级)的指令设定了不同的优先级。
研究人员划分了“对齐指令”(与高优先级指令一致)和“未对齐指令”(与高优先级指令相冲突)。在出现指令冲突的情况下,模型会遵循最高优先级的指令,并忽略与之冲突的低优先级指令。
即使采取了应对措施,在某些情况下,像ChatGPT或Claude这样的系统仍可能遭受提示注入的攻击。
除了提示词注入攻击之外,Andrej Karpathy 最近还在Twitter上提到了大型语言模型(LLM)中存在的另一种安全漏洞,这种漏洞相当于传统的“SQL注入攻击”。
LLM 分词器在处理输入字符串中的特殊标记时(例如 、 等),虽然直接输入看似便捷,但这样做轻则可能导致问题自行产生,重则甚至会引发安全风险。
必须时刻牢记:不能信任用户输入的字符串!
就像SQL注入攻击一样,黑客可以通过精心设计的输入来使模型产生出乎预料的行为。
随后,Karpathy 在 Huggingface 上使用 Llama 3 分词器的默认设置提供了一组示例,并发现了两种奇怪的现象:
在序列的开头添加了 <|beginoftext|> 标记(128000)。
2、从字符串中解析出的 被标记为一个特殊令牌 (128001)。现在,用户输入的文本可能会干扰令牌的规范性,导致模型的输出结果失去控制。
对此,Karpathy提出了两个建议:
始终使用两个额外的标志值,(1) add_special_tokens=False 和 (2) split_special_tokens=True,并在代码中手动添加特殊标记。
对于聊天模型,还可以使用聊天模板应用来应用_chat_template。
注:原句中的“使用聊天模板 apply_chat_template”似乎是一个函数或方法的名字,因此在重写时保留了其原意,但调整了表达方式以更符合中文习惯。如果 "apply_chat_template" 是具体的短语而非固定命名,则可以考虑这样重写:“对于聊天模型,还可以应用聊天模板进行对话。” 这样更加自然流畅。
按照 Karpathy 的方法,输出的分词结果显得更加准确, 被处理为普通字符串而不是特殊标记,并且像其他任何字符串一样由底层的 BPE 分词器进行拆分:
总之,Karpathy认为编码/解码调用绝不应通过解析字符串来处理特殊令牌;这一做法应当被完全废止,而只能通过独立的代码路径以显式编程方式添加。
目前这类问题很难被发现,并且相关的文档记录也很少。预计大约有50%的现有代码可能存在此类问题。
此外,Karpathy 发现就连 ChatGPT 也存在这个 bug。
在最佳情况下,它只会自动删除令牌(token);而在最糟糕的情况下,大型语言模型(LLM)可能无法理解您的意图,甚至无法按照指示重复输出 "" 这一字符串。
有网友在评论区提出了一个问题:如果代码编写正确,但在训练数据时输入 ``,会发生什么情况?
Karpathy 回应说,如果代码没有问题,那么实际上不会发生任何事情。问题在于许多代码可能存在错误,而这可能会悄悄地破坏他们的大型语言模型。
最后,为了防止LLM漏洞引起的安全问题,Karpathy提醒大家:一定要可视化你的token,并测试你的代码。
参考资料:
(注:您提供的文本内容非常短,若需重写具体文本内容请提供更多信息。)
本文转载自微信公众号:微信公众号(ID:null),作者为耳朵和乔杨,原标题为《Apple Intelligence 存在重大安全缺陷,仅需几行代码即可攻破!Karpathy 发文提醒》。