1.はじめに
Microsoft Sentinel では、セキュリティ上の脅威を検出するための分析ルールが用意されています。
Microsoft Sentinel の分析ルールを活用することでも脅威を検出することが可能ですが、より効果的に脅威を見つけるための方法として、一定の時間枠内に発生する Microsoft Entra ID SigninLogs の頻度に焦点を当てて検討しました。
2.概要
攻撃者は、様々な手法を用いてシステムやネットワークへの不正アクセスを試みます。
一般的な攻撃手法の例として、以下のようなものが挙げられます。
- ブルートフォース攻撃
- 攻撃者は総当たりでパスワードを試行し、正しいパスワードを見つけることを試みます。これにより、サインインの試行回数が急増します。
- ソーシャルエンジニアリング
- 攻撃者はユーザーから情報を騙し取り、それを利用してアクセスを試みます。 例えば、フィッシング詐欺、スピアフィッシングなどが含まれます。
- DDoS攻撃
- 攻撃者はサービスやサーバーに大量のトラフィックを送信し、システムをオーバーロードさせることを試みます。これにより、正当なユーザーのアクセスが妨げられます。
上記以外にも様々な攻撃はありますが、攻撃者が不正なサインインを行う際には、一定の時間内に多数のサインイン試行を行い、システムのセキュリティを乗り越えようする傾向 があります。この攻撃傾向をモニタリングし、異常なアクティビティを素早く検出することが、セキュリティ対策の重要な一環となります。そのため、一定の時間枠内に発生するサインインの頻度に焦点をあてて検討しました。
3.不正アクセスの検出方法
Microsoft Sentinel のログを収集する Log Analytics ワークスペースで実行できる Kusto クエリを作成し、攻撃と想定されるログを検出します。
- 条件1
- 業務利用のアクセスをできる限り検出しないように、 RiskLevelDuringSignIn (サインイン中のリスク レベル)の値はリスクの低い値を除外します。
- 条件2
- 攻撃者によくみられる一定時間内に複数回のアクセス試行を検出するため、1分間に3回以上のサインインを実行しているログに限定します。 過去の傾向分析から、4回以上に設定すると攻撃を見逃すケースが増えることから、3回としました。
SigninLogs
//SigninLogs テーブルを指定する
| where TimeGenerated > ago(30d)
//対象期間を設定する
| where RiskLevelDuringSignIn !in ("none","low")
//条件1:RiskLevelDuringSignIn の値が "none" または "low" を除く
| summarize count() by bin(TimeGenerated, 1m), UserPrincipalName,IPAddress,ResultType,UserAgent,Location
//TimeGenerated を1分単位でグループ化し、各グループのログ数をカウントする
| where count_ >= 3
//条件2:ログ数が3以上であるものだけを選択
4.参考URL
- SigninLogs(テーブル名):ユーザーからの対話型の Entra ID へのサインインログ
- ResultType(列):サインイン イベント中に生成される 5 ~ 6 桁のエラー コードを提供
5.おわりに
攻撃の手法は、近年急速に進化し攻撃スタイルの変遷に合わせて絶えず学習し続けることが不可欠です。今回は、その活動の一例として、一定の時間枠内に発生するサインインの頻度に焦点を当てた検出例を紹介しました。不正アクセスの検出方法として、今回紹介した観点以外にも様々な観点で検出するための Kusto クエリを作成することが可能です。
みなさまの環境に対するセキュリティ上の脅威を検出するお役に立てると幸いです。