概要
Microsoft Defender XDR 統合 (INT-021) は、Microsoft Defender for Endpoint (MDE) や Microsoft Defender XDR を含む Microsoft の拡張検出および対応プラットフォームと CaseBender の間で双方向同期を提供します。インバウンド取り込み
Defender のアラートとインシデントは CaseBender に取り込まれ、正規化され、オブザーバブルと
MITRE ATT&CK テクニックで強化され、アラート/ケースに変換されます。
アウトバウンド同期
CaseBender のケースがクローズされると、リンクされた Defender のアラート/インシデントが、
Microsoft Graph 経由でステータス、分類、監査コメントとともに更新されます。
この統合は Microsoft Graph セキュリティ API
(
https://graph.microsoft.com/v1.0/security) を使用します。OAuth2 クライアント資格情報
フローを使用して Azure AD (Entra ID) アプリケーションで認証します。機能
前提条件
1
Microsoft Defender / Entra ID へのアクセス
Microsoft Defender XDR または Microsoft Defender for Endpoint がライセンスされ、有効化された
Microsoft Entra ID (Azure AD) テナント。アプリケーションを登録し、管理者の同意を付与する
権限が必要です。
2
ネットワーク送信
CaseBender のデプロイメントは次に到達できる必要があります:
https://login.microsoftonline.com(OAuth2 トークンエンドポイント)https://graph.microsoft.com(Graph セキュリティ API)
3
CaseBender 管理者ロール
設定 → 統合 で統合を作成・管理できる必要があります。
パート A — Azure AD アプリケーションを登録する
1
アプリ登録を作成する
Microsoft Entra 管理センター で、ID → アプリケーション →
アプリの登録 → 新規登録に移動します。名前 (例:
CaseBender Defender Integration) を付けて
登録します。2
識別子を記録する
アプリケーションの概要から、アプリケーション (クライアント) ID と
ディレクトリ (テナント) ID をコピーします。これらを CaseBender に入力します。
3
クライアントシークレットを作成する
証明書とシークレット → 新しいクライアントシークレットで、シークレットを作成し、その
値をすぐにコピーします (一度しか表示されません)。
4
Graph セキュリティ API 権限を付与する
API のアクセス許可 → アクセス許可の追加 → Microsoft Graph → アプリケーションのアクセス
許可で、必要な方向に応じたスコープを追加してから管理者の同意を与えるをクリックします:
ポーリングには読み取り専用で十分です。 インシデント/アラートを CaseBender に取り込む
だけの場合は、2 つの
Read.All スコープを付与してください。ReadWrite.All スコープは、
オプションのアウトバウンドのクローズ連携 (syncCaseClose) — CaseBender から Defender の
アラート/インシデントをクローズする場合 — にのみ必要です。ReadWrite.All は読み取り
アクセスも含むため、2 つの ReadWrite.All スコープのみを付与すれば両方向をカバーできます。パート B — CaseBender で統合を構成する
1
統合カタログを開く
設定 → 統合 → 作成に移動し、EDR/XDR カテゴリから Microsoft Defender XDR を
選択します。
2
Azure AD 資格情報を入力する
パート A で取得した値を入力します:
3
自動ポーリングを有効にする(推奨)
4
同期オプションを構成する
必要な動作を有効にします:
syncCaseClose がオンで両方の close…OnCaseClose がオフの場合でも、CaseBender は分類と
監査コメントを Defender に書き込みます。ただし Defender エンティティを resolved には
変更しません。5
接続をテストする
接続テストを使用して検証します。CaseBender は OAuth2 トークンを要求し、
GET /security/alerts_v2?$top=1 を呼び出します。テスト中の
403 応答は成功として扱われます。アプリがその特定のエンドポイントに
読み取りスコープをまだ付与されていない場合でも、認証が機能したことを確認できます。インバウンド(自動ポーリング、推奨)
自動ポーリングを有効にすると(統合の 自動ポーリング カード内)、CaseBender は定期的に Graph セキュリティ API を呼び出し、新しいインシデントを自動的に取り込みます。Microsoft 側で の Logic App、Sentinel の自動化ルール、Webhook フォワーダーは不要 で、パート A で作成した Azure AD アプリ登録のみが必要です。- スケジュールされたプル —
pollingIntervalMinutesごとに、CaseBender はlastUpdateDateTime gt <cursor>と$expand=alertsを用いてインシデントを古い順に取得し ます。初回実行時はpollingInitialLookbackHoursの範囲内で更新されたインシデントを取り込み ます。 - カーソルと重複排除 — 統合ごとのカーソルが最新のインシデントまで進み、インシデントは Defender のインシデント ID で重複排除されるため、同じものが二重に取り込まれることはありませ ん。
- 正規化 — 各インシデントとその子アラートは、オブザーバブル、資産、MITRE TTP を含む CaseBender のアラートになります。Defender のインシデント ID はアラートに記録され、アウトバ ウンドのクローズ同期がそれを見つけられるようにします。
SecurityIncident.Read.All(SecurityIncident.ReadWrite.All に含まれる)が必要です。
autoCreateCases を有効にすると、ポーリングで取得した各インシデントは自動的に ケース
になります(インシデント ID で重複排除)。無効の場合は アラート 受信トレイに表示され、手動
で昇格します。いずれの場合も Defender とのリンクは保持されるため、ケースをクローズすると
Defender へ同期できます。インバウンド(Webhook / プッシュ)
エンドポイント
Defender (または Logic Apps、Sentinel、Webhook フォワーダーなどの仲介) は、アラート/インシデント ペイロードを CaseBender の取り込みエンドポイントに送信します:x-api-key ヘッダーの統合 API キーで認証されます
(authorization: Bearer <キー> ヘッダーも受け入れられます)。Defender の Webhook API キーには
cbr_defender_ プレフィックスが付きます。
ペイロード形式
バッチ形式 (Graph のvalue[] 配列) と単一アラートオブジェクトの両方がサポートされます。
202 Accepted を返します:
処理パイプライン
1
取り込みプロキシ
/api/v1/ingest/defender はソースを検証し、リクエストを取り込みサービス
(POST /v1/sources/defender) に転送します。2
キューへの発行
取り込みサービスは API キーを認証し、ペイロードを検証して、各アラートを処理キューに発行します。
3
正規化
Defender プロセッサは各レコードを CaseBender アラートに正規化します。重大度のマッピング、
タイトル/説明の構築、オブザーバブルとデバイスアセットの抽出、MITRE TTP の生成を行います。
データマッピングリファレンス
重大度マッピング (Defender → CaseBender 1–4):
オブザーバブル抽出 (
evidence[] から):
取り込み時に適用されるタグには、
defender、xdr、service:<serviceSource>、
category:<category>、incident (インシデントの場合)、および MITRE テクニックごとに 1 つの
mitre:<technique> タグが含まれます。取り込まれたレコードはデフォルトで TLP:2 と
PAP:2 になります。
アウトバウンド: ケースのディスポジションを Defender に同期
CaseBender でケースがクローズされると、case_closed イベントが Defender ハンドラーに
ディスパッチされます。ケースが Defender のアラートまたはインシデントにリンクされている場合、
CaseBender は Graph セキュリティ API を通じて解決を送信します。
リンクされた Defender エンティティの解決方法
ハンドラーは次の順序で Defender 識別子を検索します:- ケースの
extraData.defenderAlertId/extraData.defenderIncidentId extraData.source === "defender"の場合のsourceRef- ケースにリンクされた Defender アラート — 取り込みパイプラインが各アラートの
customFieldsに Defender のインシデント/アラート ID を記録するため、Defender アラート (ポーリングまたは Webhook 由来)から昇格したケースは、作成方法にかかわらず自動的に解決 されます。
解決 → 分類のマッピング
クローズ時、CaseBender はマッピングされた
classification を適用し、次のようなコメントを追加します:
closeAlertsOnCaseClose、インシデントは
closeIncidentsOnCaseClose)が有効な場合、Defender エンティティの status を resolved に
設定します。結果はケースのタイムラインに記録されるため、アナリストは同期を確認できます。
syncCaseClose はアウトバウンド同期のマスタースイッチです(既定でオン)。オフの場合、
アウトバウンド呼び出しは行われません。アラート更新には最新の /security/alerts_v2/{id}
エンドポイントを、インシデント更新には /security/incidents/{id} を使用します。セキュリティに関する考慮事項
- シークレットの取り扱い — クライアントシークレットは統合設定に保存されます。組織が要求する スケジュールでローテーションし、その際に統合を更新してください。
- 最小権限 — インバウンドのみの展開では
SecurityAlert.Read.AllとSecurityIncident.Read.Allのみを付与してください。アウトバウンドのクローズ連携を有効にする 場合にのみ、対応するReadWrite.Allスコープを追加します。より広範な Graph スコープを追加 しないでください。 - トークンキャッシュ — アクセストークンは統合ごとにメモリ内にキャッシュされ、有効期限の 1 分前に更新されます。トークンはディスクに永続化されません。
- Webhook キー —
cbr_defender_API キーはシークレットとして扱ってください。公開された場合は ローテーションし、送信者の構成を更新します。 - ネットワーク — 送信を
login.microsoftonline.comとgraph.microsoft.comに制限します。
トラブルシューティング
接続テストが OAuth2 エラーで失敗する
接続テストが OAuth2 エラーで失敗する
tenantId、clientId、clientSecret を確認します。クライアントシークレットが期限切れで
なく、Graph アプリケーション権限に対して管理者の同意が付与されていることを確認します。取り込みが 400 'No alerts in payload' を返す
取り込みが 400 'No alerts in payload' を返す
ペイロードに
value[] 配列もトップレベルの id もありませんでした。Graph バッチ
オブジェクトまたは単一アラートオブジェクトを送信します。ポーリングは有効だがインシデントが表示されない
ポーリングは有効だがインシデントが表示されない
自動ポーリングを有効にする がオンで、接続テストが成功することを確認します。アプリに
SecurityIncident.Read.All(または ReadWrite.All)が管理者の同意とともに付与されている
こと、ポーリングサービスが graph.microsoft.com(およびプロキシがある場合はそれ)に到達
できること、カーソルより新しいインシデントが存在することを確認します。初回実行時は
pollingInitialLookbackHours 内のインシデントのみが取り込まれます。ポーリングで取得した
インシデントは アラート 受信トレイに表示されます。すべての CaseBender サービスが実行中であることを確認してください。 インシデントは
バックグラウンドのプロセッサーが取得し、バックグラウンドの ワーカー がアラート(および
任意でケース)に変換します。ワーカーが実行されていないと、インシデントは取得されても表示
されません。Docker では docker compose ps を実行し、worker と misp-processor サービスが
Up であることを確認してください。そうでない場合は docker compose up -d を実行します。
標準のインストーラーとクイックスタートはすべてを自動的に設定するため、キューや Redis の設定を
自分で行う必要はありません。ケースのクローズが Defender を更新しない
ケースのクローズが Defender を更新しない
syncCaseClose がオンであることを確認します(マスタースイッチです)。Defender エンティティ
も resolved にするには closeAlertsOnCaseClose / closeIncidentsOnCaseClose を有効に
します。ケースは Defender のアラート/インシデントにリンクされている必要があります。Defender
アラート(ポーリングまたは Webhook 由来)から昇格したケースをクローズすると、リンクは自動的
に解決されます。結果はケースのタイムラインで確認してください。アウトバウンド更新が 403 または 404 を返す
アウトバウンド更新が 403 または 404 を返す
403 は Azure AD アプリに書き込み権限がないことを意味します。SecurityAlert.ReadWrite.All
と SecurityIncident.ReadWrite.All が管理者の同意とともに付与されていることを確認します。
アラート更新での 404 は通常、レガシーエンドポイントを示します。CaseBender は最新の
Defender XDR アラートに対して /security/alerts_v2/{id} を使用します。