OWASP-Top-10-for-LLMs-2023

发布时间 2023-08-07 17:55:42作者: 郑瀚Andrew

一、LLM01:Prompt Injection

0x1:攻击原理

这通过特殊构造的输入来污染/覆盖prompt提示,以此攻击一个大型语言模型(LLM),使其产生非预期的意外行为。

提示注入漏洞(Prompt Injection Vulnerability)是指攻击者通过精心构造的输入,操控一个大型语言模型(LLM),使得LLM在不知情的情况下执行攻击者的意图。

攻击可以直接通过越狱(jailbreaking)系统提示符来实现,也可以通过操纵外部输入来间接实现,可能导致数据泄漏、社交工程等问题。

  • 直接提示注入(Direct Prompt Injections),也称为“越狱”,发生在恶意用户覆盖底层系统提示符。这可能会让攻击者利用LLM中不安全的函数和数据访问,攻击后端系统。
  • 间接提示注入(Indirect Prompt Injections),当LLM接受外部来源的输入(例如网站地址或者文件)时,就会发生间接提示注入。攻击者可能通过在外部内容中嵌入提示注入以此来劫持和LLM对话的上下文(例如操纵LLM访问其他系统)。此外,间接提示注入不需要人类可见/可读,只要文本能够被LLM解析即可。

成功的提示注入攻击的结果可能大相径庭,从获取敏感信息到在正常操作的伪装下影响关键决策过程。

在高级攻击中,LLM可以被操纵以模仿有害角色或与用户设置中的插件进行交互,这可能导致敏感数据泄漏、未经授权的插件使用或社交工程。在这些情况下,被入侵的LLM有效地充当攻击者的代理,绕过标准安全措施,使用户对入侵毫无察觉。在这些情况下,被入侵的LLM实际上是攻击者的代理,而不会触发通常的安全措施或向系统管理员发出警报。

0x2:漏洞示例

  1. 命令注入:恶意用户对 LLM 进行直接提示注入。指示其忽略应用程序创建者的系统提示,而是执行攻击者构造的攻击提示,比如返回隐私信息、危险或不良内容。
  2. 逻辑越权:恶意用户上传包含间接提示注入的简历。这文档包含提示注入,其中包含针对 LLM 的的指令,指明该文件是一份优秀的简历(例如。 优秀的候选人或工作角色)。 

  • 业务命令注入:开发者启用了访问电子商务网站的插件。攻击者在受控网站上嵌入恶意指令,导致未经授权的购买。
  • 命令注入:恶意用于在受控网站上嵌入流氓指令(指示LLM忽略先前的用户指令并使用LLM插件删除用户的电子邮件),以此来攻击LLM的插件调用。当用户使用LLM来概述这个网页时,LLM插件会删除用户的电子邮件。
  • 业务命令注入:恶意攻击者向基于LLM的支持聊天机器人提供了直接的提示注入。注入包含“忘记所有先前指令”和新指令,用于查询私人数据存储和利用包漏洞以及后端函数中缺乏输出验证的功能用于发送电子邮件。这导致重新执行代码,获取未经授权的访问和权限提升。

0x3:预防方法

由于LLMs的架构特性,prompt同时充当了程序框架代码和输入数据通道两种功能,导致LLM无法将指令和外部数据分开,因此可能存在提示注入漏洞。

由于LLM使用自然语言,它会将所有形式的输入都视为用户提供的输入。因此,在LLM中没有绝对可靠的预防措施,但可以采取以下措施来减轻提示注入的影响。

  1. 在LLM访问后端系统时强制执行权限控制。为LLM提供独立的API令牌或可扩展功能,例如插件、数据访问和函数级权限。同时遵循最小权限原则,仅限制LLM对其目标操作所必需的最低级别访问权限。
  2. 在可扩展功能中插入人工参与环节。在执行特权操作(例如发送或删除电子邮件)时,要求应用程序首先要求用户批准该操作。这将减轻间接提示注入的机会,以便防止用户在其不知情或未经同意的情况下执行操作。
  3. 将用户提示与外部内容分隔开来。分离并标示出不可信的内容的使用位置,以限制其对用户提示的影响。例如,使用ChatML或OpenAI API调用向LLM指示提示输入的来源。
  4. 在LLM、外部资源和可扩展功能(例如插件或下游函数)之间建立信任边界。将LLM视为不可信任的用户,并在决策过程中保持最终用户的控制。然而,被入侵的LLM仍可能充当应用程序API和用户之间的中间人,它可能在向用户呈现信息之前隐藏或篡改信息。向用户明显突出显示潜在不可信的响应。

参考链接:

https://owasp.org/www-project-top-10-for-large-language-model-applications/assets/PDF/OWASP-Top-10-for-LLMs-2023-v1_0.pdf
https://github.com/owasp/www-project-top-10-for-large-language-model-applications
https://arxiv.org/pdf/2306.05499.pdf 

 

二、LLM02:Insecure Output Handling

0x1:攻击原理

