news 2026/9/9 23:57:07

ruflo Darwin Shield 安全基准评测:基于 `metaharness-darwin security bench` 的自学习安全检测基线

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ruflo Darwin Shield 安全基准评测:基于 `metaharness-darwin security bench` 的自学习安全检测基线

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):

  1. 经验下限(Empirical floor):如果 Darwin Shield 的冠军在基准语料上达不到 TPR=1 / FPR=0,说明回路 A 的奖励信号本身是噪声,需要先修语料或沙箱,而不是调学习算法;
  2. 漂移检测(Drift detection):逐周比较冠军适应度(fitness)的增量,可以捕捉安全环境或变异策略(mutator policy)的迁移;
  3. 基线多样性(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):

  1. 调用npx -y @metaharness/darwin@~0.8.0 metaharness-darwin security bench --population N --cycles N [--seed S]
  2. 默认超时 =3s × 19 evaluations × population × cycles + 30s overhead。默认--population 2 --cycles 1约 144 秒;--population 4 --cycles 3约 12 分钟;
  3. 解析 markdown 报告——整体 PASS/FAIL 加上每个门的 pass/fail 行(门示例见下文"验收门"一节);
  4. 解析"基线与冠军对比表"(4 行:每个 harness 的 fitness/TPR/FPR/patchPass/repro/unsafe/cost);
  5. 输出结构化 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.jsonruflo/package.jsonoptionalDependencies保持同步;
  • 异步流式runDarwinAsync将 stderr 按行回调给onProgress[security-bench] ...前缀输出到 stderr),子进程支持超时SIGTERMAbortSignal取消;
  • 退化分类:通过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 N21..20每代进化的候选 harness 数量,越大搜索越充分但耗时线性增长
--cycles N11..100进化轮数(周期数),--population 4 --cycles 3约 12 分钟
--seed Snull整数确定性种子,用于可复现的变异选择
--alert-on-failfalse布尔整体 FAIL 时进程以退出码 1 结束,便于 CI 门禁
--formatjson字符串输出格式(脚本内部固定输出 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 定义了与脚本实现一致的退出码契约:

CodeMeaning
0Bench 运行完成(整体 PASS 或 FAIL——通过 JSONoverall.ok区分),或退化降级
1--alert-on-failoverall.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.mjsmakeDegradedEmitter,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 提供的第三个子命令(另有evolvebench 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 23:56:38

COMSOL燃料电池冷启动仿真建模:从多物理场耦合到求解器实操

低温环境下,燃料电池的冷启动问题一直是工程应用中绕不开的硬骨头。尤其是车载燃料电池系统,冬天一冻,启动失败、性能衰减甚至膜电极损伤,都是实际装车后最让工程师头疼的场景。这个问题的背后,涉及电化学反应动力学、…

作者头像 李华
网站建设 2026/9/9 23:55:44

mknod命令详解:手动创建设备节点的原理与实战

说实话,很多用 Linux 用了几年的朋友,天天跟 /dev/null 、 /dev/ttyS0 打交道,但要问一句"这些设备文件到底是怎么来的"、"能不能自己手动创建一个设备节点",多半会愣一下。 mknod 这个命令平时用得少&…

作者头像 李华
网站建设 2026/9/9 23:55:15

WLED 灯带控制指南:让 ESP32 三步变身智能照明控制器

WLED 灯带控制指南:让 ESP32 三步变身智能照明控制器 【免费下载链接】WLED Control WS2812B and many more types of digital RGB LEDs with an ESP32 over WiFi! 项目地址: https://gitcode.com/GitHub_Trending/wl/WLED 想让灯带跟着音乐变色、在手机上随…

作者头像 李华