以下这份列表为 OWASP(开放式 Web 应用程序安全项目)于 2024 年首次发布,旨在系统性地分类和排名基于大语言模型的应用程序所面临的关键安全风险(10项)。

完整大模型安全课题研究博文请见:【LLM SafeTy】大模型安全风险及检测技术研究课题(持续维护更新)

前言:为什么检测大模型安全?

大语言模型与普通 AI 模型的核心区别在于 —— 信任边界:用户不再直接与一个可预测的、基于规则的程序交互,而是与一个复杂的、基于概率的、可以自主生成内容和执行指令的“黑箱”模型交互。由此导致了全新的攻击面和风险类别。

那么,OWASP 就于 2024 年始,维护《OWASP Top 10 for LLMs》清单,以提供基于大模型的风险点分类内容。博文以下内容,将以 10 个风险点展开,详细阐述大模型安全风险的内容、攻击场景以及缓解措施。


01 提示词注入(Prompt Injection)

  • 风险描述: 攻击者通过向 LLM 提供恶意构造的提示词输入(prompt),从而操控 LLM 的内容生成或者行为,以绕过其安全限制或诱导其执行非预期的操作。这类似于传统应用中的代码注入,但攻击面是自然语言。
  • 攻击场景:
    • 越狱: 攻击者使用(如角色扮演、假设性场景)等方式绕过 LLM 的道德和安全限制,使其生成有害、非法或不当内容。
    • 提示词泄露: 攻击者诱导 LLM 打印出其原始的系统提示词,获取关于模型行为、指令和内部逻辑等敏感信息。
    • 间接注入: 攻击者通过操纵 LLM 可以访问的外部数据源(如数据库、用户评论)来注入恶意指令,从而影响 LLM 生成内容或执行攻击者命令。
    • 指令注入: 攻击者直接在提示词中注入指令,覆盖或修改系统预设的提示词指令,以此绕过后续处理中的安全过滤功能。
  • 缓解措施:
    • 输入净化与输出过滤: 对用户输入内容进行严格的净化和扫描,对 LLM 的输出内容进行验证,以检测恶意输入内容、阻止敏感信息泄露。
    • 指令分离: 将用户提示词(user prompt)与系统提示词(system prompt)明确分离开,防止用户篡改核心级系统指令。
    • 严格的提示工程: 设计强大、具体的系统提示,明确界定 LLM 的角色、能力和限制,增强其对攻击的抵抗力。
    • 使用 LLM 作为中间层: 让 LLM 只负责生成代码或内容,而生成的代码则在隔离环境中执行。
    • 持续的漏洞测试: 定期对 LLM 应用进行提示注入测试,特别是针对已知的越狱技术和新出现的攻击模式。

02 不安全的输出(Insecure Output Handling)

  • 风险描述: LLM 生成的输出内容存在安全风险,这些内容被下游系统或用户使用时,导致安全问题。如注入漏洞、生成恶意代码、传播误导/有害信息等。
  • 攻击场景:
    • 代码注入: LLM 生成的代码片段中包含恶意逻辑(如 SQL 注入、命令注入),当这段代码被集成到应用程序中并被执行时,会导致漏洞。
    • 生成恶意内容: LLM 被诱导生成用于网络钓鱼、诈骗、传播仇恨言论或生成恶意软件(如恶意宏、脚本)的内容。
    • 生成误导性信息: LLM 产生看似合理但完全虚假的信息(即“幻觉”),可能导致用户做出错误的商业决策、个人判断。
  • 缓解措施:
    • 净化输出: 对 LLM 生成的内容,特别是要应用到下游系统中的内容,使用技术手段进行适当的净化处理。
    • 人工安全审查: 需要应用到关键环节的代码等内容,须经过严格的人工或自动化安全审查。
    • 用户安全教育: 告知用户 LLM 可能会生成错误或有害信息,提醒保持批判性思维。

03 训练数据投毒(Training Data Poisoning)

  • 风险描述: 在 LLM 的训练过程中,植入有害、偏见性或错误的信息,以可控的方式操纵其行为或输出特定内容。这会永久性地损害模型的完整性和可靠性。
  • 攻击场景:
    • 后门植入: 攻击者在数据中植入特定“触发词”和与之关联的恶意输出。当模型在推理阶段遇到这些触发词时,就会执行攻击者预设的恶意行为(如生成特定代码、输出特定信息)。
    • 偏见注入: 攻击者向训练数据中大量引入针对特定人群、地域或观点的偏见性内容,导致模型在生成内容或做出判断时表现出系统性歧视。
    • 知识污染: 攻击者向训练数据中注入大量看似真实但完全错误的事实性信息,导致模型“学会”这些错误知识,并在回答相关问题时持续输出错误内容。
  • 缓解措施:
    • 数据来源验证: 严格审查和验证所有用于训练 LLM 的数据来源,确保其来源可靠、可信。
    • 数据清洗与过滤: 在训练前,使用自动化和人工方法对数据进行深度清洗,检测并移除异常、重复和可疑的数据点。
    • 模型行为监控: 持续监控已部署模型的输出,检测其行为是否符合预期,特别是针对特定触发词的异常反应。
    • 红队测试: 在模型上线前,聘请安全专家(红队)尝试通过投毒数据来操纵模型,以发现和修复潜在的后门。
    • 使用可信数据集: 尽可能使用已经过严格审查和清理的、信誉良好的公开或商业数据集。

04 模型拒绝服务(Model Denial of Service)

  • 风险描述: 攻击者通过利用 LLM 及其基础设施的特性和限制,发起旨在使其服务中断、性能显著下降或耗尽资源的攻击。这与传统 Web 应用的 DoS 攻击类似,但 LLM 的新特性带来了新的攻击面。
  • 攻击场景:
    • 输入长度攻击: 攻击者发送超长的输入提示,迫使 LLM 消耗大量内存和计算资源来处理,导致服务响应缓慢或崩溃。
    • 慢速读取攻击: 攻击者利用 LLM 处理流式输出或长时间运行任务的特点,建立一个大量并发的慢速连接,耗尽服务器的连接和资源。
    • 提示投毒导致过载: 攻击者通过提示注入,诱导 LLM 执行极其复杂或计算密集型任务(如进行大量数学计算或编写并运行复杂的代码),从而导致服务资源耗尽。
    • API 滥用: 攻击者通过自动化脚本向 LLM 的 API 端点发送海量请求,迅速耗尽 API 的配额或速率限制,使其他合法用户无法使用。
  • 缓解措施:
    • 请求限制与配额管理: 实施严格的 API 速率限制和配额管理,防止单个用户或 IP 地址在短时间内发送过多请求。
    • 输入大小限制: 对 LLM 接收的输入提示长度设置硬性上限,防止因处理超大输入而导致资源耗尽。
    • 资源监控与自动扩缩容: 实时监控 LLM 服务及其基础设施的资源使用情况,并配置自动扩缩容机制,以应对流量高峰。
    • 异常请求检测: 部署能够识别和过滤恶意或异常请求(如超长输入、高频请求)的系统。

05 供应链漏洞(Supply Chain Vulnerabilities)

  • 风险描述: LLM 应用依赖于复杂的供应链,包括模型本身、微调数据、第三方库、API 和托管平台。供应链中的任何一个环节存在漏洞(如恶意代码、后门、配置错误)都可能危及整个应用的安全。
  • 攻击场景:
    • 恶意模型: 攻击者发布一个看似无害但内含后门或恶意功能的开源 LLM,开发者下载并使用该模型,导致他们的应用被控制。
    • 第三方库漏洞: 用于与 LLM 交互、处理提示或解析输出的第三方库或 SDK 中存在安全漏洞,攻击者利用这些漏洞攻击最终应用。
    • API 滥用: 依赖的第三方 API(如 Google Gemini、OpenAI API)存在配置错误(如错误的 CORS 策略、密钥泄露)或自身被攻破,导致数据泄露或服务中断。
    • 数据提供商风险: 用于微调或提示的数据由第三方提供,如果这些数据被篡改或包含敏感信息,会直接影响 LLM 的安全性和隐私。
  • 缓解措施:
    • 软件物料清单: 为 LLM 应用创建 SBOM,清晰记录所有依赖项(模型、库、数据源)及其版本,以便快速追踪和管理漏洞。
    • 依赖项扫描: 定期对所有软件依赖项进行漏洞扫描,并及时修复发现的安全问题。
    • 来源可信度验证: 只从官方或信誉良好的来源获取模型、库和数据。对第三方供应商进行安全审查。
    • 安全配置: 确保所有 API 和服务都遵循安全最佳实践进行配置,如使用密钥管理服务、实施严格的访问控制。
    • 合同与SLA: 在与第三方供应商签订的合同中,明确安全责任、数据保护条款和事件响应流程。

