M365 Defender Advanced Hunting KQLによる高度な脅威ハンティング

Tech

本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。

M365 Defender Advanced Hunting KQLによる高度な脅威ハンティング

M365 Defender Advanced Hunting(高度な脅威ハンティング)は、Microsoft Defender XDR (旧Microsoft 365 Defender) の中核をなす機能であり、組織内の脅威を能動的に特定、調査、対応するための強力なツールです。Kusto Query Language (KQL) を活用することで、エンドポイント、ID、メール&コラボレーション、クラウドアプリケーションといったMicrosoft 365セキュリティ製品群から収集された膨大なデータに対して詳細なクエリを実行し、高度な脅威シナリオを検出できます。本記事では、Advanced Huntingのアーキテクチャ、設定手順、運用監視、セキュリティ、コスト、そして利用における落とし穴についてクラウドアーキテクトの視点から解説します。

1. アーキテクチャ

Advanced Huntingは、Microsoft Defender XDRプラットフォームに統合された脅威ハンティングエンジンです。Microsoft Defender XDRは、複数のMicrosoftセキュリティ製品(Microsoft Defender for Endpoint, Microsoft Defender for Identity, Microsoft Defender for Office 365, Microsoft Defender for Cloud Apps)から収集されたテレメトリーデータを統合し、単一のセキュリティコンソールで可視化・分析を可能にします。Advanced Huntingは、この統合された広範なデータレイクに対してKQLを用いてクエリを実行することで、従来の自動アラートでは検知できない、複雑な攻撃パターンや異常な振る舞いを特定します [1]。

以下に、Advanced HuntingがMicrosoft Defender XDRエコシステム内でどのように機能するかを示すフローチャートを提示します。

graph TD
    A["デバイスデータ"]|収集| --> B("Microsoft Defender for Endpoint")
    C["IDデータ"]|収集| --> D("Microsoft Defender for Identity")
    E["メール&コラボレーションデータ"]|収集| --> F("Microsoft Defender for Office 365")
    G["クラウドアプリデータ"]|収集| --> H("Microsoft Defender for Cloud Apps")

    B -- 統合データ |> J("Microsoft Defender XDR")
    D -- 統合データ |> J
    F -- 統合データ |> J
    H -- 統合データ |> J

    J -- Advanced Hunting機能 |> K("Advanced Hunting")
    K -- KQLクエリ実行 |> L("Kusto Query Language Engine")
    L -- クエリ結果を返す |> K
    K -- 可視化/カスタム検出ルール/アラート作成 |> M("セキュリティオペレーションセンター")
    K -- Graph APIによる自動化 |> N("外部SIEM/SOAR/スクリプト")

    subgraph データソース
        A
        C
        E
        G
    end

    subgraph Microsoft Defender XDR プラットフォーム
        B
        D
        F
        H
        J
        K
        L
    end

データは各Defender製品からリアルタイムまたはニアリアルタイムで収集され、Defender XDRの統合データストアに格納されます。Advanced Huntingは、この統合データストアにKQLを通じて直接アクセスし、セキュリティアナリストが指定した条件に基づいてデータをフィルタリング、集計、結合、分析します。結果はテーブル形式で表示され、そこからインシデントを作成したり、カスタム検出ルールを構築して将来的な同様の脅威を自動的に検知したりすることが可能です。

2. 設定手順

Advanced Huntingの利用には、適切なライセンスとアクセス権限の設定が不可欠です。

2.1 ライセンス要件

Advanced Huntingは、以下のMicrosoft 365のセキュリティライセンスに含まれます [5]。

  • Microsoft Defender for Endpoint P2

  • Microsoft 365 E5 Security

  • Microsoft 365 E5

  • Microsoft 365 A5

  • Microsoft 365 G5

  • Microsoft 365 F5 Security & Compliance

組織がこれらのいずれかのライセンスを保有していることを確認してください。

2.2 アクセス権限の付与

Advanced Huntingへのアクセスは、Microsoft Defender XDRのロールベースアクセス制御 (RBAC) またはAzure Active Directory (現Microsoft Entra ID) のロールを通じて管理されます [4]。

Microsoft Entra ID ロール:

  • グローバル管理者 (Global Administrator): すべてのMicrosoft 365リソースへのフルアクセス権を持ち、Advanced Huntingも利用可能です。

  • セキュリティ管理者 (Security Administrator): Defender XDRポータルを含むセキュリティ機能へのフルアクセス権を持ちます。

  • セキュリティ閲覧者 (Security Reader): Defender XDRポータルでセキュリティデータとレポートを表示できますが、設定変更はできません。

