AD CS Certificate Theft
Reading time: 6 minutes
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Este é um pequeno resumo dos capítulos sobre Roubo da pesquisa incrível de https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf
O que posso fazer com um certificado
Antes de verificar como roubar os certificados, aqui você tem algumas informações sobre como descobrir para que o certificado é útil:
# Powershell
$CertPath = "C:\path\to\cert.pfx"
$CertPass = "P@ssw0rd"
$Cert = New-Object
System.Security.Cryptography.X509Certificates.X509Certificate2 @($CertPath, $CertPass)
$Cert.EnhancedKeyUsageList
# cmd
certutil.exe -dump -v cert.pfx
Exportando Certificados Usando as APIs Crypto – THEFT1
Em uma sessão de desktop interativa, extrair um certificado de usuário ou máquina, junto com a chave privada, pode ser feito facilmente, particularmente se a chave privada for exportável. Isso pode ser alcançado navegando até o certificado em certmgr.msc
, clicando com o botão direito sobre ele e selecionando All Tasks → Export
para gerar um arquivo .pfx protegido por senha.
Para uma abordagem programática, ferramentas como o cmdlet PowerShell ExportPfxCertificate
ou projetos como TheWover’s CertStealer C# project estão disponíveis. Estas utilizam a Microsoft CryptoAPI (CAPI) ou a Cryptography API: Next Generation (CNG) para interagir com o armazenamento de certificados. Essas APIs fornecem uma gama de serviços criptográficos, incluindo aqueles necessários para armazenamento e autenticação de certificados.
No entanto, se uma chave privada for definida como não exportável, tanto CAPI quanto CNG normalmente bloquearão a extração de tais certificados. Para contornar essa restrição, ferramentas como Mimikatz podem ser empregadas. Mimikatz oferece comandos crypto::capi
e crypto::cng
para corrigir as respectivas APIs, permitindo a exportação de chaves privadas. Especificamente, crypto::capi
corrige o CAPI dentro do processo atual, enquanto crypto::cng
mira a memória de lsass.exe para correção.
Roubo de Certificado de Usuário via DPAPI – THEFT2
Mais informações sobre DPAPI em:
No Windows, as chaves privadas de certificados são protegidas pelo DPAPI. É crucial reconhecer que os locais de armazenamento para chaves privadas de usuário e máquina são distintos, e as estruturas de arquivos variam dependendo da API criptográfica utilizada pelo sistema operacional. SharpDPAPI é uma ferramenta que pode navegar automaticamente por essas diferenças ao descriptografar os blobs do DPAPI.
Certificados de usuário são predominantemente armazenados no registro sob HKEY_CURRENT_USER\SOFTWARE\Microsoft\SystemCertificates
, mas alguns também podem ser encontrados no diretório %APPDATA%\Microsoft\SystemCertificates\My\Certificates
. As correspondentes chaves privadas para esses certificados são tipicamente armazenadas em %APPDATA%\Microsoft\Crypto\RSA\User SID\
para chaves CAPI e %APPDATA%\Microsoft\Crypto\Keys\
para chaves CNG.
Para extrair um certificado e sua chave privada associada, o processo envolve:
- Selecionar o certificado alvo do armazenamento do usuário e recuperar seu nome de armazenamento de chave.
- Localizar a masterkey DPAPI necessária para descriptografar a chave privada correspondente.
- Descriptografar a chave privada utilizando a masterkey DPAPI em texto simples.
Para adquirir a masterkey DPAPI em texto simples, as seguintes abordagens podem ser usadas:
# With mimikatz, when running in the user's context
dpapi::masterkey /in:"C:\PATH\TO\KEY" /rpc
# With mimikatz, if the user's password is known
dpapi::masterkey /in:"C:\PATH\TO\KEY" /sid:accountSid /password:PASS
Para simplificar a descriptografia de arquivos masterkey e arquivos de chave privada, o comando certificates
do SharpDPAPI é benéfico. Ele aceita /pvk
, /mkfile
, /password
ou {GUID}:KEY
como argumentos para descriptografar as chaves privadas e os certificados vinculados, gerando posteriormente um arquivo .pem
.
# Decrypting using SharpDPAPI
SharpDPAPI.exe certificates /mkfile:C:\temp\mkeys.txt
# Converting .pem to .pfx
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
Roubo de Certificados de Máquina via DPAPI – THEFT3
Os certificados de máquina armazenados pelo Windows no registro em HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates
e as chaves privadas associadas localizadas em %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys
(para CAPI) e %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys
(para CNG) são criptografados usando as chaves mest
# Example command to search for certificate files in PowerShell
Get-ChildItem -Recurse -Path C:\Users\ -Include *.pfx, *.p12, *.pkcs12, *.pem, *.key, *.crt, *.cer, *.csr, *.jks, *.keystore, *.keys
# Example command to use pfx2john.py for extracting a hash from a PKCS#12 file
pfx2john.py certificate.pfx > hash.txt
# Command to crack the hash with JohnTheRipper
john --wordlist=passwords.txt hash.txt
NTLM Credential Theft via PKINIT – THEFT5
O conteúdo dado explica um método para roubo de credenciais NTLM via PKINIT, especificamente através do método de roubo rotulado como THEFT5. Aqui está uma reexplicação na voz passiva, com o conteúdo anonimizado e resumido onde aplicável:
Para suportar a autenticação NTLM [MS-NLMP] para aplicações que não facilitam a autenticação Kerberos, o KDC é projetado para retornar a função unidirecional (OWF) NTLM do usuário dentro do certificado de atributo de privilégio (PAC), especificamente no buffer PAC_CREDENTIAL_INFO
, quando o PKCA é utilizado. Consequentemente, se uma conta autenticar e garantir um Ticket-Granting Ticket (TGT) via PKINIT, um mecanismo é inerentemente fornecido que permite ao host atual extrair o hash NTLM do TGT para manter os protocolos de autenticação legados. Este processo envolve a descriptografia da estrutura PAC_CREDENTIAL_DATA
, que é essencialmente uma representação NDR serializada do texto plano NTLM.
A utilidade Kekeo, acessível em https://github.com/gentilkiwi/kekeo, é mencionada como capaz de solicitar um TGT contendo esses dados específicos, facilitando assim a recuperação do NTLM do usuário. O comando utilizado para esse propósito é o seguinte:
tgt::pac /caname:generic-DC-CA /subject:genericUser /castore:current_user /domain:domain.local
Além disso, observa-se que o Kekeo pode processar certificados protegidos por smartcard, desde que o pin possa ser recuperado, com referência a https://github.com/CCob/PinSwipe. A mesma capacidade é indicada como suportada pelo Rubeus, disponível em https://github.com/GhostPack/Rubeus.
Esta explicação encapsula o processo e as ferramentas envolvidas na roubo de credenciais NTLM via PKINIT, focando na recuperação de hashes NTLM através do TGT obtido usando PKINIT, e as utilidades que facilitam esse processo.
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.