Microsoft Sentinelにおいてもともと準備されている分析ルールについてクエリの中身や注意点等を紐解いていく。
警告
なお、このルールは利用環境によっては過検知が多発するためチューニングが必要である。
例えば
- 他国と判定されたIPアドレスが日本国内でメジャーであるVPNサービスである場合は検知除外する(リスク受容する)
- Identity Protectionの判定結果を加味するようにクエリをチューニングする
である
1. ルール概要
項目 | 説明 |
---|---|
重大度 | 高 |
ルール名 | User login from different countries within 3 hours (Uses Authentication Normalization) |
ルールの種類 | Scheduled |
ルールの頻度 | 3時間ごとにクエリを実行 |
ルールの期間 | 過去3時間のデータ |
バージョン | 1.2.2 |
説明 | このクエリは、3時間以内に異なる国からのユーザーのログインが成功したかどうかを検索します。(by DeepL) |
Ref | https://github.com/Azure/Azure-Sentinel/tree/master/Parsers/ASimAuthentication |
2. 活用するテーブル
テーブル名 | 概要 | 参考URL |
---|---|---|
imAuthentication | 正規化された認証イベントログ | https://github.com/Azure/Azure-Sentinel/tree/master/Parsers/ASimAuthentication |
3. クエリ解説
User login from different countries within 3 hours (Uses Authentication Normalization) / version1.2.2
// 分析対象の期間
let timeframe = ago(3h);
// 検知する国の種類のしきい値
let threshold = 2;
// パーサーによって正規化された認証イベントを対象にする
imAuthentication
// 分析対象期間内のイベントに絞り込む
| where TimeGenerated > timeframe
// ログオンイベントかつログオンが成功しているイベントに絞り込む
| where EventType=='Logon' and EventResult=='Success'
// ログオン時のIPの国情報フィールドのデータが空でないものに絞り込む
| where isnotempty(SrcGeoCountry)
// ユーザーID、名前、タイプを主キーとして最も古いログオン日時、最も新しいログオン日時、認証ログ出力元のベンダー、プロダクト名、国情報の種類を表示する
| summarize StartTime = min(TimeGenerated), EndTime = max(TimeGenerated), Vendors=make_set(EventVendor), Products=make_set(EventProduct) , NumOfCountries = dcount(SrcGeoCountry) by TargetUserId, TargetUsername, TargetUserType
// 国情報の種類が2種類以上のものに絞り込む
| where NumOfCountries >= threshold
// タイムスタンプフィールドに最初のログオン日時、アカウントエンティティフィールドに対象ユーザーを格納
| extend timestamp = StartTime, AccountCustomEntity = TargetUsername