Microsoft Defender XDR RBAC:

よりきめ細やかなアクセス制御のために、カスタムロールを作成し、Advanced Huntingの特定の機能へのアクセスを許可できます。

  1. Microsoft Defender XDRポータル (security.microsoft.com) にアクセスします。

  2. 左側のナビゲーションペインで、「権限」 > 「ロール」 を選択します。

  3. 「ロールの作成」 をクリックし、ロール名と説明を入力します。

  4. 「許可されたアクセス」 セクションで、以下の項目を必要に応じて有効にします。

    • 「高度なハンティング」 : クエリの実行、クエリの保存、カスタム検出ルールの作成・編集。

    • 「ライブ応答」 : デバイスに対する直接的なアクション(ファイルの隔離、プロセスの終了など)を許可する場合。

  5. 「割り当てられたユーザー」 で、このカスタムロールを割り当てるユーザーまたはグループを選択します。

2.3 Advanced Huntingクエリの自動化 (Graph API)

Advanced Huntingクエリは、Microsoft Graph Security APIを通じてプログラム的に実行し、外部システムとの連携や自動化を行うことが可能です [6]。

以下に、PowerShellスクリプトを用いてGraph API経由でAdvanced Huntingクエリを実行する例を示します。

# Graph APIを利用したAdvanced Huntingクエリの実行例


# スクリプト実行日: 2024年6月27日 JST


# 前提:


#   1. Azure AD (現Microsoft Entra ID) でアプリケーション登録を行い、


#      クライアントID (Application ID) とテナントID (Directory ID) を取得済みであること。


#   2. アプリケーションにGraph APIパーミッション 'SecurityEvents.Read.All' を付与済みであること。


#      (本番環境では証明書ベースの認証を強く推奨します。以下はクライアントシークレットの例です。)

# --- 設定変数 ---

$tenantId = "YOUR_TENANT_ID"       # Microsoft Entra IDのテナントID (例: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
$clientId = "YOUR_CLIENT_ID"       # アプリケーション登録時のクライアントID (例: yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy)
$clientSecret = "YOUR_CLIENT_SECRET" # アプリケーション登録時に生成したクライアントシークレット (重要: 厳重に管理し、本番では証明書を利用)

# --- 1. 認証トークンの取得 (Client Credentials Grant Flow) ---


# 参考: https://learn.microsoft.com/ja-jp/graph/auth-v2-service

Write-Host "認証トークンを取得中..."
$body = @{
    client_id     = $clientId
    scope         = "https://graph.microsoft.com/.default"
    client_secret = $clientSecret
    grant_type    = "client_credentials"
}
try {
    $tokenResponse = Invoke-RestMethod -Method Post -Uri "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" -Body $body
    $accessToken = $tokenResponse.access_token
    Write-Host "認証トークンの取得に成功しました。"
}
catch {
    Write-Error "認証トークンの取得に失敗しました: $($_.Exception.Message)"
    exit 1
}

# --- 2. Advanced Huntingクエリの実行 ---


# 例: 過去24時間以内に実行されたPowershellプロセスを探すクエリ

$kqlQuery = @"
DeviceProcessEvents
| where Timestamp > ago(1d)
| where ProcessCommandLine contains "powershell" and InitiatingProcessFileName != "powershell.exe" // 不審なPowerShell実行を想定
| project Timestamp, DeviceName, InitiatingProcessFileName, ProcessCommandLine, AccountName, ReportId
| limit 100 // 結果セットを制限し、パフォーマンスとメモリ消費を最適化
"@

# Graph APIエンドポイント

$uri = "https://graph.microsoft.com/v1.0/security/runHuntingQuery"
$headers = @{
    "Authorization" = "Bearer $accessToken"
    "Content-Type"  = "application/json"
}
$queryBody = @{
    query = $kqlQuery
} | ConvertTo-Json

Write-Host "Advanced Huntingクエリを実行中..."
try {
    $queryResult = Invoke-RestMethod -Method Post -Uri $uri -Headers $headers -Body $queryBody
    Write-Host "クエリの実行に成功しました。"

    # --- 3. 結果の表示 ---


    # 入力: Advanced Hunting KQLクエリ文字列


    # 出力: JSON形式のクエリ結果 (テーブル形式のデータ)


    # 計算量: クエリの複雑さとデータ量に依存。`limit`などで結果を制限可能(Big-O表記はデータストアの実装に依存)。


    # メモリ条件: 結果セットのサイズに依存。大規模な結果はメモリを大量に消費する可能性あり。

    if ($queryResult.results) {
        Write-Host "--- クエリ結果 (上位100件) ---"
        $queryResult.results | Format-Table -AutoSize
    } else {
        Write-Host "クエリ結果は見つかりませんでした。"
    }
}
catch {
    Write-Error "Advanced Huntingクエリの実行に失敗しました: $($_.Exception.Message)"
    exit 1
}

