
Ferramenta C# para enumeração e exploração de configurações incorretas no Active Directory Certificate Services (AD CS), permitindo abuso de modelos de certificado, escalonamento de privilégios e persistência no domínio.
O Certify é uma ferramenta em C# para enumerar e abusar de configurações incorretas no Active Directory Certificate Services (AD CS).
@harmj0y e @tifkin_ são os autores principais do Certify e da pesquisa associada sobre AD CS (blog e whitepaper).
Uma visão geral dos comandos e detalhes abrangentes de uso podem ser encontrados na wiki.
O Certify foi lançado na Black Hat 2021 com nossa palestra "Certified Pre-Owned: Abusing Active Directory Certificate Services".
Consulte nosso whitepaper para orientações sobre prevenção e detecção.
Não planejamos lançar binários para o Certify, então você terá que compilar você mesmo :)
Certify foi construído para .NET 4.7.2 e é compatível com Visual Studio 2022 Community Edition. Basta abrir o arquivo .sln do projeto, escolher "Release" e compilar.
Se você quiser executar o Certify na memória através de um wrapper PowerShell, primeiro compile o Certify e codifique em base64 o assembly resultante:
[Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\Temp\Certify.exe")) | Out-File -Encoding ASCII C:\Temp\Certify.txt
O Certify pode então ser carregado em um script PowerShell com o seguinte (onde "aa..." é substituído pela string do assembly Certify codificada em base64):
$CertifyAssembly = [System.Reflection.Assembly]::Load([Convert]::FromBase64String("aa..."))
O método Main() e quaisquer argumentos podem então ser invocados da seguinte forma:
[Certify.Program]::Main("enum-templates --filter-enabled --filter-vulnerable".Split())
Devido à forma como o PSRemoting lida com a saída, precisamos redirecionar o stdout para uma string e retorná-la. Felizmente, o Certify possui uma função para ajudar com isso.
Se você seguir as instruções em Nota: Executando o Certify via PowerShell para criar um Certify.ps1, anexe algo como o seguinte ao script:
[Certify.Program]::MainString("enum-templates --filter-enabled --filter-vulnerable")
Você deve então conseguir executar o Certify via PSRemoting com algo como o seguinte:
$s = New-PSSession dc.theshire.local
Invoke-Command -Session $s -FilePath C:\Temp\Certify.ps1
Alternativamente, o argumento /outfile:C:\FILE.txt do Certify redirecionará todos os fluxos de saída para o arquivo especificado.
Sobre o tema da divulgação pública, nós auto-embargamos o lançamento de nossas ferramentas ofensivas (Certify e ForgeCert) 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 Active Directory Certificate Services. Também lançamos preventivamente algumas regras Yara/IOCs para ambos os projetos e o projeto PowerShell PSPKIAudit focado em defesa junto com o whitepaper. No entanto, descobrimos que organizações e fornecedores historicamente 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.
O Certify usou alguns recursos encontrados online como referência e inspiração:
O trabalho sobre AD CS foi construído sobre o trabalho de várias outras pessoas. O whitepaper fornece um tratamento completo, mas para resumir: