hacktricks/windows-hardening/active-directory-methodology/ad-certificates.md

13 KiB

Certificats AD

Informations de base

Parties d'un certificat

  • Sujet - Le propriétaire du certificat.
  • Clé publique - Associe le sujet à une clé privée stockée séparément.
  • Dates de début et de fin - Définissent la durée de validité du certificat.
  • Numéro de série - Un identifiant pour le certificat attribué par l'AC.
  • Émetteur - Identifie qui a émis le certificat (généralement une AC).
  • SubjectAlternativeName - Définit un ou plusieurs noms alternatifs que le sujet peut utiliser. (Voir ci-dessous)
  • Contraintes de base - Identifie si le certificat est une AC ou une entité finale, et s'il y a des contraintes lors de l'utilisation du certificat.
  • Utilisations étendues des clés (EKU) - Identificateurs d'objet (OID) qui décrivent comment le certificat sera utilisé. Également connu sous le nom d'Enhanced Key Usage dans le jargon de Microsoft. Les EKU courants incluent :
    • Signature de code (OID 1.3.6.1.5.5.7.3.3) - Le certificat est destiné à la signature de code exécutable.
    • Système de fichiers chiffré (OID 1.3.6.1.4.1.311.10.3.4) - Le certificat est destiné au chiffrement des systèmes de fichiers.
    • Courrier électronique sécurisé (1.3.6.1.5.5.7.3.4) - Le certificat est destiné au chiffrement des e-mails.
    • Authentification client (OID 1.3.6.1.5.5.7.3.2) - Le certificat est destiné à l'authentification auprès d'un autre serveur (par exemple, à AD).
    • Connexion par carte à puce (OID 1.3.6.1.4.1.311.20.2.2) - Le certificat est destiné à être utilisé dans l'authentification par carte à puce.
    • Authentification du serveur (OID 1.3.6.1.5.5.7.3.1) - Le certificat est destiné à l'identification des serveurs (par exemple, les certificats HTTPS).
  • Algorithme de signature - Spécifie l'algorithme utilisé pour signer le certificat.
  • Signature - La signature du corps des certificats effectuée à l'aide de la clé privée de l'émetteur (par exemple, d'une AC).

Noms alternatifs de sujet

Un nom alternatif de sujet (SAN) est une extension X.509v3. Il permet de lier des identités supplémentaires à un certificat. Par exemple, si un serveur Web héberge du contenu pour plusieurs domaines, chaque domaine applicable pourrait être inclus dans le SAN de sorte que le serveur Web n'ait besoin que d'un seul certificat HTTPS.

Par défaut, lors de l'authentification basée sur des certificats, AD mappe les certificats sur les comptes d'utilisateurs en fonction d'un UPN spécifié dans le SAN. Si un attaquant peut spécifier un SAN arbitraire lors de la demande d'un certificat qui a une EKU permettant l'authentification client, et que l'AC crée et signe un certificat en utilisant le SAN fourni par l'attaquant, l'attaquant peut devenir n'importe quel utilisateur du domaine.

AC

AD CS définit les certificats AC que la forêt AD fait confiance à quatre emplacements sous le conteneur CN=Services,CN=Configuration,DC=<domain>,DC=<com>, chacun différant par leur objectif :

  • Le conteneur Certification Authorities définit les certificats AC racines de confiance. Ces AC sont au sommet de la hiérarchie de l'arbre PKI et sont la base de la confiance dans les environnements AD CS. Chaque AC est représentée en tant qu'objet AD à l'intérieur du conteneur où la classe d'objet est définie sur certificationAuthority et la propriété cACertificate contient les octets du certificat de l'AC. Windows propage ces certificats AC à la boutique de certificats des autorités de certification racines de confiance sur chaque machine Windows. Pour qu'AD considère un certificat comme fiable, la chaîne de confiance du certificat doit finalement se terminer par l'un des AC racines définis dans ce conteneur.
  • Le conteneur Enrolment Services définit chaque AC d'entreprise (c'est-à-dire les AC créées dans AD CS avec le rôle AC d'entreprise activé). Chaque AC d'entreprise a un objet AD avec les attributs suivants :
    • Un attribut objectClass à pKIEnrollmentService
    • Un attribut cACertificate contenant les octets du certificat de l'AC
    • Une propriété dNSHostName définit le nom DNS de l'AC
    • Un champ certificateTemplates définissant les modèles de certificat activés. Les modèles de certificat sont un

Droits d'inscription aux modèles de certificats

  • L'ACE accorde à un principal le droit étendu d'inscription de certificat. L'ACE brut accorde au principal le droit d'accès RIGHT_DS_CONTROL_ACCESS45 où le ObjectType est défini sur 0e10c968-78fb-11d2-90d4-00c04f79dc5547. Ce GUID correspond au droit étendu d'inscription de certificat.
  • L'ACE accorde à un principal le droit étendu d'inscription automatique de certificat. L'ACE brut accorde au principal le droit d'accès RIGHT_DS_CONTROL_ACCESS48 où le ObjectType est défini sur a05b8cc2-17bc-4802-a710-e7c15ab866a249. Ce GUID correspond au droit étendu d'inscription automatique de certificat.
  • Un ACE accorde à un principal tous les droits étendus. L'ACE brut active le droit d'accès RIGHT_DS_CONTROL_ACCESS où le ObjectType est défini sur 00000000-0000-0000-0000-000000000000. Ce GUID correspond à tous les droits étendus.
  • Un ACE accorde à un principal FullControl/GenericAll. L'ACE brut active le droit d'accès FullControl/GenericAll.

Droits d'inscription à l'entreprise CA

Le descripteur de sécurité configuré sur l'Enterprise CA définit ces droits et est visible dans la snap-in MMC de l'autorité de certification certsrv.msc en cliquant avec le bouton droit sur la CA → Propriétés → Sécurité.

Cela finit par définir la valeur de registre de sécurité dans la clé HKLM\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration<NOM DE LA CA> sur le serveur CA. Nous avons rencontré plusieurs serveurs AD CS qui accordent aux utilisateurs à faible privilège un accès distant à cette clé via le registre distant :

Les utilisateurs à faible privilège peuvent également énumérer cela via DCOM en utilisant la méthode GetCASecurity de l'interface COM ICertAdminD2. Cependant, les clients Windows normaux doivent installer les outils d'administration de serveur distant (RSAT) pour l'utiliser car l'interface COM et tous les objets COM qui l'implémentent ne sont pas présents sur Windows par défaut.

Exigences de délivrance

D'autres exigences pourraient être en place pour contrôler qui peut obtenir un certificat.

Approbation du gestionnaire

L'approbation du gestionnaire de certificat CA entraîne le paramétrage du modèle de certificat en définissant le bit CT_FLAG_PEND_ALL_REQUESTS (0x2) sur l'attribut msPKI-EnrollmentFlag de l'objet AD. Cela met toutes les demandes de certificat basées sur le modèle dans l'état en attente (visible dans la section "Demandes en attente" dans certsrv.msc), ce qui nécessite qu'un gestionnaire de certificat approuve ou refuse la demande avant que le certificat ne soit délivré :

Agents d'inscription, signatures autorisées et politiques d'application

Ce nombre de signatures autorisées et la politique d'application. Le premier contrôle le nombre de signatures requises dans le CSR pour que la CA l'accepte. Le second définit les OID EKU que le certificat de signature CSR doit avoir.

Une utilisation courante de ces paramètres est pour les agents d'inscription. Un agent d'inscription est un terme AD CS donné à une entité qui peut demander des certificats au nom d'un autre utilisateur. Pour ce faire, la CA doit émettre à l'agent d'inscription un certificat contenant au moins le EKU Agent de demande de certificat (OID 1.3.6.1.4.1.311.20.2.1). Une fois émis, l'agent d'inscription peut alors signer des CSR et demander des certificats au nom d'autres utilisateurs. La CA émettra le certificat de l'agent d'inscription en tant qu'autre utilisateur uniquement dans l'ensemble non exhaustif suivant de conditions (implémenté principalement dans le module de stratégie par défaut certpdef.dll) :

  • L'utilisateur Windows s'authentifiant auprès de la CA dispose des droits d'inscription au modèle de certificat cible.
  • Si la version du schéma du modèle de certificat est 1, la CA exigera que les certificats de signature aient l'OID Agent de demande de certificat avant de délivrer le certificat. La version du schéma du modèle est spécifiée dans la propriété msPKI-Template-Schema-Version de son objet AD.
  • Si la version du schéma du modèle de certificat est 2 :
    • Le modèle doit définir le paramètre "Ce nombre de signatures autorisées" et le nombre spécifié d'agents d'inscription doit signer le CSR (l'attribut AD mspkira-signature du modèle définit ce paramètre). En d'autres termes, ce paramètre spécifie combien d'agents d'inscription doivent signer un CSR avant que la CA ne considère même la délivrance d'un certificat.
    • La restriction de délivrance "Polit

Énumération AD CS

Tout comme pour la plupart des éléments d'AD, toutes les informations couvertes jusqu'à présent sont disponibles en interrogeant LDAP en tant qu'utilisateur authentifié de domaine, mais autrement non privilégié.

Si nous voulons énumérer les AC d'entreprise et leurs paramètres, on peut interroger LDAP en utilisant le filtre LDAP (objectCategory=pKIEnrollmentService) sur la base de recherche CN=Configuration,DC=<domain>,DC=<com> (cette base de recherche correspond au contexte de nommage Configuration de la forêt AD). Les résultats identifieront le nom d'hôte DNS du serveur CA, le nom de la CA elle-même, les dates de début et de fin du certificat, divers indicateurs, les modèles de certificat publiés, et plus encore.

Outils pour énumérer les certificats vulnérables :

  • Certify est un outil C# qui peut énumérer des informations de configuration et d'infrastructure utiles sur les environnements AD CS et peut demander des certificats de différentes manières.
  • Certipy est un outil python pour pouvoir énumérer et abuser des services de certificats Active Directory (AD CS) à partir de n'importe quel système (avec accès au DC) qui peut générer une sortie pour BloodHound créée par Lyak (bonne personne, meilleur hacker).
# https://github.com/GhostPack/Certify
Certify.exe cas #enumerate trusted root CA certificates, certificates defined by the NTAuthCertificates object, and various information about Enterprise CAs
Certify.exe find #enumerate certificate templates
Certify.exe find /vulnerable #Enumerate vulenrable certificate templater

# https://github.com/ly4k/Certipy
certipy find -u john@corp.local -p Passw0rd -dc-ip 172.16.126.128
certipy find -vulnerable [-hide-admins] -u john@corp.local -p Passw0rd -dc-ip 172.16.126.128 #Search vulnerable templates

certutil.exe -TCAInfo #enumerate Enterprise CAs
certutil -v -dstemplate #enumerate certificate templates

Références

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