以下のメモ(基本というより、局所的な内容メモ)
- KQLのクエリと仮想テーブル
- Microsoft Defender のアラートと対応テーブル
- Threat Intelligence における Indicator(IOC)の考え方
KQLのクエリと仮想テーブル
KQL で実行されたクエリの結果はすべて仮想テーブル(Virtual Table)として扱われます。これにより、柔軟にクエリ同士を組み合わせたり、さらに加工したりすることができます。
また、KQLでは関数(function)を作成して、クエリロジックを部品化することもできます。これによって再利用性が高まり、長いクエリを簡潔に管理できます。
以下は関数を使ってエラーイベントだけを抽出する例です。
.create function GetRecentErrors() {
EventLog
| where EventLevel == "Error"
| where Timestamp > ago(1d)
}
この関数は呼び出すだけで仮想テーブルのように使えます。
参考: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/functions/
project演算子とbin関数の使い方
project 演算子
project 演算子は、列の選択や名前変更、新しい列の定義などに使います。SQLの SELECT に似ていますが、より明示的で列操作に特化しています。
DeviceEvents
| project Timestamp, DeviceName, ReportId
bin 関数
bin 関数は主に時間や数値を一定の区切りにまとめたいときに使います。特に timechart と組み合わせて時間単位での集計を行う際に便利です。
SecurityEvent
| summarize count() by bin(TimeGenerated, 1h)
参考: https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/binfunction
Microsoft Defender のアラートと対応テーブル
Microsoft Defender for Endpoint などのセキュリティ製品から送られるアラートは、SecurityAlert
テーブルに格納されます。このテーブルには製品名、アラートの種類、検出内容、発生時刻などが含まれます。
SecurityAlert
| where ProductName == "Microsoft Defender for Endpoint"
また、複数のアラートを一つにまとめたインシデント情報は SecurityIncident
テーブルに記録されます。
テーブル名 | 目的 |
---|---|
SecurityAlert | 個別のアラート情報。技術的で詳細なログ |
SecurityIncident | 関連アラートをまとめた調査・対応の単位 |
参考: https://learn.microsoft.com/ja-jp/azure/sentinel/data-connectors-reference
参考: https://learn.microsoft.com/ja-jp/azure/sentinel/security-alert-schema
Threat Indicator(IOC)の基本と分類
Threat Intelligence(脅威インテリジェンス)は3つのレベルに分類されます。
レベル | 内容 | 例 |
---|---|---|
Strategic | 経営レベルの意思決定に関わる情報 | 国家攻撃、全体的な脅威傾向など |
Operational | 攻撃者の目的や手法、ツールなど | 攻撃グループの戦術やTTP |
Tactical | 技術的な指標。直接検知・防御に活用される | IPアドレス、ドメイン、ハッシュ等 |
Indicator of Compromise(IOC)は Tactical 情報に分類され、以下のようなものが該当します。
- 不審なドメイン名(例: malicious-site.com)
- C2通信のIPアドレス
- マルウェアのファイルハッシュ
- 攻撃に使われたURL
参考: https://learn.microsoft.com/ja-jp/azure/sentinel/understand-threat-intelligence