2025年10月Udemy全コース共通クーポン【VARONTO2025OCT】 Udemyコース

Kusto Query Language(KQL)

Kusto クエリ言語 (KQL) は、データの分析を行って Analytics、Workbooks を作成し、Microsoft Sentinel と Microsoft Defender XDR でハンティング(アラートに頼らず、自分からログを調べて“潜んでいる脅威”を見つけに行く活動。目的:アラートになっていない不審な動きを探す)を実行するために使用されるクエリ言語。
Microsoft Sentinel の検知ルール(Analytics Rule)は、KQL(Kusto Query Language) で書かれています。
これは、Sentinel が Azure Monitor / Log Analytics 上で動いているためです。

目次

環境

個人で検証用のログを置くにも費用が必要となる可能性があります。
マイクロソフトで提供している下記環境を利用することで Kusto Query Language(KQL)を実際に動かしながら確認を進められます。


🔷 検知ルールの正体=KQLクエリ

Microsoft Sentinelの分析ルール(Analytics Rule) は、内部的には
「Log Analytics に蓄積されたログを KQL で定期的に検索し、条件に一致したらアラートを生成する仕組み」です。


🔶 イメージ図

ログ(Azure AD、Defender、Firewallなど)
          ↓
Log Analytics ワークスペース
          ↓
KQLクエリで検索(例:5分おき)
          ↓
一致 → アラート生成(Alert)
          ↓
必要に応じてインシデント化(Incident)・Playbook自動化

🔷 例:不審なログイン検知ルール(KQL)

以下は「同じユーザーが短時間に複数の場所からログインしたら検知する」例です。

SigninLogs
| summarize Countries = make_set(LocationDetails.countryOrRegion), Count = count()
    by UserPrincipalName, bin(TimeGenerated, 15m)
| where array_length(Countries) > 1

👆このクエリの意味:

  • SigninLogs:Azure ADのサインインログを対象
  • summarize … by UserPrincipalName:ユーザーごとに15分単位で集計
  • where array_length(Countries) > 1:複数の国から同時アクセスがあればアラート

このKQLを「Analytics Rule」に設定し、
“15分ごとに実行・結果が1件以上ならアラート” というように構成します。


🔶 ルールの構成要素(KQL以外の設定もあります)

区分内容
1. 検知ロジック(KQL)ログから異常を抽出するクエリ`SigninLogs
2. 実行頻度クエリを走らせる周期5分 / 1時間 / 1日など
3. 対象期間(Lookback period)クエリが検索するログ範囲例:過去1時間分
4. 結果のしきい値何件以上ならアラートを上げるか例:5件以上ならアラート
5. エンリッチメントアラートに追加情報(ユーザー名、IP、国)を付与
6. 自動応答(Playbook)ServiceNow起票やTeams通知などの自動化

🔧 よく使われるログテーブルと用途

テーブル名代表的な検知例
SigninLogs不審なログイン、異常な国からのアクセス
SecurityEventWindowsログオン失敗、特権昇格
DeviceProcessEvents不審なプロセス実行、PowerShell利用
DeviceNetworkEvents不審な外部通信、C2通信検知
CommonSecurityLogFirewallやProxyログからの攻撃通信
ThreatIntelligenceIndicatorIOC(脅威インテリジェンス)との照合検知

🧩 Sentinel では3タイプのルールが存在

タイプ内容
Scheduled rule(スケジュール実行)KQLクエリを一定間隔で実行(最も一般的)
Microsoft security ruleDefender製品などMicrosoftネイティブアラートをSentinelで取り込み
Fusion rule機械学習ベースで複数の信号を相関し自動検出(KQL不要)

あなたが今日の「検知ルールチューニング会議」で扱うのは、
ほとんどがこの Scheduled(KQLベース)ルール です。


💡 まとめ

項目内容
言語KQL(Kusto Query Language)
目的ログを定期的に検索し、異常・攻撃を検知
出力アラート → インシデント → 自動化(Playbook)
主な作業クエリ調整・誤検知除外・新規ルール作成
関連機能Analytics Rule, Log Analytics, Playbook, Threat Intelligence

Kusto クエリ言語ステートメントの構造を理解する

表形式の式ステートメントの構文には、表形式クエリ演算子間の表形式のデータ フローがあります。 データ ソースから始まり、その後、パイプ (|) 区切り記号を使用してバインドされた一連のデータ変換演算子を通過します。

たとえば、次のクエリにはステートメントが 1 つありますが、それは表形式ステートメントです。 そのステートメントは、SecurityEvent というテーブルで始まります。 EventID 列の値によって、データ (行) がフィルター処理され、その後、アカウント別の件数 () を示す新しい列が作成されて結果が要約されます。 次に、準備フェーズで、結果は 10 行に制限されます。

データ、条件、および証拠を示す K Q L ステートメントの図。

 重要

結果がパイプ “|” を通過する方法を理解することが不可欠です。 パイプの左側にあるすべてが処理され、パイプの右側に渡されます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次