
Outil C# pour énumérer et exploiter les mauvaises configurations dans les services de certificats Active Directory (AD CS), permettant l'abus de modèles de certificats, l'escalade de privilèges et la persistance dans le domaine.
Certify est un outil C# permettant d'énumérer et d'exploiter des mauvaises configurations dans les services de certificats Active Directory (AD CS).
@harmj0y et @tifkin_ sont les auteurs principaux de Certify et de la recherche associée sur AD CS (blog et livre blanc).
Un aperçu des commandes et des détails d'utilisation complets se trouvent sur le wiki.
Certify a été présenté à Black Hat 2021 avec notre exposé intitulé "Certified Pre-Owned: Abusing Active Directory Certificate Services".
Consultez notre livre blanc pour des recommandations en matière de prévention et de détection.
Nous n'avons pas l'intention de publier de binaires pour Certify, vous devrez donc le compiler vous-même :)
Certify a été compilé pour .NET 4.7.2 et est compatible avec Visual Studio 2022 Community Edition. Ouvrez simplement le fichier .sln du projet, choisissez "Release" et compilez.
Si vous souhaitez exécuter Certify en mémoire via un wrapper PowerShell, compilez d'abord Certify et encodez l'assembly résultant en base64 :
[Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\Temp\Certify.exe")) | Out-File -Encoding ASCII C:\Temp\Certify.txt
Certify peut ensuite être chargé dans un script PowerShell avec le code suivant (où "aa..." est remplacé par la chaîne de l'assembly Certify encodée en base64) :
$CertifyAssembly = [System.Reflection.Assembly]::Load([Convert]::FromBase64String("aa..."))
La méthode Main() et les arguments peuvent ensuite être invoqués comme suit :
[Certify.Program]::Main("enum-templates --filter-enabled --filter-vulnerable".Split())
En raison de la manière dont PSRemoting gère la sortie, nous devons rediriger stdout vers une chaîne et la renvoyer à la place. Heureusement, Certify dispose d'une fonction pour cela.
Si vous suivez les instructions de la section Note : Exécution de Certify via PowerShell pour créer un Certify.ps1, ajoutez quelque chose comme ce qui suit au script :
[Certify.Program]::MainString("enum-templates --filter-enabled --filter-vulnerable")
Vous devriez alors pouvoir exécuter Certify via PSRemoting avec quelque chose comme :
$s = New-PSSession dc.theshire.local
Invoke-Command -Session $s -FilePath C:\Temp\Certify.ps1
Alternativement, l'argument /outfile:C:\FILE.txt de Certify redirigera tous les flux de sortie vers le fichier spécifié.
Sur le sujet de la divulgation publique, nous avons imposé un auto-embargo sur la publication de nos outils offensifs (Certify ainsi que ForgeCert) pendant environ 45 jours après la publication de notre livre blanc, afin de donner aux organisations une chance de maîtriser les problèmes liés aux services de certificats Active Directory. Nous avons également publié à l'avance quelques règles Yara / IOCs pour les deux projets, ainsi que le projet PowerShell défensif PSPKIAudit avec le livre blanc. Cependant, nous avons constaté que les organisations et les fournisseurs n'ont historiquement souvent pas corrigé les problèmes ou mis en place des détections pour les attaques "théoriques" tant que quelqu'un n'a pas prouvé qu'une attaque était possible avec une preuve de concept.
Certify a utilisé quelques ressources trouvées en ligne comme référence et inspiration :
Le travail sur AD CS a été construit sur les travaux de nombreuses autres personnes. Le livre blanc contient un traitement complet, mais pour résumer :