MITRE ATT&CKのT1078をAzureログで検知する方法を調べてみた

Pocket

1.Azure AD Authentication Failed During MFA Challenge

出典:
https://research.splunk.com/cloud/e62c9c2e-bf51-4719-906c-3074618fcc1c/

ログソース:SignInLogs

検索ロジック:properties.status.errorCode=500121

このSPL(Splunk Processing Language)のクエリは、Microsoft Azureの監視データを分析して、特定のセキュリティイベントに関連するログエントリを抽出し、集計するために使用されています。具体的には、Azure Active Directory(AAD)におけるMFA(多要素認証)チャレンジ中の認証失敗イベントに焦点を当てています。

以下に各部分の意味を説明します。

azure_monitor_aad:
Azure Monitor からのAAD (Azure Active Directory) ログデータを参照します。この部分はカスタムSPLマクロや別途定義されたデータセットを参照している可能性があります。

category=SignInLogs properties.status.errorCode=500121:
SignInLogs カテゴリに属するログエントリをフィルタリングしています。
properties.status.errorCode=500121 は、特定のエラーコード(500121)に該当するログをさらに絞り込んでいます。このエラーコードはMFAの失敗を示しています。

rename properties.* as *:
properties 内の全てのフィールドを、そのフィールド名だけに短縮しています。たとえば、properties.status は単に status になります。

stats count min(_time) as firstTime max(_time) as lastTime by user, src_ip, status.additionalDetails, appDisplayName, user_agent:
ユーザー(user)、ソースIPアドレス(src_ip)、ステータスの詳細(status.additionalDetails)、アプリケーション表示名(appDisplayName)、およびユーザーエージェント(user_agent)ごとに集計を行います。
イベントの最初と最後の時間をfirstTimeおよびlastTimeとして、それぞれ計算します。

security_content_ctime(firstTime) および security_content_ctime(lastTime):
firstTimeとlastTimeのタイムスタンプを可読な形式に変換するカスタムマクロです。通常はUNIXタイムスタンプを人間が読める形式に変換します。

azure_ad_authentication_failed_during_mfa_challenge_filter:
これは、カスタムフィルタのマクロで、MFAチャレンジ中に認証が失敗した場合の特定の条件に基づいて、さらに結果を絞り込んでいる可能性があります。

このクエリ全体の目的は、Azure ADログから、MFAチャレンジ中に発生した認証失敗のイベントを特定し、それらのイベントをユーザーや他の関連情報ごとに集計することです。これにより、どのユーザーが、どのIPアドレスから、どのアプリケーションを使用して、どのような詳細な状況でMFAに失敗したのかを分析できます。

2.Azure AD Multiple AppIDs and UserAgents Authentication Spike

出典:
https://research.splunk.com/cloud/5d8bb1f0-f65a-4b4e-af2e-fcdb88276314/

ログソース:SignInLogs

検索ロジック:operationName=”Sign-in activity”

このSPL(Splunk Processing Language)のクエリは、Azure Active Directory(AAD)におけるサインイン活動を分析し、特に複数のアプリケーションIDやユーザーエージェントに関わる異常な認証活動を検出するために使用されています。以下に各部分の意味を解説します。
クエリ全体の構造

データの選択:
`azure_monitor_aad` category=SignInLogs operationName="Sign-in activity"

azure_monitor_aad:Azure Monitor からAADログデータを参照します。
category=SignInLogs:サインインログのカテゴリをフィルタリング。
operationName="Sign-in activity":特定の操作名「Sign-in activity」に基づいてフィルタリング。

認証条件のフィルタリング:
(properties.authenticationRequirement="multiFactorAuthentication" AND properties.status.additionalDetails="MFA required in Azure AD") OR (properties.authenticationRequirement=singleFactorAuthentication AND "properties.authenticationDetails{}.succeeded"=true)

MFA(多要素認証)が要求され、かつ追加の詳細が「MFA required in Azure AD」であるか、またはシングルファクター認証で成功した場合のログをフィルタリングしています。

時間ベースのバケット化:
| bucket span=5m _time

ログデータを5分間隔(5m)で時間バケットに分割します。

フィールドのリネーム:
| rename properties.* as *

properties 内のすべてのフィールドを、そのフィールド名に短縮します。

