Certains d’entre vous l’ignorent peut-être, mais il est possible de chiffrer des machines virtuelles à l’aide de VMware Workstation ou de VirtualBox. Dans cet article, je vous propose de découvrir le fonctionnement de mon outil : le VM Password Extractor. Cet outil permet d’extraire les métadonnées concernant les méthodes et types d’algorithmes de chiffrement utilisés. L’objectif ? Obtenir des détails essentiels sur le chiffrement tels que les algorithmes de hachage, le nombre d’itérations, la valeur du sel, etc. L’idée est de traduire ces données en un format interprétable, compatible avec deux des outils de craquage de mots de passe les plus populaires : hashcat et John. En effet, ces outils ont récemment introduit la compatibilité avec les schémas de chiffrement de VirtualBox et de VMware Workstation.

VM-Password-Extractor s’appuie sur certains travaux existants. Pour davantage d’informations, veuillez consulter la section « Crédits » du fichier README.md (situé à la racine de mon dépôt).

Lien vers le projet : https://github.com/archidote/VM-Password-Extractor

VM-Password Extractor ne nécessite pas de dépendances particulières de Python 3, à l’exception de celles intégrées par défaut.

I. Processus de chiffrements – Côté VMware

Pour rappel, le descriptif d’une machine virtuelle VMware est stocké dans un fichier .vmx. Ce type de fichier est une configuration pour une machine virtuelle, contenant des informations sur la configuration matérielle telle que la quantité de mémoire RAM, le type de processeur, les périphériques virtuels, ainsi que les informations liées au chiffrement de la machine virtuelle si celle-ci est chiffrée, bien entendu.

Voici un extrait d’un fichier .vmx d’une VM chiffré. On constate que la variable encryption.KeySafe y stocke les données relatives à son chiffrement. (Algorithme de hashage, Algorithme de chiffrement symétrique, Hash round, etc.)

Voici les étapes du chiffrement d’une VM avec VMWare (VMware Workstation Pro 17.5 ) :

  1. Création du dérivé du mot de passe (Final Hash) :
    • Saisie du mot de passe
    • ○ Détermination du nombre d’itérations : (10 000 hash rounds : valeur par défaut).
    • ○ Génération d’un « sel » unique (valeur aléatoire de n bits)
    • ○ Application de l’algorithme PBKDF2-HMAC-SHA-1 en utilisant comme entré le mot de passe le sel et le nombre de hashround. pour « dériver » celui-ci et ainsi obtenir le condensat final du mot de passe (Final Hash)
    • ○ Simplification logique : PBKDF2_HMAC_SHA1(password, salt, hash_rounds)
  2. Génération de la clé (chiffrement symétrique) :
    • ○ Utilisation du nom de la VM et du VM ID pour initialiser le processus de la création de la clé symétrique initial avec l’algorythme AES-256.
  3. Chiffrement de la VM :
    • ○ Le chiffrement de la VM (disque, etc.) se fait avec l’algorithme AES-256-XTS en utilisant le condensat (Final Hash) obtenue précédemment comme clé de chiffrement.
    • ○ Simplification logique : AES-256(PBKDF2-HMAC-SHA-1(password,salt,hash_rounds), VM_DISK_FILE)

Ce processus de chiffrement assure que le chiffrement de la VM repose sur une clé dérivée du mot de passe (pas le « vrai » mot de passe directement), offrant ainsi une couche de sécurité supplémentaire.

Note 1 : Actuellement, le choix de l’algorithme PBKDF2-HMAC-SHA-1 pour la clé de dérivation est considéré comme robuste, mais son efficacité à long terme pourrait être remise en question en raison de l’évolution constante des attaques informatiques et des capacités de calcul.

https://crypto.stackexchange.com/questions/26510/why-is-hmac-sha1-still-considered-secure

Note 2 : Depuis juillet 2023, VMware a changé sa méthode de chiffrement asymétrique en optant pour AES-256-XTS, qui est plus sécurisée que son prédécesseur AES-256-CBC.

