
Forje certificados para autenticação no Active Directory usando chaves privadas roubadas de Autoridade Certificadora, permitindo acesso persistente ao domínio com arquivos .pfx forjados.
O ForgeCert usa a API BouncyCastle C# e um certificado de Autoridade Certificadora (CA) roubado + chave privada para forjar certificados para usuários arbitrários capazes de autenticação no Active Directory.
Este ataque é codificado como DPERSIST1 em nosso whitepaper "Certified Pre-Owned". Esta base de código foi lançada ~45 dias após a publicação do whitepaper.
@tifkin_ é o autor principal do ForgeCert.
@tifkin_ e @harmj0y são os principais autores da pesquisa associada ao Serviço de Certificados do Active Directory (blog e whitepaper).
Conforme descrito nas seções Background e Forging Certificates with Stolen CA Certificates - DPERSIST1 do nosso whitepaper, a chave privada do certificado da CA de uma Autoridade Certificadora é protegida no servidor CA via DPAPI ou hardware (HSM/TPM). Além disso, o certificado (sem a chave privada) é publicado no objeto de floresta NTAuthCertificates, que define certificados de CA que permitem autenticação no AD. Em conjunto, uma CA cujo certificado está presente em NTAuthCertificates usa sua chave privada para assinar solicitações de assinatura de certificado (CSRs) de clientes solicitantes. Este gráfico resume o processo:

A segurança da chave privada da CA é primordial. Como mencionado, se a chave privada não for protegida por uma solução de hardware como um TPM ou um HSM, a chave será criptografada com a API de Proteção de Dados (DPAPI) e armazenada em disco no servidor CA. Se um invasor conseguir comprometer um servidor CA, ele pode extrair a chave privada de qualquer certificado de CA não protegido por hardware usando o Mimikatz do @gentilkiwi ou o projeto SharpDPAPI da GhostPack. O THEFT3 no whitepaper descreve esse processo para certificados de máquina.
Como o único material de chave usado para assinar certificados emitidos é a chave privada da CA, se um invasor roubar tal chave (para um certificado em NTAuthCertificates), ele pode forjar certificados capazes de autenticação de domínio. Esses certificados forjados podem ser para qualquer principal no domínio (embora a conta precise estar "ativa" para que a autenticação seja possível, então contas como krbtgt não funcionarão) e os certificados serão válidos enquanto o certificado da CA for válido (geralmente 5 anos por padrão, mas pode ser configurado para ser mais longo).
Além disso, como esses certificados não são produto do processo normal de emissão, a CA não tem conhecimento de que foram criados. Assim, os certificados não podem ser revogados.
Nota: a chave privada de QUALQUER certificado de CA em NTAuthCertificates (CA raiz ou subordinada) pode ser usada para forjar certificados capazes de autenticação na floresta. Se o certificado/chave for de uma CA subordinada, uma CRL legítima para verificação da cadeia de certificados deve ser fornecida.
O ForgeCert usa o X509V3CertificateGenerator do BouncyCastle para realizar as falsificações.
C:\Temp>ForgeCert.exe
ForgeCert 1.0.0.0
Copyright c 2021
ERROR(S):
Required option 'CaCertPath' is missing.
Required option 'SubjectAltName' is missing.
Required option 'NewCertPath' is missing.
Required option 'NewCertPassword' is missing.
--CaCertPath Required. CA private key as a .pfx or .p12 file
--CaCertPassword Password to the CA private key file
--Subject (Default: CN=User) Subject name in the certificate
--SubjectAltName Required. UPN of the user to authenticate as
--NewCertPath Required. Path where to save the new .pfx certificate
--NewCertPassword Required. Password to the .pfx file
--CRL ldap path to a CRL for the forged certificate
--help Display this help screen.
--version Display version information.
Nota: para um passo a passo completo sobre como roubar uma chave privada de CA e forjar certificados de autenticação, veja DPERSIST1 no whitepaper.
Contexto:
ca.pfx, criptografado com a senha Password123![email protected].localadmin.pfx, criptografado com a senha NewPassword123!C:\Tools\ForgeCert>ForgeCert.exe --CaCertPath ca.pfx --CaCertPassword "Password123!" --Subject "CN=User" --SubjectAltName "[email protected]" --NewCertPath localadmin.pfx --NewCertPassword "NewPassword123!"
CA Certificate Information:
Subject: CN=theshire-DC-CA, DC=theshire, DC=local
Issuer: CN=theshire-DC-CA, DC=theshire, DC=local
Start Date: 1/4/2021 10:48:02 AM
End Date: 1/4/2026 10:58:02 AM
Thumbprint: 187D81530E1ADBB6B8B9B961EAADC1F597E6D6A2
Serial: 14BFC25F2B6EEDA94404D5A5B0F33E21
Forged Certificate Information:
Subject: CN=User
SubjectAltName: [email protected]
Issuer: CN=theshire-DC-CA, DC=theshire, DC=local
Start Date: 7/26/2021 3:38:45 PM
End Date: 7/26/2022 3:38:45 PM
Thumbprint: C5789A24E91A40819EFF7CFD77150595F8B9878D
Serial: 3627A48F90F6869C3215FF05BC3B2E42
Done. Saved forged certificate to localadmin.pfx with the password 'NewPassword123!'
Essa falsificação pode ser feita em um sistema controlado pelo invasor, e o certificado resultante pode ser usado com o Rubeus para solicitar um TGT (e/ou recuperar o NTLM do usuário ;)
O TypeRefHash da base de código atual do ForgeCert é b26b451ff2c947ae5904f962e56facbb45269995fbb813070386472f307cfcf0.
O GUID da TypeLib do ForgeCert é bd346689-8ee6-40b3-858b-4ed94f08d40a. Isso está refletido nas regras Yara atualmente neste repositório.
Veja PREVENT1, DETECT3 e DETECT5 em nosso whitepaper para orientações de prevenção e detecção.
Fabian Bader publicou um excelente artigo sobre como mitigar muitos usos de "Golden Certificates" através de ajustes no OCSP da Microsoft. Observe, porém, que na seção Final Thoughts ele menciona This method is not bulletproof at all. Since the attacker is in charge of the certificate creation process, she could just change the serial number to a valid one. Isso foi implementado em seu PR, embora lembre-se que, por padrão, o número de série será aleatório, o que significa que a prevenção por OSCP deve funcionar em muitos casos e vale a pena ser implementada, em nossa opinião.
Acreditamos que pode haver oportunidades para construir regras Yara/outras regras de detecção para tipos de certificados forjados que este projeto produz - se algum pesquisador defensivo encontrar uma boa maneira de assinar esses arquivos, por favor, nos avise e atualizaremos as regras Yara/orientações defensivas aqui.
Há um paralelo claro entre "Golden Tickets" (TGTs forjados) e esses "Golden Certificates" (certificados AD CS forjados). Tanto o hash do krbtgt quanto a chave privada da CA são materiais criptográficos críticos para a segurança de um ambiente Active Directory, e ambos podem ser usados para forjar autenticadores para usuários arbitrários. No entanto, enquanto o hash do krbtgt pode ser recuperado remotamente via DCSync, uma chave privada de CA deve (pelo menos até onde sabemos) ser recuperada através de execução de código na própria máquina da CA. Enquanto um hash do krbtgt pode ser rotacionado relativamente com facilidade, rotacionar uma chave privada de CA é significativamente mais difícil.
Sobre o tema da divulgação pública, nós auto-impusemos um embargo ao lançamento de nossas ferramentas ofensivas (ForgeCert e também Certify) por aproximadamente 45 dias após a publicação do nosso whitepaper, a fim de dar às organizações uma chance de lidar com as questões relacionadas ao Serviço de Certificados do Active Directory. No entanto, temos observado que organizações e fornecedores historicamente muitas vezes não corrigem problemas ou criam detecções para ataques "teóricos" até que alguém prove que algo é possível com uma prova de conceito.
Isso se reflete na reação de algumas pessoas à pesquisa de isto É EsTúPIdO, é ClAro Que VoCê Pode ForJAr CeRtIfIcAdOs CoM A cHaVe PrIvAdA Da Ca. Ao que afirmamos, sim, muitas coisas são possíveis, mas PoC||GTFO