
Herramienta en C# para enumerar y explotar configuraciones incorrectas en Servicios de Certificados de Active Directory (AD CS), permitiendo el abuso de plantillas de certificados, escalada de privilegios y persistencia en el dominio.
Certify es una herramienta en C# para enumerar y abusar de configuraciones incorrectas en los Servicios de Certificados de Active Directory (AD CS).
@harmj0y y @tifkin_ son los autores principales de Certify y de la investigación asociada sobre AD CS (blog y whitepaper).
Se puede encontrar una visión general de comandos y detalles completos de uso en la wiki.
Certify fue lanzado en Black Hat 2021 con nuestra charla "Certified Pre-Owned: Abusing Active Directory Certificate Services".
Consulte nuestro whitepaper para obtener orientación sobre prevención y detección.
No tenemos planes de lanzar binarios de Certify, así que tendrás que compilarlo tú mismo :)
Certify se ha compilado para .NET 4.7.2 y es compatible con Visual Studio 2022 Community Edition. Simplemente abre el archivo .sln del proyecto, elige "Release" y compila.
Si deseas ejecutar Certify en memoria a través de un envoltorio de PowerShell, primero compila Certify y codifica en base64 el ensamblado resultante:
[Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\Temp\Certify.exe")) | Out-File -Encoding ASCII C:\Temp\Certify.txt
Certify puede entonces cargarse en un script de PowerShell de la siguiente manera (donde "aa..." se reemplaza con la cadena del ensamblado de Certify codificada en base64):
$CertifyAssembly = [System.Reflection.Assembly]::Load([Convert]::FromBase64String("aa..."))
El método Main() y cualquier argumento pueden entonces invocarse de la siguiente manera:
[Certify.Program]::Main("enum-templates --filter-enabled --filter-vulnerable".Split())
Debido a la forma en que PSRemoting maneja la salida, necesitamos redirigir stdout a una cadena y devolver eso en su lugar. Afortunadamente, Certify tiene una función para ayudar con eso.
Si sigues las instrucciones en Nota al margen: Ejecutar Certify a través de PowerShell para crear un Certify.ps1, agrega algo como lo siguiente al script:
[Certify.Program]::MainString("enum-templates --filter-enabled --filter-vulnerable")
Entonces deberías poder ejecutar Certify mediante PSRemoting con algo como lo siguiente:
$s = New-PSSession dc.theshire.local
Invoke-Command -Session $s -FilePath C:\Temp\Certify.ps1
Alternativamente, el argumento /outfile:C:\FILE.txt de Certify redirigirá todos los flujos de salida al archivo especificado.
En cuanto a la divulgación pública, auto-embargamos el lanzamiento de nuestras herramientas ofensivas (Certify así como ForgeCert) durante aproximadamente 45 días después de publicar nuestro whitepaper para dar a las organizaciones la oportunidad de comprender los problemas relacionados con los Servicios de Certificados de Active Directory. También lanzamos preventivamente algunas reglas Yara/IOCs para ambos proyectos y publicamos el proyecto PowerShell centrado en defensa PSPKIAudit junto con el whitepaper. Sin embargo, hemos encontrado que las organizaciones y los proveedores a menudo no han solucionado problemas ni creado detecciones para ataques "teóricos" hasta que alguien demuestra que algo es posible con una prueba de concepto.
Certify utilizó algunos recursos encontrados en línea como referencia e inspiración:
El trabajo sobre AD CS se basó en el trabajo de varios otros. El whitepaper tiene un tratamiento completo, pero para resumir: