mcpField
A
agent-owasp-compliance

agent-owasp-compliance

github.com/githubセキュリティ40.5k1.5k 回インストール今日更新
リポジトリ

agent-owasp-compliance について

OWASP Agentic Security Initiative(ASI)Top 10に照らして、AIエージェントシステムを評価するセキュリティレビュー用スキルです。コード上の10分野の対策を確認し、コンプライアンス報告書の形式と簡易評価質問を示します。

主な機能

  1. 01OWASP ASI Top 10リスクの確認
  2. 02入力とツール呼び出し制御のレビュー
  3. 03権限、ID、信頼境界の評価
  4. 04監査ログとポリシー適用の確認
  5. 05サプライチェーンと異常対策の評価

活用シーン

  1. 01エージェントプロジェクトのセキュリティ対策監査
  2. 02ツール呼び出しと権限管理の不足箇所の特定
  3. 03マルチエージェント間の信頼検証の評価
  4. 04OWASP ASIコンプライアンス報告書の作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/github/awesome-copilot --skill agent-owasp-compliance

インストール後、Claude Code で/agent-owasp-complianceを入力して読み込まれたか確認します。

詳細

エージェント OWASP ASI コンプライアンスチェック

OWASP Agentic Security Initiative(ASI)Top 10 に照らして AI エージェントシステムを評価します。ASI Top 10 は、エージェントのセキュリティ態勢に関する業界標準です。

概要

OWASP ASI Top 10 は、自律型 AI エージェントに固有の重大なセキュリティリスクを定義しています。LLM やチャットボットではなく、ツールを呼び出し、システムにアクセスし、ユーザーに代わって動作するエージェントのリスクです。このスキルでは、エージェントの実装が各リスクに対処しているかを確認します。

Codebase → Scan for each ASI control:
  ASI-01: Prompt Injection Protection
  ASI-02: Tool Use Governance
  ASI-03: Agency Boundaries
  ASI-04: Escalation Controls
  ASI-05: Trust Boundary Enforcement
  ASI-06: Logging & Audit
  ASI-07: Identity Management
  ASI-08: Policy Integrity
  ASI-09: Supply Chain Verification
  ASI-10: Behavioral Monitoring
→ Generate Compliance Report (X/10 covered)

10 のリスク

リスク名称確認する項目
ASI-01プロンプトインジェクションツール呼び出し前の入力検証。LLM 出力のフィルタリングだけでは不十分
ASI-02安全でないツールの使用ツールの許可リスト、引数の検証、生のシェル実行を行わないこと
ASI-03過剰な権限能力の境界、スコープ制限、最小権限の原則
ASI-04不正な権限昇格機密性の高い操作前の権限チェック、自己昇格を行わないこと
ASI-05信頼境界の侵害エージェント間の信頼性検証、署名付き認証情報、盲目的に信頼しないこと
ASI-06ログ記録の不足すべてのツール呼び出しを対象とする構造化監査証跡、改ざん検知可能なログ
ASI-07安全でない ID文字列の名前だけでなく、暗号技術に基づくエージェント ID
ASI-08ポリシーの回避決定論的なポリシーの適用、LLM ベースの権限チェックを行わないこと
ASI-09サプライチェーンの完全性署名付きプラグイン/ツール、完全性の検証、依存関係の監査
ASI-10動作の異常ドリフト検出、サーキットブレーカー、キルスイッチ機能

ASI-01 のチェック:プロンプトインジェクション対策

LLM による生成後ではなく、ツールの実行前に行われる入力検証を確認します。

import re
from pathlib import Path

def check_asi_01(project_path: str) -> dict:
    """ASI-01: Is user input validated before reaching tool execution?"""
    positive_patterns = [
        "input_validation", "validate_input", "sanitize",
        "classify_intent", "prompt_injection", "threat_detect",
        "PolicyEvaluator", "PolicyEngine", "check_content",
    ]
    negative_patterns = [
        r"eval\(", r"exec\(", r"subprocess\.run\(.*shell=True",
        r"os\.system\(",
    ]

    # Scan Python files for signals
    root = Path(project_path)
    positive_matches = []
    negative_matches = []

    for py_file in root.rglob("*.py"):
        content = py_file.read_text(errors="ignore")
        for pattern in positive_patterns:
            if pattern in content:
                positive_matches.append(f"{py_file.name}: {pattern}")
        for pattern in negative_patterns:
            if re.search(pattern, content):
                negative_matches.append(f"{py_file.name}: {pattern}")

    positive_found = len(positive_matches) > 0
    negative_found = len(negative_matches) > 0

    return {
        "risk": "ASI-01",
        "name": "Prompt Injection",
        "status": "pass" if positive_found and not negative_found else "fail",
        "controls_found": positive_matches,
        "vulnerabilities": negative_matches,
        "recommendation": "Add input validation before tool execution, not just output filtering"
    }

