Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
PSPKIAudit — PowerShell toolkit pour l'audit d'AD CS basé sur le toolkit PSPKI. | Kitploit
Outils/GitHubGitHub/ghostpack/pspkiaudit
Escalade de PrivilègesTests d'Intrusion
GitHubghostpack/pspkiaudit

PSPKIAudit

PowerShell toolkit pour l'audit d'AD CS basé sur le toolkit PSPKI.

Voir le dépôt
9411302il y a 2 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

PSPKIAudit

Boîte à outils PowerShell pour auditer les services de certificat Active Directory (AD CS).

Il est construit sur la base de la boîte à outils PSPKI (licence publique Microsoft) de PKISolution. Ce dépôt contient une version plus récente de PSPKI que celle disponible dans la PSGallery (voir le répertoire PSPKI). Vadims Podans (le créateur de PSPKI) a gracieusement fourni cette version car elle contient des correctifs pour plusieurs bugs.

Ce README n'est qu'un point de départ – pour des détails complets et des conseils défensifs, veuillez consulter le livre blanc "Certified Pre-Owned".

Le module contient les fonctions principales suivantes :

  1. Invoke-PKIAudit - Audite les paramètres AD CS de la forêt actuelle, en analysant principalement le serveur de CA et les modèles publiés pour détecter d'éventuelles opportunités d'élévation de privilèges.
  2. Get-CertRequest - Examine les certificats émis par une CA en interrogeant la base de données de la CA. L'objectif principal est de découvrir des demandes de certificat qui pourraient avoir abusé d'une vulnérabilité d'élévation de privilèges d'un modèle de certificat. De plus, si un utilisateur ou un ordinateur est compromis, les équipes de réponse aux incidents peuvent l'utiliser pour trouver les certificats que le serveur CA avait délivrés à l'utilisateur/ordinateur compromis (qui doivent ensuite être révoqués).

ATTENTION : Ce code est en version bêta ! Nous sommes confiants que Invoke-PKIAudit n'aura pas d'impact sur l'environnement car la quantité de données qu'il interroge est très limitée. Nous n'avons pas effectué de tests rigoureux avec Get-CertRequest sur des charges de travail typiques d'un serveur CA. Get-CertRequest interroge directement la base de données de la CA et peut devoir traiter des milliers de résultats, ce qui pourrait affecter les performances.

S'IL N'Y A PAS DE RÉSULTATS, CELA NE GARANTIT PAS QUE VOTRE ENVIRONNEMENT EST SÉCURISÉ !!

NOUS NE POUVONS PAS NON PLUS GARANTIR QUE NOS CONSEILS D'ATTÉNUATION RENDRONT VOTRE ENVIRONNEMENT SÉCURISÉ OU NE PERTURBERONT PAS LES OPÉRATIONS !

Il est de votre responsabilité de discuter avec votre/vos équipe(s) Active Directory/PKI/Architecture pour déterminer les meilleures atténuations pour votre environnement.

Si le code se casse, ou si nous avons oublié quelque chose, veuillez soumettre un problème ou une demande de tirage pour une correction !

  • Configuration
  • Audit des mauvaises configurations d'AD CS
    • Explication des sorties
    • ESC1 - Modèles de certificats mal configurés
    • ESC2 - Modèles de certificats mal configurés
    • ESC3 - Modèles d'agent d'inscription mal configurés
    • ESC4 - Contrôle d'accès vulnérable des modèles de certificats
    • ESC5 - Contrôle d'accès vulnérable des objets AD PKI
    • ESC6 - EDITF_ATTRIBUTESUBJECTALTNAME2
    • ESC7 - Contrôle d'accès vulnérable de l'autorité de certification
    • ESC8 - Relais NTLM vers les points de terminaison HTTP d'AD CS
    • Divers - Mappages explicites
  • Tri des demandes de certificats émises existantes

Configuration

Prérequis

Installez les éléments suivants sur une machine Windows avec une invite PowerShell élevée (PowerShell version 5.1 ou supérieure) :

  • Fonctionnalités Services de certificats et Active Directory de RSAT. Installez avec la commande suivante :``` Get-WindowsCapability -Online -Name "Rsat.*" | where Name -match "CertificateServices|ActiveDirectory" | Add-WindowsCapability -Online
root@kitploit:~
* Le [module PowerShell PSPKI](https://github.com/PKISolutions/PSPKI). Installez-le avec la commande suivante :```
Install-Module -Name PSPKI

Importation

