皆さんこんにちは。国井です。
最近はAzure ADに関連するツールや情報が色々とネットにあふれるようになり、様々な操作をするのに困ることも徐々に少なってきていますね。今日紹介するAAD Internals PowerShellモジュールもその一つだと思います。AAD Internalsは名前のとおりAzure ADの各種操作を行えるPowerShellモジュールで、ちょっと変わった操作ができるという印象があります。
早速使ってみましょう!
モジュールの利用開始
他のPowerShellモジュールと同じように利用開始するときはInstall-Moduleコマンドレットでインストールし、Import-Moduleコマンドレットでコンソールにロードします。
Install-Module AADInternals
Import-Module AADInternals
これができたらAzure ADに接続し、利用開始するのですが、変わっているのが利用するコマンドレットによって接続するためのコマンドレットが異なるってことです。例えば、サブスクリプションに割り当てられているライセンス(Sku)一覧を参照するコマンドレットであるGet-AADIntSubscriptionsコマンドレットを実行する場合、接続のコマンドレットしてGet-AADIntAccessTokenForAADGraphを使います。
Get-AADIntAccessTokenForAADGraph –SaveToCache
ちなみに-SaveToChacheスイッチを使うとアクセストークンの期限が切れるとリフレッシュトークンを使ってアクセストークンを再取得してくれるので時間を気にせずコマンドレットを実行できるメリット?があります。
コマンドレット一覧は作者の方のブログで紹介されていますが、
コマンドレットを眺めていると、どうやら名詞部分がAADIntで始まるコマンドレットの実行には接続のコマンドレットしてGet-AADIntAccessTokenForAADGraphを使うようです。
■ ■ ■
次からは私が使ってみて気に入ったコマンドレットをいくつか挙げてみます。
ユーザーのMFA設定を確認
Get-AADintUserMFAコマンドレットを実行するとユーザーが利用するMFAのメソッドを確認できます。通話なのか、SMSなのか、それともMicrosoft Authenticatorアプリなのか?ということが確認できます。
管理者がユーザーのMFA設定をカスタマイズ
Set-AADIntUserMFAコマンドレットはユーザーごとのMFA設定を定義するコマンドレットです。MFA設定って初回アクセス時に携帯電話の番号やアプリの登録など面倒なことを色々やらなければならなくって、それを管理者サイドで設定してしまおうってもの。
xxx@xxxxユーザーの携帯電話番号の登録とデフォルトで使う認証をSMSによる通知にするのであれば、こんな感じに設定します。
Set-AADIntUserMFA -UserPrincipalName "xxx@xxxx” -PhoneNumber "+81 90xxxxxxxx” -DefaultMethod OneWaySMS
最後のDefaultMethodってところですが、
OneWaySMSを選択するとSMSによるワンタイムパスワードの設定、
TwoWayVoiceMobileを選択すると通話による認証、
PhoneAppNotificationを選択するとアプリ(Microsoft Authenticatorなど)によるプッシュ通知を選択することになります。アプリの通知設定も別のコマンドレットでできるんですけど、デバイストークンの設定とかいろいろ面倒で普通に設定したほうがいいんじゃないかと思いました。
グローバル管理者の一覧を参照
グローバル管理者として不審なユーザーが紛れ込んでいないか確認するならこのコマンドレットを使います。定期的に実行して結果を確認するとか、そんな感じの使い方かな?
Get-AADIntGlobalAdmins
Teamsの在席状況を操作
AAD InternalsコマンドレットがスゴイのはOffice 365系のサービスも操作できちゃうこと。
中でも私のお気に入りはTeamsの在席状況をコマンドレットで操作できることです。
ただし、Teamsのコマンドレットを操作するときはTeams用のトークンを取ってくる必要があるので、
Get-AADIntAccessTokenForTeams –SaveToCache
を実行してから
Set-AADIntTeamsAvailability -Status Available
と実行します。すると在席状況を「連絡可能」な状態にできます。
これからリモートワークと称して遊びに出かけることができますねw
Teamsにチャットを投稿
Teamsでこんな感じのメッセージが並んでいるところに新しいチャットメッセージを書き込みたい場合、
Get-AADIntAccessTokenForTeams –SaveToCache
を実行してから以下を実行して
Get-AADIntTeamsMessages | ft Content,Link -AutoSize
これで既存のチャットメッセージを取得します。
するとLink欄からスレッド情報が取れるので、
Send-AADIntTeamsMessage -Thread "19:-DVxxxxxxxxx@xxxxxxxxxx"
-Message "こんにちは世界"
と打ち込めばメッセージを書き込めます。
ちなみに書き込んだメッセージ一覧はGet-AADIntTeamsMessages
コマンドレットで取得できます。
不正アクセスでMFAを突破する
これはオマケなんですが、ADFS経由でのAzure AD接続を実装している場合、
有効なUserPrincipalName、Immutable ID、IssuerURIを指定できると、Open-AADIntOffice365Portalコマンドレットを使ってADFSサーバーが発行するトークンを偽装することができます。しかもADFSサーバーから発行するトークンにはMFA済みのクレームをトークンにセットできるので、Azure ADでMFAを設定してあってもMFAをスキップできてしまいます。(これはかなりの脅威!)
詳しくはFireEyeさんのブログに掲載されているのでご覧になってみていただければと思います。
他にもパススルー認証で使用するパスワードをDLLインジェクションで横取りしてパスワードを盗み見るInstall-AADIntPTASpyなんてコマンドレットもあるので(誰得?)、色々試せそうです。