はじめに
Advanced Hunting は、Microsoft 365 Defender シリーズから収集されたログ情報に対して、カスタムクエリを発行し、分析を行うための仕組みです。カスタムクエリは Kusto 言語によって記述されます。自分が使いたくなったクエリをメモとして残しておきます。
Web アクセスブロックの調査
Web アクセスが何の機能によってブロックされたかは、DeviceEvents
の AdditionalFields
から判別できます。
Experience Keyに対するValue | ブロックを判定した機能 |
---|---|
CustomPolicy | Custom Indicator |
CustomBlockList | Web Contents Filtering |
Malicious | SmartScreen Web Threat Protection |
Phishing | SmartScreen Web Threat Protection |
Untrusted | SmartScreen Web Threat Protection |
特定のデバイスについて、WCF でブロックされたアクセス先を列挙する
// Web Content Filtering によってブロックされたアクセス先URLを出力します。 // DeviceName(=アクセス元デバイスの名前) やTimestampを適宜書き換えて使用してください。 DeviceEvents | where Timestamp > ago(7d) | where ActionType == "SmartScreenUrlWarning" | where DeviceName startswith "PC-99999" | extend ParsedFields=parse_json(AdditionalFields) | project Timestamp, DeviceName, InitiatingProcessFileName, RemoteUrl, InitiatingProcessAccountUpn, Experience=tostring(ParsedFields.Experience) | where Experience == "CustomBlockList"
ExploitGuardによるブロック(3rd Party製ブラウザの制御)についても表示する場合は以下のクエリを使用してください。
// Web Content Filtering によってブロックされたアクセス先URLを出力します。 // DeviceName(=アクセス元デバイスの名前) やTimestampを適宜書き換えて使用してください。 DeviceEvents | where Timestamp > ago(7d) | where ActionType in ("SmartScreenUrlWarning","ExploitGuardNetworkProtectionBlocked") | where DeviceName startswith "PC-99999" | extend ParsedFields=parse_json(AdditionalFields) | project Timestamp, DeviceName, InitiatingProcessFileName, RemoteUrl, InitiatingProcessAccountUpn, Experience=tostring(ParsedFields.Experience), ResponseCategory=tostring(ParsedFields.ResponseCategory) | where Experience == "CustomBlockList" or ResponseCategory == "CustomBlockList"
特定のデバイスについて、Defenderによってブロックされたリモート URL を出力する
// PC-99999 から facebook を含むリモート URL へのアクセスを出力する例 DeviceEvents | where Timestamp > ago(7d) | where ActionType == "SmartScreenUrlWarning" | where DeviceName startswith "PC-99999" | where RemoteUrl contains "facebook" | project Timestamp, DeviceName, RemoteUrl, AdditionalFields
Web アクセスがカテゴリブロックされたデバイスを出力する
Web Content Filtering もしくは ExploitGuard Network Protection によってカテゴリブロックされたデバイスを、ブロック回数とともに出力する。
DeviceEvents | where Timestamp > ago(1d) | where ActionType in ("SmartScreenUrlWarning","ExploitGuardNetworkProtectionBlocked") | extend ParsedFields=parse_json(AdditionalFields) | project Timestamp, DeviceName, InitiatingProcessFileName, Experience=tostring(ParsedFields.Experience), ResponseCategory=tostring(ParsedFields.ResponseCategory) | where Experience == "CustomBlockList" or ResponseCategory == "CustomBlockList" | summarize DeviceCount=dcount(Timestamp) by DeviceName | sort by DeviceCount desc
Webフィルタによるブロックが発生していないデバイスを列挙する
DeviceEvents | where Timestamp > ago(7d) | where DeviceName startswith "PC" | where InitiatingProcessFileName contains "msedge.exe" or InitiatingProcessFileName contains "chrome.exe" | where ActionType !in ("SmartScreenUrlWarning","ExploitGuardNetworkProtectionBlocked") | project Timestamp, DeviceId, DeviceName, InitiatingProcessFileName, InitiatingProcessAccountUpn, ReportId | summarize EventCounter=dcount(Timestamp) by DeviceId, DeviceName, InitiatingProcessFileName, InitiatingProcessAccountUpn
Azure AD Sign In Events
AADSignInEventsBeta | where Timestamp > ago(1d) | project LogonType, Timestamp, Application | summarize aaa=dcount(Timestamp) by LogonType, Application | top 10 by LogonType
AADSignInEventsBeta | where Timestamp > ago(1d) | where LogonType contains "nonInteractiveUser" | project LogonType, Timestamp, Application, ClientAppUsed | summarize aaa=dcount(Timestamp) by LogonType, ClientAppUsed | top 100 by LogonType
AADSignInEventsBeta | where Timestamp > ago(1d) | where LogonType contains "nonInteractiveUser" | where ClientAppUsed contains "Browser" | summarize aaa=dcount(Timestamp) by Application, LogonType | top 100 by LogonType