NECサイバーセキュリティ戦略統括部 セキュリティ技術センターの桐下です。
今回のブログでは、Azure AD(Azure Active Directory)のゲストユーザーを悪用して、情報収集する手法についてデモを交えながら紹介します。
注意事項
本ブログで紹介する内容を悪用しないでください。
攻撃に対する脅威を知ることでセキュリティ対策の強化に繋げていただくことが目的です。
Azure ADのゲストユーザーとは
ゲストユーザーは、組織外のユーザーを招待した際にAzure AD上に作成されます。[1]Azure Portal上での招待だけでなく、共同作業のためにTeams、SharePoint等に組織外のユーザーを招待することでもゲストユーザーは作成されます。
ゲストユーザーは、組織内部のユーザーではないため、IPアドレス制限等の一部の対策を適用し辛く、Azure ADのウィークポイントになる可能性があります。
ゲストユーザー侵害の影響
Azure ADのゲストユーザーが攻撃者に侵害された際の影響を確認します。
ゲストユーザーが攻撃者に侵害された場合、当然ながら招待されたTeams、SharePoint等でゲストユーザーが確認可能なメッセージ、ファイルを取得することができます。また、Teamsを悪用して侵害を拡大することも可能です。
加えて、AADInternals [2]といった攻撃に悪用可能なツールを使用することでAzure ADの内部情報の収集が可能です。AADInternalsの開発者であるNestori Syynimaa氏のブログ記事 [3]を参考にAADInternalsを使った情報収集に焦点を当てます。
ゲストユーザー侵害によるAzure ADの情報収集
実際にAADInternalsを使用し、ゲストユーザーが侵害された際に収集可能な情報を確認します。Teamsに招待したゲストユーザーが攻撃者に侵害されたことを前提に進めます。
攻撃者がAADInternalsを使用してゲストユーザーとしてAzure ADにログインします。PowershellモジュールであるAADInternalsのコマンドレットを実行するとゲスト参加しているAzure ADのテナント名、テナントIDが確認できます。侵害されたユーザーは、2つのAzure ADのテナントに参加しており、ゲストユーザーとして参加中のテナントがあることが分かります。
攻撃手順を紹介することが目的ではないため、詳細な手順は省略します。AADInternalsのコマンドレットを実行することでゲスト参加しているAzure ADの10件のユーザー情報、2件のグループ情報、1件のロール情報を入手することができました。
グループ情報から侵害されたゲストユーザーは、「ゲストユーザー」と「Project A」という2つのグループに参加していることが分かります。また、グループ情報に記載されたmembershipRuleからゲスト参加した組織は、動的グループ [4]という仕組みを利用して、ゲストユーザーを1つのグループに自動的に所属させています。よって、このグループに所属するユーザーを列挙すれば、全てのゲストユーザーの一覧を入手できます。
次はユーザー情報です。2つのグループに参加しているユーザーの一覧がユーザー情報として列挙されています。このように通常は、ゲストユーザーが参加中のグループの情報、及びグループに参加中のユーザーの情報収集をすることができます。
また、ロール情報を1件入手しています。ゲストユーザーの権限では、具体的なロール名は把握できませんが、ロール自体が1件しかないため、このロールに所属しているtaro.nichidenがゲスト参加中のAzure ADの管理者権限を持つGlobal Administrator [5]であると推測できます。
ゲストユーザーは、通常、自身の所属するグループの範囲でユーザー情報、グループ情報の収集が可能です。しかし、他のユーザーのユーザープリンシパル名 [6]が判明していれば、そのユーザーの所属するグループの範囲で情報収集することが可能です。
Global Administratorと推測するtaro.nichidenが多くのグループに所属していると考え、taro.nichidenのユーザープリンシパル名を指定した上で情報収集をします。その結果、107件のユーザー情報、6件のグループ情報を入手することができました。ロール情報は、1件のままで前回の収集結果から変動はありません。
グループ情報に記載されたmembershipRuleから動的グループを利用して、組織内部のユーザーを1つのグループに自動的に所属させていることが分かります。よって、このグループに所属するユーザーを列挙すれば、全ての組織内部のユーザーの一覧を入手できます。今回のAzure ADの環境では、組織内部のユーザーを自動的に「内部ユーザー」グループに追加する動的グループと、ゲストユーザーを自動的に「ゲストユーザー」グループに追加する動的グループを作成していたため、全てのユーザーの列挙に成功しました。
また、グループ情報のdescriptionからゲスト参加している組織がX社に対して買収を進めていることが把握できます。グループ情報のdescriptionは、Teamsのチーム情報の説明に記載された情報です。
特定のチームにゲストユーザーが参加していなくても、参加しているユーザーのユーザープリンシパル名を指定すれば、情報収集可能であることが分かります。Teamsのチーム情報から企業が公開していない情報が攻撃者に漏れる可能性があります。
情報収集結果の悪用
ゲストユーザーを侵害して、Azure ADから情報収集した結果を悪用することが可能です。
例えば、Global Administratorと推測するユーザーにメールもしくはTeamsによるフィッシングを仕掛けることでAzure AD環境における権限昇格を狙うことができます。多要素認証が設定されている場合でも、多要素認証を突破するフィッシング[7]を仕掛け、ユーザーが騙されれば権限を得ることができます。加えて、Azure ADのセッションCookieを盗難するマルウェアをGlobal Administratorと推測するユーザーに送付し、実行させることができれば、Azure Portalにアクセス中のブラウザのCookieを盗み取り、攻撃者のブラウザに投入することで多要素認証を突破して、権限を得ることも可能です。
また、100件超の組織内部のユーザーが判明しています。100件超の組織内部のユーザーを対象に遠隔操作用のマルウェアをメールもしくはTeamsにて送付することができます。ユーザーが一人でもマルウェアを実行し、かつアンチウィルスソフトの検知をすり抜けることができれば、攻撃者はイントラネットに侵入することができます。
ゲストユーザー侵害時の情報収集への対策
Azure ADのゲストユーザーによる情報収集を防ぐための対策を紹介します。
Azure ADの「ユーザー設定」を選択し、「外部コラボレーションの設定」の「ゲストユーザーのアクセス」の設定値を変更することで、紹介したゲストユーザーによる情報収集を防ぐことができます。
Azure ADの規定値では、「ゲストユーザーのアクセス」は、「ゲスト ユーザーは、ディレクトリ オブジェクトのプロパティとメンバーシップへのアクセスが制限されます」に設定されています。前述の検証は、規定値を用いて実施しました。
「ゲストユーザーのアクセス」を「ゲスト ユーザーのアクセスは、各自のディレクトリ オブジェクトのプロパティとメンバーシップに制限されます (最も制限が多い)」に変更することでゲストユーザーによる情報収集を防ぐことができます。
設定変更後にAADInternalsに対してゲストユーザーにてログインし、taro.nichidenのユーザープリンシパル名を指定して情報収集ができないことを確認しました。
上記の設定変更により、ゲストユーザーの権限が制限されます。[8]権限が制限されるため、ユースケースによっては、ゲストユーザーの運用に影響が発生する可能性があります。自組織のゲストユーザーのユースケースに対する影響を検証後に設定変更することを推奨します。
最後に
ゲストユーザーが侵害された際にゲスト参加したAzure ADに対して、情報収集が可能であることを確認しました。組織内部のユーザーと比較すると対策が疎かになりやすいゲストユーザーが侵害されるだけで、攻撃者はAzure ADに関する多くの情報を入手することができます。紹介した対策を実施するとともに、ゲストユーザーであっても組織内部のユーザーと同様に多要素認証の設定、監視、定期的な棚卸等の一般的な対策を実施することを推奨します。
Azure ADのゲストユーザーの権限を設定変更することで、紹介したゲストユーザーによる情報収集を防ぐことができます。しかし、権限の設定変更後であっても組織内部のユーザーが攻撃者に侵害された場合は、紹介した手法と同様の情報収集が可能である点にご注意ください。[9]
参考文献
[1] Azure Portal で Azure Active Directory B2B コラボレーション ユーザーを追加する
https://learn.microsoft.com/ja-jp/azure/active-directory/external-identities/add-users-administrator#add-guest-users-to-the-directory
[2] Gerenios/AADInternals
https://github.com/Gerenios/AADInternals
[3] Quest for guest access: Azure Active Directory reconnaissance as a guest
https://aadinternals.com/post/quest_for_guest/
[4] Azure Active Directory で動的グループを作成または更新する
https://learn.microsoft.com/ja-jp/azure/active-directory/enterprise-users/groups-create-rule
[5] Azure AD の組み込みロール
https://learn.microsoft.com/ja-jp/azure/active-directory/roles/permissions-reference#global-administrator
[6] Azure AD の UserPrincipalName の設定
https://learn.microsoft.com/ja-jp/azure/active-directory/hybrid/plan-connect-userprincipalname#upn-in-azure-ad
[7] 多要素認証のバイパスが可能な攻撃「Pass-The-Cookie」について
https://group.nec/jp/ja/solutions/cybersecurity/blog/221007
[8] Azure Active Directory の既定のユーザー アクセス許可とは
https://learn.microsoft.com/ja-jp/azure/active-directory/fundamentals/users-default-permissions#compare-member-and-guest-default-permissions
[9] Wolf in sheep's clothing: Azure Active Directory reconnaissance as an insider
https://aadinternals.com/post/insider/
執筆者プロフィール
桐下 拓也(きりした たくや)
セキュリティ技術センター リスクハンティング・アナリシスグループ
大規模国際イベントのサイバーセキュリティ対応業務を経て、現在はインシデント対応、ペネトレーションテスト、NEC CSIRTなどの業務に従事。
2×SANSメダル、3×Splunk Boss of the SOCトロフィー、Taniumメダルを保持 CISSP、GCFAを保持