harness-security-bench について
harness-security-benchはmetaharness-darwinのsecurity benchコマンドをスキルとして実行し、既知の脆弱性とデコイを含むベンチマークで検出機構を評価します。全体結果とゲート別結果、ベースラインとの比較を出力し、定期的な評価に使えます。
主な機能
- 01セキュリティベンチマークの実行
- 02全体の合否結果の解析
- 03各ゲートの結果の集計
- 04ベースラインとチャンピオン指標の比較
- 05失敗時のアラート
活用シーン
- 01検出機構の定期的な評価
- 02ベースラインとチャンピオン結果の比較
- 03ベンチマーク未達時のCI失敗
MCP 対応
MCPペンテスト領域のセキュリティ評価に対応しますが、入力にはMCPクライアントにツールやリソースを公開するとの記載はありません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ruvnet/ ruflo --skill harness-security-benchインストール後、Claude Code で/harness-security-benchを入力して読み込まれたか確認します。
詳細
上流の metaharness-darwin security bench コマンドを公開します。これは上流独自の ADR-155 — Darwin Shield であり、ruflo の夜間セルフラーニングセキュリティハーネスにとって最も近い参照実装です(#2417)。
ruflo の ADR-155 にとって重要な理由
ruflo の ADR-155 では、3 つの学習ループ(次元ごとの信頼度、重大度のキャリブレーション、自動修正の入札)を提案しています。ループ A は蓄積された (finding, dimension, human_outcome) タプルで学習しますが、基盤となる検出メカニズムが既知の正解コーパスに収束していなければ、勾配シグナルの健全性は保証されません。Darwin Shield は、10 個の脆弱性と 9 個のデコイからなる正解データセット上で、まさにそのメカニズムを進化させます。これを毎晩実行することで、次のことが可能になります。
- 実証的な下限: Darwin Shield のチャンピオンがベンチコーパスで TPR=1/FPR=0 を達成できなければ、ループ A の報酬シグナルはノイズです。
- ドリフト検出: 週ごとのチャンピオン適応度の差分から、セキュリティ環境(または変異ポリシー)が変化したタイミングを把握できます。
- ベースラインの多様性: 4 つのベースライン(B0–B3)が、次元ごとの信頼度を重み付けするための 4 つの基準点となります。
アルゴリズム
実装:scripts/security-bench.mjs。
- インストール済みの
@metaharness/darwinからmetaharness-darwin security bench --population N --cycles N [--seed S]を実行します(_darwin.mjsで固定します。条件を満たすインストール済みコピーがない場合に限り、一度だけキャッシュにインストールします。npx は使用しません)。 - デフォルトのタイムアウトは
3s × 19 evaluations × population × cycles + 30s overheadです。デフォルトの--population 2 --cycles 1では約 144 秒、--population 4 --cycles 3では約 12 分です。 - Markdown レポートを解析します。全体の PASS/FAIL に加え、ゲートごとの合格/不合格行も解析します(ゲートの例:「固定版に対する TPR の改善率 ≥ 25%」「FPR の削減率 ≥ 40%」「パッチテストの合格率 ≥ 80%」「再現成功率 ≥ 90%」「安全でない出力 = 0」「固定版に対するコスト増加 ≤ 2×」「SOTA 超え:チャンピオンが統計的に前回のチャンピオンを上回る」「複利効果:誤検知の再発率が ≥ 35% 低下」)。
- ベースラインとチャンピオンの比較表を解析します(各ハーネスの fitness/TPR/FPR/patchPass/repro/unsafe/cost を示す 4 行)。
- 構造化 JSON を出力します。
--alert-on-failを指定した場合、全体が FAIL なら 1 を終了コードとして返します。
出力形式
{
"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
}
}
ADR-155 の夜間ハーネスへの組み込み
ADR-155 の夜間ワークフロー(#2418 のタスク W1.5)では、これをアクティブペンテスト次元の呼び出しの 1 つとして起動し、その結果を軌跡レコードにします。
{
"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 だけが検出する問題の重みを高く学習します。
終了コード
| コード | 意味 |
|---|---|
| 0 | ベンチを実行しました(全体の PASS または FAIL。区別には JSON の overall.ok を使用)、または縮退モードで実行しました |
| 1 | --alert-on-fail が指定され、overall.ok === false |
| 2 | 設定エラーまたは上流のインフラストラクチャ障害 |
グレースフルデグレード
@metaharness/darwin がない場合は、{degraded: true, reason: 'metaharness-darwin-not-available'} を出力し、終了コード 0 を返します。