合格の例:

# GOOD: Validate before tool execution
result = policy_engine.evaluate(user_input)
if result.action == "deny":
    return "Request blocked by policy"
tool_result = await execute_tool(validated_input)

不合格の例:

# BAD: User input goes directly to tool
tool_result = await execute_tool(user_input)  # No validation

ASI-02 のチェック:安全でないツールの使用

ツールに許可リストと引数検証があり、制限のない実行ができないことを確認します。

検索する項目:

  • 明示的な許可リストを使用したツール登録(範囲を限定しない登録ではないこと)
  • ツール実行前の引数検証
  • ユーザーが制御する入力を使った subprocess.run(shell=True) がないこと
  • サンドボックスなしでエージェントが生成したコードに対して eval() または exec() を使用していないこと

合格例:

ALLOWED_TOOLS = {"search", "read_file", "create_ticket"}

def execute_tool(name: str, args: dict):
    if name not in ALLOWED_TOOLS:
        raise PermissionError(f"Tool '{name}' not in allowlist")
    # validate args...
    return tools[name](**validated_args)

ASI-03 のチェック:過剰な権限

エージェントの能力が無制限ではなく、制限されていることを確認します。

検索する項目:

  • 明示的な能力リストまたは実行リング
  • エージェントがアクセスできる対象のスコープ制限
  • ツールへのアクセスに適用される最小権限の原則

不合格: エージェントがデフォルトですべてのツールにアクセスできます。 合格: エージェントの能力が固定の許可リストとして定義され、未知のツールは拒否されます。


ASI-04 のチェック:不正な権限昇格

エージェントが自らの権限を昇格できないことを確認します。

検索する項目:

  • 機密性の高い操作前の権限レベルチェック
  • 自己昇格のパターンがないこと(エージェントが自身の信頼スコアやロールを変更するなど)
  • 権限昇格には外部の証明(人間または SRE の立ち会い)が必要であること

不合格: エージェントが自身の設定または権限を変更できます。 合格: 権限の変更には帯域外の承認が必要です(例:Ring 0 には SRE の証明が必要)。


ASI-05 のチェック:信頼境界の侵害

マルチエージェントシステムでは、指示を受け入れる前にエージェント同士が互いの ID を検証することを確認します。

検索する項目:

  • エージェント ID の検証(DID、署名付きトークン、API キー)
  • 委任されたタスクを受け入れる前の信頼スコアチェック
  • エージェント間メッセージを盲目的に信頼しないこと
  • 委任時のスコープの縮小(子のスコープ <= 親のスコープ)

合格例:

def accept_task(sender_id: str, task: dict):
    trust = trust_registry.get_trust(sender_id)
    if not trust.meets_threshold(0.7):
        raise PermissionError(f"Agent {sender_id} trust too low: {trust.current()}")
    if not verify_signature(task, sender_id):
        raise SecurityError("Task signature verification failed")
    return process_task(task)

チェック ASI-06:不十分なログ記録

すべてのエージェントのアクションが、構造化され、改ざんの検知が可能な監査記録として残されることを確認します。

検索する項目:

  • すべてのツール呼び出しを対象とした構造化ログ(単なる print 文ではない)
  • 監査記録に含まれる項目:タイムスタンプ、エージェント ID、ツール名、引数、結果、ポリシー判定
  • 追記専用、またはハッシュチェーン形式のログ
  • エージェントが書き込み可能なディレクトリとは別の場所に保存されたログ

不合格: エージェントのアクションが print() で記録されているか、まったく記録されていません。 合格: チェーンハッシュ付きの構造化 JSONL 監査証跡を、安全なストレージにエクスポートしています。


チェック ASI-07:安全でない ID

エージェントが単なる文字列名ではなく、暗号学的 ID を持つことを確認します。

不合格を示す項目:

  • エージェントが agent_name = "my-agent"(文字列のみ)で識別されている
  • エージェント間に認証がない
  • エージェント間で認証情報を共有している