https://kb.vmware.com/s/article/93071

II. Côté VirtualBox

Le fichier .vbox est l’équivalent du fichier .vmx et contient essentiellement des données similaires. Il sert à stocker les informations spécifiques à une machine virtuelle pour cet environnement. C’est dans ce fichier que sont répertoriées les données relatives au chiffrement de la VM.

Étapes pour chiffrer une machine virtuelle dans VirtualBox :

  1. Génération de la clé symétrique :
    • ○ L ‘utilisateur a le choix entre deux algorithmes : AES-XTS128-PLAIN64 ou AES-XTS256-PLAIN64.
  2. Création du dérivé du mot de passe (Final Hash) :
    • ○ VirtualBox utilise PBKDF2-SHA256 pour créer un dérivé du mot de passe initial.
    • ○ Le processus de dérivation de clé est itéré deux fois (itération 2 = f(itération 1)) pour rendre la récupération du mot de passe d’origine plus difficile et coûteuse en terme de temps de cassage.
      • Pour la première itération, VirtualBox effectue (par défaut) 720 000 tours de PBKDF2-SHA256 en utilisant une valeur de « sel » x .
      • Puis, pour la seconde itération il effectue une deuxième itération de 20 000 tours (par défaut) avec une deuxième valeur de « sel » y en utilisant le résultat de la première itération comme entrée .
    • ○ Simplification logique :
      • hash_iteration1 = PBKDF2-SHA256(password, salt1, hash_rounds)
      • final_hash = PBKDF2-SHA256(hash_iteration1, salt2, hash_rounds)
  3. Chiffrement de la VM :
    • ○ Le condensat final (courrament nommé Final hash) obtenue est utilisée comme clé de chiffrement asymétrique en fonction de l’algorithme initial sélectionné.
    • ○ Simplification logique : AES-XTS256-PLAIN64(PBKDF2-SHA256(password, salt1, hash_rounds), salt2, hash_rounds), VM_DISK_FILE)

VirtualBox utilise un processus de chiffrement plus robuste que VMware. Cela est en partie dû à la sélection d’un algorithme de dérivation plus moderne, accompagné de deux itérations avec un nombre plus élevé de tours de hachage (Hash Rounds). Ces éléments rendent le processus de cassage du hachage considérablement plus coûteux en termes de temps, particulièrement s’il est robuste.

III. Démonstration

A. Avec une VM VMware chiffrée et l’utilitaire john

python3 ./VM-Password-Extractor.py --vmx assets/vmware/encrypted-vmx-file-example-PBKDF2-HMAC-SHA1-and-AES-256-CBC.vmx --vmx-password-hash-to-john -v
  • --vmx : Cet argument spécifie le fichier .VMX à traiter. à l’intérieur de celui-ci se trouve les données de chiffrement qui sont obfusqués.
  • --vmx-password-hash-to-john : Indique à l’outil de formater les informations de chiffrement en un « meta hash » compatible avec l’outil john.
  • -v : Mode verbeux


Après l’exécution, ce « meta hash » est enregistré dans un fichier hash.YYYYMMDD-HHMMSS.txt (si aucun fichier n’a été spécifié précédemment avec l’option correspondante : -o)


Vous remarquerez qu’une commande « de base » john (sans règle de dérivation, ni masque, etc.) est générée. Dans cet exemple, le mot de passe cassé est trivial : « password ». Cependant, dans un contexte réel, l’utilisation d’un dictionnaire personnalisé et l’application de règles de dérivation et de masquage seront plus appropriées.

Décomposition du « meta hash » « made for john » :

FILE.vmx-VM_NAME:
$vmx
$1 # Indique la version initiale du schéma de hachage utilisé
$0 # Paramètre complémentaire non-utilisé (N/A)
$0 # Paramètre complémentaire non-utilisé (N/A) 
$10000 # Nombre de round de l'itération 1
$3e8(...)17f # Salt 1
$561(...)293 # Final Hash

