regression-sweep について
regression-sweepは、検証済みのセキュリティ発見を定期的に再確認するスキルです。PoCを再実行して出力を正規化比較し、CVEスコアも確認します。新たな発見は作成しません。
主な機能
- 01検証済み発見の一覧化
- 02タイムアウト付きPoC再実行
- 03正規化した出力の比較
- 04CVE重大度の再確認
- 05JSONとMarkdownレポートの作成
活用シーン
- 01脆弱性が残っているか週次確認
- 02大規模パッチ適用後の発見再確認
- 03重大度変化や再発の検出
- 04修正済みと判定不能な結果の区別
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ transilienceai/ communitytools --skill regression-sweepインストール後、Claude Code で/regression-sweepを入力して読み込まれたか確認します。
同梱ファイルreference/diff-normalization.md
詳細
回帰スイープ
validated/*.json ツリー全体を走査し、各検出結果の poc.py を再実行して、出力を記録済みの poc_output.txt と比較し、週次のドリフトレポートを作成します。クラウドエージェントのタスク #4 に組み込まれています。
トリガー
毎週の Cron(デフォルトは月曜日の 02:00 UTC)。大規模なパッチのデプロイ後に、アドホックで実行することもできます。
ワークフロー
- 検証済みの検出結果をインデックス化します。
validated/*.jsonを Glob で検索し、各エントリのFINDING_DIR(findings/finding-NNN/配下)を解決します。 - 各検出結果について:
- 60 秒のタイムアウトを設定して
python3 poc.pyを再実行します。 - stdout/stderr を
findings/finding-NNN/evidence/validation/regression-{week}-rerun.txtに記録します。 - 正規化した行セットの比較(タイムスタンプ、リクエスト ID、一時トークンを除去)を使用して、
findings/finding-NNN/evidence/validation/poc-rerun-output.txt(バリデーターが元々再実行した際の出力)との差分を確認します。 tools/nvd-lookup.pyで検出結果の CVE を再確認します。重大度に変化はありますか?
- 60 秒のタイムアウトを設定して
- 各検出結果を次のいずれかに分類します:
still_valid— 再実行結果が許容範囲内でベースラインと一致し、CVSS に変化がありません。drift_severity— 再実行結果は一致しますが、CVSS が 1.0 以上変動しています(NVD でスコアが再評価されています)。newly_invalid— 再実行結果が一致せず、エクスプロイトが作動しなくなっています。パッチが適用された可能性があります。newly_revalidated— 後にREJECTEDとマークされた検出結果が、再び作動します。回帰です。inconclusive— 再実行でエラーが発生しました(ネットワーク、ターゲットに到達不能)。次回のスイープで再試行します。
- レポートを
artifacts/regression-{YYYYWww}.jsonと、人が読みやすい形式のregression-{YYYYWww}.mdに書き込みます。状態の遷移(newly_revalidated、drift_severity、newly_invalid)は、アナリストが確認できるよう、明示的な見出しの下にレポートへ記載します。
出力
{OUTPUT_DIR}/
artifacts/
regression-{YYYYWww}.json # machine-readable result
regression-{YYYYWww}.md # human summary
findings/finding-NNN/evidence/validation/
regression-{YYYYWww}-rerun.txt # captured re-run output
regression-{week}.json のスキーマ:
{
"week": "2026W19",
"swept_at": "2026-05-13T02:00:00Z",
"counts": {"still_valid": 47, "drift_severity": 2, "newly_invalid": 5, "newly_revalidated": 1, "inconclusive": 3},
"findings": [
{"finding_id": "finding-012", "asset": "asset42", "cve": "CVE-2024-12345",
"verdict": "newly_invalid", "reason": "PoC output diverged: response now 404",
"baseline_cvss": 9.8, "current_cvss": 9.8}
]
}
ルール
- 実証に徹し、妨害しません。 PoC の再実行は観測であり、変更ではありません。すべての
poc.pyは検証時にすでに実証のみの制約(タスク 03 の安全性セクション)を満たしており、スイープでは同じスクリプトを再実行するだけです。スクリプトは仕様上、証明シグナルを読み取って終了します。再実行時に、本来含まれているべきではない変更操作を PoC が試みた場合、スイープはその検出結果をinconclusiveとして中止し、stderr に WARN を出力します。この PoC には回帰スコアの判定ではなく、再検証が必要です。 - PoC ごとの実行時間に上限を設けます。
poc.pyごとにタイムアウトは 60 秒です。タイムアウトはnewly_invalidではなくinconclusiveとします。これにより、ネットワークの瞬断による誤検知の「パッチ適用済み」判定を防ぎます。 - 正規化した差分を使用します。 比較前に、タイムスタンプ(
\d{4}-\d{2}-\d{2}T\d{2}:\d{2})、リクエスト ID([a-f0-9]{32,})、一時的なセッショントークンを除去します。実際のエクスプロイト出力は構造的に安定しています。 - 新たな検出結果を追加しません。 回帰スイープでは既存の検出結果のステータスを変更できますが、新しい検出結果は作成できません。新たに確認された脆弱性は、このスキルではなく Validation Run タスクで扱います。
- 冪等性を保ちます。 同じ週のスイープを再実行すると、同じ
regression-{YYYYWww}.jsonが上書きされます。検出結果ごとのregression-{week}-rerun.txtにはタイムスタンプを付け、履歴を保持します。 - 同時に再実行する数を制限します。 本番アセットへの過剰な負荷を避けるため、スイープごとの PoC 再実行は最大 5 件まで並列に実行します。
参考資料
reference/diff-normalization.md— 正規化ルールの詳細と、検出結果ごとの出力安定性に関するヒューリスティクス。
コメント
Markdown 対応