一句话版本
传统软件的安全测试,输入是确定的,结果也是确定的。AI 系统不一样:同一个攻击,这次失败,下次可能成功;换个说法、换种语言,结果又不同。所以 AI 红队测试需要大量、多样、可重复的测试用例,用成功率而不是"通过 / 不通过"来衡量。 一个实用的 AI 红队流程是:按 OWASP LLM Top 10 等框架列出风险 → 为每类风险准备测试集 → 自动化批量运行并统计成功率 → 人工深挖 → 修复后回归测试。
全文分三层:
- 通俗理解:考试不能只出一道题
- 实际用处:OWASP LLM Top 10、开源工具、公开基准
- 原理与工程要点:测什么、怎么判分、怎样构造测试环境
第一层:通俗理解
1.1 考试不能只出一道题
测试一个人会不会被骗,不能只试一种骗术。要试:
- 不同的话术(冒充领导、冒充客服、假装紧急);
- 不同的渠道(电话、邮件、当面);
- 同一种骗术试很多次(这次没上当,不代表下次不会)。
AI 也一样。而且 AI 的回答带有随机性,所以要用统计的眼光看结果:一个攻击 100 次里成功 3 次,就是一个真实的风险。
1.2 测模型 vs 测应用
| 测什么 | 关注 |
|---|---|
| 模型 | 能不能被越狱、会不会输出有害内容、有没有偏见 |
| 应用 / Agent | 能不能被注入、会不会泄露数据、会不会执行越权操作、工具调用是否安全 |
大多数开发者用的是别人的模型,应该重点测自己的应用。
第二层:实际用处
2.1 OWASP Top 10 for LLM Applications(2025 版要点)
| 编号 | 风险 |
|---|---|
| LLM01 | 提示词注入 |
| LLM02 | 敏感信息泄露 |
| LLM03 | 供应链(模型、数据、插件) |
| LLM04 | 数据与模型投毒 |
| LLM05 | 不当的输出处理(如直接渲染 HTML、执行模型生成的代码) |
| LLM06 | 过度代理(给了 Agent 太多权限) |
| LLM07 | 系统提示词泄露 |
| LLM08 | 向量与嵌入的弱点(RAG 相关) |
| LLM09 | 错误信息 |
| LLM10 | 无限制的资源消耗 |
它是一个很好的测试清单起点。
2.2 开源工具和基准
| 名称 | 用途 |
|---|---|
| PyRIT(微软) | 自动化红队框架,可以用一个模型去攻击另一个模型 |
| garak(NVIDIA) | 大模型漏洞扫描器,内置多种攻击探针 |
| promptfoo | 提示词和应用的测试框架,支持红队插件 |
| AgentDojo(苏黎世联邦理工学院) | 针对工具调用 Agent 的提示词注入基准 |
| Gandalf(Lakera) | 一个提示词注入闯关游戏,很适合入门理解 |
第三层:原理与工程要点
3.1 测什么:按应用场景列用例
| 场景 | 测试用例举例 |
|---|---|
| 系统提示词保护 | 诱导模型复述、翻译、总结它的系统提示词 |
| 直接注入 | 用户输入中要求"忽略之前的指示" |
| 间接注入 | 在应用会读取的网页、文档、邮件、工具返回结果中埋入指令(见《间接提示词注入》) |
| 数据外泄 | 诱导输出带数据的图片或链接;诱导调用联网工具(见《Markdown图片数据外泄》) |
| 越权操作 | 诱导 Agent 调用不该调用的工具、访问其他用户的数据 |
| 不当输出处理 | 让模型输出脚本、SQL、命令,检查下游是否直接执行 |
| 资源消耗 | 诱导无限循环调用工具、生成超长输出 |
| 多轮攻击 | 分多轮逐步引导,每轮看起来都正常 |
每类用例要多样化:不同语言、不同措辞、不同编码、藏在不同位置。
3.2 怎么判分
| 方法 | 适用 | 注意 |
|---|---|---|
| 确定性检查 | 有没有调用某个工具、测试服务器有没有收到请求、输出里有没有某个"金丝雀"字符串 | 最可靠,优先使用 |
| 规则匹配 | 输出是否包含系统提示词的片段 | 容易漏判 |
| 模型评分 | 用另一个模型判断输出是否"有害"或"偏离任务" | 方便但不完全可靠,要人工抽检 |
一个实用技巧:在系统提示词、私密文档里放一个独特的金丝雀字符串(比如一个随机 UUID),只要它出现在输出、日志或测试服务器上,就说明发生了泄露。
3.3 测试环境
- 模拟工具:用假的邮箱、假的文件系统、假的支付接口,让 Agent 可以"真的"执行危险动作而不造成真实损失;
- 记录服务器:一个只记录收到的请求的服务器,用来检测外泄;
- 固定随机种子或多次采样:每个用例跑多次,记录成功率;
- 版本记录:模型版本、系统提示词版本、工具版本都要记录,否则回归测试无法比较。
3.4 自动化 + 人工
| 自动化 | 人工 |
|---|---|
| 大量已知攻击模式的回归测试,每次改提示词、换模型都跑 | 发现新的攻击思路;组合多个弱点;评估真实影响 |
| 用攻击模型自动生成变体 | 判断模型评分的误判 |
3.5 报告应该写什么
- 每类风险的攻击成功率(而不是"通过 / 不通过");
- 最严重的几个案例,附完整的复现步骤;
- 修复建议,优先考虑架构层面的修复(见《防御提示词注入》),而不仅仅是改提示词;
- 修复后的回归结果。
总结
| 层次 | 要点 |
|---|---|
| 特点 | 结果有随机性,要用大量多样的用例和成功率衡量 |
| 框架 | OWASP LLM Top 10;PyRIT、garak、promptfoo、AgentDojo |
| 判分 | 优先确定性检查和金丝雀字符串;模型评分要人工抽检 |
| 环境 | 模拟工具、记录服务器、多次采样、版本记录 |