Téléchargez le module et extrayez-le dans un dossier. Ensuite, importez le module en utilisant les commandes suivantes :``` cd PSPKIAudit Get-ChildItem -Recurse | Unblock-File

Import-Module .\PSPKIAudit.psd1

root@kitploit:~
# Audit des mauvaises configurations AD CS

L'exécution de `Invoke-PKIAudit` exécutera toutes les vérifications d'audit contre AD CS dans le domaine actuel, y compris l'énumération de divers paramètres d'Autorité de Certification et de Modèle de Certificat. Pour auditer une AC spécifique, vous pouvez exécuter `Invoke-PKIAudit -CAComputerName CA.DOMAIN.COM` ou `Invoke-PKIAudit -CAName X-Y-Z`.

Toute mauvaise configuration (ESC1-8) apparaîtra comme une propriété sur les résultats de l'AC/du modèle affichés pour identifier la mauvaise configuration spécifique trouvée.

Si vous souhaitez modifier les groupes/utilisateurs utilisés pour tester l'inscription/le contrôle d'accès, modifiez l'expression régulière `$CommonLowprivPrincipals` en haut de `Invoke-PKIAudit.ps1`

Si vous souhaitez exporter toutes les informations de l'AC dans un fichier csv, exécutez : `Get-AuditCertificateAuthority [-CAComputerName CA.DOMAIN.COM | -CAName X-Y-Z] | Export-Csv -NoTypeInformation CAs.csv`

Si vous souhaitez exporter toutes les informations des modèles publiés dans un fichier csv (pas seulement les modèles vulnérables), exécutez : `Get-AuditCertificateTemplate [-CAComputerName CA.DOMAIN.COM | -CAName X-Y-Z] | Export-Csv -NoTypeInformation templates.csv`


## Explication de la sortie

Il y a deux sections principales de sortie : les détails sur les AC découvertes et les détails sur les modèles potentiellement vulnérables.

Pour les résultats de l'autorité de certification :

| Propriété de l'Autorité de Certification | Description                                                        |
| ---------------------------------------- | ------------------------------------------------------------------ |
| ComputerName                             | Le système sur lequel l'AC s'exécute.                              |
| CAName                                   | Le nom de l'AC.                                                    |
| ConfigString                             | La chaîne de configuration complète ORDINATEUR\NOM_AC.             |
| IsRoot                                   | Si l'AC est une AC racine.                                         |
| AllowsUserSuppliedSans                   | Si l'AC a le flag `EDITF_ATTRIBUTESUBJECTALTNAME2` défini.         |
| VulnerableACL                            | Si l'AC a un paramètre ACL vulnérable.                             |
| EnrollmentPrincipals                     | Les principaux qui ont le privilège `Enroll` au niveau de l'AC.    |
| EnrollmentEndpoints                      | Les points de terminaison d'inscription des services web de l'AC.  |
| NTLMEnrollmentEndpoints                  | Les points de terminaison d'inscription des services web de l'AC avec NTLM activé. |
| DACL                                     | Les informations complètes de contrôle d'accès.                    |
| Misconfigurations                        | ESCX indiquant la mauvaise configuration spécifique présente (le cas échéant). |


Pour les résultats du modèle de certificat :

| Propriété                | Description                                                                                              |
| ------------------------ | -------------------------------------------------------------------------------------------------------- |
| CA                       | La chaîne ConfigString complète de l'AC sur laquelle le modèle est publié (nulle si non publié).          |
| Name                     | Le nom du modèle.                                                                                        |
| SchemaVersion            | La version du schéma (1/2/3) du modèle.                                                                  |
| OID                      | L'identifiant unique d'objet pour le modèle.                                                             |
| VulnerableTemplateACL    | Vrai si le modèle a un paramètre ACL vulnérable.                                                         |
| LowPrivCanEnroll         | Vrai si les utilisateurs à faible privilège peuvent s'inscrire au modèle.                                |
| EnrolleeSuppliesSubject  | Vrai si le flag `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` est présent (c'est-à-dire que les utilisateurs peuvent fournir des SAN arbitraires). |
| EnhancedKeyUsage         | Les EKU d'utilisation activés dans le modèle.                                                            |
| HasAuthenticationEku     | Vrai si le modèle a un EKU qui permet l'authentification.                                                |
| HasDangerousEku          | Vrai si le modèle a un EKU "dangereux" (Any Purpose ou nul).                                             |
| EnrollmentAgentTemplate  | Vrai si le modèle a l'EKU "Certificate Request Agent".                                                    |
| CAManagerApproval        | Vrai si les approbations du gestionnaire sont nécessaires pour l'inscription.                             |
| IssuanceRequirements     | Informations sur la signature autorisée.                                                                 |
| ValidityPeriod           | Combien de temps le certificat est valide.                                                               |
| RenewalPeriod            | La période de renouvellement du certificat.                                                              |
| Owner                    | Le principal qui possède le certificat.                                                                  |
| DACL                     | Les informations complètes de contrôle d'accès.                                                          |
| Misconfigurations        | ESCX indiquant la mauvaise configuration spécifique présente (le cas échéant).                           |


## ESC1 - Modèles de certificats mal configurés

### Détails <!-- omit in toc -->

Ce scénario d'escalade de privilèges se produit lorsque les conditions suivantes sont remplies :

1. **L'AC d'entreprise accorde des droits d'inscription aux utilisateurs à faible privilège.** La configuration de l'AC d'entreprise doit permettre aux utilisateurs à faible privilège de demander des certificats. Voir la section "Contexte - Inscription" au début du document technique pour plus de détails.

2. **L'approbation du gestionnaire est désactivée.** Ce paramètre nécessite qu'un utilisateur disposant des autorisations de "gestionnaire" de certificats examine et approuve le certificat demandé avant qu'il ne soit délivré. Voir la section "Contexte - Exigences de délivrance" au début du document technique pour plus de détails.

3. **Aucune signature autorisée n'est requise.** Ce paramètre exige que toute CSR soit signée par un certificat autorisé existant. Voir la section "Contexte - Exigences de délivrance" au début du document technique pour plus de détails.

4. **Un descripteur de sécurité de modèle de certificat trop permissif accorde des droits d'inscription de certificat aux utilisateurs à faible privilège.** Avoir des droits d'inscription de certificat permet à un attaquant à faible privilège de demander et d'obtenir un certificat basé sur le modèle. Les droits d'inscription sont accordés via le descripteur de sécurité de l'objet AD du modèle de certificat.

5. **Le modèle de certificat définit des EKU qui permettent l'authentification.** Les EKU applicables incluent l'authentification du client (OID 1.3.6.1.5.5.7.3.2), l'authentification du client PKINIT (OID 1.3.6.1.5.2.3.4) ou la connexion par carte à puce (OID 1.3.6.1.4.1.311.20.2.2).

6. **Le modèle de certificat permet aux demandeurs de spécifier un subjectAltName (SAN) dans la CSR.** Si un demandeur peut spécifier le SAN dans une CSR, le demandeur peut demander un certificat en tant que n'importe qui (par exemple, un utilisateur administrateur de domaine). L'objet AD du modèle de certificat spécifie si le demandeur peut spécifier le SAN dans sa propriété mspki-certificate-name-flag. La propriété mspki-certificate-name-flag est un masque de bits et si le flag CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT est présent, un demandeur peut spécifier le SAN.

**TL;DR** Cette situation signifie qu'un utilisateur non privilégié peut demander un certificat pouvant être utilisé pour l'authentification au domaine, où il peut spécifier un nom alternatif arbitraire (comme un administrateur de domaine). Cela peut aboutir à un certificat fonctionnel pour un utilisateur élevé comme un administrateur de domaine !


### Exemple <!-- omit in toc -->```
[!] Potentially vulnerable Certificate Templates:

CA                      : dc.theshire.local\theshire-DC-CA
Name                    : ESC1Template
SchemaVersion           : 2
OID                     : ESC1 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.10657968.9897558)
VulnerableTemplateACL   : False
LowPrivCanEnroll        : True
EnrolleeSuppliesSubject : True
EnhancedKeyUsage        : Client Authentication (1.3.6.1.5.5.7.3.2)|Secure Email (1.3.6.1.5.5.7.3.4)|Encrypting File System (1.3.6.1.4.1.311.10.3.4)
HasAuthenticationEku    : True
HasDangerousEku         : False
EnrollmentAgentTemplate : False
CAManagerApproval       : False
IssuanceRequirements    : [Issuance Requirements]
                            Authorized signature count: 0
                            Reenrollment requires: same criteria as for enrollment.
ValidityPeriod          : 1 years
RenewalPeriod           : 6 weeks
Owner                   : THESHIRE\localadmin
DACL                    : NT AUTHORITY\Authenticated Users (Allow) - Read
                          THESHIRE\Domain Admins (Allow) - Read, Write, Enroll
                          THESHIRE\Domain Users (Allow) - Enroll
                          THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll
                          THESHIRE\localadmin (Allow) - Read, Write
Misconfigurations       : ESC1

Mitigations

Plusieurs options s'offrent à vous. Tout d'abord, faites un clic droit sur le modèle de certificat concerné dans la console des modèles de certificats (certtmpl.msc) et cliquez sur "Propriétés".

  1. Supprimez le flag CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT via "Nom du sujet", en décochant "Fournir dans la demande".
    • Cela empêche la spécification arbitraire de SAN dans la CSR. Sauf si les noms alternatifs sont vraiment nécessaires pour ce modèle, c'est probablement la meilleure correction.
  2. Supprimez les EKU "Authentification du client" et/ou "Carte à puce pour ouverture de session" via "Extensions" -> "Stratégies d'application".
    • Cela empêche l'authentification au domaine avec ce modèle.
  3. Activez "Approbation du gestionnaire de l'AC" dans "Exigences de délivrance".
    • Cela place les demandes pour ce modèle dans la file d'attente "Demandes en attente", qui doit être approuvée manuellement par un gestionnaire de certificats.
  4. Activez "Signatures autorisées" dans "Exigences de délivrance" (si vous savez ce que vous faites).
    • Cela oblige les CSR à être cosignées par un certificat d'agent d'inscription.
  5. Supprimez la capacité des utilisateurs à faibles privilèges de s'inscrire à ce modèle via "Sécurité" en supprimant le privilège Inscrire approprié.

ESC2 - Modèles de certificats mal configurés

Details

Ce scénario d'élévation de privilèges se produit lorsque les conditions suivantes sont réunies :

  1. L'AC d'entreprise accorde des droits d'inscription aux utilisateurs à faibles privilèges. Les détails sont les mêmes que pour ESC1.

  2. L'approbation du gestionnaire est désactivée. Les détails sont les mêmes que pour ESC1.

  3. Aucune signature autorisée n'est requise. Les détails sont les mêmes que pour ESC1.

  4. Un descripteur de sécurité de modèle de certificat trop permissif accorde des droits d'inscription aux utilisateurs à faibles privilèges. Les détails sont les mêmes que pour ESC1.

  5. Le modèle de certificat définit des EKU de type "Tout usage" ou aucun EKU. "Tout usage" (OID 2.5.29.37.0) peut être utilisé pour (surprise !) n'importe quel usage, y compris l'authentification client. Si aucun EKU n'est spécifié (c'est-à-dire que pkiextendedkeyusage est vide ou que l'attribut n'existe pas), alors le certificat équivaut à un certificat d'AC subordonnée et peut être utilisé pour tout.

