mimikatz :: crypto et l’export forcé en vidéo

Une petite vidéo de l’utilisation de mimikatz et de son module crypto pour forcer l’export de certificats sous Windows 8

La version prenant en charge Windows 8 CP (et précédents) est disponible : https://blog.gentilkiwi.com/mimikatz

Actions exposées dans la vidéo :

  • impossibilité d’exporter les certificats protégés via la CryptoAPI et CNG
  • patch de la CryptoAPI
  • l’export du certificat protégé via la CryptoAPI devient possible, reste celui protégés via CNG
  • patch de la CNG via un bref passage en administrateur
  • l’export du certificat protégé via la CNG devient possible

Disponible sur : https://youtu.be/M3XX3CHihJY

Protection de l’utilisation de la clé privée (moyen)

A l’import d’un certificat (ou d’une clé privée), une option permettant d’activer la « protection renforcée de clés privées » est disponible…
En positionnant le niveau sur « moyen », un popup de confirmation apparaitra à chaque utilisation de la clé, et bien sur lors de l’export…

export_protected

Le niveau « moyen » ne représente donc aucun intérêt…, l’apparition de ce popup est implémenté dans la méthode CryptUnprotectData de la librairie crypt32

.text:761889DA                 test    al, 3
.text:761889DC                 jnz     loc_76198EE9

Un JNZ ne servant ici pas à grand chose, NOP…
Il aurait provoqué :

.text:76198EFB                 call    _I_CryptUIProtect@24 ; I_CryptUIProtect(x,x,x,x,x,x)

Par contre, en positionnant le niveau sur « haut » lors de l’import, un mot de passe servira à décoder la clé pour chaque utilisation de celle ci, ou de son export…, cette fois ci, pas de by-pass aussi simple…

Astuce disponible dans mimikatz !

Clé privée non exportable et CSP Microsoft…

Lors de la génération d’une bi-clé par un CSP (via CPGenKey depuis CryptGenKey), deux flags permettent de garantir l’exportabilité de la clé privée :
CRYPT_EXPORTABLE 0x00000001
CRYPT_ARCHIVABLE 0x00004000

Lors de l’export de la clé privée (CPExportKey , ces flags sont vérifiés afin de décider si l’export peut être effectué…
Depuis rsaenh.dll :

.text:6800C350                 test    word ptr [eax+8], 4001h
.text:6800C356                 jnz     short loc_6800C362
.text:6800C358                 mov     esi, 8009000Bh

Exemple avec Certutil pour une clé non exportable :

CertUtil : -exportPFX ÉCHEC de la commande : 0x8009000b (-2146893813)
CertUtil: Clé non valide pour l'utilisation dans l'état spécifié.

Sous Windows >= NT 5.1 mais < 6.0, ce test est suivi d'un autre test. Sous Windows >= NT 6.0, ce test est répété une autre fois.

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