Microsoft Sentinelで使えるKQLテンプレ3選!インシデント調査を高速化するコツ

- KQL
- Microsoft Sentinel
- Microsoft Defender
- インシデント対応
- セキュリティ運用
「アラートが上がったけど、何から調べればいいかわからない」
「KQLは書けるけど、毎回ゼロから書くのが大変」
「調査中に時間がかかりすぎて、初動が遅れてしまう」
KQL(Kusto Query Language)は、Microsoft SentinelやDefender製品のログを調査するための言語です。
使いこなせると初動速度が劇的に変わります。
今回は、現場で本当に使う「まず叩く3本のテンプレ」を紹介します。
1. なぜテンプレが重要なのか
インシデント対応は時間との勝負です。
「どのテーブルを見ればいいか」「どの項目でフィルタするか」を毎回考えていると、大切な初動の時間が溶けていきます。
事前にテンプレを整備しておくと:
- 調査の開始時間が短縮される
- 調査漏れが減る
- ジュニアメンバーでも一定水準の調査ができる
2. テンプレ①:サインイン起点の調査
怪しいサインインを軸に、前後の行動を展開するテンプレです。
kql
// 対象ユーザーの直近サインイン履歴
SigninLogs
| where TimeGenerated > ago(7d)
| where UserPrincipalName == "target@example.com"
| project TimeGenerated, UserPrincipalName, IPAddress, Location, AppDisplayName,
ConditionalAccessStatus, RiskLevelDuringSignIn, ResultType
| order by TimeGenerated descここで確認するポイント:
- IPAddress:普段と異なる国・地域からのアクセスか?
- RiskLevelDuringSignIn:MicrosoftのAIがリスク判定しているか?
- ConditionalAccessStatus:条件付きアクセスをバイパスしていないか?
- ResultType:成功(0)か失敗(50126等)か?
疑わしいサインインが見つかったら、そのIPから他のアカウントへの試行も確認します。
kql
// 同一IPからの複数ユーザーへのサインイン試行
SigninLogs
| where TimeGenerated > ago(24h)
| where IPAddress == "suspicious.ip.here"
| summarize count(), make_set(UserPrincipalName) by IPAddress3. テンプレ②:端末起点の調査
エンドポイントで不審な挙動が検知されたとき、その端末の全体像をつかむテンプレです。
kql
// 対象デバイスの直近プロセス起動履歴
DeviceProcessEvents
| where TimeGenerated > ago(24h)
| where DeviceName == "target-device-name"
| project TimeGenerated, DeviceName, InitiatingProcessFileName,
FileName, ProcessCommandLine, AccountName
| order by TimeGenerated descさらに、ネットワーク接続も確認します。
kql
// 対象デバイスの外部通信履歴
DeviceNetworkEvents
| where TimeGenerated > ago(24h)
| where DeviceName == "target-device-name"
| where RemoteIPType != "Private"
| project TimeGenerated, DeviceName, RemoteIP, RemoteUrl, RemotePort,
InitiatingProcessFileName, ActionType
| order by TimeGenerated desc確認ポイント:
- ProcessCommandLine:powershell、cmd、wscriptなどでの不審なコマンド実行
- RemoteUrl:既知のC2ドメインや不審なIPへの通信
- InitiatingProcessFileName:正規プロセスを装った実行ファイル
4. テンプレ③:メール起点の調査
フィッシングメールや悪意ある添付ファイルの調査に使うテンプレです。
kql
// 特定ドメインからのメール受信履歴
EmailEvents
| where TimeGenerated > ago(7d)
| where SenderFromDomain == "suspicious-domain.com"
| project TimeGenerated, SenderFromAddress, RecipientEmailAddress,
Subject, ThreatTypes, DeliveryAction, DeliveryLocation
| order by TimeGenerated descメールを受け取ったユーザーが添付ファイルを開いたかどうかも調べます。
kql
// メール受信後の端末アクティビティ(クリック後の追跡)
EmailUrlInfo
| where TimeGenerated > ago(7d)
| join kind=inner (
DeviceProcessEvents
| where TimeGenerated > ago(7d)
) on $left.Url == $right.ProcessCommandLine
| project TimeGenerated, Url, DeviceName, FileName, AccountName5. テンプレをチームで共有・管理する方法
KQLテンプレはSentinelの「Saved Queries」や、GitリポジトリのMarkdownファイルとして管理するのが現実的です。
おすすめの管理方法:
- GitHubにKQLクエリ集リポジトリを作る
- インシデントタイプ別にフォルダ分けする(phishing/, account-compromise/, etc.)
- 使用後に「有効だったか」をコメントで残して継続改善する
6. Colorkrew Securityの考え方
Colorkrew Securityでは、KQL調査テンプレの整備・チームへの定着支援を行っています。
初動の速さが被害の大きさを決めます。
テンプレ整備から調査手順の標準化まで、現場で使える形にします。