統計の集計:
| stats count min(_time) as firstTime max(_time) as lastTime dc(appId) as unique_app_ids dc(userAgent) as unique_user_agents values(appDisplayName) values(deviceDetail.operatingSystem) by user, src_ip

ユーザー(user)、ソースIPアドレス(src_ip)ごとに、以下の集計を行います:
count: イベントの合計数。
min(_time) as firstTime: 最初の発生時間。
max(_time) as lastTime: 最後の発生時間。
dc(appId) as unique_app_ids: ユニークなアプリケーションIDの数。
dc(userAgent) as unique_user_agents: ユニークなユーザーエージェントの数。
values(appDisplayName):アプリケーションの表示名。
values(deviceDetail.operatingSystem):デバイスのオペレーティングシステム。

条件によるフィルタリング:
| where count > 5 and unique_app_ids > 2 and unique_user_agents > 5

イベント数が5以上、ユニークなアプリケーションIDが2以上、ユニークなユーザーエージェントが5以上の場合にフィルタリングします。これにより、複数のアプリケーションIDやユーザーエージェントを伴う異常なサインイン活動を検出します。

時間の変換:
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`

firstTime と lastTime を可読な形式に変換するカスタムマクロです。

フィルタの適用:
| `azure_ad_multiple_appids_and_useragents_authentication_spike_filter`

カスタムフィルタマクロで、特定の異常な認証活動(複数のアプリケーションIDやユーザーエージェントを伴うスパイク)をさらにフィルタリングします。

全体の目的

このクエリは、Azure ADのサインインログを分析し、特に複数のアプリケーションやユーザーエージェントに関与する異常なサインイン活動を検出します。これにより、潜在的なセキュリティインシデント(例えば、1つのアカウントで複数のアプリケーションに短時間でアクセスが試みられた場合など)を特定することができます。

3.Azure AD Multiple Failed MFA Requests For User

出典:
https://research.splunk.com/cloud/264ea131-ab1f-41b8-90e0-33ad1a1888ea/

ログソース:SignInLogs

検索ロジック:
operationName=”Sign-in activity”
properties.status.errorCode=500121
properties.status.additionalDetails!=”MFA denied; user declined the authentication”

このSPLクエリもAzure Active Directory(AAD)のサインインログを分析し、特にMFA(多要素認証)関連の失敗イベントを検出するために使われています。以下にクエリの各部分の意味を解説します。
クエリ全体の構造

データの選択:
`azure_monitor_aad` category=SignInLogs operationName="Sign-in activity" properties.status.errorCode=500121 properties.status.additionalDetails!="MFA denied; user declined the authentication"

azure_monitor_aad: Azure Monitor からのAADログデータを参照します。
category=SignInLogs: サインインログのカテゴリに属するログをフィルタリングします。
operationName="Sign-in activity": 「Sign-in activity」に関する操作に限定してフィルタリングします。
properties.status.errorCode=500121: エラーコード500121(MFA認証失敗)に該当するログをさらに絞り込みます。
properties.status.additionalDetails!="MFA denied; user declined the authentication": MFAが拒否された(ユーザーが認証を拒否した)ケースを除外します。

フィールドのリネーム:
| rename properties.* as *

properties内のすべてのフィールドを、そのフィールド名に短縮します。たとえば、properties.statusはstatusになります。

時間ベースのバケット化:
| bucket span=10m _time

ログデータを10分間隔(10m)で時間バケットに分割します。

統計の集計:
| stats count min(_time) as firstTime max(_time) as lastTime by user, status.additionalDetails, appDisplayName, user_agent

ユーザー(user)、ステータスの詳細(status.additionalDetails)、アプリケーション表示名(appDisplayName)、ユーザーエージェント(user_agent)ごとに以下を集計します:
count: イベントの合計数。
min(_time) as firstTime: 最初の発生時間。
max(_time) as lastTime: 最後の発生時間。

条件によるフィルタリング:
| where count > 10

イベント数が10以上の場合にフィルタリングします。これにより、特定の条件下でMFA失敗が複数回発生した場合を抽出します。

時間の変換:
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`

firstTimeとlastTimeのタイムスタンプを可読な形式に変換するカスタムマクロです。

フィルタの適用:
| `azure_ad_multiple_failed_mfa_requests_for_user_filter`