このスクリプトは、Microsoft Entra IDのアプリケーション登録と適切な権限設定が前提です。クライアントシークレットの代わりに証明書ベースの認証を利用することで、よりセキュアな運用が可能です。

3. 運用監視

Advanced Huntingを効果的に運用するには、継続的な監視と最適化が必要です。

3.1 定期的な脅威ハンティングとカスタム検出ルール

セキュリティアナリストは、既知の脅威インテリジェンスや脆弱性情報に基づいて、定期的にAdvanced Huntingクエリを実行し、組織内に潜む脅威をプロアクティブに探索すべきです。頻繁に検出される不審なパターンや、特定の攻撃手法に対応するクエリは、カスタム検出ルールとして保存し、自動的にアラートが生成されるように設定できます [3]。

3.2 KQLクエリの最適化

KQLクエリは、データの量と複雑さに応じてパフォーマンスが大きく変動します。

  • 時間範囲の指定: ago() 関数を使用して、必要な期間のみを対象とすることで処理量を削減します。

  • フィルタリングの早期適用: where 句は、可能な限り早い段階で適用し、処理対象のデータ量を最小限に抑えます。

  • 効率的なオペレーター: 部分一致検索の contains よりも、完全一致または単語一致の has== の方が一般的に高速です [7]。

  • project の利用: 必要な列のみをプロジェクション(抽出)することで、ネットワーク転送量とメモリ使用量を削減します。

3.3 可観測性とログ

Advanced Huntingのクエリ実行履歴や、それによって生成されたアラートはMicrosoft Defender XDRポータルで確認できます。これらのログは、セキュリティオペレーションセンター (SOC) が脅威対応の状況を追跡し、パフォーマンスを評価するための重要な情報源となります。

3.4 SLA、バックアップ、DR

Advanced Huntingの基盤となるMicrosoft Defender XDRサービスは、MicrosoftによってSLA (Service Level Agreement) が提供されます。通常、これはサービス自体の可用性に関連しており、データがバックアップされ、ディザスタリカバリ (DR) 機能が提供されることを意味します。しかし、個々のAdvanced Huntingクエリの実行速度や、ユーザーが作成したカスタム検出ルールが永続的に保持されるかは、Defender XDRのプラットフォームSLAとは別に考慮する必要があります。Advanced Huntingのデータ保持期間は通常30日間ですが、これを延長したい場合は、Microsoft SentinelのようなSIEM製品へデータをエクスポートする構成を検討する必要があります。

4. セキュリティ

Advanced Huntingのセキュリティは、主にアクセス制御とデータプライバシーに集約されます。

4.1 ロールベースアクセス制御 (RBAC)

前述の通り、Microsoft Entra IDのセキュリティロールとMicrosoft Defender XDRのカスタムロールを組み合わせることで、最小権限の原則に基づいたアクセス制御を実装します。例えば、脅威ハンティングを行うアナリストには「Advanced Huntingのデータの表示」権限を付与し、アラートの管理やレスポンスアクションを実行する管理者には追加の権限を付与するといった運用が考えられます。

4.2 条件付きアクセス (CA)

Microsoft Entra IDの条件付きアクセス (Conditional Access) ポリシーを適用することで、Advanced Huntingへのアクセスに追加のセキュリティレイヤーを追加できます。例えば、MFA (多要素認証) の要求、承認されたデバイスからのアクセスのみ許可、特定の場所からのアクセス制限などを設定し、不正なアクセスリスクを低減します。これにより、ロールが割り当てられたユーザーであっても、条件を満たさない限りAdvanced Huntingのデータにアクセスできないように制御できます。

4.3 データプライバシーとKQLの権限

Advanced Huntingでクエリできるデータは、組織が保有するMicrosoft 365セキュリティデータに限定されます。KQLクエリ自体がシステムに直接的な変更を加えることはありませんが、Live Response機能と組み合わせることで、デバイス上のファイル隔離やプロセスの終了といったアクションを実行できます。このため、Live Responseを含む権限は、厳格な制御と監査の対象とすべきです。

5. コスト

Advanced Hunting自体に直接的な追加コストは発生しません。Advanced Huntingは、前述のMicrosoft Defender XDR関連ライセンス(Microsoft 365 E5 Security, Defender for Endpoint P2など)の一部として提供される機能です [5]。

