🛡️

Microsoft Defender For Endpoint のアラートを高度な追求を利用して分析してみた

に公開

はじめに

今回は、Microsoft Defender for Endpoint を用いて以下のステップでアラート調査を行ってみます。

  • オンボード手順の理解(スクリプトと Intune)
  • EICAR ファイルによるアラート発生の確認
  • GUI でのアラート詳細確認
  • 高度な追求による詳細なログ分析と可視化

Microsoft Defender For Endpoint のセットアップ、端末のオンボーディング

Microsoft Defender for Endpoint (MDE) を活用するには、まず保護対象となる端末をサービスに オンボード(登録) る必要があります。オンボードされた端末は Defender for Endpoint と通信し、脅威検出データを提供するようになります。
ここではオンボードの代表的な2つの方法を紹介します。

1. ローカルスクリプトを使用したオンボード

少数の端末やテスト環境では、MDE ポータルから提供されるオンボード用スクリプト(またはパッケージ)を各端末で実行する方法が簡単です。
今回はこちらの方法でオンボーディングを実施しました。

手順:
Microsoft Defender ポータルで以下の順にアクセスします:

  • システム > 設定 > エンドポイント > デバイス管理 > オンボーディング

オンボード対象のOSを選択し、展開方法として「ローカルスクリプト」を選択し、「オンボードパッケージのダウンロード」をクリックすることでスクリプトをダウンロードできます。
このスクリプトを管理者権限で監視対象の端末上で実行すると、その端末がサービスに登録され、しばらくすると Intune 管理センター上にオンボード済みの端末として表示されます。

2. Intune(エンドポイントマネージャー)によるオンボード

複数台の端末を一括管理する場合や企業環境では、Microsoft Intune と MDE を統合してオンボードする方法が有効です。
Intune と MDE 間でサービス接続を有効化し、Intune 管理センターで「エンドポイント検出と対応」のポリシーを作成・配布することで、対象のデバイスを Defender にオンボードできます。
証左な手順については以下の参考文献をご参照ください。

▫️参考文献

EICARファイルの取得

オンボードが完了したら、Defender の動作確認として EICAR テストファイルを取得してみます。
これは安全なマルウェア検出用のテストファイルで、実害はありませんがウイルス対策製品により「脅威」として扱われます。

以下の PowerShell コマンドを使って、監視対象端末上で EICAR ファイルをダウンロードしてみます。今回は、certutil.exe を利用して HTTP 経由でダウンロードをしてみます。

# EICAR test file download (safe malware detection test)
$dst = Join-Path $env:TEMP "eicar.com.txt"

Start-Process -FilePath "certutil.exe" `
  -ArgumentList "-urlcache -split -f https://secure.eicar.org/eicar.com.txt `"$dst`"" `
  -Wait

Write-Host "EICAR test attempted. Check Defender alerts and Device Timeline."

実行すると、端末上では以下のように脅威を検出した旨の通知が表示されます。

実行後、Defender によって即座に検出され、アラートが生成されます。
Defender ポータルの「アラート」画面に通知が表示され、EICAR テストファイルの検出が確認できます。

アラート画面で確認

Microsoft Defender ポータルの「アラート」画面から、先ほどの EICAR 検出アラートを選択すると詳細が表示されます。

主なポイントは以下の通りです:

  • タイトル:アラートの名前(例: An active 'Ceprolad' malware in a command line was prevented from executing
  • 影響を受ける資産:デバイス名、ログオンユーザーなど
  • アラートストーリー:検出に至る経緯(ツリー形式)
  • アクション:ブロック済みかどうか、自動調査結果など

アラート詳細画面は、攻撃の全体像を視覚的に把握できるように設計されています。
以下はアラートストーリーの画面です。

アラート画面の詳細については以下の参考文献をご参照ください。
▫️参考文献

高度な追求でのクエリ実行

GUI での調査に加えて、高度な追求(Advanced Hunting) を使うことで、KQL(Kusto Query Language)による柔軟なログ分析が可能です。
今回は、以下のクエリを実行しました。
このクエリは、指定したアラートIDに紐づくアラート情報と関連するエビデンス(端末・ファイル・通信先など)を集約して出力します。

調査クエリ
let TargetAlertId = "<ここにアラートIDを入力>";
let Lookback = 21d;
// 1) アラート本体
let A =
    AlertInfo
    | where Timestamp > ago(Lookback) and AlertId == TargetAlertId
    | project
        AlertTimestamp = Timestamp,
        AlertId,
        Title,
        Severity,
        Category,
        ServiceSource,
        DetectionSource,
        AttackTechniques,
        SentinelWorkspaceIds;
// 2) 証跡を集約
let E =
    AlertEvidence
    | where Timestamp > ago(Lookback) and AlertId == TargetAlertId
    | summarize
        Devices              = make_set(DeviceName, 20),
        DeviceIds            = make_set(DeviceId, 20),
        Accounts             = make_set(AccountUpn, 50),
        AccountNames         = make_set(AccountName, 50),
        RemoteUrls           = make_set(RemoteUrl, 50),
        RemoteIPs            = make_set(RemoteIP, 50),
        LocalIPs             = make_set(LocalIP, 50),
        Files                = make_set(FileName, 50),
        FolderPaths          = make_set(FolderPath, 50),
        SHA256s              = make_set(SHA256, 50),
        SHA1s                = make_set(SHA1, 50),
        ProcessCmdLines      = make_set(ProcessCommandLine, 50),
        RegistryKeys         = make_set(RegistryKey, 50),
        RegistryValueNames   = make_set(RegistryValueName, 50),
        EmailSubjects        = make_set(EmailSubject, 50),
        NetworkMessageIds    = make_set(NetworkMessageId, 50),
        Apps                 = make_set(tostring(Application), 50),
        OAuthAppIds          = make_set(tostring(OAuthApplicationId), 50),
        ThreatFamilies       = make_set(ThreatFamily, 50),
        EvidenceRoles        = make_set(EvidenceRole, 20),
        EvidenceDirections   = make_set(EvidenceDirection, 20)
      by AlertId;
// 3) 結果を集約表示
A
| join kind=leftouter (E) on AlertId
| extend Techniques = coalesce(split(AttackTechniques, ","), dynamic([]))
| project
    AlertTimestamp, AlertId, Title, Severity, Category, ServiceSource, DetectionSource,
    Techniques, SentinelWorkspaceIds,
    Devices, DeviceIds,
    Accounts, AccountNames,
    RemoteUrls, RemoteIPs, LocalIPs,
    Files, FolderPaths, SHA256s, SHA1s,
    ProcessCmdLines,
    RegistryKeys, RegistryValueNames,
    EmailSubjects, NetworkMessageIds,
    Apps, OAuthAppIds,
    ThreatFamilies,
    EvidenceRoles, EvidenceDirections
| order by AlertTimestamp desc

クエリ実行画面

このように高度な追求を使うことで、GUI上では別々に表示される情報を 1 つのテーブルに集約し、確認したい情報をより効率的に収集できます。
クエリの結果を CSV としてエクスポートすることも可能です。

▫️参考文献

まとめ

今回は、Microsoft Defender for Endpoint を用いて以下のステップでアラート調査を行いました:

  • オンボード手順の理解(スクリプトと Intune)
  • EICAR ファイルによるアラート発生の確認
  • GUI でのアラート詳細確認
  • 高度な追求による詳細なログ分析と可視化

GUI と高度な追求によるクエリ調査を活用することで、アラートの原因や影響範囲を的確に把握することができます。
クエリに関しては生成 AI などをフル活用して、ご自身の組織に合わせた調査クエリのテンプレートを作成しておくといいかもしれません。
まだ使ったことのない方は、ぜひ高度な追求にもチャレンジしてみてください。

Discussion