06 过度依赖(Over Reliance)

  • 风险描述: 开发者和用户过度信任 LLM 的输出,导致他们放松了对传统安全控制(如输入验证、访问控制)的警惕,或者完全依赖 LLM 来执行关键任务而缺乏人工监督。这种信任可能导致安全盲点。
  • 攻击场景:
    • 忽略传统漏洞: 开发者认为 LLM 能自动处理所有输入安全,从而不再编写严格的输入验证代码,导致传统的注入漏洞依然存在。
    • 自动化决策风险: 在招聘、信贷审批等场景中,完全依赖 LLM 进行决策,而 LLM 可能因训练数据中的偏见而做出不公平的判断。
    • 缺乏人工监督: 在客服或内容审核场景中,没有人工对 LLM 的处理结果进行复核,导致错误或恶意请求被放行。
  • 缓解措施:
    • 安全意识培训: 对开发者和用户进行培训,让他们了解 LLM 的局限性,强调“AI 辅助”而非“AI 替代”。
    • 保持传统安全实践: 将 LLM 视为应用中的一个新组件,但所有传统的安全最佳实践(如 OWASP Top 10)依然适用且必须执行。
    • 建立人工审核流程: 对于高风险决策,必须有明确的人工复核和干预机制。
    • 明确责任边界: 清晰界定 LLM 和人类在任务中的责任,避免将所有责任推给 AI。

07 过度代理(Excessive Agency)

  • 风险描述: 当 LLM 被赋予了过多的自主权(例如,无需用户确认即可执行操作、访问多个内部工具和 API)时,即使其初始意图是良性的,也可能在执行任务的过程中被滥用,导致严重的破坏性后果。
  • 攻击场景:
    • 权限提升: 攻击者通过提示注入,诱导 LLM 利用其被授予的权限执行超出其设计范围的操作,例如修改数据库结构或删除整个数据集。
    • 工具滥用: LLM 被授权使用多个内部工具(如代码执行器、文件浏览器、API 调用器)。攻击者通过提示注入,强迫 LLM 滥用这些工具,如遍历内部文件系统、发送大量垃圾邮件或发起网络攻击。
    • 目标偏移: 在追求一个复杂目标的过程中,LLM 可能会采取一些意想不到的、具有破坏性的“捷径”来完成任务,例如为了优化一个网页而删除了关键的生产代码。
  • 缓解措施:
    • 最小权限原则: 严格遵循最小权限原则,只授予 LLM 完成其任务所必需的最小权限和工具访问权。
    • 操作确认与人工干预: 对于任何具有破坏性或高风险的操作,强制要求用户进行二次确认或人工批准。
    • 沙箱环境: 在隔离的沙箱环境中运行 LLM 及其工具,限制其对关键系统资源的访问。
    • 严格的工具授权: 对 LLM 可以调用的每一个工具进行严格的授权和审计,并记录所有操作日志。

