1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Microsoft Defender for Endpoint (MDE) で活用するハンティングクエリー例

Last updated at Posted at 2022-08-30

1. はじめに

Microsoft Defender for Endpoint (以下MDE) はクライアント、サーバーなどのエンドポイント端末に対してセキュリティ脅威からの検知および防御といった EDR 機能や脆弱性情報を収集し、セキュリティ監査を行う用途が一般的かと思います。
MDE はセキュリティ脅威の検知防御だけでなく、OS (Windows/Linux/Mac) の様々な情報を収集してクラウド側に転送しています。これらのデータは、Microsoft 365 Defender ポータルサイトから高度な捜索 - Advanced Hunting として検索が出来るようになっています。

image.png

本記事では、実際にどのような情報が取得できるのか、実際にどのようなクエリーを用いて運用するのか、Microsoft GitHub のサンプルからご紹介します。

2. 注意点

MDE の Advanced Hunting でクエリー検索できる範囲は最大 30 日になります。
MDE 側の保存期間(最大 180 日まで設定可能)とは異なり、ハンティングで検索出来る期間は30 日になりますのでご注意ください。

高度なハンティングは、最大 30 日間の生データを探索できるクエリベースの脅威検出ツールです。 ネットワーク内のイベントを事前に検査して、脅威インジケーターとエンティティを見つけることができます。 データへの柔軟なアクセスにより、既知の脅威と潜在的な脅威の両方に対する制約のない捜索が可能になります。

ハンティングの画面からも分かる通り、過去の検索を行う日数は「過去 30 日」となります。
「ユーザーが設定した時間範囲」を設定しても、設定出来る範囲は過去 30 日からの範囲指定です。

image.png

実際に運用する場合、30 日では足りず、90 ~ 1年程度の過去履歴に対して分析、検索をかける要件が多いのではないかと思います。これらの保管・分析要件が必要な場合は、Microsoft Sentinel に接続し、監視することを検討して下さい。

3. MDE で記録する情報 / テーブル内容

Microsoft 365 Defender ポータルで収集される様々なデータのスキーマ情報は以下公式 Docs にて公開されています。
https://docs.microsoft.com/ja-jp/microsoft-365/security/defender/advanced-hunting-schema-tables?view=o365-worldwide#learn-the-schema-tables

上記テーブルから MDE で収集されるイベントに関連するテーブルを抽出すると以下になります。
それぞれのテーブルでどのような情報が収集されているのか、またクエリーでどのような活用が出来るのかを見ていきます。

No. テーブル名 内容 公式 Docs
1 DeviceInfo マシン情報 (OS 情報を含む) Docs
2 DeviceNetworkInfo マシンのネットワーク プロパティ Docs
3 DeviceProcessEvents プロセスの作成と関連イベント Docs
4 DeviceNetworkEvents ネットワーク接続と関連イベント Docs
5 DeviceFileEvents ファイルの作成、変更、その他のファイル システムイベント Docs
6 DeviceRegistryEvents レジストリ エントリの作成と変更 Docs
7 DeviceLogonEvents サインインとその他の認証イベント Docs
8 DeviceImageLoadEvents DLL 読み込みイベント Docs
9 DeviceEvents 追加のイベントの種類 Docs
10 DeviceFileCertificateInfo 署名されたファイルの証明書情報 Docs

4. 各テーブル詳細とクエリー例

1. DeviceInfo - マシン情報 (OS 情報を含む)

1.1 DeviceInfo 概要

DeviceInfo テーブルには MDE を通じて OS バージョン、アクティブユーザー、コンピューター名など、企業内のデバイスに関する情報が含まれています。なお、15 分毎に Heartbeat としてクラウド側に情報更新が行われる仕様であるため、イベントは時系列に蓄積されます。
DeviceInfo に含まれる field 情報で使えそうなキーを拾ってみました。

