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

Pocket

1.Chat GPT案

以下、Chat GPTに確認した結果。

ちなみに各エラーコードの意味は以下の通り。

50053,IdsLocked – ユーザーが間違ったユーザー ID またはパスワードで何度もサインインを試みた、もしくはサインインが、悪意のあるアクティビティを伴う IP アドレスからのものであるためブロック
50055, InvalidPasswordExpiredPassword – パスワードの期限が切れています。
50057, UserDisabled – ユーザー アカウントが無効にされています。
50059, MissingTenantRealmAndNoUserInformationProvided – テナントを識別する情報が要求内に見つからず、指定されたどの資格情報でも暗黙的に示されませんでした。
50126, InvalidUserNameOrPassword – 無効なユーザー名またはパスワードにより、資格情報の検証でエラーが発生しました。 ユーザーが適切な資格情報を入力しませんでした。
50128, ドメイン名が無効です。
50129, DeviceIsNotWorkplaceJoined – デバイスを登録するには、ワークプレースの参加が必要です。
50140, KmsiInterrupt – ユーザーがサインインしたときの “サインインしたままにする” 割り込みによりエラーが発生しました。
53003, BlockedByConditionalAccess – 条件付きアクセス ポリシーにより、アクセスがブロックされました。

Azure環境でブルートフォース攻撃を検知するためのSigmaルールは、Azure Active Directory(Azure AD)のサインインログやイベントを監視することで実現します。以下にAzure ADにおけるブルートフォース攻撃を検知するためのSigmaルールの例を示します。
Sigma Rule: Azure AD Brute Force Detection

yaml

title: Azure AD Brute Force Attack Detection
id: b3d88e2d-27a9-4e2b-bb02-48c27e41a2d4
status: experimental
description: Detects possible brute force attacks in Azure AD by looking for multiple failed login attempts from the same IP address in a short time frame.
author: [Your Name]
references:
- https://azure.microsoft.com/en-us/services/active-directory/
tags:
- attack.t1110.001
- attack.brute_force
- azure.ad
logsource:
service: azure
product: azure_ad
detection:
selection:
category: "SignInLogs"
properties.status.errorCode: [50053, 50055, 50057, 50059, 50126, 50128, 50129, 50140, 53003] # Common Azure AD failed login error codes
condition: selection
timeframe: 5m
aggregation:
by:
- src_ip
timeframe: 5m
count: 10 # Threshold for failed attempts (this can be adjusted based on your environment)
filter:
- unique_accounts > 5 # More than 5 unique users (optional to filter by unique users)
condition: aggregation and filter
fields:
- src_ip
- user
- properties.status.errorCode
falsepositives:
- Legitimate users failing to login multiple times
level: high

説明

title: ルールのタイトル。
id: ルールのユニークID。
status: ルールのステータス(この例では「experimental」)。
description: ルールの説明。
author: ルールの作成者。
references: ルールに関連するリファレンス。
tags: MITRE ATT&CKの技法に対応するタグ(この場合、T1110.001: Brute Force)。
logsource: ログソース情報。この場合、Azure ADのサインインログを対象にしています。
detection:
selection: 監視するイベントの選択基準。Azure ADの特定のエラーコード(ブルートフォース攻撃に関連するもの)にマッチするイベントを選択します。
condition: イベントの選択条件。
timeframe: イベントの監視期間(この例では5分間)。
aggregation: IPアドレスごとにグループ化し、5分間に10回以上の失敗をカウントします。
filter: さらに条件をフィルタリングします(例: ユニークユーザー数が5を超える場合など)。
fields: ルールに基づいて取得されるフィールド。
falsepositives: 想定される誤検知の例。
level: アラートの重大度レベル(この例では「high」)。

ルールのカスタマイズ

count や unique_accounts の閾値は、環境に応じて調整する必要があります。
properties.status.errorCode のリストには、特定の失敗コードが含まれていますが、これも環境や攻撃パターンに応じて追加・修正が可能です。

このSigmaルールは、Azure AD環境においてブルートフォース攻撃の兆候を検知し、即座に対応できるようにするためのものです。

2.azure_ad_successful_authentication_from_different_ips.yml

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

このSplunk SPLクエリは、Azure Active Directory (AAD) のサインインログを解析し、短時間に複数の異なるIPアドレスから成功した認証を行ったユーザーを特定するためのものです。このクエリは、アカウントの不正使用やセッションハイジャックなど、潜在的なセキュリティリスクを示唆する異常なアクセスパターンを検出することを目的としています。
クエリの詳細

azure_monitor_aad properties.authenticationDetails{}.succeeded=true category=SignInLogs`:
azure_monitor_aad: Azure MonitorからのAzure Active Directory(AAD)のログデータセットを参照します。
properties.authenticationDetails{}.succeeded=true: 認証が成功したイベントを抽出します。
category=SignInLogs: サインインログカテゴリーに属するログをフィルタリングします。

rename properties.* as *:
properties フィールドのすべての属性を、そのプロパティ名のみを持つフィールドにリネームします。これにより、properties.status は status などに簡略化されます。

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

stats count min(_time) as firstTime max(_time) as lastTime dc(src_ip) AS unique_ips values(src_ip) as src_ip values(appDisplayName) as appDisplayName by user:
count: 各ユーザーの認証成功イベントの数をカウントします。
min(_time) as firstTime: 最初の認証成功イベントの時間を firstTime として保存します。
max(_time) as lastTime: 最後の認証成功イベントの時間を lastTime として保存します。
dc(src_ip) AS unique_ips: 異なるIPアドレス(src_ip)の数を数え、unique_ips として保存します。
values(src_ip) as src_ip: そのユーザーが使用したすべてのIPアドレスをリスト化して src_ip として保存します。
values(appDisplayName) as appDisplayName: 認証時に使用されたアプリケーション名をリスト化して appDisplayName として保存します。

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

where unique_ips > 1:
30分間の間に異なる2つ以上のIPアドレスから認証が成功したユーザーをフィルタリングします。これにより、短期間に異常なIPアドレス変更があったユーザーを特定できます。

azure_ad_successful_authentication_from_different_ips_filter:
最後に、このカスタムの検索ヘッドマクロ(azure_ad_successful_authentication_from_different_ips_filter)を適用して、結果をさらにフィルタリングまたは整形します。このマクロの具体的な内容は環境によりますが、追加のフィルタリングや条件が適用される可能性があります。

全体の流れと目的

このクエリは、短時間で複数の異なるIPアドレスから認証が成功したユーザーを検出します。これは、例えば以下のような異常なシナリオを検出するのに役立ちます:

アカウントが複数の場所から同時にアクセスされている。
セッションハイジャックが発生している可能性がある。

このような異常な認証パターンは、アカウントの不正使用やセキュリティ侵害の可能性を示唆するため、注意が必要です。

Comments

コメントを残す

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

CAPTCHA