| ID | 描述 |
|---|---|
| LLM01 | 提示注入 :攻击者直接或间接地操纵 LLM 的输入,以导致恶意或非法行为。 |
| LLM02 | 敏感信息泄露 :攻击者诱使 LLM 在响应中泄露敏感信息。 |
| LLM03 | 供应链 : 攻击者利用 LLM 供应链中任何部分的漏洞。 |
| LLM04 | 数据和模型中毒 : 攻击者将恶意或误导性数据注入 LLM 的训练数据中,损害性能或创建后门。 |
| LLM05 | 输出处理不当 : LLM 输出被不安全地处理,导致注入漏洞,如跨站脚本(XSS)、SQL 注入或命令注入。 |
| LLM06 | 过度代理 : 攻击者利用 LLM 访问权限限制不足。 |
| LLM07 | 系统提示泄露 : 攻击者诱骗 LLM 泄露系统指令,可能启用更高级的攻击向量。 |
| LLM08 | 向量和嵌入的弱点 : 攻击者利用与 LLM 应用中向量或嵌入的处理或存储相关的漏洞。 |
| LLM09 | 错误信息 : LLM 生成的响应包含错误信息,可能导致安全问题。 |
| LLM10 | 无限制消耗 : 攻击者向 LLM 提供导致高资源消耗的输入,可能中断 LLM 服务或产生高成本。 |
提示注入 (LLM01) #
提示注入是一种安全漏洞,发生在攻击者能够操纵 LLM 的输入时,这可能导致 LLM 偏离其预定行为。虽然这可能包括看似无害的例子,例如诱骗 LLM 技术支持聊天机器人提供烹饪食谱,但它也可能导致 LLM 生成故意虚假的信息、仇恨言论或其他有害或非法的内容。此外,如果敏感信息已被共享给 LLM,提示注入攻击还可能被用来获取这些信息。
敏感信息泄露 (LLM02) #
LLM 可能会在响应中无意泄露机密数据,从而导致未经授权的数据访问、隐私侵犯甚至安全漏洞。限制 LLM 可以访问的信息数量和类型至关重要。特别是,如果 LLM 处理敏感或关键业务信息(如客户数据),则应充分限制对 LLM 的查询访问,以最大程度地降低数据泄露的风险。如果 LLM 是使用自定义训练数据集进行微调的,必须记住它可能会被诱骗泄露有关训练数据的细节。因此,应根据重要性对训练数据中包含的敏感信息进行识别和评估。
供应链漏洞 (LLM03) #
关于 LLM 的供应链漏洞涵盖了 LLM 供应链中的任何系统或软件。这可能包括训练数据、来自其他提供商的预训练 LLM,甚至包括与 LLM 交互的插件或其他系统。 供应链漏洞的影响差异很大。典型的例子是数据泄露或知识产权的公开。
数据和模型中毒(LLM04) #
任何 LLM 的质量和能力都高度依赖于训练过程中使用的数据。训练数据中毒是指操纵全部或部分训练数据以引入偏差,从而诱导模型做出故意错误的决策。根据中毒 LLM 的用途,如果 LLM 生成的代码片段被用于其他地方,这可能会导致声誉受损,甚至在软件组件中产生更严重的安全漏洞。
要成功实施训练数据中毒,攻击者必须获得对 LLM 训练数据的访问权限。如果 LLM 是在公开数据上训练的,那么清理训练数据对于验证其完整性和消除任何不需要的偏差至关重要。进一步的缓解策略包括对训练数据的供应链、训练数据的合法性进行细粒度的验证检查,以及使用适当的输入过滤器来移除虚假或错误的训练数据。
输出处理不当 (LLM05) #
LLM 生成的文本应与不受信任的用户输入一样对待。如果 Web 应用程序没有正确验证或清理 LLM 的输出,可能会出现常见的 Web 漏洞,如跨站脚本 (XSS)、SQL 注入或代码注入。
此外,应始终检查 LLM 输出是否符合预期的语法和值。例如,我们可以设想这样一个场景:LLM 根据用户提供的文本从数据库查询数据,并将内容显示给用户。如果用户提供类似"给我博客文章 #3 的内容"的输入,模型可能会生成输出 SELECT content FROM blog WHERE id=3。后端 Web 应用程序随后可以使用 LLM 输出查询数据库并向用户显示相应内容。除了潜在的 SQL 注入攻击向量外,对 LLM 生成的 SQL 查询应用某种合理性检查至关重要。如果没有这些检查,可能会发生意外行为。如果攻击者能让 LLM 生成查询 DROP TABLE blog,所有数据都将丢失。
过度代理(LLM06) #
如果给予 LLM 超出其运行所需的代理权限(Agency),可能会出现安全漏洞。与最小特权原则类似,限制 LLM 的功能对于减少恶意行为者的攻击面至关重要。
例如,如果 LLM 可以与其他系统或服务接口,我们需要确保实施白名单机制,使 LLM 仅能访问所需的服务。除此之外,我们需要考虑我们要让 LLM 做什么,并将其权限限制在该特定用途上。考虑这样一个场景:LLM 与 SQL 数据库接口以为用户获取数据。如果我们不限制 LLM 的数据库访问权限,就有可能诱骗其执行 DELETE 或 INSERT 语句,从而影响数据库的完整性。
系统提示泄露(LLM07) #
系统提示 (System Prompt) 指的是给予 LLM 的一组指令,通常定义了其行为框架(例如角色或人设),以确保生成的输出与预期目标一致。它还可能为 LLM 提供上下文信息以提高响应质量。攻击者可能会使用提示注入载荷 (LLM01) 强迫 LLM 泄露部分系统提示,从而可能泄露敏感信息或 LLM 有权访问的敏感功能。了解系统提示通常使攻击者能够进一步探测并发起更具破坏性的攻击。因此,泄露系统提示通常是攻击 LLM 应用程序的第一步。
向量与嵌入弱点 (LLM08) #
许多 LLM 应用程序使 LLM 能够动态获取额外资源,以显著提高生成响应的质量。这被称为 检索增强生成 (RAG),它使 LLM 能够从文件或网站读取信息。LLM 需要 嵌入 (Embeddings) 或 向量表示 来处理文本信息。生成或存储这些嵌入过程中的漏洞可能会导致严重的安全问题。例如,这些嵌入中的中毒数据可能会改变 LLM 的行为。此外,如果嵌入存储不当,未经授权的攻击者可能能够获得访问权限,从而可能从嵌入中泄露敏感信息。
错误信息 (LLM09) #
LLM 生成的响应中的错误信息可能源于看似准确但实际上不正确或误导性的信息。LLM 可能会生成看似可信但完全是捏造的响应,甚至可能包含伪造的来源。这种行为被称为 幻觉 (Hallucination)。产生幻觉的 LLM 可能会导致不准确、有害或危险的响应。当 LLM 生成的源代码包含未被正确检查的错误(Bug)时,这种错误信息来源可能会导致安全漏洞。此外,它可能会对人类造成伤害,例如在提供错误的医疗建议时。
当存在 过度依赖 (Overreliance)(即对响应给予过度信任)时,LLM 生成响应中错误信息的影响会加剧。在与 LLM 交互时,检查生成响应的事实正确性至关重要。
无限制消耗 (LLM10) #
针对 LLM 的 拒绝服务 (DoS) 攻击类似于针对任何其他系统的 DoS 攻击。DoS 攻击的目标是通过降低服务的可用性来损害其他用户使用 LLM 的能力。由于 LLM 通常计算成本高昂,一个导致高资源消耗的特制查询可以轻易压垮可用的系统资源,如果服务没有建立适当的保障措施或足够的资源,就会导致系统中断。此外,如果受害者使用基于云的 AI 服务的按次付费模式,无限制的消耗可能会导致经济损失,或者通过在大量输入-输出对上训练替代模型来实现模型盗窃。
为了防止因无限制消耗而导致的攻击,正确验证用户输入至关重要。然而,由于 LLM 的不确定性和不可预测性,仅仅通过将特定用户查询列入黑名单是不可能防止 DoS 攻击的。因此,这种对策需要辅以严格的速率限制和资源消耗监控。