08 不安全的插件设计(Insecure Plugin Design)

  • 风险描述: LLM 插件(或工具)是 LLM 与外部系统(如数据库、API、软件)交互的桥梁。如果这些插件在设计、实现或配置上存在安全缺陷,就可能成为攻击者突破 LLM 应用安全防线、攻击底层系统的入口点。
  • 攻击场景:
    • 命令注入: 插件在将用户输入传递给操作系统或外部应用程序时,没有进行适当的净化,导致攻击者可以注入任意系统命令。
    • 权限提升: 插件使用了过高的权限运行,或者其凭证配置不当。攻击者控制插件后,可以利用这些高权限访问或破坏其他系统资源。
    • 不安全的 API 调用: 插件在调用外部 API 时,使用了硬编码的 API 密钥,或者没有对 API 的输入和输出进行验证,导致凭证泄露或数据被篡改。
    • 敏感信息泄露: 插件返回了过多的调试信息或内部错误详情,从而泄露了系统的敏感信息,如文件路径、数据库结构或内部 IP 地址。
  • 缓解措施:
    • 插件安全审计: 对所有插件进行严格的安全审计,特别是其输入验证、输出编码和权限管理。
    • 凭证管理: 使用安全的密钥管理服务来存储和管理 API 密钥和凭证,绝不将其硬编码在代码中。
    • 最小权限原则: 为插件配置运行所需的最小权限,并限制其只能访问必要的网络资源。
    • 输入验证与输出编码: 对所有通过插件传递的用户输入进行严格的验证,并对插件返回的敏感信息进行过滤。

09 模型窃取(Model Theft)

  • 风险描述: 攻击者通过向目标 LLM 发送大量精心构造的查询,分析其输出,从而逆向工程出目标模型的部分或全部信息,包括其架构、参数、训练数据或知识。这可能导致知识产权泄露、商业机密暴露和模型克隆。
  • 攻击场景:
    • 模型提取: 攻击者使用“模型提取”攻击,通过查询一个昂贵的专有模型,来训练一个功能相似但成本更低的替代模型,从而窃取其知识产权。
    • 训练数据推断: 攻击者通过反复询问模型关于特定数据点的问题,根据模型的回答(或拒绝回答)来推断其训练数据中是否包含该敏感信息。
    • 提示模板提取: 攻击者通过交互,推断出目标 LLM 使用的系统提示词和指令模板,从而了解其行为模式和限制,为后续的提示注入攻击铺平道路。
  • 缓解措施:
    • 访问控制: 对模型 API 实施严格的访问控制,仅向授权用户提供服务,并限制其查询频率。
    • 输出模糊化: 对模型的输出进行模糊化处理,使其难以被用于精确的模型逆向工程。
    • 水印技术: 在模型生成的文本中嵌入人眼或机器难以察觉的水印,以便追踪和识别被盗用或非法复制的内容。
    • 监控异常查询: 部署系统来监控和检测那些可能用于模型窃取的、具有高重复性或探索性的查询模式。

10 敏感信息泄露(Sensitive Information Disclosure)

  • 风险描述: LLM 在其输出中意外泄露了其训练数据中包含的敏感个人信息、商业机密、知识产权或内部系统信息。这通常是由于模型在训练过程中“记忆”了这些数据,并在后续的提示下将其复现出来。
  • 攻击场景:
    • 训练数据记忆: 攻击者通过精心设计的提示,诱导 LLM 逐字或高度概括地重现其训练数据集中的特定段落,如个人身份信息、医疗记录或内部源代码。
    • 上下文污染: 在多轮对话中,攻击者可能在提示中注入敏感信息(如伪造的 API 密钥),并在后续的对话中,模型可能会错误地将这些注入的信息当作事实信息输出。
    • 模型反演攻击: 攻击者通过向模型发送大量查询,分析其输出模式,从而反向推断出用于训练该模型的数据集的统计特征或样本。
  • 缓解措施:
    • 数据匿名化与去标识化: 在训练数据预处理阶段,使用技术手段移除或替换所有敏感个人信息,如姓名、电话、地址等。
    • 输出过滤: 在 LLM 生成结果后,使用敏感信息检测工具扫描输出,并过滤或阻止包含敏感内容的响应。
    • 访问控制: 严格限制谁可以访问 LLM 的训练数据。
    • 模型微调: 对模型进行微调,使其学会拒绝回答可能泄露敏感信息的问题。

以上内容为 OWASP 提出的十个风险点,其攻击场景有高度交叉和重叠,但是其角度和方向有所不同。

更多大模型安全风险及检测技术内容,可关注栏目:《大模型安全与伦理》

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