不安全的输出处理是一种漏洞,当下游组件盲目接受大型语言模型(LLM)输出而没有进行适当的审查时就会出现这种漏洞,例如直接将LLM输出传递给后端、特权或客户端函数。

由于LLM生成的内容可能受到提示输入的控制,因此这种行为类似于向用户提供间接访问其他功能的能力。成功利用不安全的输出处理漏洞可能导致网络浏览器中的XSS和CSRF,以及后端系统中的SSRF、权限提升或远程代码执行。

尤其值得注意的是,以下条件可能增加此漏洞的影响:

  • 应用程序授予LLM超出终端用户意图的特权,从而可能导致权限提升或远程代码执行。
  • 应用程序容易受到外部提示注入攻击的漏洞,攻击者可以通过这种攻击获得对目标用户环境的特权访问。

0x2:漏洞示例

LLM输出被直接输入到系统shell或类似的函数(例如exec)中,从而导致远程代码执行。

  • LLM生成JavaScript或Markdown并返回给用户,然后,这段代码被浏览器解释,导致XSS漏洞。
  • 一个应用程序利用一个LLM插件来为聊天机器人功能生成响应。然而,该应用程序直接将LLM生成的响应传递到一个内部函数,该函数负责执行系统命令而没有进行适当的验证。这使得攻击者能够操纵LLM的输出,从而在底层系统上执行未经授权的访问或未经检查的系统修改。
  • 一个用户使用一个由LLM支持的网站摘要工具生成一个精简的摘要。该网站包含一个提示注入,指示LLM从网站内部或者用户对话中捕获敏感信息。然后,LLM可以对敏感数据进行编码,并将其发送到一个受攻击者控制的服务器。
  • 恶意用户指示LLM将一个JavaScript负载在没有进行必要的过滤和编码的前提下返回给用户。比如一个允许用户输入远程URL参数并要求对齐进行概括总结,并将LLM的结果直接返回给前端用户。

三、LLM03:Training Data Poisoning

0x1:攻击原理

任何机器学习方法的起点都是训练数据,简单来说就是"原始文本"。为了具备高度的能力(例如具备语言和世界知识),这些文本应该覆盖广泛的领域、体裁和语言。大型语言模型利用深度神经网络根据从训练数据中学到的模式生成输出。

训练数据篡改是指操纵数据或微调过程以引入可能损害模型安全性、效果或道德行为的漏洞、后门或偏见。被篡改的信息可能会被呈现给用户,或者产生其他风险,如性能下降、下游软件利用和声誉受损。即使用户不信任有问题的AI输出,风险仍然存在,包括降低模型能力和对品牌声誉的潜在损害。

数据篡改被视为完整性攻击,因为对训练数据进行篡改会影响模型输出正确预测的能力。自然而然,外部数据源具有更高的风险,因为模型创建者无法控制数据,也无法对数据内容是否存在偏见、伪造信息或不适当内容具有高度的信心。

典型地数据来源包括Common Crawl、WebText、OpenWebText和书籍等。  

0x2:漏洞示例

  • 一位恶意行为者或竞争对手故意针对模型的训练数据,创建不准确或恶意的文件(偏见观点、犯罪、虚假数据等)。受害模型使用虚假信息进行训练,被污染的结果在生成式AI提示的输出中反映出来,进而影响其消费者。
  • 模型使用未经验证的数据进行训练,这些数据的来源、原始性或内容未经核实。
  • 当模型位于基础架构中时,它可以不受限制地访问或缺乏充分的沙盒隔离来收集用作训练数据的数据集,这会对生成式AI提示的输出产生负面影响,并且使数据管理失去控制。

0x3:预防方法

  • 确保训练数据的供应链安全,特别是在外部获取数据时,同时维护类似于“软件材料清单(SBOM)”的验证方法。
  • 验证目标数据源的正确合法性,同时对在训练和微调阶段获取的数据保持验证。
  • 验证您的LLM的使用案例和将要集成的应用程序。通过使用不同的训练数据或微调数据为不同的使用案例创建不同的模型,以根据定义的使用案例生成更精细和准确的生成式AI输出。
  • 确保存在足够的沙盒隔离,以防止模型从意外数据源中获取数据,这可能会影响机器学习输出。
  • 使用严格的验证或输入过滤器来控制伪造数据的数量,针对特定的训练数据或数据源类别。数据消毒可以采用统计异常检测和异常检测方法等技术,以检测和删除可能被注入到微调过程中的对抗性数据。
  • 采用对抗性鲁棒性技术,如联邦学习和限制条件,以最小化对抗性训练或异常值对训练数据的最坏情况扰动。
    • 采用“MLSecOps”的方法,将对抗性鲁棒性纳入到训练生命周期中
  • 测试和检测,通过测量训练阶段的损失并分析经过训练的模型,检测特定测试输入上的中毒攻击迹象。
    • 监控并警报超过阈值的偏斜响应数量。
    • 使用人工审核来审查响应和审计。
    • 部署专用的LLM进行基准测试,以防止不良后果,并使用强化学习技术来训练其他LLM。
    • 在LLM生命周期的测试阶段进行基于LLM的红队演练或LLM漏洞扫描。 
 

四、LLM04:Model Denial of Service 

0x1:攻击原理

攻击者与LLM进行交互的方法消耗了异常高的资源,导致他们和其他用户的服务质量下降,并可能产生高额的资源成本。

此外,一个新兴的主要安全问题是攻击者可能干扰或操纵LLM的上下文窗口。由于LLM在各种应用中的广泛使用、资源的密集利用、用户输入的不可预测性以及开发人员对这一漏洞的普遍无知,这个问题变得越来越严重。在LLMs中,上下文窗口代表模型能够处理的文本的最大长度,包括输入和输出。这是LLMs的关键特征,它决定了模型能够理解的语言模式的复杂性和它可以在任何给定时间处理的文本的大小。上下文窗口的大小由模型的架构定义,不同的模型之间可能有所不同。

总结来说,攻击者对大语言模型(LLM)进行资源密集型操作,导致服务降级或高昂的成本。由于LLM的资源密集型特性和用户输入的不可预测性,这种漏洞的危害性很容易被放大。  

0x2:漏洞示例

  • 攻击者通过不断提交prompt请求,导致队列中生成大量任务,例如使用LangChain或AutoGPT。
  • 攻击者通过发送异常耗费资源的查询,可能是因为使用了异常的词法或者罕见的问题。
  • 持续输入溢出,攻击者向LLM发送一系列超过其上下文窗口的输入,导致模型消耗过多的计算资源。
  • 重复长输入,攻击者反复向LLM发送长输入,每个输入都超过上下文窗口的限制。 ƒ
  • 递归上下文扩展,攻击者构造触发递归上下文扩展的输入,强制LLM反复扩展和处理上下文窗口。
  • 变长输入洪水,攻击者向LLM洪水般地发送大量变长输入,每个输入都精心制作,刚好达到上下文窗口的限制。这种技术旨在攻击变长输入的不完善地方,从而对LLM进行压力测试。

0x3:预防方法

  • 实现一个输入验证和过滤,以此来确保输入到LLM数据流的query不存在恶意内容。
  • 对每个用户单独限制一个资源开销阈值,这会导致单独用户的执行速度更快,但是从总体上可以防止单点资源消耗型dos
  • 强制对api的调用速率进行限制
  • 使用队列、缓冲区等机制,限制单位时间内向LLM数据流发起的请求数量
  • 持续监控LLM数据流处理的资源消耗情况和波动情况
  • 对query prompt的上下文窗口施行强制大小限制 
 

五、LLM05:Supply Chain Vulnerabilities

0x1:攻击原理

传统上,供应链漏洞风险主要集中在软件组件上,但LLM通过由第三方提供的预训练模型和训练数据扩展了这一范围,使其容易受到篡改和毒化攻击的影响。例如:

  • 使用不安全的第三方数据集。
  • 预训练模型可能存在逻辑后门。
  • 模型插件可能会增加漏洞风险。

0x2:漏洞示例

  • 传统的第三方软件包漏洞,包括过时或废弃的组件
  • 使用易受攻击的预训练模型进行微调
  • 使用毒化的众包数据进行训练
  • 使用不再维护的过时或废弃的模型会导致安全问题
  • 模型运营商的条款和数据隐私政策不清晰,导致应用程序的敏感数据被用于模型训练和随后的敏感信息暴露。

0x3:预防方法

  • 仔细审查数据源和供应商,包括他们的条款和隐私政策,只使用可信赖的供应商。确保已经采取了足够的、经过独立审核的安全措施,并且模型运营商的政策与您的数据保护政策一致,即您的数据不会被用于训练他们的模型
  • 只使用有声誉的插件,并确保它们已经针对您的应用程序要求进行了测试。 
  • 应用OWASP Top10中列举的脆弱性发现和缓解措施,这包括漏洞扫描、漏洞管理和补丁组件。对于能够访问敏感数据的开发环境,也要在这些环境中应用这些控件。
  • 使用软件材料清单(SBOM)维护一个最新的组件清单,以确保您拥有一个最新、准确并经过签名的清单,以防止部署软件包被篡改。
  • 如果您的AI应用程序使用自己的模型,您应该使用MLOps的最佳实践和提供安全模型库、数据、模型和实验跟踪的平台。
  • 对模型和数据进行异常检测和对抗鲁棒性测试,可以帮助检测篡改和毒化。理想情况下,这应该是MLOps流程的一部分;然而,这些是新兴的技术手段,可能更容易作为红队演习的一部分来实施。 
  • 实施足够的监控措施,以覆盖组件和环境漏洞扫描、未经授权的插件使用以及过时组件,包括模型及其工件。实施补丁策略,以减轻脆弱或过时的组件。

六、LLM06:Sensitive Information Disclosure

0x1:攻击原理

七、LLM07:Insecure Plugin Design

0x1:攻击原理

八、LLM08:Excessive Agency

0x1:攻击原理

十、LLM10:Model Theft

0x1:攻击原理