ruflo Darwin Shield 安全基准评测:基于metaharness-darwin security bench的自学习安全检测基线
【免费下载链接】ruflo🌊 The original agent meta-harness. Deploy intelligent multi-player swarms, coordinate autonomous workflows, and build conversational AI systems. Features adaptive memory, self-learning intelligence, RAG integration, and native Claude Code / Codex / Hermes and many more Integrated项目地址: https://gitcode.com/GitHub_Trending/cl/ruflo
导读
本文讲解 ruflo 仓库中harness-security-bench技能(SKILL.md)的完整原理与实战用法。该技能封装上游@metaharness/darwin的 "Darwin Shield" 安全基准(即上游 ADR-155),在 10 个漏洞 / 9 个诱饵样本构成的标准语料上进化出冠军安全检测 harness,并以 TPR/FPR/补丁通过率/可复现性/不安全输出等指标与四个基线(B0 静态、B1 LLM 单次、B2 固定 Agent、B3 Darwin 冠军)对比打分。读完本文,你将掌握该基准的调用参数、输出结构、退出码语义、优雅降级机制,以及它如何作为 ruflo 自身 ADR-155 夜间自学习安全检测 harness 的参考实现与经验基线被接入。
背景:为什么这个基准对 ruflo 的 ADR-155 至关重要
ruflo 的 ADR-155(对应 PR #2417 跟踪)提出一个夜间自学习安全检测 harness,包含三条学习回路:
- 回路 A:按维度置信度加权(per-dimension confidence);
- 回路 B:严重度校准(severity calibration);
- 回路 C:自动修复出价(auto-fix bid)。
其中回路 A 需要在累积的(finding, dimension, human_outcome)元组上训练。但梯度信号只有在底层检测机制能在已知正确的语料上收敛时才是有意义的——如果检测器连标准语料都无法收敛,训练出来的权重就是噪声。Darwin Shield 恰好负责进化出这样一个检测机制:它在 10-vuln / 9-decoy 的 ground-truth 语料上做进化,然后按真实 TPR/FPR 打分。
因此,周期运行harness-security-bench能为 ruflo 的夜间 harness 提供三类价值(均出自 SKILL.md):
- 经验下限(Empirical floor):如果 Darwin Shield 的冠军在基准语料上达不到 TPR=1 / FPR=0,说明回路 A 的奖励信号本身是噪声,需要先修语料或沙箱,而不是调学习算法;
- 漂移检测(Drift detection):逐周比较冠军适应度(fitness)的增量,可以捕捉安全环境或变异策略(mutator policy)的迁移;
- 基线多样性(Baseline diversity):B0–B3 四个基线提供了四个锚点,用于按维度对置信度进行加权。
算法与调用链
实现位于 plugins/ruflo-metaharness/scripts/security-bench.mjs,文件头部注释明确将其定位为metaharness-darwin security bench的包装器,并说明它与 ruflo ADR-155 的关系:"同一形态、不同范围——上游进化安全检测 harness,ruflo 评估 findings;两者都以相对 ground-truth 语料的实测 TPR/FPR 打分"。
整个算法分五步(继承自 SKILL.md):
- 调用
npx -y @metaharness/darwin@~0.8.0 metaharness-darwin security bench --population N --cycles N [--seed S]; - 默认超时 =
3s × 19 evaluations × population × cycles + 30s overhead。默认--population 2 --cycles 1约 144 秒;--population 4 --cycles 3约 12 分钟; - 解析 markdown 报告——整体 PASS/FAIL 加上每个门的 pass/fail 行(门示例见下文"验收门"一节);
- 解析"基线与冠军对比表"(4 行:每个 harness 的 fitness/TPR/FPR/patchPass/repro/unsafe/cost);
- 输出结构化 JSON;带
--alert-on-fail时整体为 FAIL 则退出码 1。
调用链中的关键细节(源码级)
从 security-bench.mjs 的main()可以看到实际构造的 CLI 参数:
const cliArgs = ['security', 'bench', '--population', String(ARGS.population), '--cycles', String(ARGS.cycles), ]; if (ARGS.seed != null) cliArgs.push('--seed', String(ARGS.seed));随后通过runDarwinAsync(cliArgs, { timeoutMs, json: false, onProgress })启动子进程——注意json: false:security bench 的输出是 markdown 而非 JSON,与evolve/bench verify不同。
_darwin.mjs(plugins/ruflo-metaharness/scripts/_darwin.mjs)是共享的 darwin 调用助手,关键点:
- 版本钉住:
DARWIN_PIN = '@metaharness/darwin@~0.8.0',使用 tilde 范围允许补丁级升级,且注释要求与@claude-flow/cli/package.json、ruflo/package.json的optionalDependencies保持同步; - 异步流式:
runDarwinAsync将 stderr 按行回调给onProgress([security-bench] ...前缀输出到 stderr),子进程支持超时SIGTERM和AbortSignal取消; - 退化分类:通过
classifyDegraded(stderr, code, 'metaharness-darwin')识别MODULE_NOT_FOUND、网络失败等,返回degraded: true,绝不抛异常(ADR-150 优雅降级规则 #3)。
此外 security-bench.mjs 还内置了安全校验与超时预算:
--population必须落在 1..20(ruflo 上限),--cycles必须落在 1..100,越界直接报配置错误并退出 2;- 默认超时
Math.max(60_000, 3_000 * 19 * population * cycles + 30_000)——基准语料为 10 漏洞 + 9 诱饵 = 每周期 19 次评估,每次评估约 3 秒,加 30 秒固定开销。
命令行参数
技能在 frontmatter 中声明argument-hint: "[--population 2] [--cycles 1] [--seed N] [--alert-on-fail]",allowed-tools: Bash。参数解析来自 security-bench.mjs:
| 参数 | 默认值 | 取值范围 | 说明 |
|---|---|---|---|
--population N | 2 | 1..20 | 每代进化的候选 harness 数量,越大搜索越充分但耗时线性增长 |
--cycles N | 1 | 1..100 | 进化轮数(周期数),--population 4 --cycles 3约 12 分钟 |
--seed S | null | 整数 | 确定性种子,用于可复现的变异选择 |
--alert-on-fail | false | 布尔 | 整体 FAIL 时进程以退出码 1 结束,便于 CI 门禁 |
--format | json | 字符串 | 输出格式(脚本内部固定输出 JSON) |
--timeout-ms | 自动 | 毫秒 | 覆盖默认超时,测试/CI 中常用(如降级演练设 60000) |
使用示例(来自脚本头部 USAGE 注释):
node scripts/security-bench.mjs # 默认 population=2 cycles=1 node scripts/security-bench.mjs --population 4 --cycles 3 # 更深度的运行 node scripts/security-bench.mjs --population 4 --cycles 3 --alert-on-fail输出结构
security-bench.mjs成功时输出如下 JSON(完整继承自 SKILL.md 并保留字段语义):
{ "success": true, "data": { "overall": { "ok": true, "icon": "✅" }, "gates": { "total": 11, "passed": 11, "failed": 0, "details": [{ "ok": true, "criterion": "TPR improvement ≥ 25% vs fixed harness", "measured": "+150% (B2 0.4 → B3 1)" }, ...] }, "baselines": [ { "harness": "static-only", "fitness": 0.5665, "tpr": 0.3, "fpr": 1, "unsafe": 0, ... }, { "harness": "LLM single-pass", "fitness": 0.1365, ... }, { "harness": "fixed agent", "fitness": 0.598, ... }, { "harness": "Darwin champion", "fitness": 0.93275, "tpr": 1, "fpr": 0, ... } ], "rawMarkdown": "...", "shape": { "population": 2, "cycles": 1, "seed": null }, "durationMs": 142000 } }字段说明:
overall:整体 PASS/FAIL 与图标,由 markdown 报告头部**Overall: ✅ PASS**或**Overall: ❌ FAIL**解析而来(见 security-bench.mjs);gates:验收门的汇总与逐条明细,每条含ok/criterion/measured;baselines:B0–B3 四行对比表,每行含harness/fitness/tpr/fpr/patchPass/repro/unsafe/cost(表格正则见 security-bench.mjs);rawMarkdown:原始报告全文,供上层审计或重新解析;shape+durationMs:本次运行形态与耗时,便于归档为轨迹记录。
注意:示例中冠军 fitness=0.93275、TPR=1、FPR=0 是 SKILL.md 中的示例值,用于说明输出形态,实际数值取决于语料与进化结果。
验收门(Gate)示例
SKILL.md 列举了基准自带的典型验收门判据,解析正则会匹配 markdown 中- ✅ **criterion** — measured形式的行:
- TPR improvement ≥ 25% vs fixed
- FPR reduction ≥ 40%
- Patch-test pass rate ≥ 80%
- Reproduction success ≥ 90%
- Unsafe outputs = 0
- Cost increase ≤ 2× fixed
- Beyond SOTA:冠军在统计上击败上一代冠军
- Compounding:误报重复率下降 ≥ 35%
接入 ADR-155 夜间 harness
按 SKILL.md,ADR-155 夜间工作流(#2418 的W1.5任务)会把本基准作为 active-pentest 维度的一个调用点,其结果写入轨迹记录(trajectory record):
{ "dimension": "mcp-pentest", "subdimension": "darwin-shield-bench", "champion_fitness": 0.93275, "champion_tpr": 1, "champion_fpr": 0, "gates_passed": 11, "gates_failed": 0, "shape": { "population": 4, "cycles": 3 } }这条记录直接喂给回路 A:如果darwin-shield-bench在固定种子的语料上持续通过,就提高只由mcp-pentest维度捕获的 findings 的权重。这一接入模式与 ruflo-metaharness 插件"读-写闭环"的整体架构一致——README.md 将harness-security-bench列为 11 个技能之一,调用形态为/harness-security-bench [--population 2] [--cycles 1] [--alert-on-fail],且全部技能统一经过skills/X/SKILL.md → scripts/X.mjs → scripts/_harness.mjs → spawnSync('npx', ...)的子进程调用链。
退出码语义
SKILL.md 定义了与脚本实现一致的退出码契约:
| Code | Meaning |
|---|---|
| 0 | Bench 运行完成(整体 PASS 或 FAIL——通过 JSONoverall.ok区分),或退化降级 |
| 1 | --alert-on-fail且overall.ok === false |
| 2 | 配置错误或上游基础设施故障 |
实现上,脚本对上游退出码做了区分处理:exitCode 1被当作基准自身的"门未通过"信号,作为数据对待而不是故障;只有其他非零码才进入基础设施失败分支(security-bench.mjs),输出{ success: false, data: { exitCode, stderrTail } }并退出 2。最后,--alert-on-fail的判定只发生在 JSON 输出之后(security-bench.mjs),保证失败信息完整落盘。
优雅降级:darwin 缺席时的行为
当@metaharness/darwin不可用时(未安装、registry 不可达、模块加载失败),脚本不会崩溃,而是输出:
{ "degraded": true, "reason": "metaharness-darwin-not-available" }并退出 0。这并非特例而是默认行为,源自 ADR-150 的架构约束(可移除 / optionalDependencies / 优雅降级 / CI 门禁)——ruflo 在 MetaHarness 全家桶被移除后依然完整可用。darwin 相关的降级发射器统一由_darwin.mjs中的emitDarwinDegradedJsonAndExit提供(基于_invoke.mjs的makeDegradedEmitter,plugins/ruflo-metaharness/scripts/_darwin.mjs)。
该契约有专门的运行时演练脚本 plugins/ruflo-metaharness/scripts/test-graceful-degradation.mjs 验证:它把npm_config_registry指向不可解析的主机、把缓存基座指向空临时目录,然后逐个调用依赖 darwin 的技能,断言每个技能必须 (a) 退出 0、(b) 在输出 JSON 中带"degraded": true。其中对security-bench的演练参数为['--population', '1', '--cycles', '1', '--timeout-ms', '60000'](test-graceful-degradation.mjs),与脚本内置的安全上限一致。演练还记录了迭代中发现的真实缺口(如oia-audit在 registry 不可达时可能超过 180s、mint的降级 payload 缺字面量标记等),说明该契约在持续被收紧。
定位与边界
- 参考实现而非替代:Darwin Shield 是上游的 ADR-155,是 ruflo 自身 ADR-155 夜间自学习安全 harness 最接近的参考实现(同形态、不同范围)。ruflo 的夜间 harness 并未依赖它才能运行,而是借助它获得经验基线;
- 与 ADR-153 的关系:ADR-153 是 darwin 模式的整体集成(
evolve为写入层),其版本钉住策略、四约束、优雅降级模式与本技能一脉相承;security bench是 darwin 0.8.x 提供的第三个子命令(另有evolve与bench create|verify); - 不做的事:本技能不修改任何 harness 文件、不做自动进化决策,只评测与输出结构化证据;进化是否推广由上层流程(如 PR 评审 + witness 签名,见 ADR-153 Phase 2)决定。
参考资源
- 技能定义:plugins/ruflo-metaharness/skills/harness-security-bench/SKILL.md
- 核心实现:plugins/ruflo-metaharness/scripts/security-bench.mjs
- darwin 调用助手:plugins/ruflo-metaharness/scripts/_darwin.mjs
- 降级契约演练:plugins/ruflo-metaharness/scripts/test-graceful-degradation.mjs
- 插件总览:plugins/ruflo-metaharness/README.md
- 相关决策记录:v3/docs/adr/ADR-150-metaharness-integration-surfaces.md、v3/docs/adr/ADR-153-metaharness-darwin-mode-integration.md
【免费下载链接】ruflo🌊 The original agent meta-harness. Deploy intelligent multi-player swarms, coordinate autonomous workflows, and build conversational AI systems. Features adaptive memory, self-learning intelligence, RAG integration, and native Claude Code / Codex / Hermes and many more Integrated项目地址: https://gitcode.com/GitHub_Trending/cl/ruflo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考