TL;DR Ceci est très similaire à ESC1, mais avec "Tout usage" ou aucun EKU, le flag CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT n'a pas besoin d'être présent.

Example ```

[!] Potentially vulnerable Certificate Templates:

CA : dc.theshire.local\theshire-DC-CA Name : ESC2Template SchemaVersion : 2 OID : ESC2 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.7730030.4389735) VulnerableTemplateACL : False LowPrivCanEnroll : True EnrolleeSuppliesSubject : False EnhancedKeyUsage : HasAuthenticationEku : True HasDangerousEku : True EnrollmentAgentTemplate : False CAManagerApproval : False IssuanceRequirements : [Issuance Requirements] Authorized signature count: 0 Reenrollment requires: same criteria as for enrollment. ValidityPeriod : 1 years RenewalPeriod : 6 weeks Owner : THESHIRE\localadmin DACL : NT AUTHORITY\Authenticated Users (Allow) - Read THESHIRE\Domain Admins (Allow) - Read, Write, Enroll THESHIRE\Domain Users (Allow) - Enroll THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll THESHIRE\localadmin (Allow) - Read, Write Misconfigurations : ESC2

root@kitploit:~
### Atténuations <!-- omit in toc -->

Il existe plusieurs options. Tout d'abord, faites un clic droit sur le modèle de certificat concerné dans la console Modèles de certificats (certtmpl.msc) et cliquez sur « Propriétés »

1. Supprimez la capacité des utilisateurs peu privilégiés à s'inscrire à ce modèle via « Sécurité » et supprimez le privilège **Inscrire** approprié.
   * C'est probablement la meilleure solution, car ces EKU sensibles ne devraient pas être disponibles pour les utilisateurs peu privilégiés !
2. Activez **« Approbation du gestionnaire de certificats de l'autorité de certification »** dans « Conditions de délivrance ».
   * Cela place les demandes pour ce modèle dans la file d'attente « Demandes en attente » qui doivent être approuvées manuellement par un gestionnaire de certificats.
3. Activez **Signatures autorisées"** dans « Conditions de délivrance » (si vous savez ce que vous faites).
   * Cela force les CSR à être co-signés par un certificat d'agent d'inscription.

## ESC3 - Modèles d'agent d'inscription mal configurés

### Détails <!-- omit in toc -->

Ce scénario d'élévation de privilèges se produit lorsque les conditions suivantes sont réunies :

1. **L'autorité de certification d'entreprise accorde des droits d'inscription aux utilisateurs peu privilégiés.** Les détails sont les mêmes que dans ESC1.

2. **L'approbation du gestionnaire est désactivée.** Les détails sont les mêmes que dans ESC1.

3. **Aucune signature autorisée n'est requise.** Les détails sont les mêmes que dans ESC1.

4. **Un descripteur de sécurité de modèle de certificat trop permissif accorde des droits d'inscription de certificat aux utilisateurs peu privilégiés.** Les détails sont les mêmes que dans ESC1.

5. **Le modèle de certificat définit l'EKU d'agent de demande de certificat.** L'EKU d'agent de demande de certificat (OID 1.3.6.1.4.1.311.20.2.1) permet à un principal de s'inscrire pour _un autre_ modèle de certificat au nom d'un autre utilisateur.

6. **Les restrictions d'agent d'inscription ne sont pas implémentées sur l'autorité de certification.**

**TL;DR** Toute personne disposant d'un certificat d'agent de demande de certificat (alias agent d'inscription) peut s'inscrire à d'autres certificats au nom de n'importe quel utilisateur du domaine, pour tout modèle de schéma version 1 ou tout modèle de schéma version 2+ qui nécessite l'exigence de délivrance appropriée « Signatures autorisées / Stratégie d'application », à moins que les « Restrictions d'agent d'inscription » ne soient mises en œuvre au niveau de l'autorité de certification.

### Exemple <!-- omit in toc -->```
[!] Potentially vulnerable Certificate Templates:

CA                      : dc.theshire.local\theshire-DC-CA
Name                    : ESC3Template
SchemaVersion           : 2
OID                     : ESC3 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.4300342.10028552)
VulnerableTemplateACL   : False
LowPrivCanEnroll        : True
EnrolleeSuppliesSubject : False
EnhancedKeyUsage        : Certificate Request Agent (1.3.6.1.4.1.311.20.2.1)
HasAuthenticationEku    : False
HasDangerousEku         : False
EnrollmentAgentTemplate : True
CAManagerApproval       : False
IssuanceRequirements    : [Issuance Requirements]
                            Authorized signature count: 0
                            Reenrollment requires: same criteria as for enrollment.
ValidityPeriod          : 1 years
RenewalPeriod           : 6 weeks
Owner                   : THESHIRE\localadmin
DACL                    : NT AUTHORITY\Authenticated Users (Allow) - Read
                          THESHIRE\Domain Admins (Allow) - Read, Write, Enroll
                          THESHIRE\Domain Users (Allow) - Enroll
                          THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll
                          THESHIRE\localadmin (Allow) - Read, Write
Misconfigurations       : ESC3

Mitigations

Il y a quelques options. D'abord, faites un clic droit sur le modèle de certificat affecté dans la Console des modèles de certificats (certtmpl.msc) et cliquez sur "Propriétés"

  1. Supprimez la possibilité pour les utilisateurs à faibles privilèges de s'inscrire à ce modèle via "Sécurité" et supprimez le privilège S'inscrire approprié.
    • C'est probablement la meilleure correction, car cette EKU sensible ne devrait pas être disponible pour les utilisateurs à faibles privilèges !
  2. Activez "Approbation du gestionnaire de certificats de l'AC" dans "Conditions d'émission".
    • Cela place les demandes pour ce modèle dans la file d'attente "Demandes en attente" qui doit être approuvée manuellement par un gestionnaire de certificats.

Vous pouvez également implémenter les "Restrictions des agents d'inscription" via la console de l'Autorité de certification (certsrv.msc). Sur l'AC affectée, faites un clic droit sur le nom de l'AC et cliquez sur "Propriétés" -> "Agents d'inscription". Plus d'informations sur cette approche sont disponibles ici.

ESC4 - Contrôle d'accès vulnérable aux modèles de certificats

Détails

Les modèles de certificats sont des objets sécurisables dans Active Directory, ce qui signifie qu'ils possèdent un descripteur de sécurité qui spécifie quels principaux Active Directory ont des autorisations spécifiques sur le modèle. Les modèles qui ont un contrôle d'accès vulnérable accordent à des principaux non intentionnels la possibilité de modifier les paramètres du modèle. Avec des droits de modification, un attaquant peut définir des EKU vulnérables (ESC1-ESC3), basculer des paramètres comme CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT (ESC1) et/ou supprimer les "Conditions d'émission" comme l'approbation du gestionnaire ou les signatures autorisées.

Exemple ```

[!] Potentially vulnerable Certificate Templates:

CA : dc.theshire.local\theshire-DC-CA Name : ESC4Template SchemaVersion : 2 OID : ESC4 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.1768738.6205646) VulnerableTemplateACL : True LowPrivCanEnroll : True EnrolleeSuppliesSubject : False EnhancedKeyUsage : Client Authentication (1.3.6.1.5.5.7.3.2)|Secure Email (1.3.6.1.5.5.7.3.4)|Encrypting File System (1.3.6.1.4.1.311.10.3.4) HasAuthenticationEku : True HasDangerousEku : False EnrollmentAgentTemplate : False CAManagerApproval : False IssuanceRequirements : [Issuance Requirements] Authorized signature count: 0 Reenrollment requires: same criteria as for enrollment. ValidityPeriod : 1 years RenewalPeriod : 6 weeks Owner : THESHIRE\localadmin DACL : NT AUTHORITY\Authenticated Users (Allow) - Read, Write THESHIRE\Domain Admins (Allow) - Read, Write, Enroll THESHIRE\Domain Users (Allow) - Read, Enroll THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll THESHIRE\localadmin (Allow) - Read, Write Misconfigurations : ESC4

root@kitploit:~
### Mesures d'atténuation <!-- omit in toc -->

Faites un clic droit sur le modèle de certificat concerné dans la console Modèles de certificats (certtmpl.msc) et cliquez sur "Propriétés".

Allez dans l'onglet "Sécurité" et supprimez l'entrée de contrôle d'accès vulnérable.


## ESC5 - Contrôle d'accès vulnérable aux objets AD de l'infrastructure à clé publique (PKI)

### Détails <!-- omit in toc -->

Un certain nombre d'objets en dehors des modèles de certificats et de l'autorité de certification elle-même peuvent avoir un impact sur la sécurité de l'ensemble du système AD CS.

Ces possibilités incluent (sans s'y limiter) :
- L'objet ordinateur AD du serveur CA (c'est-à-dire compromission via RBCD)
- Le serveur RPC/DCOM du serveur CA
- Objets AD liés à l'infrastructure à clé publique (PKI). Tout objet AD descendant ou conteneur dans le conteneur CN=Public Key Services,CN=Services,CN=Configuration,DC=<COMPANY>,DC=<COM> (par exemple, le conteneur Modèles de certificats, le conteneur Autorités de certification, l'objet NTAuthCertificates, etc.)

*En raison de la portée étendue de cette mauvaise configuration spécifique, nous ne vérifions pas actuellement ESC5 par défaut dans cette boîte à outils.*

Les chemins d'accès au serveur CA lui-même peuvent être trouvés dans la collection BloodHound actuelle.

La sécurité du serveur RPC/DCOM du serveur CA nécessite une analyse manuelle.

Les commandes suivantes affichent une liste des utilisateurs et du droit de contrôle/modification que l'utilisateur possède sur un objet AD lié à la PKI.```
$Controllers = Get-AuditPKIADObjectControllers
Format-PKIAdObjectControllers $Controllers

Assurez-vous que tous les principaux dans les résultats requièrent impérativement les droits listés. Souvent, les comptes non-tier 0 (qu'il s'agisse d'utilisateurs/groupes à faibles privilèges ou d'administrateurs de serveurs non AD à privilèges inférieurs) ont le contrôle des objets AD liés à la PKI.

Exemple ```

THESHIRE\Cert Publishers (S-1-5-21-3022474190-4230777124-3051344698-517) GenericAll CN=THESHIRE-DC-CA,CN=Certification Authorities,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=DC,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=DC,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL

THESHIRE\DC$ (S-1-5-21-3022474190-4230777124-3051344698-1000) WriteOwner CN=THESHIRE-DC-CA,CN=Enrollment Services,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=DC,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=KRA,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL

THESHIRE\Domain Computers (S-1-5-21-3022474190-4230777124-3051344698-515) WriteDacl CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL

THESHIRE\Domain Users (S-1-5-21-3022474190-4230777124-3051344698-513) WriteAllProperties CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL

THESHIRE\john-sa (S-1-5-21-3022474190-4230777124-3051344698-1602) GenericAll CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL

NT AUTHORITY\Authenticated Users (S-1-5-11) Owner CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL WriteOwner CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL

root@kitploit:~
### Atténuations <!-- omit in toc -->

Supprimez toute entrée de contrôle d'accès vulnérable via Active Directory Users and Computers (*dsa.msc*) ou ADSIEdit (*adsiedit.msc*) pour les objets de configuration.

## ESC6 - EDITF_ATTRIBUTESUBJECTALTNAME2

### Détails <!-- omit in toc -->

Si le flag **EDITF_ATTRIBUTESUBJECTALTNAME2** est activé dans la configuration d'une Autorité de Certification, TOUTE demande de certificat peut spécifier des noms alternatifs de sujet (SAN) arbitraires. Cela signifie que TOUT modèle configuré pour l'authentification de domaine et permettant également aux utilisateurs non privilégiés de s'inscrire (par exemple, le modèle **User** par défaut) peut être abusé pour obtenir un certificat qui nous permet de nous authentifier en tant qu'administrateur de domaine (ou tout autre utilisateur/machine actif).

**CE PARAMÈTRE NE DOIT ABSOLUMENT PAS ÊTRE DÉFINI DANS VOTRE ENVIRONNEMENT.**

### Exemple <!-- omit in toc -->```
=== Certificate Authority ===


ComputerName            : dc.theshire.local
CAName                  : theshire-DC-CA
ConfigString            : dc.theshire.local\theshire-DC-CA
IsRoot                  : True
AllowsUserSuppliedSans  : True
VulnerableACL           : False
EnrollmentPrincipals    : THESHIRE\Domain Users
                          THESHIRE\Domain Computers
                          THESHIRE\certmanager
                          THESHIRE\certadmin
                          THESHIRE\Nested3
EnrollmentEndpoints     : 
NTLMEnrollmentEndpoints : 
DACL                    : BUILTIN\Administrators (Allow) - ManageCA, ManageCertificates
                          THESHIRE\Domain Admins (Allow) - ManageCA, ManageCertificates
                          THESHIRE\Domain Users (Allow) - Read, Enroll
                          THESHIRE\Domain Computers (Allow) - Enroll
                          THESHIRE\Enterprise Admins (Allow) - ManageCA, ManageCertificates
                          THESHIRE\certmanager (Allow) - ManageCertificates, Enroll
                          THESHIRE\certadmin (Allow) - ManageCA, Enroll
                          THESHIRE\Nested3 (Allow) - ManageCertificates, Enroll
Misconfigurations       : ESC6

[!] The above CA is misconfigured!

...(snip)...

[!] EDITF_ATTRIBUTESUBJECTALTNAME2 set on this CA, the following templates may be vulnerable:

CA                      : dc.theshire.local\theshire-DC-CA
Name                    : User
SchemaVersion           : 1
OID                     : 1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.1.1
VulnerableTemplateACL   : False
LowPrivCanEnroll        : True
EnrolleeSuppliesSubject : False
EnhancedKeyUsage        : Encrypting File System (1.3.6.1.4.1.311.10.3.4)|Secure Email (1.3.6.1.5.5.7.3.4)|Client Authentication (1.3.6.1.5.5.7.3.2)
HasAuthenticationEku    : True
HasDangerousEku         : False
EnrollmentAgentTemplate : False
CAManagerApproval       : False
IssuanceRequirements    : [Issuance Requirements]
                            Authorized signature count: 0
                            Reenrollment requires: same criteria as for enrollment.
ValidityPeriod          : 1 years
RenewalPeriod           : 6 weeks
Owner                   : THESHIRE\Enterprise Admins
DACL                    : NT AUTHORITY\Authenticated Users (Allow) - Read
                          THESHIRE\Domain Admins (Allow) - Read, Write, Enroll
                          THESHIRE\Domain Users (Allow) - Read, Enroll
                          THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll
Misconfigurations       :

Atténuations

