Principes de base : contrainte de longueur de chemin (Path Length Constraint)

L'attaque de l'algorithme de signature MD5 présentée fin 2008 n'a pu être utilisé pour créer un faux certificat d'autorité de certification utilisable que parce que l'autorité de certification attaquée n'avait pas configuré de limitation de la longueur du chemin.

La limitation de la longueur du chemin est indiquée dans le RFC 5280 est décrite. L'idée est de définir la profondeur maximale de la hiérarchie des autorités de certification dans l'extension „Basic Constraints“ d'un certificat d'autorité de certification.

À chaque niveau d'autorité de certification, le nombre configuré est réduit de 1 jusqu'à ce qu'il soit égal à 0.

La dernière autorité de certification de la chaîne contient donc la valeur 0. En dessous de cette autorité de certification, aucune autre autorité de certification n'est autorisée. Même si l'autorité de certification en émettait une, les applications peuvent détecter cette violation lors de la vérification de la hiérarchie des autorités de certification et refuser de traiter un tel certificat.

Configurer la limitation de la longueur du chemin

Connaissez-vous TameMyCerts? TameMyCerts est un add-on pour l'autorité de certification Microsoft (Active Directory Certificate Services). Il étend la fonction de l'autorité de certification et permet de Application de la réglementationIl s'agit d'un logiciel de gestion des certificats qui permet d'automatiser l'émission de certificats en toute sécurité. TameMyCerts est unique dans l'écosystème Microsoft, a déjà fait ses preuves dans d'innombrables entreprises du monde entier et est disponible sous une licence libre. Il peut téléchargé via GitHub et être utilisé gratuitement. Une maintenance professionnelle est également proposée.

La limitation de la longueur du chemin est définie lors de la délivrance du certificat d'autorité de certification. Elle peut être mise en œuvre de différentes manières :

  • Elle peut être demandée par l'organisme de certification qui en fait la demande.
  • Elle peut être jointe à la demande de certificat par un administrateur.
  • Elle peut être imposée par une directive de l'autorité de certification supérieure.
  • Elle est en principe appliquée lorsque le certificat de l'autorité de certification supérieure dispose d'une limitation de la longueur du chemin.

Demande par l'organisme de certification

Si la demande de certificat d'une autorité de certification doit demander une limitation de la longueur du chemin, cela doit être représenté par le capolicy.inf :

[BasicConstraintsExtension]
PathLength=0
Critical=TRUE

Il convient de noter que l'extension doit être marquée comme critique.

Conforming CAs MUST include this extension in all CA certificates that contain public keys used to validate digital signatures on certificates and MUST mark the extension as critical in such certificates.

https://tools.ietf.org/html/rfc5280#section-4.2.1.9

Définition de la limitation de la longueur du chemin par l'autorité de certification supérieure

Il est généralement recommandé de ne pas limiter la longueur du chemin d'accès pour les certificats des autorités de certification racines, car on se prive ainsi d'une grande partie de sa flexibilité. Un changement de valeur nécessite l'émission d'un nouveau certificat, ce qui, dans le cas d'une autorité de certification racine, implique un travail important pour la redistribution du statut de confiance.

Cette option est particulièrement utile pour les autorités de certification racines. Il n'est donc pas nécessaire que celle-ci dispose d'une restriction de longueur de chemin inscrite en dur dans le certificat d'autorité de certification. Cependant, elle agira comme si elle l'était lors de la délivrance d'un certificat d'autorité de certification secondaire.

Ceci peut être réalisé avec la commande de ligne de commande suivante (Démarrer la ligne de commande en tant qu'administrateur) :

certutil -setreg Policy\CAPathLength {Wert}

Si l'on souhaite limiter la hiérarchie des autorités de certification à deux studs, on saisit une valeur de 1.

Le service d'autorité de certification doit être redémarré pour que la modification prenne effet.

Démonstration : Violation de la contrainte de longueur de chemin et détection de la violation

Im nachfolgenden Beispiel erzeugen wir eine Zertifikatkette, bei welcher eine ausstellende Zertifizierungsstelle über eine Einschränkung der Pfadlänge von 0 verfügt, also keine untergeordneten Zertifizierugsstellen-Zertifikat signieren kann. Wir verletzen diese Einschränkung, indem wir eine Ebene darunter eine weitere Zertifizierungsstelle begründen, die mit dem privaten Schlüssel der eingeschränkten Zertifizierungsstelle signiert ist. Zu guter letzt stellen wir mit dieser unrechtmäßigen Zertifizierungsstelle dann ein End-Entitäts-Zertifikat aus und prüfen, ob die Richtlinienverletzung erkannt wird.

Pour la démonstration, le PSCertificateEnrollment module PowerShell peut être utilisé. Il peut être utilisé via la Galerie PowerShell et être ensuite chargés.

Install-Module -Name PSCertificateEnrollment
Import-Module -Name PSCertificateEnrollment

La commande suivante génère un certificat pour une autorité de certification racine et stocke le certificat résultant dans la variable $a.

$a = New-CertificateRequest -CA -Subject "CN=Root CA" -SelfSign

Ensuite, la commande suivante permet de créer une autorité de certification subordonnée qui présente une restriction de longueur de chemin de 0, c'est-à-dire qu'aucune autre autorité de certification n'est autorisée sous elle. Le certificat est signé avec le certificat d'autorité de certification racine stocké dans la variable $a. Le certificat qui en résulte est stocké dans la variable $b.

$b = New-CertificateRequest -CA -Subject "CN=Sub CA" -SigningCert $a -PathLength 0

Nous simulons maintenant que l'autorité de certification subordonnée stockée dans $b a été compromise et qu'un attaquant a réussi à signer un certificat d'autorité de certification avec elle.

Le certificat de l'autorité de certification non autorisée et signée avec $b est donc stocké dans la variable $c.

$c = New-CertificateRequest -CA -Subject "CN=Invalid Path Length CA" -SigningCert $b

Avec cette autorité de certification, nous émettons maintenant un certificat d'identité de fin et le stockons dans la variable $d.

$d = New-CertificateRequest -Eku "ServerAuthentication" -Subject "CN=Invalid Path Length Certificate" -Dns "www.demo.org" -SigningCert $c

Les quatre variables contiennent maintenant la chaîne de certificats générée.

$a,$b,$c,$d

Le certificat d'autorité de certification racine doit être placé temporairement dans la liste des certificats d'autorité de certification racine de confiance pour le test. Il doit toutefois être retiré après le test afin de ne pas laisser de risque de sécurité.

Si vous ouvrez maintenant le certificat d'identité finale, vous constaterez qu'un avertissement s'affiche pour indiquer que le certificat n'est pas reconnu comme valide :

This certificate is not valid because one of the certification authorities in the certification path does not appear to be allowed to issue certificates or this certificate cannot be used as an end-entity certificate.

Dans l'onglet „Certification Path“, on voit également quelle partie de la chaîne de certificats a déclenché une violation des directives. Il s'agit de la „Sub CA“ - l'autorité de certification en fait légitime. Elle est identifiée comme coupable, car c'est elle qui a délivré par erreur un certificat non autorisé à partir de la logique de contrôle.

Liens complémentaires :

Sources externes

Les commentaires sont fermés.

fr_FRFrançais