11 KiB
Roubo de Certificados do AD CS
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você quer ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o material oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção de NFTs exclusivos
- Participe do grupo 💬 Discord ou do grupo telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do HackTricks e HackTricks Cloud.
O que posso fazer com um certificado
Antes de verificar como roubar os certificados, aqui estão 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 Crypto APIs – THEFT1
A maneira mais fácil de extrair um certificado de usuário ou máquina e chave privada é através de uma sessão de desktop interativa. Se a chave privada for exportável, basta clicar com o botão direito do mouse no certificado em certmgr.msc
, e ir para Tarefas → Exportar
... para exportar um arquivo .pfx protegido por senha.
Também é possível realizar isso programaticamente. Exemplos incluem o cmdlet ExportPfxCertificate
do PowerShell ou o projeto CertStealer C# de TheWover.
Por baixo, esses métodos usam a Microsoft CryptoAPI (CAPI) ou a mais moderna Cryptography API: Next Generation (CNG) para interagir com o armazenamento de certificados. Essas APIs realizam vários serviços criptográficos necessários para o armazenamento e autenticação de certificados (entre outros usos).
Se a chave privada for não exportável, CAPI e CNG não permitirão a extração de certificados não exportáveis. Os comandos crypto::capi
e crypto::cng
do Mimikatz podem modificar o CAPI e o CNG para permitir a exportação de chaves privadas. crypto::capi
modifica o CAPI no processo atual, enquanto crypto::cng
requer modificação na memória do lsass.exe.
Roubo de Certificado de Usuário via DPAPI – THEFT2
Mais informações sobre DPAPI em:
{% content-ref url="../../windows-local-privilege-escalation/dpapi-extracting-passwords.md" %} dpapi-extracting-passwords.md {% endcontent-ref %}
O Windows armazena chaves privadas de certificados usando DPAPI. A Microsoft separa os locais de armazenamento para chaves privadas de usuário e máquina. Ao descriptografar manualmente os blobs DPAPI criptografados, um desenvolvedor precisa entender qual API de criptografia o sistema operacional usou, pois a estrutura do arquivo de chave privada difere entre as duas APIs. Quando se usa SharpDPAPI, ele automaticamente leva em conta essas diferenças de formato de arquivo.
O Windows armazena mais comumente certificados de usuários no registro na chave HKEY_CURRENT_USER\SOFTWARE\Microsoft\SystemCertificates
, embora alguns certificados pessoais para usuários também sejam armazenados em %APPDATA%\Microsoft\SystemCertificates\My\Certificates
. Os locais associados à chave privada do usuário estão principalmente em %APPDATA%\Microsoft\Crypto\RSA\User SID\
para chaves CAPI e %APPDATA%\Microsoft\Crypto\Keys\
para chaves CNG.
Para obter um certificado e sua chave privada associada, é necessário:
- Identificar qual certificado se deseja roubar da loja de certificados do usuário e extrair o nome do armazenamento de chaves.
- Encontrar a chave-mestra DPAPI necessária para descriptografar a chave privada associada.
- Obter a chave-mestra DPAPI em texto claro e usá-la para descriptografar a chave privada.
Para obter a chave-mestra DPAPI em texto claro:
# With mimikatz
## Running in a process in the users context
dpapi::masterkey /in:"C:\PATH\TO\KEY" /rpc
# with mimikatz
## knowing the users password
dpapi::masterkey /in:"C:\PATH\TO\KEY" /sid:accountSid /password:PASS
Para simplificar a descriptografia do arquivo masterkey e do arquivo de chave privada, o comando certificates
do SharpDPAPI pode ser usado com os argumentos /pvk
, /mkfile
, /password
, ou {GUID}:KEY
para descriptografar as chaves privadas e os certificados associados, gerando um arquivo de texto .pem
.
SharpDPAPI.exe certificates /mkfile:C:\temp\mkeys.txt
# Transfor .pem to .pfx
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
Roubo de Certificado de Máquina via DPAPI – THEFT3
O Windows armazena certificados de máquina na chave de registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates
e armazena chaves privadas em vários locais diferentes, dependendo da conta.
Embora o SharpDPAPI pesquise todos esses locais, os resultados mais interessantes tendem a vir de %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys
(CAPI) e %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys
(CNG). Essas chaves privadas estão associadas ao repositório de certificados da máquina e o Windows as criptografa com as chaves mestras DPAPI da máquina.
Não é possível descriptografar essas chaves usando a chave de backup DPAPI do domínio, mas sim deve-se usar o segredo DPAPI_SYSTEM LSA no sistema, que é acessível apenas pelo usuário SYSTEM.
Você pode fazer isso manualmente com o comando lsadump::secrets
do Mimikatz e depois usar a chave extraída para descriptografar as masterkeys da máquina.
Você também pode aplicar patch no CAPI/CNG como antes e usar o comando crypto::certificates /export /systemstore:LOCAL_MACHINE
do Mimikatz.
O comando certificates do SharpDPAPI com a flag /machine
(quando elevado) irá automaticamente elevar para SYSTEM, despejar o segredo DPAPI_SYSTEM LSA, usar isso para descriptografar e encontrar masterkeys DPAPI da máquina, e usar os textos em claro das chaves como uma tabela de consulta para descriptografar quaisquer chaves privadas de certificados da máquina.
Encontrando Arquivos de Certificado – THEFT4
Às vezes, os certificados estão apenas no sistema de arquivos, como em compartilhamentos de arquivos ou na pasta Downloads.
Os tipos mais comuns de arquivos de certificado focados no Windows que vimos são .pfx
e .p12
, com .pkcs12
e .pem
aparecendo às vezes, mas menos frequentemente.
Outras extensões de arquivo relacionadas a certificados interessantes são: .key
(chave privada), .crt/.cer
(apenas certificado), .csr
(Pedido de Assinatura de Certificado, não contém certificados ou chaves privadas), .jks/.keystore/.keys
(Java Keystore. Pode conter certificados + chaves privadas usadas por aplicações Java).
Para encontrar esses arquivos, basta procurar essas extensões usando o PowerShell ou o cmd.
Se você encontrar um arquivo de certificado PKCS#12 e ele estiver protegido por senha, você pode extrair um hash usando pfx2john.py e quebrar a senha usando o JohnTheRipper.
Roubo de Credenciais NTLM via PKINIT – THEFT5
Para suportar a autenticação NTLM [MS-NLMP] para aplicações que se conectam a serviços de rede que não suportam autenticação Kerberos, quando o PKCA é usado, o KDC retorna a função unidirecional (OWF) do NTLM do usuário no certificado de atributo de privilégio (PAC)
PAC_CREDENTIAL_INFO
buffer
Assim, se a conta se autenticar e obter um TGT através do PKINIT, há um "failsafe" embutido que permite ao host atual obter nosso hash NTLM do TGT para suportar a autenticação legada. Isso envolve descriptografar uma estrutura PAC_CREDENTIAL_DATA
que é uma representação serializada em Representação de Dados de Rede (NDR) do NTLM em texto claro.
Kekeo pode ser usado para solicitar um TGT com essas informações e recuperar o NTML do usuário.
tgt::pac /caname:thename-DC-CA /subject:harmj0y /castore:current_user /domain:domain.local
A implementação do Kekeo também funcionará com certificados protegidos por smartcard que estejam conectados no momento, se você conseguir recuperar o pin. Também será suportado no Rubeus.
Referências
- Todas as informações foram retiradas de https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você quiser ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o material oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção de NFTs exclusivos
- Junte-se ao grupo 💬 Discord ou ao grupo telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do HackTricks e HackTricks Cloud.