Supprimez immédiatement ce flag et redémarrez l'autorité de certification concernée à partir d'une invite PowerShell avec des droits élevés sur le serveur CA :``` PS C:> certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJECTALTNAME2

PS C:> Get-Service -ComputerName CA_HOST certsvc | Restart-Service -Force

root@kitploit:~
## ESC7 - Contrôle d'accès vulnérable de l'autorité de certification

### Détails <!-- omit in toc -->

En dehors des modèles de certificats, une autorité de certification elle-même possède un ensemble d'autorisations qui sécurisent diverses actions de l'AC. Ces autorisations sont accessibles depuis certsrv.msc, en cliquant avec le bouton droit sur une AC, en sélectionnant Propriétés, puis en passant à l'onglet Sécurité.

Il existe deux droits sensibles en matière de sécurité et dangereux si des entités non autorisées les possèdent :

* **ManageCA** (alias « Administrateur de l'AC ») - permet d'effectuer des actions administratives sur l'AC, y compris (à distance) l'activation du bit EDITF_ATTRIBUTESUBJECTALTNAME2, ce qui entraîne ESC6.
* **ManageCertificates** (alias « Gestionnaire/Responsable des certificats ») - permet à l'entité d'approuver les demandes de certificats en attente, annulant ainsi l'exigence/protection d'approbation du gestionnaire (« Manager Approval »).

### Exemple <!-- omit in toc -->```
=== Certificate Authority ===


ComputerName            : dc.theshire.local
CAName                  : theshire-DC-CA
ConfigString            : dc.theshire.local\theshire-DC-CA
IsRoot                  : True
AllowsUserSuppliedSans  : False
VulnerableACL           : True
EnrollmentPrincipals    : THESHIRE\Domain Users
                          THESHIRE\Domain Computers
                          THESHIRE\certmanager
                          THESHIRE\certadmin
                          THESHIRE\Nested3
EnrollmentEndpoints     : 
NTLMEnrollmentEndpoints : 
DACL                    : BUILTIN\Administrators (Allow) - ManageCA, ManageCertificates
                          THESHIRE\Domain Admins (Allow) - ManageCA, ManageCertificates
                          THESHIRE\Domain Users (Allow) - ManageCA, Read, Enroll
                          THESHIRE\Domain Computers (Allow) - Enroll
                          THESHIRE\Enterprise Admins (Allow) - ManageCA, ManageCertificates
                          THESHIRE\certmanager (Allow) - ManageCertificates, Enroll
                          THESHIRE\certadmin (Allow) - ManageCA, Enroll
                          THESHIRE\Nested3 (Allow) - ManageCertificates, Enroll
Misconfigurations       : ESC7

[!] The above CA is misconfigured!

Atténuations

Ouvrez la console Autorité de certification (certsrv.msc) sur l'AC concernée, faites un clic droit sur le nom de l'AC et cliquez sur "Propriétés".

Accédez à "Sécurité" et supprimez l'entrée de contrôle d'accès vulnérable.

ESC8 - Relais NTLM vers les points de terminaison HTTP d'AD CS

NOTE : cette vérification particulière dans PSPKIAudit ne vérifie que si NTLM est présent pour les points de terminaison d'inscription publiés. Elle NE vérifie PAS si la protection étendue pour l'authentification est présente pour ces points de terminaison compatibles NTLM, des faux positifs peuvent donc se produire !

[!IMPORTANT]
L'authentification NTLM est désactivée pour les comptes du groupe Utilisateurs protégés. Cette vérification peut échouer si PSPKIAudit est exécuté alors que vous êtes connecté en tant qu'Utilisateur protégé.

Détails

AD CS prend en charge plusieurs méthodes d'inscription basées sur HTTP via des rôles de serveur AD CS supplémentaires que les administrateurs peuvent installer. Ces interfaces d'inscription de certificats basées sur HTTP sont toutes vulnérables aux attaques par relais NTLM.

En utilisant le relais NTLM, un attaquant sur une machine compromise peut usurper l'identité de tout compte AD s'authentifiant via NTLM entrant. En usurpant l'identité du compte victime, un attaquant pourrait accéder à ces interfaces web et demander un certificat d'authentification client basé sur les modèles de certificats Utilisateur ou Machine.

Exemple ```

=== Certificate Authority ===

ComputerName : dc.theshire.local CAName : theshire-DC-CA ConfigString : dc.theshire.local\theshire-DC-CA IsRoot : True AllowsUserSuppliedSans : False VulnerableACL : False EnrollmentPrincipals : THESHIRE\Domain Users THESHIRE\Domain Computers THESHIRE\certmanager THESHIRE\certadmin THESHIRE\Nested3 EnrollmentEndpoints : http://dc.theshire.local/certsrv/ NTLMEnrollmentEndpoints : http://dc.theshire.local/certsrv/ DACL : BUILTIN\Administrators (Allow) - ManageCA, ManageCertificates THESHIRE\Domain Admins (Allow) - ManageCA, ManageCertificates THESHIRE\Domain Users (Allow) - Read, Enroll THESHIRE\Domain Computers (Allow) - Enroll THESHIRE\Enterprise Admins (Allow) - ManageCA, ManageCertificates THESHIRE\certmanager (Allow) - ManageCertificates, Enroll THESHIRE\certadmin (Allow) - ManageCA, Enroll THESHIRE\Nested3 (Allow) - ManageCertificates, Enroll Misconfigurations : ESC8

[!] The above CA is misconfigured!

root@kitploit:~
### Mitigations <!-- omit in toc -->

Supprimez les points de terminaison d'inscription HTTP(S), désactivez NTLM pour ces points de terminaison, ou activez la protection étendue pour l'authentification. Voir **Harden AD CS HTTP Endpoints – PREVENT8** dans le livre blanc pour plus de détails.


## Divers - Mappages explicites

Une autre mesure d'atténuation possible pour certaines situations est d'imposer des mappages explicites pour les certificats. Cela désactive l'utilisation de SAN alternatifs dans les certificats lors de l'authentification à Active Directory.

Pour Kerberos, définir la clé **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc ! UseSubjectAltName** sur 00000000 force un mappage explicite. Plus de détails dans [KB4043463](https://mskb.pkisolutions.com/kb/4043463).

La désactivation des mappages explicites pour SChannel n'est pas vraiment documentée, mais selon nos recherches, définir les valeurs 0x1 ou 0x2 sur la clé **HKEY_LOCAL_MACHINE\CurrentControlSet\Control\SecurityProviders\SCHANNEL ! CertificateMappingMethods** semble bloquer les SAN, mais des tests supplémentaires sont nécessaires.


# Tri des demandes de certificats émises existantes

**ATTENTION :** cette fonctionnalité a été testée minimalement dans les grands environnements !

**Remarque :** voir « Monitor User/Machine Certificate Enrollments - DETECT1 » dans le livre blanc pour des informations supplémentaires et comment effectuer ces recherches avec certutil.

Si vous souhaitez examiner les demandes de certificats émises existantes, par exemple pour voir si des demandes ont spécifié des SAN arbitraires, ou ont été demandées pour des modèles spécifiques/par des principaux spécifiques, la fonction `Get-CertRequest [-CAComputerName COMPUTER.DOMAIN.COM | -CAName X-Y-Z]` s'appuie sur diverses fonctions PSPKI pour fournir plus d'informations contextuelles.

Plus précisément, la demande de signature de certificat brute (CSR) est extraite pour chaque certificat actuellement émis dans le domaine, et des informations spécifiques (c'est-à-dire si un SAN a été spécifié, le nom du demandeur/machine/processus, etc.) sont construites à partir de la demande pour enrichir l'objet CSR.

Les indicateurs suivants peuvent être utiles :

| Flag                        | Description                                                                                   |
| --------------------------- | --------------------------------------------------------------------------------------------- |
| **-HasSAN**                 | Retourner uniquement les certificats émis comportant un nom alternatif du sujet spécifié dans la demande. |
| **-Requester DOMAIN\USER**  | Retourner uniquement les demandes de certificats émises pour l'utilisateur demandeur spécifique.                     |
| **-Template TEMPLATE_NAME** | Retourner uniquement les demandes de certificats émises pour le nom de modèle spécifié.               |

<br/>

Pour exporter TOUTES les demandes de certificats émises vers un fichier csv, utilisez `Get-CertRequest | Export-CSV -NoTypeInformation requests.csv`.

Voici un exemple d'entrée de résultat montrant une situation où un nom alternatif du sujet (SAN) a été spécifié avec Certify :```
CA                       : dc.theshire.local\theshire-DC-CA
RequestID                : 4602
RequesterName            : THESHIRE\cody
RequesterMachineName     : dev.theshire.local
RequesterProcessName     : Certify.exe
SubjectAltNamesExtension :
SubjectAltNamesAttrib    : Administrator
SerialNumber             : 55000011faef0fab5ffd7f75b30000000011fa
CertificateTemplate      : ESC1 Template
                           (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.10657968.9897558)
RequestDate              : 6/3/2021 5:54:51 PM
StartDate                : 6/3/2021 5:44:51 PM
EndDate                  : 6/3/2022 5:44:51 PM

CA                       : dc.theshire.local\theshire-DC-CA
RequestID                : 4603
RequesterName            : THESHIRE\cody
RequesterMachineName     : dev.theshire.local
RequesterProcessName     : Certify.exe
SubjectAltNamesExtension : Administrator
SubjectAltNamesAttrib    :
SerialNumber             : 55000011fb021b79cf7276c2de0000000011fb
CertificateTemplate      : ESC1 Template
                           (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.10657968.9897558)
RequestDate              : 6/3/2021 5:55:10 PM
StartDate                : 6/3/2021 5:45:10 PM
EndDate                  : 6/3/2022 5:45:10 PM

La propriété SubjectAltNamesExtension signifie que l'extension x509 SubjectAlternativeNames a été utilisée pour spécifier le SAN, ce qui se produit pour les modèles avec le flag CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT. La propriété SubjectAltNamesAttrib signifie que des paires nom/valeur x509 ont été utilisées, ce qui se produit lors de la spécification d'un SAN lorsque le flag CA EDITF_ATTRIBUTESUBJECTALTNAME2 est défini.

Les certificats émis existants peuvent être révoqués en utilisant la fonction Revoke-Certificate de PSPKI :

PS C:\> Get-CertificationAuthority <CAName> | Get-IssuedRequest -RequestID <X> | Revoke-Certificate -Reason "KeyCompromise"

Les valeurs applicables pour -Reason sont "KeyCompromise", "CACompromise", et "Unspecified".

Télécharger l’outil