合格を示す項目:

  • DID ベースの ID(did:web:、did:key:)
  • Ed25519 または同様の暗号学的署名
  • ローテーション可能なエージェントごとの認証情報
  • 特定の機能に紐付けられた ID

チェック ASI-08:ポリシーの回避

ポリシーの適用が決定論的であり、LLM ベースではないことを確認します。

検索する項目:

  • ポリシー評価に決定論的ロジック(YAML ルール、コードの述語)を使用している
  • 適用経路に LLM 呼び出しがない
  • エージェントがポリシーチェックをスキップまたは上書きできない
  • フェイルクローズ動作(ポリシーチェックでエラーが発生した場合、アクションを拒否する)

不合格: エージェントがプロンプト(「これは許可されていますか?」)を通じて、自身の権限を判断しています。 合格: PolicyEvaluator.evaluate() が LLM を介さずに、0.1ms 未満で許可/拒否を返します。


チェック ASI-09:サプライチェーンの完全性

エージェントのプラグインとツールの完全性が検証されていることを確認します。

検索する項目:

  • SHA-256 ハッシュを含む INTEGRITY.json またはマニフェストファイル
  • プラグインのインストール時の署名検証
  • 依存関係の固定(@latest や、上限のない >= を使用していない)
  • SBOM の生成

チェック ASI-10:動作異常

エージェントの動作の逸脱をシステムが検出し、対応できることを確認します。

検索する項目:

  • 繰り返し発生する失敗時に作動するサーキットブレーカー
  • 時間経過に伴う信頼スコアの低下(時間減衰)
  • キルスイッチまたは緊急停止機能
  • ツール呼び出しパターン(頻度、対象、タイミング)に対する異常検知

不合格: 問題のあるエージェントを自動的に停止する仕組みがありません。 合格: N 回の失敗後にサーキットブレーカーが作動し、活動がない場合は信頼スコアが低下し、キルスイッチを利用できます。


コンプライアンスレポートの形式

# OWASP ASI Compliance Report
Generated: 2026-04-01
Project: my-agent-system

## Summary: 7/10 Controls Covered

| Risk | Status | Finding |
|------|--------|---------|
| ASI-01 Prompt Injection | PASS | PolicyEngine validates input before tool calls |
| ASI-02 Insecure Tool Use | PASS | Tool allowlist enforced in governance.py |
| ASI-03 Excessive Agency | PASS | Execution rings limit capabilities |
| ASI-04 Unauthorized Escalation | PASS | Ring promotion requires attestation |
| ASI-05 Trust Boundary | FAIL | No identity verification between agents |
| ASI-06 Insufficient Logging | PASS | AuditChain with SHA-256 chain hashes |
| ASI-07 Insecure Identity | FAIL | Agents use string names, no crypto identity |
| ASI-08 Policy Bypass | PASS | Deterministic PolicyEvaluator, no LLM in path |
| ASI-09 Supply Chain | FAIL | No integrity manifests or plugin signing |
| ASI-10 Behavioral Anomaly | PASS | Circuit breakers and trust decay active |

## Critical Gaps
- ASI-05: Add agent identity verification using DIDs or signed tokens
- ASI-07: Replace string agent names with cryptographic identity
- ASI-09: Generate INTEGRITY.json manifests for all plugins

## Recommendation
Install agent-governance-toolkit for reference implementations of all 10 controls:
pip install agent-governance-toolkit

簡易評価の質問

エージェントシステムを迅速に評価するには、次の質問を使用してください。

  1. ユーザー入力は、ツールに渡される前に検証されていますか?(ASI-01)
  2. エージェントが呼び出せるツールの明示的な一覧はありますか?(ASI-02)
  3. エージェントは何でも実行できますか、それとも機能が制限されていますか?(ASI-03)
  4. エージェントは自らの権限を昇格できますか?(ASI-04)
  5. エージェントはタスクを受け取る前に、互いの ID を検証していますか?(ASI-05)
  6. 再現に十分な詳細情報とともに、すべてのツール呼び出しが記録されていますか?(ASI-06)
  7. 各エージェントは固有の暗号学的 ID を持っていますか?(ASI-07)
  8. ポリシーの適用は決定論的ですか(LLM ベースではありませんか)?(ASI-08)
  9. プラグイン/ツールは使用前に完全性が検証されていますか?(ASI-09)
  10. サーキットブレーカーまたはキルスイッチはありますか?(ASI-10)

いずれかの質問に「いいえ」と答えた場合は、対処すべきギャップがあります。


関連リソース

コメント