field 内容
DeviceName デバイス名 (FQDN
DeviceId デバイス ID (固有識別情報)
OSPlatform OS 情報
PublicIP パブリック IP アドレス(MDE に接続するために用いた IP
LoggedOnUsers イベント発生時にマシンにログオンしているすべてのユーザーの一覧
MachineGroup マシンのマシン グループ

image.png

用途として、デバイス名や OS 情報をクエリーするシンプルな使い方であったり、

DeviceInfo
| take 100
| project DeviceId, DeviceName, OSPlatform

join を用いて他テーブル(以下例では DeviceLogonEvents)を読み込んだりすることが出来ます。

DeviceInfo
| where OSPlatform == 'Windows10'
| join DeviceLogonEvents on DeviceId 
| distinct DeviceId, DeviceName, AccountDomain, AccountName, AccountSid

image.png

1.2 DeviceInfo クエリー実践

そのままでは 15 分間隔のポーリング情報が全て出力されてしまうため、最新のステータス情報のみ抽出する場合は以下のクエリーで抽出することが出来ます(公式Docsより)

// 最新のデバイス登録情報をリストする
DeviceInfo
| where isnotempty(OSPlatform)
| summarize arg_max(Timestamp, *) by DeviceId 

最新のステータス情報に加えて、各OS毎のデバイスリストを配列で追加したクエリー例です。
こちらを使うことで、現 MDE 導入環境のアセット情報を抽出することが出来ます。

// 最新のデバイス登録情報を OS 毎にデバイス情報も含めて抽出する
DeviceInfo
| where isnotempty(OSPlatform)
| summarize arg_max(Timestamp, *) by DeviceId 
| summarize Devices = count(), DeviceList = make_set(DeviceName) by OSPlatform

image.png

もし、最新の OS 毎のデバイスリストだけを抽出する場合は、以下のクエリーで抽出が出来ます。

// 最新のデバイス登録情報を OS 毎にグループで抽出する
DeviceInfo
| where isnotempty(OSPlatform)
| distinct DeviceId, OSPlatform
| summarize count() by OSPlatform

image.png

2. DeviceNetworkInfo - マシンのネットワークプロパティ

2.1 DeviceNetworkInfo 概要

DeviceNetworkInfo テーブルは、ネットワーク アダプター、IP と MAC アドレス、接続されたネットワークまたはドメインなど、コンピューターのネットワーク構成に関する情報が含まれています。
こちらはインシデント発生時の端末側 I/F のチェック用途といったところになると思います。

field 内容
NetworkAdapterName ネットワーク アダプターの名前
MacAddress ネットワーク アダプターの MAC アドレス
IPAddresses アダプターに割り当てられたすべての IP アドレス

image.png

3. DeviceProcessEvents - プロセスの作成と関連イベント

3.1 DeviceProcessEvents 概要

DeviceProcessEvents テーブルは、OS のプロセスの作成と関連イベントに関する情報が含まれています。
マルウェア感染時にありがちなプロセスの作成や、プロセス作成の元となったコマンド情報が記録される重要なテーブルです。

field 内容
ProcessCommandLine 新しいプロセスの作成に使用されるコマンド ライン
FileName 記録されたアクションが適用されたファイルの名前
FolderPath 記録されたアクションが適用されたファイルを含むフォルダー
AccountName アカウントのユーザー名
ProcessTokenElevation 新しく作成されたプロセスに適用されるトークン昇格の種類を示します。
使用可能な値:
TokenElevationTypeLimited (restricted)、TokenElevationTypeDefault (standard)、TokenElevationTypeFull (管理者特権)

image.png

3.2 DeviceProcessEvents クエリー実践

用途例として、ProcessCommandLineといったプロセスを作成する元となったコマンド情報が参考になります。

image.png

例として、以下のようにマルウェアが混入されたドキュメントファイルや機密情報ファイルが含まれているコマンドを指定し、プロセスが作成されているかどうかを確認するようなハンティングが考えられます。

// 特定ファイルを実行してプロセスが作られたかを確認する
DeviceProcessEvents
| where Timestamp > ago(19d) 
and ProcessCommandLine contains 'UpdatedPolicy_SOW_07182020.doc'
and AccountObjectId == 'ab653b2a-d23e-49df-9493-c26590f8f319'

4. DeviceNetworkEvents - ネットワーク接続と関連イベント

4.1 DeviceNetworkEvents 概要

ネットワーク接続と関連するイベントに関する情報が含まれています。
プロセスが外部宛てに行う通信履歴の確認に使える情報が多いです。

field 内容
RemoteIP 接続されていた IP アドレス
RemotePort 接続先のリモート デバイス上の TCP ポート
RemoteUrl 接続されていた URL
Protocol 通信プロトコル
InitiatingProcessFileName イベントを開始したプロセスの名前

特定の端末で絞り込んだクエリー例を以下に示します。
https 通信については原則非表示(なぜか microsoftonline.com だけ表示されている)です。
image.png

4.2 DeviceNetworkEvents クエリー実践

GitHub 公式クエリーサンプルで紹介されていた SMB 共有を検索するクエリー例です。

DeviceNetworkEvents
| where RemotePort == 445 and Timestamp > ago(7d) 
    // Exclude Kernel processes, as they are too noisy in this query
    and InitiatingProcessId !in (0, 4)
| summarize RemoteIPCount=dcount(RemoteIP) by DeviceName, InitiatingProcessFileName, InitiatingProcessId, InitiatingProcessCreationTime
| where RemoteIPCount > 10

ネットワーク履歴のため、P2P(Torrent) を検知するような検索クエリーも可能です。

//Custom detection to find use of torrenting software or browsing related to torrents
DeviceNetworkEvents 
| where Timestamp > ago(7d)
| where RemoteUrl has "torrent" or RemoteUrl has "vuze" or RemoteUrl has "azureus" or RemoteUrl endswith ".tor" or InitiatingProcessFileName has "torrent" or InitiatingProcessFileName has "vuze" or InitiatingProcessFileName contains "azureus" 
| project Timestamp, ReportId, DeviceId, DeviceName, InitiatingProcessFileName, RemoteUrl , RemoteIP , RemotePort  

5. DeviceFileEvents

5.1 DeviceFileEvents 概要

ファイルの作成、変更、およびその他のファイル システム イベントに関する情報が含まれています。
DeviceProcessEvents がプロセス作成の情報を取得しているのに対して、DeviceFileEvents はプロセスによって作成されたファイルを監視することが出来るようになります。
以下 field 情報を見ると、外部からダウンロードしたファイルを監視するのに向いていることが分かります。

field 内容
FileName 記録されたアクションが適用されたファイルの名前
FolderPath 記録されたアクションが適用されたファイルを含むフォルダー
FileOriginUrl ファイルのダウンロード元の URL
FileOriginReferrerUrl ダウンロードしたファイルにリンクする Web ページの URL
FileSize ファイルのサイズ (バイト単位)
RequestProtocol ネットワーク プロトコル (該当する場合) は、アクティビティの開始に使用されます(不明、ローカル、SMB、または NFS)

DeviceFileEvents の例です。
image.png

6. DeviceRegistryEvents

6.1 DeviceRegistryEvents 概要

レジストリ エントリの作成と変更に関する情報が含まれています。
レジストリの記録、書き換えなどの情報を調査する場合に用いることが考えられます。

field 内容
RegistryKey 記録されたアクションが適用されたレジストリ キー
RegistryValueType 記録されたアクションが適用されたレジストリ値のデータ型 (バイナリや文字列など)
RegistryValueName 記録されたアクションが適用されたレジストリ値の名前
RegistryValueData 記録されたアクションが適用されたレジストリ値のデータ
PreviousRegistryKey 変更前のレジストリ値の元のレジストリ キー
PreviousRegistryValueName 変更前のレジストリ値の元の名前

7. DeviceLogonEvents

7.1 DeviceLogonEvents 概要

デバイス上のユーザー ログオンやその他の認証イベントに関する情報が含まれています。
ログオンに関する様々なフィールドが表示されますが、ActionType でフィルターしたり、LogonType に対する監査を行ったり、失敗した理由を調査するなどの活用が考えられます。

field 内容
ActionType イベントをトリガーしたアクティビティの種類
LogonType ログオン セッションの種類が表示されます。
対話型 - ユーザーがローカル キーボードと画面を使用してコンピューターと物理的に対話する
リモート 対話型 (RDP) ログオン - ユーザーは、リモート デスクトップ、ターミナル サービス、リモート アシスタンス、またはその他の RDP クライアントを使用してリモートでコンピューターと対話します。
ネットワーク - PsExec を使用してマシンにアクセスしたとき、またはコンピューター上の共有リソース (プリンターや共有フォルダーなど) にアクセスしたときに開始されるセッション
Batch - スケジュールされたタスクによって開始されるセッション
サービス - 開始時にサービスによって開始されるセッション
AccountDomain アカウントのドメイン
AccountName アカウントのユーザー名
FailureReason 記録されたアクションが失敗した理由

7.2 DeviceLogonEvents クエリー実践

デバイスのログオン情報を活用して、特定ホストの時系列のアカウントログオンを時系列で表示するクエリー例です。ここでは where operator で内部システム ID の情報(driver host / window manager など)を除外してクエリーをかけています。

DeviceLogonEvents
| where DeviceName == 'xxx.xxx.xxx' and Timestanmp > ago(30d) and ActionType == 'LogonSuccess'
| where AccountDomain !in ('font driver host', 'window manager'( // Ignoring internal system identities at the moment
| extend Account = stract(AccountDomain, '\\', AccountName )
| summarize count() by Account, bin(timestamp, 1h)
| render timechart

image.png

8. DeviceImageLoadEvents

8.1 DeviceImageLoadEvents 概要

DLL 読み込みイベントに関する情報が含まれています。

9. DeviceEvents

9.1 DeviceEvents 概要

DeviceEventsテーブルには、Microsoft Defender ウイルス対策やエクスプロイト保護などのセキュリティ制御によってトリガーされるイベントなど、さまざまなイベントの種類に関する情報が含まれています。
デバイスの動きを検索したり、監視する用途に用いることが出来るため、様々なユースケースが考えられます。

field 内容
ActionType イベントをトリガーしたアクティビティの種類
FileName 記録されたアクションが適用されたファイルの名前
FolderPath 記録されたアクションが適用されたファイルを含むフォルダー
FileSize ファイルのサイズ (バイト単位)
AccountDomain アカウントのドメイン
AccountName アカウントのユーザー名
RemoteUrl 接続されていた URL または完全修飾ドメイン名 (FQDN)
LogonId ログオン セッションの識別子
FileOriginUrl ファイルのダウンロード元の URL
FileOriginIP ファイルのダウンロード元の IP アドレス

9.2 DeviceEvents クエリー実践

実際に ActionType でグループ化(summarize)すると、MDE 導入端末の動きが分かります。

DeviceEvents
| summarize count() by ActionType
| order by count_ asc

image.png

WindowsDefender 側によるアンチウイルス検知のイベントであれば、ActionType == "AntivirusDetection"でフィルターすればよいことが分かります。

DeviceEvents
| where ActionType == "AntivirusDetection"

image.png

USB デバイス監視のクエリー例です。
ActionType == UsbDriveMounted を用いて、拡張情報(Additionnal Field)を正規化すると以下のようなクエリーになります。

DeviceEvents
| where ActionType == "UsbDriveMounted"
| extend ParsedFields=parse_json(AdditionalFields)
| project Timestamp, DeviceId, DeviceName, ActionType, ProductName=ParsedFields.ProductName,SerialNumber=ParsedFields.SerialNumber,Manufacturer=ParsedFields.Manufacturer

image.png

10. DeviceFileCertificateInfo

10.1 DeviceFileCertificateInfo 概要

ファイル署名証明書に関する情報が含まれています。エンドポイント端末上のファイルで定期的に実行される証明書検証アクティビティが表示されます。
イベントとしては、以下のような Windows 証明書の情報が主体になるため、参考テーブルといったところになるのではと思います。

image.png

5. 参考文献

今回、以下 Microsoft 公式サイトの GitHub Repository の Hunting クエリーを参考にしました。
様々なクエリー応用例が紹介されていますので、ご興味がある方はご参照下さい。
Microsoft 365 Defender Advanced Hunting GitHub Repository
https://github.com/microsoft/Microsoft-365-Defender-Hunting-Queries

6. まとめ

MDE は EDR だけでなく端末の様々な情報を収集しており、インシデント発生時や監査用途としてハンティングクエリーを活用できます。どなたかの参考になれば幸いです。

*本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?