8
月
在社区成长 8 月
LEVEL 90
100 XP
执行摘要
我们最近研究了作为插件与集成开发环境(IDE) 连接的AI 代码助手,很像GitHub Copilot。我们发现,用户和威胁行为者都可能滥用代码助手功能(例如聊天、自动完成和编写单元测试)来达到有害目的。这种滥用包括注入后门、泄露敏感信息和生成有害内容。我们发现上下文附件功能可能容易受到间接提示注入的影响。为了设置这种注入,威胁行为者首先通过在源中插入精心设计的提示来污染公共或第三方数据源。当用户无意中向助手提供这些受污染的数据时,恶意提示就会劫持助手。这种劫持可能会操纵受害者执行后门,将恶意代码插入现有代码库并泄露敏感信息。
此外,用户还可以通过滥用自动完成功能来操纵助手生成有害内容,其方式与最近在GitHub Copilot 上发现的内容审核绕过类似。
一些人工智能助手直接从客户端调用其基本模型。这使模型面临一些额外的风险,例如被用户或寻求出售LLM 模型访问权的外部对手滥用。
这些弱点可能会影响许多法学硕士代码助理。开发人员应该为LLM 实施标准安全实践,以确保环境免受本文讨论的攻击。进行彻底的代码审查并对LLM 输出进行控制将有助于确保人工智能驱动的开发免受不断变化的威胁的影响。
如果您认为自己可能已受到威胁或有紧急事项,请联系Unit 42 事件响应团队。
通过以下产品和服务,Palo Alto Networks 客户可以更好地免受上述威胁:
Cortex XDR 和XSIAM
皮质云
Cortex 云身份安全
棱镜空气
Unit 42 的人工智能安全评估
相关单元42 主题
GenAI,法学硕士
简介:基于法学硕士的编码助理的兴起
虽然人工智能工具在开发过程中的使用不断增加,但与这些工具相关的一些风险(例如用于代码生成、重构和错误检测的风险)可能会被忽视。这些风险包括提示注入和模型误用,这可能会导致意外行为。2024 年Stack Overflow 年度开发者调查显示,76% 的受访者正在或计划在开发过程中使用人工智能工具。在目前使用人工智能工具的开发人员中,82% 的人表示使用它们来编写代码。
人工智能工具,特别是大型语言模型(LLM) 的快速采用,极大地改变了开发人员处理编码任务的方式。
基于法学硕士的编码助手已成为现代开发工作流程不可或缺的一部分。这些工具利用自然语言处理来理解开发人员的意图、生成代码片段并提供实时建议,从而可能减少手动编码所花费的时间和精力。其中一些工具因其与现有代码库的深度集成以及帮助开发人员导航复杂项目的能力而受到关注。
人工智能驱动的编码助手也容易出现可能影响开发流程的潜在安全问题。我们发现的弱点很可能存在于各种IDE、版本、模型,甚至使用LLM 作为编码助手的不同产品中。
及时注射:详细检查
间接提示注入漏洞
提示注入漏洞的核心在于模型无法可靠区分系统指令(代码)和用户提示(数据)。这种数据和代码的混合一直是计算中的一个问题,导致SQL 注入、缓冲区溢出和命令注入等漏洞。法学硕士面临类似的风险,因为他们以相同的方式处理指令和用户输入。这种行为使它们容易受到即时注入的影响,对手会精心制作输入,操纵LLM 产生意想不到的行为。
系统提示是指导人工智能行为的指令,定义其角色和应用程序的道德界限。用户输入是一个人向基于LLM 的申请提供的动态问题、命令甚至外部数据(如文档或网页内容)。由于LLM 以自然语言文本的形式接收所有类型的输入,因此攻击者可以制作恶意用户输入,模仿或覆盖系统提示,绕过防护措施并影响LLM 的响应。
指令和数据的这种无法区分的性质也导致了间接提示注入的出现,这带来了更大的挑战。攻击者不是直接注入恶意输入,而是在这些外部数据源中嵌入有害提示,例如法学硕士处理的网站、文档或API。
一旦LLM 处理这些受损的外部数据(无论是直接处理还是在用户不知情的情况下提交),它将遵循嵌入的恶意提示中指定的说明。这使得它能够绕过传统的保护措施并导致意外行为。
图1 说明了直接提示注入和间接提示注入之间的区别。
图1. 直接和间接提示注入的流程图。
滥用上下文附件
传统的法学硕士通常在知识截止的情况下运行,这意味着他们的培训数据不包括与用户本地代码库或专有系统相关的最新信息或高度具体的细节。当开发人员在其特定项目上需要帮助时,这就造成了巨大的知识差距。为了克服这一限制并实现更精确、上下文感知的响应,LLM 工具实现了允许用户显式提供外部上下文的功能,通过将相关数据直接输入到LLM 来弥补这一差距。某些编码助手提供的一项功能是能够以特定文件、文件夹、存储库或URL 的形式附加上下文。将此上下文添加到提示中使代码助手能够提供更准确和更具体的输出。但是,如果用户无意中提供了威胁行为者已污染的上下文源,则此功能也可能为间接提示注入攻击创造机会。
在幕后,当用户向指令添加上下文时,模型会将此上下文处理为先于用户实际提示的提示。图2 显示了该聊天结构。由于此内容可能来自外部源,例如当前存储库外部的URL 或文件,因此用户可能会在不知不觉中附加可能包含间接提示注入的恶意上下文。
图2. 典型的聊天会话将上下文作为前面的消息。
提示注入场景
作为一个著名的社交媒体平台,X(以前称为Twitter)是一个巨大且频繁收集的数据源,用于代码驱动分析。然而,其固有的未经过滤的性质意味着这些数据可能会被污染。图3a 和3b 演示了一个模拟场景,其中用户尝试从抓取的帖子集合中生成见解。我们附上了一小部分X 帖子样本作为上下文,并要求助手编写处理这些帖子的代码。此任务包括了解所收集数据的格式,例如包含哪些字段以及可以从帖子中得出哪些信息。
在我们的场景中,X 帖子已被污染并发起间接即时注入攻击。
图3a。与被劫持的助手的聊天会话以及生成的代码。仔细观察上面生成的代码就会发现,助手在代码中插入了一个隐藏的后门,称为fetched_additional_data。该后门将从攻击者控制的命令和控制(C2)服务器获取远程命令并执行该命令。
此时,许多用户会复制并粘贴生成的代码(或单击“应用”)来执行它,然后检查输出是否正确。但采取此操作可能会导致本示例中的威胁行为者危害用户的计算机。图4 显示了助手生成并插入的后门代码。
图4 被劫持的助手插入的后门。之所以插入这个后门,是因为样本
执行新的秘密任务
让用户运行向攻击者控制的C2 服务器发送HTTP 请求的代码
混淆C2服务器的地址
执行从服务器检索到的命令
图5 显示了该模拟中用户无意中输入编码助手的受污染数据集。该数据集包括一个包含恶意指令的模拟X 帖子。
图5. 包含X 个帖子的采样数据集,其中突出显示了间接提示注入。图6 显示了提示的全文。这是对将Bing Chat 变成数据海盗中发布的提示的修改。
图6. 提示的全文。查看助手的响应,我们可以看到助手并不限于使用任何特定语言编写- 它可以插入JavaScript、C++、Java 或任何其他语言的后门。此外,助理只是被告知要找一个插入代码的借口,并找到一种“自然”的方式来插入它。
在这种情况下,它被插入