OAuth アプリ利用の追跡

皆さんこんにちは。国井です。
前々回の投稿で「アプリガバナンスによる危険なOAuthアプリの検出」という話をしました。その時にOAuthアプリの同意画面なんて誰も見てないから、APIアクセス許可としてメールボックスへのアクセス権など簡単にゲットできちゃうよという趣旨の話をしました。

もしこうしたことがあったならば、Microsoft Defender for Cloud Appsに付属するアプリガバナンスというサービスを使って、どのようなAPIアクセス許可に対して同意をしているのか?を参照できることはお話しした通りですが、今日はアプリガバナンス以外にも参照できる方法としてこんなやり方があるよ、というのを紹介します。

最初にチェックすること

自社のテナントのAPIへのアクセスを許可した場合、Microsoft Entra管理センターのアプリケーション > エンタープライズアプリケーションの一覧にAPIアクセスを行うアプリケーション(OAuthアプリ)が登録されます。
そのため、見覚えのないアプリケーションや今までなかったようなアプリケーションがあれば、それがここでのチェック対象になると思います。
ここでは一例としてBrother Web ConnectというOAuthアプリがエンタープライズアプリケーションに登録されている場合を取り上げて話を進めていきます。まずはBrother Web ConnectアプリのアプリケーションIDを確認しておきましょう。

image

Advanced Huntingから追跡

Advanced HuntingはMicrosoft Defender for Endpoint (MDE) などで利用可能なクエリのサービスで、Microsoft Defender XDR画面の追及 > 高度な追及からアクセスできます。
クエリはMDEに対してのみでなく、Microsoft Defender for xxxx って名前の各サービスに対して行うことができるようになっていてCloudAppEventsテーブルを利用すると、Microsoft Entra IDのアカウントを使ってアクセスしたクラウドサービスへのアクセス状況が確認できます。
先ほど調べておいたアプリケーションIDを条件にクエリを書いてあげると、そのアプリケーション(OAuthアプリ)経由でどのようなアクティビティがあったか?を追跡できます。そのクエリがこちらになります。(OAuthApplicationId の後にアプリケーションIDを入れて使ってください)

CloudAppEvents
| project Timestamp, OAuthApplicationId = tostring(RawEventData.ApplicationId), AccountDisplayName, IPAddress, ResourceType = tostring(RawEventData.ItemType), Workload = tostring(RawEventData.Workload), ActionType, FileName = tostring(RawEventData.SourceFileName), FileUrl = tostring(RawEventData.ObjectId), FileSize = strcat(round(RawEventData.FileSizeBytes/1048576, 2), "MB")
| where OAuthApplicationId == "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx"

実行結果はこちら。OAuthApplicationId 列がアプリケーションIDの列になります。

image

結果を見るとBrother Web ConnectアプリはOneDrive for Businessへのファイルのアップロード、ファイル名の変更、ファイルの変更をそれぞれ行っていることがわかります。
OneDrive for BusinessであればURLも一緒に確認できるので、どこのフォルダーにアクセスしたか?もわかります。これだけの情報がそろっていれば、ユーザーにヒアリングすることで意図的に利用したものか、または知らないうちに行われた操作であるかがわかると思います。

Microsoft Sentinelから追跡

Advanced Huntingから追跡する方法の最大の欠点は30日前のログに対してしかクエリを実行できないことです。もし30日以上の前のログに対してクエリを実行する場合はMicrosoft Sentinel (他のSIEMでも結構ですが) にログを転送し、そこからクエリを実行する必要があります。
Microsoft Sentinel の場合、データコネクタと呼ばれる設定を利用してログ収集を行います。Advanced Hunting で参照したログは Microsoft Defender XDR と呼ばれるデータコネクタを使って収集するように設定していれば、Advanced Huntingと全く同じクエリで情報を参照できます。

image

一方、OAuthアプリからAPIアクセスした先がOffice 365であれば、Microsoft 365データコネクタを使って収集するように設定していればOfficeActivityテーブルに対するクエリを実行して参照できます。そのクエリがこちらになります。(ApplicationId の後にアプリケーションIDを入れて使ってください)

OfficeActivity
| where OfficeWorkload == "OneDrive"
| where ApplicationId == "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx"

実行結果はこちら。

image

このようにMicrosoft SentinelであればAPIアクセスを行ったOAuthアプリ側(Brother Web Connect)からのログと、APIアクセスされたアプリ側(Office 365)からのログをそれぞれ参照できるのです。

監査ログから追跡

Office 365ではテナント内でのアクティビティが180日(E5ライセンスだと365日) 保存されるのでMicrosoft Purview管理センターの監査メニューからアプリケーションIDをキーにして検索し、OAuthアプリ(Brother Web Connect)がAPIでどこにアクセスしたかを追跡できます。

image

実行結果はこちら。

image

各ログはクリックすると詳細画面が表示され、Microsoft Sentinelで見ていただいた時と同じような内容が確認できます。監査ログの最大の特徴はMicrosoft 365ではなく、Office 365のライセンスだけで利用できることだと思います。
また(ここでは取り上げませんが)PowerShellから実行できることも特徴だと思います。

まとめ

今日は3つの追跡方法を見てきました。
Advanced Huntingで追跡する方法はOAuthアプリで行ったことをベースに追跡していく方法であること、監査ログだとAPIでのアクセス先がOffice 365であった場合にOffice 365で行われたことをベースに追跡していく方法、そしてMicrosoft Sentinelだとその両方から追跡できることを見てみました。
それぞれの利用には必要なライセンスが異なるのでその点を踏まえて利用してみてください。

【参考URL】
Investigating malicious OAuth applications using the Unified Audit Log
https://techcommunity.microsoft.com/t5/microsoft-security-experts-blog/investigating-malicious-oauth-applications-using-the-unified/ba-p/4007172