security-suite について
security-suiteは、許可を得たバイナリとリポジトリ内のプロンプト面を検査するスキルです。分析、ベースライン比較、ポリシーチェック、オフラインのレッドチームスキャンを組み合わせ、CI向けの機械可読な結果を出力します。
主な機能
- 01バイナリのメタデータとライブラリの静的分析
- 02サンドボックスでの実行挙動トレース
- 03コマンド契約の取得と差分比較
- 04ポリシーチェックと合否判定
- 05プロンプト面のオフラインレッドチームスキャン
活用シーン
- 01既知の正常なバイナリのベースライン取得
- 02CIでの候補リリースのゲート
- 03リポジトリのプロンプトに対するセキュリティ回帰検査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ boshu2/ agentops --skill security-suiteインストール後、Claude Code で/security-suiteを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/agentops-redteam-pack.jsonowasp-checklist.mdpolicy-example.jsonsecurity-suite.featurescripts/prompt_redteam.pysecurity_suite.pyvalidate.sh詳細
セキュリティスイート
目的: 許可を受けたバイナリと、リポジトリで管理されるプロンプトサーフェス向けに、組み合わせて繰り返し利用できるセキュリティ/内部テストのプリミティブを提供します。
このスキルでは、セキュリティワークフローのテスト可能性と再利用性を保つため、懸念事項をプリミティブに分離しています。
ガードレール
- 所有しているバイナリ、または評価の明示的な許可を得ているバイナリにのみ使用してください。
- 法的制限の回避や、許可なく第三者の専有コンテンツを抽出するために、このワークフローを使用しないでください。
- その場限りのリバースエンジニアリングよりも、動作の保証とポリシーによるゲートを優先してください。
プリミティブモデル
collect-static— ファイルメタデータ、ランタイムのヒューリスティック、リンクされたライブラリ、埋め込みアーカイブのシグネチャ。collect-dynamic— サンドボックス内の実行トレース(プロセス、ファイルの変更、ネットワークエンドポイント)。collect-contract— ヘルプサーフェスのプロービングによる、機械可読な動作コントラクト。compare-baseline— 現在のコントラクトとベースラインの差分(コマンドの追加/削除、ランタイムの変更)。enforce-policy— 許可リスト/拒否リストのゲートと、重大度に基づく判定。collect-redteam— プロンプトインジェクション、ツールの誤用、シークレットの漏えい、安全でないシェル操作のリグレッションを検出する、オフラインのリポジトリサーフェス向け攻撃パックのスキャン。run— プリミティブを組み合わせ、スイートの概要を書き出す、薄いバイナリオーケストレーター。
クイックスタート
単一の実行(デフォルトの動的コマンドは --help):
python3 skills/security-suite/scripts/security_suite.py run \
--binary "$(command -v ao)" \
--out-dir .tmp/security-suite/ao-current
ベースラインのリグレッションゲート:
python3 skills/security-suite/scripts/security_suite.py run \
--binary "$(command -v ao)" \
--out-dir .tmp/security-suite/ao-current \
--baseline-dir .tmp/security-suite/ao-baseline \
--fail-on-removed
ポリシーゲート:
python3 skills/security-suite/scripts/security_suite.py run \
--binary "$(command -v ao)" \
--out-dir .tmp/security-suite/ao-current \
--policy-file skills/security-suite/references/policy-example.json \
--fail-on-policy-fail
リポジトリサーフェスのレッドチームテスト:
python3 skills/security-suite/scripts/prompt_redteam.py scan \
--repo-root . \
--pack-file skills/security-suite/references/agentops-redteam-pack.json \
--out-dir .tmp/security-suite-redteam
OWASP Top 10 のコードレベルレビューについては、references/owasp-checklist.md を参照してください。
推奨ワークフロー
- 正常性が確認されたリリースでベースラインを取得します。
- CI で候補のバイナリに対してスイートを実行します。
- ベースラインと比較し、ポリシーを適用します。
- 判定が不合格の場合は、昇格をブロックします。
出力コントラクト
すべての出力は --out-dir の下に書き込まれます。
static/static-analysis.jsondynamic/dynamic-analysis.jsoncontract/contract.jsoncompare/baseline-diff.json(ベースラインが指定された場合)policy/policy-verdict.json(ポリシーが指定された場合)suite-summary.jsonredteam/redteam-results.json(リポジトリサーフェスのレッドチームテストを実行した場合)
この出力構造は、CI ゲートで機械的に利用できるよう意図的に設計されています。
ポリシーモデル
出発点として skills/security-suite/references/policy-example.json を使用してください。
サポートされるチェック:
required_top_level_commandsdeny_command_patternsmax_created_filesforbid_file_path_patternsallow_network_endpoint_patternsdeny_network_endpoint_patternsblock_if_removed_commandsmin_command_count
レッドチームパックモデル
オフラインのリポジトリサーフェス向けレッドチームチェックの出発点として、 agentops-redteam-pack.json を使用してください。
サポートされるターゲットフィールド:
globsrequire_groupsforbidden_anyapplies_if_any
各ケースでは、具体的な敵対的プロンプトまたはオペレーターによるバイパスの試みを示し、それをリポジトリが所有する1つ以上のファイルに関連付けます。最初に提供されるパックでは、指示の優先順位、コンテキストの過剰な露出、破壊的な Git の誤用、セキュリティゲートのバイパス、安全でないシェル操作やシークレット処理のリグレッションを対象としています。
手法の対象範囲
このスイートは、CLI メタデータだけでなく、幅広い種類のバイナリを対象に設計されています。
- 静的なランタイム/ライブラリのフィンガープリント
- サンドボックス内での動作観察
- コマンド/コントラクトの取得
- 差分の分類
- ポリシーの適用と CI の判定
- プロンプトやオペレーターコントラクトのリグレッションを対象とする、リポジトリサーフェスのレッドチームチェック
この設計は意図的にモジュール化されているため、ワークフローを書き換えずに、後からより高度なプリミティブ(システムコールのトレース、SBOM アテステーションの検証、ファジングハーネスなど)を追加できます。
検証
実行:
bash skills/security-suite/scripts/validate.sh
bash tests/scripts/test-security-suite-redteam.sh
スモークテスト(推奨):
python3 skills/security-suite/scripts/security_suite.py run \
--binary "$(command -v ao)" \
--out-dir .tmp/security-suite-smoke \
--policy-file skills/security-suite/references/policy-example.json
リポジトリサーフェスのスモークテスト:
python3 skills/security-suite/scripts/prompt_redteam.py scan \
--repo-root . \
--pack-file skills/security-suite/references/agentops-redteam-pack.json \
--out-dir .tmp/security-suite-redteam-smoke
例
シナリオ:ベースラインを取得して新しいリリースをゲートする
ユーザーの入力: /security-suite run --binary $(command -v ao) --out-dir .tmp/security-suite/ao-v2.4
実行内容:
- スイートは、
aoバイナリに対して静的解析(ファイルのメタデータ、リンクされたライブラリ、埋め込みアーカイブのシグネチャ)、動的トレース(サンドボックス内で--helpを実行し、プロセス、ファイルの変更、ネットワークエンドポイントを監視)、およびコントラクトの取得を実行します。 - 出力ディレクトリに
static/static-analysis.json、dynamic/dynamic-analysis.json、contract/contract.json、suite-summary.jsonを書き込みます。
結果: ao v2.4 の完全なベースラインスナップショットが取得され、今後のリリース比較で --baseline-dir として使用できる状態になります。
シナリオ:ベースラインとポリシーを使った CI 回帰ゲート
ユーザーの入力: /security-suite run --binary ./bin/ao-candidate --out-dir .tmp/ao-candidate --baseline-dir .tmp/security-suite/ao-v2.4 --policy-file skills/security-suite/references/policy-example.json --fail-on-removed --fail-on-policy-fail
実行内容:
- スイートは候補バイナリに対して3つすべての収集プリミティブを実行し、生成されたコントラクトを v2.4 のベースラインと比較して、追加、削除、変更されたコマンドを含む
compare/baseline-diff.jsonを生成します。 - ポリシーファイルのチェック(必須コマンド、拒否パターン、ネットワークの許可リスト、ファイル制限)を評価し、合否判定を含む
policy/policy-verdict.jsonを書き込みます。
結果: コマンドが削除されているか、ポリシーチェックに失敗すると、スイートはゼロ以外の終了コードを返し、CI パイプラインで候補の昇格を阻止します。
シナリオ:リポジトリのプロンプトとスキルのサーフェスをオフラインでレッドチームテストする
ユーザーの入力: /security-suite collect-redteam --repo-root .
実行内容:
- レッドチームスキャナーは、
agentops-redteam-pack.jsonから攻撃パックを読み込み、リポジトリが所有する制御サーフェスを具体的な攻撃ケースに照らして評価します。 - 選択した出力ディレクトリに
redteam/redteam-results.jsonとredteam/redteam-results.mdを書き込み、重大度が fail のケースに対処できなかった場合はゼロ以外の終了コードを返します。
結果: ホストされたモデルによるスキャンを必要とせず、プロンプトインジェクション、ツールの誤用、コンテキストの過剰な露出、シークレットの取り扱い、安全でないシェル操作の回帰について、リポジトリの決定論的なレッドチーム判定が得られます。
トラブルシューティング
| 問題 | 原因 | 解決策 |
|---|---|---|
| 明確な問題が見つからないままスイートがゼロ以外の終了コードを返す | 正当な変更に対して --fail-on-removed または --fail-on-policy-fail が作動した | compare/baseline-diff.json と policy/policy-verdict.json を確認して具体的な差分を特定し、それに応じてベースラインまたはポリシーファイルを更新してください。 |
dynamic/dynamic-analysis.json が空、または内容がほとんどない | バイナリが --help 以外の引数を必要とするか、サンドボックスによって実行がブロックされた | 対応している場合はカスタムの動的コマンドを指定するか、バイナリがサンドボックス環境で実行できることを確認してください(権限や不足している共有ライブラリを確認してください)。 |
contract/contract.json のコマンド数がゼロと表示される | バイナリが --help のインターフェースを公開していないか、標準以外のヘルプフラグを使用している | バイナリが --help に対応していることを確認してください。通常と異なるヘルプインターフェースを持つバイナリの場合は、正しい呼び出し方法で collect-contract を個別に実行してください。 |
deny_command_patterns でポリシー判定が失敗する | 新しいサブコマンドがポリシーファイル内の拒否正規表現に一致した | サブコマンドの名前を変更するか、ポリシー JSON の deny_command_patterns を更新して、正当なパターンを除外してください。 |
baseline-diff.json が生成されない | --baseline-dir が指定されていないか、指定先のディレクトリが存在しない | ベースラインディレクトリが存在し、以前の実行で生成された有効な contract/contract.json が含まれていることを確認してください。 |
| 文言を整理した後にレッドチームスキャンが失敗する | 攻撃パックが対象ファイル内の意図されたガードレールの文言と一致しなくなった | redteam/redteam-results.json を確認し、制御が後退したのか正規表現の脆弱性によるものかを見極めてから、対象ファイルまたはパックを意図的に更新してください。 |
参考ドキュメント
-
references/security-suite.feature — 実行可能な仕様:組み合わせ可能なプリミティブ(静的/動的/コントラクト)から security-report.json を生成します。認可の範囲内で、サプライヤーから vibe までを対象とします(soc-qk4b)