MFAの見える化

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

突然ですけど多要素認証使ってますか?
これだけ多要素認証(MFA)が重要だ!と言われる世の中になると、会社の中でも利用を徹底させたいという機運になるでしょう。昔はMFAの設定などユーザー単位でしか有効化・無効化できなかったけど、今では色々な設定オプションがあり、結局誰にMFAが適用されているのか、わかりにくかったりします。
私が思いつくだけでも、ざっとこんな感じです。

・ユーザー単位でMFA有効
・セキュリティ既定値の設定でMFA有効
・条件付きアクセスでMFA有効
・パスワードレス認証でMFA有効(MFAというか、デバイスベースの認証??)

なので、うちの会社でMFAが有効になっているか?を調べようと思ったら、
上記のパターンを全部調べなければなりません。
ですので、MFAの適用を設定から確認するのではなく、
結果から確認するというアプローチをとるようにしています。
そして結果から確認するのであればサインインログから調べていくのが良いでしょう。

サインインログでMFAの状況を確認

Azure AD管理センターの[サインイン]ログでは幸いなことに個々のログに認証の要件というのがあって、その中で多要素認証か単一要素認証か、がわかるようになっています。

image

さらに個別のログから[認証の詳細]タブをクリックすると、多要素認証の中でも何を使って認証したかを確認できます。

image

例えば、上の画面ではWindows Hello for Business(WHfB)を使って認証したことがわかります(アプリケーションがWindows Sign inですから、おそらくAzure AD参加しているデバイスでWHfBを使ったのでしょうね)

その他、
MFAで電話で通話した場合であれば[認証方法]欄(Authentication Method)にPhoneCall
入りますし、
MFAでMicrosoft Authenticatorを使った場合であれば[認証方法]欄にMobile App Notificationと入ります。

それからパスワードレスでMicrosoft Authenticatorを使っている場合、[認証方法の詳細]欄(AuthenticationDetails)にPasswordless phone sign-inと入ります。

見にくいログをなんとかしたい

ただ、サインインログの画面のクエリはざっくりとしたものしか書けなくて、このレベルのクエリを設定しようと思ったら、CSVファイルに吐き出してからExcelでクエリを実行するか、
Log AnalyticsへエクスポートしてKQLでクエリを書くかのいずれかになります。
ここではKQLでクエリを書いてみましたので、確認してみましょう。

■多要素認証を利用したサインインであるか?
この場合はAuthenticationRequirementを見ればわかります。
projectを使って日時とユーザー名を一緒に表示してみます。

SigninLogs
| project TimeGenerated, UserDisplayName, AuthenticationRequirement

結果はこんな感じで見えます。

image

■多要素認証のうち、どの方法でサインインしたか?
AuthenticationDetails内のauthenticationMethodに認証方法の詳細が入っています。ただし、AuthenticationDetails内の特定の項目に対してwhereで条件指定できないので、次のように絞り込んでみました。

SigninLogs
| where AuthenticationDetails contains “Mobile”
| project TimeGenerated, UserDisplayName, AuthenticationDetails

結果はこんな感じで見えます。
このとき、注目したいのはAuthenticationDetailsが0と1に分かれてログが出ており、0のログにはauthenticationMethodにCloudOnlyPasswordと出ていて、1のログにはMobile App notificationと表示されていることがそれぞれ確認できます(なんで分けているのだろうか?)。

image

image

■WHfBを使ったサインイン
WHfBの場合もAuthenticationDetails内のauthenticationMethodに認証方法の詳細が入っています。Whereで条件指定してみてみましょう。

SigninLogs
| where AuthenticationDetails contains “WindowsHelloForBusiness”
| project TimeGenerated, UserDisplayName, AuthenticationDetails

結果はこんな感じで見えます。こっちも0と1に分かれてログが出ています。

image
1のログにはMFA requirement satisfied by claim in the tokenと出ていることがわかります。
image
どうしてこのようなログが出るのだろうと検索してみたら、こんなブログを見つけました。
こちらのブログによると、MFA requirement satisfied by claim in the tokenと出ている場合、MFAを行わなかったとあります。
確かにWHfBを使ってWindowsサインインを行った場合、サインインのタイミングでAzure ADにアクセスするためのトークン(PRT)をもらえるので、改めてMFAプロセスが実行することはないですよね。そのことを表しているログのようです。
■パスワードレスでサインインを行った場合
最後にパスワードレスサインインの場合のログを調べてみました。

SigninLogs
| where AuthenticationRequirement contains “multiFactorAuthentication”
| where AuthenticationDetails contains “Passwordless”
| project UserPrincipalName, AuthenticationDetails

パスワードレスのサインインの場合もAuthenticationDetailsは2段に分かれてログが出力され、片方(0と書かれた部分)にPasswordless phone sign-in
もう片方(1と書かれた部分)にMFA requirement satisfied by strong authenticationという特徴的なメッセージが残ります。

image

MFA requirement satisfied by strong authenticationのメッセージも前述のサイトにMFAが不要なケースのメッセージとして記載されていました。よく考えたら、パスワードレスサインインってそれ自体が既にMFAをやってるようなものですよね。

会社の中でのMFAの利用状況から話が飛んで、どのような類のMFAを使っているか?までを調べることになってしまいましたが、参考になることがあればうれしいです。

【参考】サインイン レポートを使用して Azure Multi-Factor Authentication イベントを確認する
https://docs.microsoft.com/ja-jp/azure/active-directory/authentication/howto-mfa-reporting