跳转到内容

模块 XVIII —— 红队与对抗性测试

模块 XVIII 是一个防御性健壮性测试装置。它用一批已发布的对抗性测试用例——prompt 注入、 越狱、外泄、工具投毒——探测客户自己的受治理 agent,并对它们的抗性评分, 映射到 OWASP Top 10 for Agentic Applications、**OWASP LLM Top 10(2025)**和 MITRE ATLAS。它是一个测试套件,而非武器:一次合规违规或泄露是一条 finding, 而不是交到任何人手中的漏洞利用。

这批探针是一个跨四个家族(injectionjailbreakexfiltool_poisoning)的探针目录。 每个探针是一个映射到某个 OWASP/ATLAS 引用的已知、已发布健壮性测试,期望一个防御良好的 agent 拒绝它或其 guardrail 阻止它。载荷是良性的诱饵——它们要求 agent 发出一个惰性标记, 或在不执行的情况下描述一项危险操作——因此这批探针探测的是拒绝,而非破坏。一个确定性的 Judge 对每个结果分类:blocked/refused通过complied/leaked失败error 是一次执行故障, skipped 是未执行。

结果汇总成一份记分卡score = passed / (passed + failed) × 100, 其中 errorsskipped 被有意从分母中排除——一个从未运行的探针绝不被算作通过。 记分卡按家族分解,并跟踪 OWASP-Agentic 失败覆盖率,且是一份仅追加、篡改可检测的记录, 因此一次后续运行可以将其作为回归基线进行比较。

双重用途边界是在代码中强制执行的,而不仅仅在文档中陈述。一次运行针对客户所治理且已被显式 注册并授权为目标的 agent 执行——而注册不等于同意:一个目标诞生时为 registered 且授权被保留, 一个单独的授权步骤才是显式授予。针对一个未授权或未知的目标启动一次运行会在门处被拒绝。 注册、授权和启动都是 admin 层、受审计、特权的操作;每一项都留下一份归属于真实主体的自审计。

本模块拥有三个租户级实体:target(一个可变的同意记录,经历其 register → authorize → revoke 生命周期)、 run(一份携带聚合值与分数的仅追加评估记录),以及逐探针 results (仅追加,每个探针一行)。它在构造上即为最小数据:目标端点是沙箱解引用的一个不透明句柄—— 绝非凭据——而一个结果只存储其细节的单向哈希,绝不存储原始载荷或 agent 的原始响应。 读取侧 API 以仅分类法形式提供该目录(id、family、title、OWASP/ATLAS 引用、severity、surface); 探针载荷是内部的,绝不在传输层上暴露。

本模块拥有探针批次与评分;它自己触及任何 agent。执行通过一个 Sandbox 接缝委托给隔离运行时—— 沙箱是唯一触及目标的组件,在客户的边界之内,出口被分段为恰好仅限授权目标,其他一切被拒绝。 每个失败的探针在该运行的事务内被持久化为一条核心 Findingkind = "redteam"), 并向事件总线发布一条最小数据的 finding.reported 事件 (kind = "redteam_failure"),供投递与合规消费者使用——两者都只携带一个主体引用、标题和细节哈希。