カスタムフィルタマクロで、特定の条件に合致するMFAの失敗イベントをさらにフィルタリングします。

全体の目的

このクエリは、Azure ADサインインログを分析して、特定のユーザーがMFA認証に複数回失敗したケースを特定します。この情報は、潜在的なセキュリティリスクを特定するために重要です。特に、MFAチャレンジが多数失敗した場合、アカウント乗っ取りの試みや不正アクセスの可能性が考えられます。

4.azure_ad_authentications_from_countries_you_do_not_operate_out_of.yml

出典:
https://github.com/SigmaHQ/sigma/blob/master/rules/cloud/azure/signin_logs/azure_ad_authentications_from_countries_you_do_not_operate_out_of.yml

説明:

このSigmaルールは、Azure環境であなたの組織が活動していない国からの成功した認証を検出するために設計されています。ルールの目的は、不正アクセスやアカウントの侵害を示す可能性のある異常なアクセスパターンを特定することです。
ルールの詳細

title: "Successful Authentications From Countries You Do Not Operate Out Of"
タイトル: 「組織が活動していない国からの成功した認証」を示します。

id: 8c944ecb-6970-4541-8496-be554b8e2846
ルールのユニークIDです。

status: test
このルールは「テスト中」の状態であることを示します。

description: "Detect successful authentications from countries you do not operate out of."
説明: 「組織が活動していない国からの成功した認証を検出する」ことを目的としています。

references:
Microsoft Learnのリンクが記載されており、セキュリティオペレーションに関する関連情報が含まれています。

author: MikeDuddington, '@dudders1'
ルールの作成者であるMike Duddingtonの名前とTwitterハンドルが記載されています。

date: 2022-07-28
ルールが作成または更新された日付です。

tags:
MITRE ATT&CKの技法に対応するタグが含まれています。
attack.initial-access: 初期アクセスに関連する活動。
attack.credential-access: 資格情報アクセスに関連する活動。
attack.t1078.004: 有効なアカウントを使用しての認証。
attack.t1110: ブルートフォース攻撃。

logsource:
product: azure
Azure製品に関連するログ。
service: signinlogs
サインインログが対象。

detection:
selection:
Status: 'Success'
認証が成功したログを選択します。
filter:
Location|contains: '<Countries you DO operate out of e,g GB, use OR for multiple>'
ここには、あなたの組織が活動している国のコードを入れます(例: GB for United Kingdom)。
filter は、組織が活動している国で行われた認証をフィルタリングします。
condition: selection and not filter
成功した認証イベントのうち、あなたの組織が活動している国に該当しないログを検出します。

falsepositives:
"If this was approved by System Administrator."
システム管理者によって承認された場合、誤検知の可能性があります。

level: medium
アラートの重大度レベルは「中」です。

まとめ

このSigmaルールは、組織が活動していない国からの成功した認証を検出することで、潜在的な不正アクセスやアカウントの侵害を早期に発見することを目的としています。活動している国のリストを適切に設定することが重要です。もし検出された場合、それは通常ではないアクセスを示しており、調査が必要です。

以下、参考になります。

Microsoft Entra security operations for user accounts
https://learn.microsoft.com/en-gb/entra/architecture/security-operations-user-accounts#unusual-sign-ins

Detections/SigninLogs/AuthenticationAttemptfromNewCountry.yaml
https://github.com/Azure/Azure-Sentinel/blob/master/Detections/SigninLogs/AuthenticationAttemptfromNewCountry.yaml

5.AnomalousUserAppSigninLocationIncrease-detection.yaml

出典:
https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/Microsoft%20Entra%20ID/Analytic%20Rules/AnomalousUserAppSigninLocationIncrease-detection.yaml

まとめ

・MFAチャレンジ失敗のクエリは、個別のMFA認証失敗に焦点を当て、特定のユーザーやIPアドレスに対する分析に適しています。
・複数のアプリケーションIDやユーザーエージェントに関連するクエリは、短時間で多くのアプリケーションや異なるデバイスからのアクセスを監視し、異常なサインイン活動を検出します。
・MFA失敗の多発を分析するクエリは、特定のユーザーにおけるMFA失敗の連続を監視し、深刻なセキュリティリスクを早期に検出します。

Comments

コメントを残す

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

CAPTCHA