A. Avec une VM VirtualBox chiffré et l’utilitaire hashcat

python3 VM-Password-Extractor.py --vbox assets/virtualbox/encrypted-vbox-file-example-PBKDF2-HMAC-SHA256-and-AES-256-XTS.vbox --vbox-password-hash-to-hashcat -v
  • --vbox : Cet argument spécifie le fichier .vbox à traiter. à l’intérieur de celui-ci se trouve les données de chiffrement qui sont obfusqués.
  • --vbox-password-hash-to-hashcat : Indique à l’outil de formater les informations de chiffrement en un « meta hash » compatible avec l’outil hashcat.
  • -v : Mode verbeux

Vous remarquerez qu’une autre commande « de base » a été généré mais cette fois-ci pour l’outil hashcat. (sans règle de dérivation, ni masque, etc.)

Décomposition du « meta hash » « made for hashcat » :

$vbox
$0 # Indique la version initiale du schéma de hachage utilisé
$720000 # Nombre de round de l'itération 1 
$97c(...)378 # Salt 1 
$16 # Taille de la clé 
$b36e(...)d26 # pre-hash (suite à la première itération)
$20000 # Nombre de round de l'itération 2
$444(...)8e9 # Salt 2
$8da(...)247 # Final Hash 

IV. VM-Password-Extractor – Mesure de référence comparative – Un Benchmark quoi … ^^

Méthode initial : Attaque par Dictionnaire : el famoso « rockyou.txt »

  • Règles de dérivation : aucune
  • Masks : Aucun
  • Mot de passe : password

A. VMware

Mode de chiffrement : AES-256(PBKDF2-HMAC-SHA1)

  • Hashcat : Quelques secondes
  • John the ripper : Quelques secondes

B. VirtualBox

  • Mode de chiffrement : AES-XTS256-PLAIN64(PBKDF2-HMAC-SHA256)
    • Hashcat : Quelques secondes en fonction de la configuration matériels de l’ordinateur
    • John the ripper : Plusieurs dizaines de minutes
  • Mode de chiffrement : AES-XTS128-PLAIN64(PBKDF2-HMAC-SHA256)
    • Hashcat : Quelques minutes/secondes en fonction de la configuration matériels de l’ordinateur
    • John the ripper : Plusieurs dizaines de minutes

Sans hésiter, je vous recommande hashcat, qui d’après mes tests, est bien plus efficace que John pour casser de tels mots de passe.

V. Résumé

L’article explore le chiffrement des machines virtuelles avec VMware et VirtualBox, en se focalisant sur l’outil VM-Password-Extractor pour extraire et interpréter les données cryptographiques. Cette analyse met en lumière des distinctions majeures : si VMware déploie un schéma de chiffrement robuste, il est moins performant que celui de VirtualBox, qui adopte une approche plus moderne. Cette différence renforce la complexité et prolonge la durée nécessaire pour casser le hachage associé au mot de passe initial.

VI. Futur works

Pour les personnes motivées ou très à l’aise avec la cryptographie, je vous encourage à tenter de rétro-ingénierer le schéma de chiffrement utilisé par VMware pour chiffrer les machines virtuelles dans VCSA (vCenter Server Appliance). J’ai essayé à plusieurs reprises de mon côté, mais sans succès :/

++

GSB || Archidote

Catégories : Cybersécurité

Geoffrey Sauvageot-Berland

Ingénieur diplômé par l’état en Informatique et Cybersécurité. Généraliste, à l'origine administrateur systèmes et réseaux, j’occupe actuellement un poste d’auditeur en sécurité offensive. J’apprécie également la programmation/automatisation. Fondateur du blog : "Le Guide du SecOps", anciennement "Le Guide du SysOps"

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

En savoir plus sur Le Guide Du SecOps

Abonnez-vous pour poursuivre la lecture et avoir accès à l’ensemble des archives.

Continue reading