MITRE ATT&CKのT1110.004をAzure Entra IDのログで検知する方法を調べてみた

Pocket

1.azure_ad_multiple_users_failing_to_authenticate_from_ip.yml

出典:
https://github.com/splunk/security_content/blob/develop/detections/cloud/azure_ad_multiple_users_failing_to_authenticate_from_ip.yml

このSplunk SPLクエリは、Azure Active Directory (AAD) のサインインログを解析して、特定のIPアドレスから複数のユーザーが短時間で認証に失敗しているケースを検出するためのものです。以下に各部分の説明を行います。
クエリの詳細

azure_monitor_aad category=SignInLogs properties.status.errorCode=50126 properties.authenticationDetails{}.succeeded=false:
azure_monitor_aad: これはデータセットの名前で、Azure MonitorからのAzure Active Directory(AAD)のログを参照します。
category=SignInLogs: SignInLogs カテゴリに属するログをフィルタリングします。これらのログは、サインインの試行に関連する情報を含んでいます。
properties.status.errorCode=50126: エラーコード50126を持つサインイン失敗イベントをフィルタリングします。このエラーコードは、通常、認証に失敗したことを示します。
properties.authenticationDetails{}.succeeded=false: 認証が失敗した (succeeded=false) イベントのみを抽出します。

rename properties.* as *:
properties フィールドのすべての属性を、そのプロパティ名のみを持つフィールドにリネームします。例えば、properties.status は status になります。

bucket span=5m _time:
_time フィールドを5分間隔に分割します。これにより、ログが5分ごとのタイムバケットにグループ化されます。

stats count min(_time) as firstTime max(_time) as lastTime dc(user) AS unique_accounts values(user) as user by src_ip:
count: 各IPアドレス (src_ip) からの認証失敗イベントの数をカウントします。
min(_time) as firstTime: 最初の認証失敗イベントの時間を firstTime として保存します。
max(_time) as lastTime: 最後の認証失敗イベントの時間を lastTime として保存します。
dc(user) AS unique_accounts: 異なるユーザー (user) の数を数え、unique_accounts として保存します。
values(user) as user: そのIPアドレスからのすべてのユーザーをリスト化して user として保存します。

where unique_accounts > 30:
認証失敗を起こした異なるユーザーの数が30を超えるIPアドレスに絞り込みます。これは、パスワードスプレー攻撃やブルートフォース攻撃を検出するためのフィルタリングです。

security_content_ctime(firstTime) および security_content_ctime(lastTime):
firstTime と lastTime フィールドを人間が読みやすい形式に変換します。

azure_ad_multiple_users_failing_to_authenticate_from_ip_filter:
これは最後のステップで、カスタムの検索ヘッドマクロ(azure_ad_multiple_users_failing_to_authenticate_from_ip_filter)を適用して、結果をフィルタリングまたは整形します。詳細はこのマクロの定義によります。

全体の流れ

このクエリは、特定のIPアドレスから短期間に多くの異なるユーザーの認証が失敗している状況を特定するために使用されます。これは、セキュリティの観点から、特定の攻撃(例えばパスワードスプレー攻撃)の兆候を見つけるのに役立ちます。

2.1.のSPLでエラーコードを53003とした場合

エラーコードが 53003 の場合、同じSplunk SPLクエリを使用すると、特定のIPアドレスから複数のユーザーが条件に合わないために認証に失敗しているケースを検出するためのものになります。
エラーコード 53003 について

Azure ADでのエラーコード 53003 は、特定のリソースへのアクセスが条件付きアクセスポリシーに違反したために拒否された場合に発生します。たとえば、ユーザーが特定の条件(場所、デバイスの状態など)を満たしていないため、アクセスがブロックされるときにこのエラーが返されます。
クエリの意味

この場合、クエリは次のような意味になります:

properties.status.errorCode=53003: Azure ADの条件付きアクセスポリシーに違反したために認証が失敗したイベントを抽出します。

その他のクエリ部分:
特定のIPアドレスから、5分間に30以上の異なるユーザーが条件付きアクセスポリシーに違反して認証に失敗した場合を検出します。
これは、特定の場所やネットワークから、ポリシーに違反するアクセス試行が大量に発生している場合などを特定するのに有用です。

まとめ

エラーコード53003 を用いたクエリでは、短期間に特定のIPアドレスから条件付きアクセスポリシーに違反して認証に失敗した多くのユーザーがいるケースを特定します。これにより、不正アクセスの試行やセキュリティポリシーの不正利用などを検出できます。

参考情報

Entra ID サインイン ログの分析でパスワード漏えいを検知する(Qiita)
https://qiita.com/narisho/items/acac05bef586b65f94ae

Microsoft Entra 認証と承認のエラー コード
https://learn.microsoft.com/ja-jp/entra/identity-platform/reference-error-codes


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA