Advanced HuntingからAzure ADのサインインログを追跡してみた

皆さんこんにちは。国井です。

今日は完全な備忘録です。
かつてMicrosoft Defender for Endpointで利用可能だったアクティビティのクエリ機能であるAdvanced Hunting。このAdvanced Huntingは現在、Microsoft 365 Defender全体で利用できるように機能拡張され、様々なアクティビティに対してクエリを実行できるようになりました。
そのクエリのスキーマに IdentityLogonEvents というスキーマが使えるようになったので、
今日はこのスキーマを使ってAzure ADのサインインを追跡してみたいと思います。

IdentityLogonEvents スキーマの元ネタ

IdentityLogonEvents スキーマはMicrosoft Defender for Identity経由で収集したActive DirectoryのサインインログMCAS経由で収集したAzure ADのサインインログをミックスさせたデータが元ネタになっていて、その内容に対してクエリを実行するので、Azure ADのサインインログそのものに対してAzure Monitorからクエリを実行する場合とは異なる情報を返してくる特徴があります。

IdentityLogonEvents スキーマのカラム

では、Azure MonitorからAzure ADのログに対するクエリを実行する場合とAdvanced HuntingからAzure ADのログに対するクエリを実行する場合でどのようなカラムの違いがあるか見てみましょう。

こっちがAzure MonitorからアクセスするAzure AD SigninLogsスキーマのカラム

image

image

image

image

それに対して、こっちがIdentityLogonEvents スキーマのカラム

image

こうしてみるとSigninLogsスキーマのほうが圧倒的に多くのカラムを出力してくれます。
ですので、普通に考えたらSigninLogsスキーマを使いましょう、、となるのですが、
Azure MonitorはMicrosoft 365に含まれるサービスではないので別にコストが発生してしまうことがネックだったりします。(と、書いてて気が付いたのですが、Microsoft 365 E5を買えるお客さんならAzure Monitorのコストなど大したことない??)

あと、IdentityLogonEvents スキーマで面白いなと思ったのはISPフィールドがあることです。外部ユーザーの方が弊社のTeamsにアクセスしてくると、うちの会社では契約していないISPからのアクセスがログに残ります。大きな会社の場合、企業の名前がそのままISP名に入ってくるので、その人がどこの会社にお勤めか?ということがすぐにわかったりします。

じゃあ最後にSigninLogsとIdentityLogonEvents でそれぞれクエリを実行してみたいと思います。ここでは外部ユーザーでTeams以外のアプリにアクセスしたユーザーがいないかクエリで調べてみます。
まずはSigninLogs。こちらはLog Analyticsワークスペースから[ログ]にアクセスし、次のようなクエリを書いて実行します。

image

続いてIdentityLogonEvents。
こちらはhttps://security.microsoft.com から追及 > 高度な追及にアクセスし、次のようなクエリを書いて実行します。

image

あれこれ書いたけど、やっぱりSigninLogsスキーマが便利だと思いましたw