しかし、運用面で間接的なコストが発生する可能性があります。

  • ライセンスコスト: ベースとなるMicrosoft 365 E5などのライセンス費用。

  • データ保持期間: Advanced Huntingの標準的なデータ保持期間は30日間です。これを超える長期間のデータ分析や規制要件を満たすためには、Microsoft SentinelなどのSIEMソリューションにデータを転送し、そこで追加のストレージ費用を支払う必要があります。

  • 人件費: 高度なKQLクエリを作成し、脅威をハンティングするための専門知識を持つセキュリティアナリストの人件費。

コスト最適化の観点からは、不要なDefender XDRライセンスを持たないこと、そしてKQLクエリのパフォーマンスを最適化し、必要なデータのみを処理することで、データ転送量やAPI呼び出しの潜在的なコスト(外部システム連携時)を最小限に抑えることが重要です。

6. 落とし穴

Advanced Huntingは強力なツールですが、利用にはいくつかの注意点があります。

  • KQLの学習曲線: KQLは直感的であるものの、大規模なデータセットに対して複雑な分析を行うには、ある程度の学習と経験が必要です [2]。特に、パフォーマンスを意識したクエリの記述には時間がかかります。

  • 大規模データでのパフォーマンス問題: 不適切に記述されたクエリは、大量のデータをスキャンするため、実行に時間がかかりすぎる場合があります。これにより、セキュリティアナリストの生産性が低下する可能性があります。

  • 誤検知 (False Positive) とアラート疲れ: 広範なデータにわたってクエリを実行すると、誤検知が発生しやすくなります。誤検知の分析とトリアージにリソースを割かれすぎると、SOCのアラート疲れにつながる可能性があります。

  • ライセンス不足: 必要なMicrosoft 365セキュリティライセンスが割り当てられていない場合、Advanced Huntingの機能にアクセスできません。

  • データ保持期間の制限: 多くの組織にとって30日間のデータ保持期間は不十分な場合があります。長期的な脅威追跡やフォレンジック分析には、別途データアーカイブ戦略(例: Microsoft Sentinelへのエクスポート)が必要です。

7. まとめ

M365 Defender Advanced Hunting KQLは、今日の複雑なサイバー脅威環境において、プロアクティブな脅威ハンティングを可能にする不可欠なツールです。Microsoft Defender XDRプラットフォームの統合されたデータセットに対してKQLを用いることで、既知の脅威だけでなく、新たな攻撃手法や組織固有の異常な振る舞いを特定できます。

効果的な運用には、適切なライセンスとアクセス権限の設定、KQLの習熟、クエリの最適化、そしてMicrosoft Graph APIを通じた自動化が鍵となります。また、コストは既存のMicrosoft 365 E5ライセンスに含まれるものの、長期データ保持や専門家の人件費を考慮する必要があります。KQLの学習曲線、パフォーマンス問題、誤検知といった落とし穴に留意し、それらに対処することで、Advanced Huntingは組織のセキュリティ体制を大幅に強化し、サイバーレジリエンスを向上させる強力な味方となるでしょう。


参考文献 [1] Advanced hunting overview – Microsoft Learn. 2024年6月19日. Microsoft. https://learn.microsoft.com/en-us/microsoft-365/security/defender/advanced-hunting-overview?view=o365-worldwide [2] Kusto Query Language overview – Microsoft Learn. 2024年6月14日. Microsoft. https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/querylanguage [3] Proactively hunt for threats with advanced hunting in Microsoft Defender XDR – Microsoft Learn. 2024年5月28日. Microsoft. https://learn.microsoft.com/en-us/microsoft-365/security/defender/advanced-hunting-query-examples?view=o365-worldwide [4] Manage access to advanced hunting – Microsoft Learn. 2024年4月25日. Microsoft. https://learn.microsoft.com/en-us/microsoft-365/security/defender/advanced-hunting-permissions?view=o365-worldwide [5] Microsoft Defender XDR service description – Microsoft Learn. 2024年6月20日. Microsoft. https://learn.microsoft.com/en-us/office365/servicedescriptions/microsoft-365-service-descriptions/microsoft-365-security-compliance-licensing-guidance/microsoft-365-security-compliance-licensing-guidance [6] Automate Advanced Hunting Queries using Microsoft Graph Security API – Microsoft Tech Community. 2023年10月23日. Microsoft. https://techcommunity.microsoft.com/t5/microsoft-defender-for-endpoint/automate-advanced-hunting-queries-using-microsoft-graph-security/ba-p/3956877 [7] KQL find operator performance considerations – Microsoft Learn. 2024年5月10日. Microsoft. https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/findoperator

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました