
Strumento C# per enumerare e sfruttare configurazioni errate nei Servizi Certificati di Active Directory (AD CS), consentendo l'abuso di modelli di certificato, l'escalation dei privilegi e la persistenza nel dominio.
Certify è uno strumento C# per enumerare e abusare delle configurazioni errate nei Servizi Certificati di Active Directory (AD CS).
@harmj0y e @tifkin_ sono gli autori principali di Certify e della ricerca associata su AD CS (blog e whitepaper).
Una panoramica dei comandi e i dettagli completi sull'utilizzo si trovano nella wiki.
Certify è stato rilasciato al Black Hat 2021 con il nostro talk "Certified Pre-Owned: Abusing Active Directory Certificate Services".
Consulta il nostro whitepaper per linee guida su prevenzione e rilevamento.
Non abbiamo intenzione di rilasciare binari per Certify, quindi dovrai compilare da te :)
Certify è stato sviluppato per .NET 4.7.2 ed è compatibile con Visual Studio 2022 Community Edition. Basta aprire il file .sln del progetto, selezionare "Release" e compilare.
Se vuoi eseguire Certify in memoria tramite un wrapper PowerShell, prima compila Certify e codifica in base64 l'assembly risultante:
[Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\Temp\Certify.exe")) | Out-File -Encoding ASCII C:\Temp\Certify.txt
Certify può quindi essere caricato in uno script PowerShell con il seguente codice (dove "aa..." viene sostituito con la stringa base64 dell'assembly di Certify):
$CertifyAssembly = [System.Reflection.Assembly]::Load([Convert]::FromBase64String("aa..."))
Il metodo Main() e qualsiasi argomento possono quindi essere invocati come segue:
[Certify.Program]::Main("enum-templates --filter-enabled --filter-vulnerable".Split())
A causa del modo in cui PSRemoting gestisce l'output, dobbiamo reindirizzare stdout in una stringa e restituire quella invece. Fortunatamente, Certify ha una funzione che aiuta in questo.
Se segui le istruzioni in Nota a margine: Esecuzione di Certify tramite PowerShell per creare un Certify.ps1, aggiungi qualcosa come il seguente allo script:
[Certify.Program]::MainString("enum-templates --filter-enabled --filter-vulnerable")
Dovresti quindi essere in grado di eseguire Certify tramite PSRemoting con qualcosa come:
$s = New-PSSession dc.theshire.local
Invoke-Command -Session $s -FilePath C:\Temp\Certify.ps1
In alternativa, l'argomento /outfile:C:\FILE.txt di Certify reindirizzerà tutti i flussi di output al file specificato.
Sul tema della divulgazione pubblica, abbiamo auto-imposto un embargo sulla pubblicazione dei nostri strumenti offensivi (Certify e ForgeCert) per circa 45 giorni dopo la pubblicazione del nostro whitepaper, per dare alle organizzazioni la possibilità di comprendere i problemi relativi ai Servizi Certificati di Active Directory. Abbiamo anche pubblicato anticipatamente alcune Yara rule/IOC per entrambi i progetti e rilasciato il progetto PowerShell PSPKIAudit incentrato sulla difesa insieme al whitepaper. Tuttavia, abbiamo riscontrato che organizzazioni e fornitori spesso non hanno risolto i problemi o creato rilevamenti per attacchi "teorici" finché qualcuno non dimostra che qualcosa è possibile con un proof of concept.
Certify ha utilizzato alcune risorse trovate online come riferimento e ispirazione:
Il lavoro su AD CS è stato costruito sul lavoro di molti altri. Il whitepaper fornisce un trattamento completo, ma per riassumere: