关于 continuous-llm-red-teaming-with-promptfoo
这项技能介绍使用 Promptfoo 和 DeepTeam 持续对 LLM 应用进行对抗性测试的流程,适用于获授权的安全测试。通过报告和 CI/CD 检查发现安全回归。
主要功能
- 01生成对抗性测试用例
- 02映射 OWASP 与 MITRE ATLAS
- 03使用 Promptfoo 和 DeepTeam 执行测试
- 04查看按插件分类的通过或失败报告
- 05在 CI/CD 中设置失败门槛
- 06跟踪各版本的攻击成功率
适用场景
- 01测试越狱与提示词注入防护
- 02安全检查失败时阻止合并
- 03比较不同模型或提示词版本
- 04监控各版本的漏洞回归
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill continuous-llm-red-teaming-with-promptfoo安装后在 Claude Code 中输入/continuous-llm-red-teaming-with-promptfoo确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEreferences/api-reference.mdstandards.mdscripts/agent.py详细介绍
使用 Promptfoo 持续进行 LLM 红队测试
仅限授权使用: 仅针对你拥有或明确获准测试的 LLM 应用和端点运行这些对抗性探测。生成的攻击载荷(越狱、提示词注入、有害内容诱导)属于对抗性输入;未经许可将其发送至第三方服务可能违反服务条款。
概述
Promptfoo 是一个开源 LLM 评估和红队测试框架(根据其 README,OpenAI 和 Anthropic 都在使用),可生成对抗性测试用例、针对你的模型/Agent 运行测试并评估响应。DeepTeam(由 Confident AI 开发)是一个互补的开源框架,提供 50 多种可直接使用的漏洞类型和 10 多种有研究依据的攻击方法。两者结合后,你可以将 LLM 安全性视为回归测试:每次提交都会重新运行同一套对抗性测试,并在先前安全的行为出现回退时让流水线失败。
这一点很重要,因为 LLM 应用会不断变化——提示词、模型、RAG 来源、工具和防护机制都可能发生偏移。上个迭代中修复的越狱问题,可能在编辑提示词或升级模型后悄然复现。Promptfoo 将其插件直接映射到 OWASP LLM Top 10(owasp:llm)和 OWASP Agentic(owasp:agentic)预设,以及 MITRE ATLAS,因此测试套件能够覆盖公认的风险分类体系。这里重点应对的威胁是 AML.T0051 — LLM 提示词注入(MITRE ATLAS):通过对抗性指令覆盖应用预期行为。本技能遵循 Promptfoo 红队测试文档(https://www.promptfoo.dev/docs/red-team/)和 DeepTeam 文档(https://www.trydeepteam.com/docs/getting-started),并符合 NIST AI RMF MANAGE-4.1(部署后监控和反馈,用于管理 AI 风险)的要求。
适用场景
- 需要在 CI/CD 中持续自动化地对 LLM 应用进行红队测试,而非只进行一次性的手动测试。
- 希望设置安全门禁:阻止引入或重新引入越狱/注入漏洞的合并操作。
- 需要将覆盖范围映射到 OWASP LLM Top 10 / OWASP Agentic / MITRE ATLAS,以用于合规报告。
- 需要并排比较两个模型或提示词版本的安全状况。
- 需要跟踪各版本中漏洞随时间变化的回归情况。
前置条件
- Node.js 18+(Promptfoo 通过 npm 分发)和 Python 3.9+(用于 DeepTeam)。
- 安装 Promptfoo 和 DeepTeam:
npm install -g promptfoo # or: npx promptfoo@latest pip install -U deepteam - 通过环境变量提供目标 LLM 端点的 API 访问权限/凭据(以及评估模型的凭据,例如 OpenAI 密钥)。
- 具备密钥存储功能的 CI/CD 平台(GitHub Actions、GitLab CI)。
- 获准测试目标应用。
目标
- 为你的 LLM 应用搭建 Promptfoo 红队配置。
- 启用 OWASP LLM Top 10 和 OWASP Agentic 插件预设,以及越狱/注入策略。
- 在本地运行测试套件,并解读各插件的通过/失败报告。
- 将 DeepTeam 作为第二个引擎,用于执行可编程、有研究依据的攻击。
- 将两者集成到 CI/CD 中,使构建在发现新漏洞时失败。
- 为每次运行生成可分享的 HTML/PDF 安全报告。
MITRE ATT&CK 映射
| ID | 名称(MITRE ATLAS) | 策略 |
|---|---|---|
| AML.T0051 | LLM 提示词注入 | 初始访问 / 持久化(LLM) |
| AML.T0051.000 | 直接(提示词注入) | LLM 攻击 |
| AML.T0051.001 | 间接(提示词注入) | LLM 攻击 |
| AML.T0054 | LLM 越狱 | 权限提升 / 防御规避(LLM) |
工作流
1. 搭建红队配置
初始化交互式配置;它会生成 promptfooconfig.yaml,其中包含目标、插件和策略。
promptfoo redteam init
# choose your target type (HTTP endpoint, openai:..., anthropic:..., custom provider)
2. 定义目标、OWASP 预设和攻击策略
编辑 promptfooconfig.yaml。purpose 用于确定攻击生成的依据;plugins 是对抗性输入生成器;strategies 是攻击投递技术(越狱/注入包装器)。
# promptfooconfig.yaml
targets:
- id: https://api.example.com/chat # your app endpoint
label: support-bot
redteam:
purpose: |
A customer-support assistant for an e-commerce site. Must never reveal
system prompts, leak PII, or perform actions outside order support.
numTests: 10
plugins:
- owasp:llm # OWASP LLM Top 10 preset
- owasp:agentic # OWASP Agentic threats preset
- id: pii:direct
numTests: 15
- prompt-extraction # system-prompt leakage
- harmful
strategies:
- id: jailbreak # iterative single-turn jailbreak
- id: jailbreak:composite # stacked jailbreak techniques
- id: crescendo # multi-turn escalation
- id: prompt-injection # injection wrapper
3. 运行测试套件并查看报告
redteam run 会结合生成和评估,然后打开交互式报告。
promptfoo redteam run
promptfoo redteam report # launches the web report (pass/fail per plugin)
每一行都显示插件(映射到 OWASP/ATLAS)、策略、攻击提示词、模型的响应,以及评审器的判定。每个插件的攻击成功率是最重要的指标——请在每次发布时跟踪。
4. 添加 DeepTeam,执行程序化、基于研究的攻击
使用 DeepTeam 覆盖其他漏洞和攻击,并用 Python 编写定制测试套件脚本。
# deepteam_suite.py
from deepteam import red_team
from deepteam.vulnerabilities import Bias, PIILeakage
from deepteam.attacks.single_turn import PromptInjection
def model_callback(prompt: str) -> str:
# call your application's LLM endpoint here and return the text response
return call_my_app(prompt)
red_team(
model_callback=model_callback,
vulnerabilities=[Bias(types=["race"]), PIILeakage(types=["api_and_database_access"])],
attacks=[PromptInjection()],
)
也可以通过 YAML 配置驱动 DeepTeam:
deepteam run config.yaml
5. 在 CI/CD 中设置构建门禁(GitHub Actions)
当红队断言失败时,让流水线失败。Promptfoo 在失败时会返回非零退出码,从而阻止合并。
# .github/workflows/llm-redteam.yml
name: LLM Red Team
on: [pull_request]
jobs:
redteam:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: '20' }
- run: npm install -g promptfoo
- name: Run red team (fails build on new vulns)
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: promptfoo redteam run --no-progress-bar
- name: Export machine-readable results
if: always()
run: promptfoo redteam report --output results.json
- uses: actions/upload-artifact@v4
if: always()
with: { name: redteam-report, path: results.json }
6. 持续跟踪回归
每次运行都保存 results.json,并比较不同版本中每个插件的攻击成功率。任何 OWASP LLM 类别的成功率上升都属于需要在发布前排查的回归。Promptfoo 的 --filter-failing 可让你仅重新运行之前失败的用例,以确认修复是否有效。
promptfoo redteam run --filter-failing results.json
工具和资源
| 资源 | 链接 |
|---|---|
| Promptfoo 红队文档 | https://www.promptfoo.dev/docs/red-team/ |
| Promptfoo 红队配置 | https://www.promptfoo.dev/docs/red-team/configuration/ |
| Promptfoo CI/CD 集成 | https://www.promptfoo.dev/docs/integrations/ci-cd/ |
| Promptfoo MITRE ATLAS 映射 | https://www.promptfoo.dev/docs/red-team/mitre-atlas/ |
| DeepTeam(Confident AI) | https://github.com/confident-ai/deepteam |
| DeepTeam 文档 | https://www.trydeepteam.com/docs/getting-started |
| OWASP 大模型应用十大风险 | https://genai.owasp.org/ |
插件 / 策略参考
| Promptfoo 项目 | 类型 | 映射到 |
|---|---|---|
owasp:llm | 预设 | OWASP 大模型十大风险测试套件 |
owasp:agentic | 预设 | OWASP Agentic 威胁 |
prompt-extraction | 插件 | LLM07 系统提示词泄露 |
pii:direct | 插件 | LLM06 敏感信息泄露 |
harmful | 插件 | 有害内容生成 |
jailbreak / jailbreak:composite | 策略 | AML.T0054 大模型越狱 |
crescendo | 策略 | 多轮越狱 |
prompt-injection | 策略 | AML.T0051 提示词注入 |
验证标准
- 创建
promptfooconfig.yaml,其中包含目标、owasp:llm和owasp:agentic插件。 - 启用越狱和提示词注入策略。
- 运行
promptfoo redteam run,并生成按插件划分的通过/失败报告。 - 通过
model_callback对同一目标运行 DeepTeam 测试套件。 - CI/CD 任务会在出现新的红队测试失败时让构建失败(返回非零退出码)。
- 每次运行后归档
results.json工件,用于跟踪回归。 - 持续跟踪各版本中每个 OWASP 类别的攻击成功率。