サービスプリンシパルなどのサービスアカウントを利用した不正アクセスT1078(Valid Accounts)検知について

Pocket

サービスプリンシパル(Valid Accounts)を利用して Azureに不正アクセスする方法をいろいろ調べています。

なお、以下のサイトはサービスプリンシパルを悪用する流れをわかりやすく説明しているので、事前知識としてとても参考になると思います。

グループ企業間で使うSlack Botと脅威ベースのリスク評価 - Entra ID編
https://tech.layerx.co.jp/entry/2024/03/01/080000

1.Finding interactive logins from service accounts(Splunk)

サービスプリンシパルなどのサービスアカウントに対してインタラクティブログインをされている場合は攻撃の可能性がある。

Finding interactive logins from service accounts(Splunk)
https://lantern.splunk.com/Security/UCE/Guided_Insights/Threat_hunting/Finding_interactive_logins_from_service_accounts

上記のサイトで解説しているSPLをChatGPTに説明してもらったのが以下。

このSPLクエリは、svc_で始まるサービスアカウント(ユーザー)に関する監査ログを解析し、特定の条件に基づいて異常な動作(例:最近の活動)を検出するためのものです。以下で各ステップを解説します。
SPLの解説:

index=systems sourcetype=audit_logs user=svc_*
index=systems:systemsというインデックスを指定しています。このインデックスにはシステム関連のログが保存されていると考えられます。
sourcetype=audit_logs:audit_logsというsourcetypeを指定しており、監査ログに関するデータをフィルタしています。
user=svc_*:svc_で始まるユーザー名をフィルタしています。これにより、サービスアカウント(svc_*)を対象にしたログのみが抽出されます。

stats earliest(_time) as earliest latest(_time) as latest by user, dest
statsコマンドを使用して、以下を各user(ユーザー)とdest(宛先、または接続先ホスト)ごとに集計します。
earliest(_time):最も早い時間(イベント発生の最初の時刻)をearliestとして格納します。
latest(_time):最も遅い時間(イベント発生の最後の時刻)をlatestとして格納します。
これにより、各サービスアカウントがいつ最初に活動を開始し、いつ最後に活動を行ったかが分かります。

eval isOutlier=if(earliest >= relative_time(now(), “-1d@d”), 1, 0)
evalコマンドで、新しいフィールドisOutlierを作成しています。
if()関数を使用して、earliest(最初の活動時間)が「過去24時間以内」(relative_time(now(), "-1d@d"))の場合に、isOutlierを1に設定します。そうでない場合は0に設定します。
これは、過去24時間以内に活動を開始したサービスアカウントを特定するために使われています。relative_time(now(), "-1d@d")は、現在の時刻(now())から1日前の午前0時までの時間範囲を計算しています。

convert ctime(earliest) ctime(latest)
convertコマンドで、earliestとlatestのタイムスタンプを人間が読みやすい形式(CTIME形式)に変換しています。これにより、結果が「年-月-日 時間」のフォーマットで表示されます。

where isOutlier=1
最後に、whereコマンドで、isOutlier=1のレコード(過去24時間以内に最初の活動を行ったサービスアカウント)だけをフィルタしています。つまり、最近活動を開始したサービスアカウントを特定します。

まとめ:

このクエリは、svc_で始まるサービスアカウントのうち、過去24時間以内に最初の活動を行ったアカウント(「異常な」最近の活動を示すアカウント)を検出します。特に、監査ログを使ってサービスアカウントの活動時間を解析し、最近になって活動を開始したアカウントに注目しています。
MITRE ATT&CKテクニック

このクエリは、サービスアカウントの異常な使用パターンを特定するためのもので、攻撃者がサービスアカウントを悪用した可能性を示すシナリオに関連します。関連するMITRE ATT&CKテクニックは以下の通りです。

T1078 - Valid Accounts
攻撃者が有効なサービスアカウント(svc_*)を使用してシステムにアクセスする場合に関連します。このクエリは、過去24時間以内に活動を始めたサービスアカウントを特定するため、アカウントの不正使用を検出する手がかりとなります。

T1087 - Account Discovery
攻撃者がアカウント情報を収集し、システム上でサービスアカウントを見つけ、それを利用する可能性があります。このクエリは、新たに活動を開始したサービスアカウントを特定するため、このテクニックとも関連します。

まとめ:

このクエリは、サービスアカウントの異常な活動(過去24時間以内の活動開始)を特定するもので、MITRE ATT&CKのT1078(有効なアカウントの使用)やT1087(アカウント情報の収集)に関連する可能性があります。

なお、このあたりを説明してくれている記事があるので合わせて記載しておく。

Azure IDを活用したサインインの管理(マイナビ)
https://news.mynavi.jp/techplus/article/techp5516/

What are Microsoft Entra sign-in logs?
https://learn.microsoft.com/en-us/entra/identity/monitoring-health/concept-sign-ins

Comments

コメントを残す

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

CAPTCHA