本文へスキップ

$ cat detection/README.md

検知エンジニアリング

脆弱性から検知へ。研究をSOCの価値に落とし込む。

想定外オリジンからのWebhook/Callback

KQL — Azure Monitorステータス: 参考例

登録時に観測されていない送信元から特権自動化へ戻ってくるCallbackを可視化します。Callback認可の悪用を示すシグナルです。

データソース
Azure Monitor / Application Insights AppRequests
必須フィールド
TimeGenerated, ClientIP, Url, ResultCode, ClientType
最終レビュー
最終実行確認
独立した実行環境では未検証です。本番利用前に対象ワークスペースで検証してください。
既知の制約
Application InsightsでClientIPがマスクされる場合があります。Proxy、NAT、送信元IPの変更により、送信元の識別精度が下がる可能性があります。
想定される誤検知
新規デプロイ、送信元IPのローテーション、ヘルスチェック、正当な登録変更。
// Callbacks hitting the integration endpoint from a source
// that never appeared during the registration/handshake phase.
let lookback = 14d;
let known_sources =
    AppRequests
    | where TimeGenerated > ago(lookback)
    | where Url has "/integration/register"
    | where isnotempty(ClientIP)
    | summarize by ClientIP;
AppRequests
| where TimeGenerated > ago(1d)
| where Url has "/integration/callback"
| where isnotempty(ClientIP)
| where ClientIP !in (known_sources)
| project TimeGenerated, ClientIP, Url, ResultCode, ClientType
| order by TimeGenerated desc

許可スコープを超えるTool呼び出し

Sigmaステータス: 参考例

信頼できる上流ノーマライザが、委譲スコープを超えたと事前判定したTool呼び出しイベントを検知します。Sigmaルール自体はスコープ集合を比較しません。

データソース
正規化済みAIゲートウェイ / Tool呼び出し監査イベント
必須フィールド
event_type, authorization.scope_violation, agent_id, tool_name, requested_scope, granted_scope
最終レビュー
最終実行確認
独立した実行環境では未検証です。利用前にカスタムログソースとフィールドを対象環境へマッピングしてください。
既知の制約
ポリシーを理解した上流処理でスコープ集合を比較し、authorization.scope_violationを生成する必要があります。Sigmaはその真偽値を照合するだけです。
想定される誤検知
ポリシーマッピングの差分、古い認可キャッシュ、明示的に承認されたサービス間委譲。
title: AI Agent Tool Call Exceeds Delegated Scope
status: experimental
description: Matches a scope violation precomputed by a trusted authorization normalizer.
logsource:
  product: ai_gateway
  service: tool_calls
detection:
  selection:
    event_type: 'tool_invocation'
    'authorization.scope_violation': true
  condition: selection
fields:
  - agent_id
  - tool_name
  - requested_scope
  - granted_scope
  - authorization.scope_violation
falsepositives:
  - Policy mapping drift or stale authorization state
  - Explicitly approved service-to-service delegation
level: high

特権コンテキストへ再突入する非同期タスク

Splunk SPLステータス: 参考例

キュー投入時のリクエストより高い権限で再開する非同期ジョブを検出します。再認可の欠落を示します。

データソース
正規化済みSplunkタスクランナーイベント
必須フィールド
task_id, event_type, privilege_rank, agent_id, tool_name
最終レビュー
最終実行確認
独立した実行環境では未検証です。利用前にフィールド抽出と権限ランクの定義を検証してください。
既知の制約
安定したtask_id、保持期間内の投入・実行イベント両方、および環境固有の数値privilege_rank定義が必要です。
想定される誤検知
承認済みの権限変更、管理上の再試行、task_idの重複、イベントの再送。
index=ai_platform sourcetype=task_runner
    (event_type="task_enqueued" OR event_type="task_executed")
| stats earliest(_time) as first_seen
        latest(_time) as last_seen
        earliest(eval(if(event_type="task_enqueued", privilege_rank, null()))) as enqueue_privilege_rank
        latest(eval(if(event_type="task_executed", privilege_rank, null()))) as execute_privilege_rank
        latest(agent_id) as agent_id
        latest(tool_name) as tool_name
  by task_id
| where isnotnull(enqueue_privilege_rank)
    AND isnotnull(execute_privilege_rank)
    AND execute_privilege_rank > enqueue_privilege_rank
| table first_seen last_seen task_id agent_id tool_name enqueue_privilege_rank execute_privilege_rank

# ログソース対応表

AIゲートウェイ / Tool呼び出しログ要求スコープと付与スコープ、ツール名、エージェントID。
アプリ / APIリクエストログCallback送信元、登録ハンドシェイク、結果コード。
ID / OAuthログトークン発行、委譲された同意、スコープ付与。
タスク / キューランナーログ投入時と実行時の権限、遅延再突入。

# インシデント対応チェックリスト

  • [1]影響を受けた連携の認証情報を凍結し、委譲トークンをローテーションする。
  • [2]影響範囲を特定する:Deputyが到達しうるツール・データストア・テナントを洗い出す。
  • [3]露出期間のTool呼び出し・Callbackログを取得し、スコープ昇格を探す。
  • [4]実際に操作が実行されたのか、認可されただけかを確認する。
  • [5]開示・通知ポリシーに従い、影響を受けた所有者へ通知する。
  • [6]インシデントをクローズする前に、対応する検知(KQL/Sigma/SPL)を展開する。