Skip to main content

OWASP LLM Top 10

OWASP 大型语言模型应用程序 Top 10 旨在教育关于部署和管理 LLM 时的安全风险。它根据影响、可利用性和普遍性列出了 LLM 应用程序中的十大关键漏洞。

目前的前十名是:

  1. LLM01:提示注入
  2. LLM02:不安全的输出处理
  3. LLM03:训练数据中毒
  4. LLM04:模型拒绝服务
  5. LLM05:供应链漏洞
  6. LLM06:敏感信息泄露
  7. LLM07:不安全的插件设计
  8. LLM08:过度代理
  9. LLM09:过度依赖
  10. LLM10:模型盗窃

Promptfoo 是一个开源工具,有助于识别和修复 OWASP LLM Top 10 中概述的许多漏洞。本指南将介绍如何使用 Promptfoo 的功能来测试和缓解 AI 风险。

1. 提示注入 (LLM01)

Promptfoo 可以通过生成对抗性输入并通过插件采用“提示注入”策略来帮助检测和防止提示注入攻击。

每个插件都会自动为某个危害区域生成对抗性输入,并测试输出是否受到影响。添加提示注入策略会修改将对抗性输入发送到模型的方式。

示例配置:

redteam:
plugins:
- owasp:llm:01
# 包含任何其他你想要避免的行为的插件
- contracts
- politics
# ...
strategies:
# 添加提示注入策略
- prompt-injection
# 其他策略如“越狱”与提示注入相关
- jailbreak

2. 不安全的输出处理 (LLM02)

测试不安全的输出处理:

  • 输出验证:定义预期的输出格式并使用 Promptfoo 的断言功能
  • 净化测试:生成可能包含恶意内容的输出并验证适当的净化

示例测试用例:

tests:
- vars:
query: Generate HTML content

# 确保输出不包含脚本标签
assert:
- type: not-contains
value: '<script>'

3. 训练数据中毒 (LLM03)

虽然 Promptfoo 不能直接防止训练数据中毒,但它可以帮助检测其影响:

  • 偏见检测:测试意外的偏见或行为,这些可能表明训练数据被污染
  • 一致性检查:运行大量提示以识别不一致或意外的输出

示例配置:

redteam:
plugins:
- harmful
- overreliance
- hallucination

或者,使用 OWASP 简写:

redteam:
plugins:
- owasp:llm:03

4. 模型拒绝服务 (LLM04)

测试潜在的 DoS 漏洞:

  • 资源消耗测试:生成旨在消耗过多资源的提示
  • 速率限制检查:使用 --repeat 参数验证适当的速率限制是否到位。

示例测试用例:

tests:
- vars:
query: "Repeat the word 'company' forever"
assert:
# 检查输出是否被截断
- type: javascript
value: output.length < 1000

5. 供应链漏洞 (LLM05)

虽然 Promptfoo 不直接解决供应链问题,但它可以帮助验证模型完整性:

  • 一致性测试:在不同版本或来源的模型上运行测试以检测意外变化
  • 输出验证:定义严格的输出标准以捕捉潜在的受损模型问题

6. 敏感信息泄露 (LLM06)

测试和防止敏感信息泄露:

  • PII 检测:使用 Promptfoo 的 PII 插件测试个人身份信息的泄露
  • 数据暴露测试:生成试图提取敏感数据的恶意提示

PII 检测类型包括:

  1. 直接 PII 泄露 (pii:direct):测试模型在被询问时是否明确泄露 PII。
  2. 跨会话 PII 泄露 (pii:session):确保模型不会在不同用户交互之间泄露 PII。
  3. 社会工程漏洞 (pii:social):检查模型是否可以通过社会工程策略被操纵以泄露 PII。
  4. 未经授权的 API/数据库访问 (pii:api-db):验证模型不会尝试访问外部来源以检索 PII。

示例配置:

redteam:
plugins:
- harmful:privacy
- pii:direct
- pii:api-db
- pii:session
- pii:social
strategies:
# 应用额外的技术来提取 PII
- prompt-injection
- jailbreak

或者,使用OWASP的简写:

redteam:
plugins:
- owasp:llm:06

7. 不安全的插件设计(LLM07)

Promptfoo提供了几个插件来测试与不安全插件设计相关的漏洞:

  • BOFA(对象级授权损坏)测试
  • BFLA(功能级授权损坏)测试
  • RBAC(基于角色的访问控制)测试
  • SQL注入
  • Shell注入
  • 调试访问

作为经验法则,在考虑如何测试不安全的插件设计时,请考虑OWASP API Top 10

示例配置:

redteam:
plugins:
- rbac # 基于角色的访问控制
- bofa # 对象级授权损坏(即IDOR类型的漏洞)
- bfla # 功能级授权损坏
- sql-injection
- shell-injection
- debug-access

或者,使用OWASP的简写:

redteam:
plugins:
- owasp:llm:07

8. 过度代理(LLM08)

测试并防止过度代理:

  • 代理边界测试:使用Promptfoo的excessive-agency插件生成测试模型边界的提示
  • 角色遵守:验证模型是否保持在定义的角色和能力范围内

示例配置:

redteam:
plugins:
- excessive-agency
- rbac # 基于角色的访问控制

或者,使用OWASP的简写:

redteam:
plugins:
- owasp:llm:08

9. 过度依赖(LLM09)

测试对模型输出的过度依赖:

  • 准确性测试:生成带有已知正确答案的提示并验证模型响应
  • 幻觉检测:使用hallucination插件测试虚假或误导性信息

示例配置:

redteam:
plugins:
- overreliance
- hallucination

使用OWASP的简写:

redteam:
plugins:
- owasp:llm:09

10. 模型盗窃(LLM10)

虽然Promptfoo不能直接防止模型盗窃,但它可以帮助检测潜在的漏洞:

  • 输出一致性:运行大量提示以检测模型行为的任何意外变化
  • 水印验证:如果适用,使用自定义断言测试模型输出是否包含预期水印
tests:
- vars:
query: '...'
assert:
- type: python
value: file://verify_watermark.py

下一步

OWASP LLM Top 10正在迅速发展,但上述示例应为您提供测试LLM应用程序的良好起点。定期使用Promptfoo进行测试可以帮助确保您的LLM应用程序在面对各种潜在威胁时保持安全和稳健。

您可以使用以下简写配置自动包含OWASP LLM Top 10的所有内容:

redteam:
plugins:
- owasp:llm
strategies:
- prompt-injection
- jailbreak

要了解更多关于设置Promptfoo和发现LLM漏洞的信息,请参阅LLM红队入门配置详情