Powershell : extraction des mots de passe BitLocker

Comme j’en avais parlé il y a presque un an déjà dans ce billet, il est possible de configurer BitLocker pour qu’il stocke les mots de passe des volumes chiffrés dans l’ActiveDirectory, en lien avec l’objet Ordinateur correspondant.

BitLocker stocke dans l’ActiveDirectory un objet de type msFVE-RecoveryInformation ; l’objet Ordinateur est donc le père. On peut retrouver toutes les informations en ouvrant un ADSI Edit et en allant sur l’objet Ordinateur :

Les différents mots de passe ont pour canonical name une concaténation de leur date de création et de différentes propriétés.

Dans les propriétés de l’objet, on retrouve donc l’attribut msFVE-RecoveryPassword que je vais récupérer dans le script Powershell ci-dessous ; ce script génère la liste de tous les objets Ordinateur et leurs objets msFVE-RecoveryInformation associés pour ensuite écrire le contenu dans un fichier CSV. Ainsi, ce script permet de réaliser une copie de sauvegarde des mots de passe et de ce qui est nécessaire pour déverrouiller les disques chiffrés des stations jointes au domaine. Naturellement, on prendra soin de bien protéger ce fichier et son accès. Le script est téléchargeable dans une version commentée à la fin de l’article.

Requires -RunAsAdministrator
 Add-Type -AssemblyName System.Windows.Forms
 $fileExpl = New-Object System.Windows.Forms.SaveFileDialog
 $fileExpl.ValidateNames = $true
 $fileExpl.CreatePrompt = $false
 $fileExpl.OverwritePrompt = $true
 $fileExpl.RestoreDirectory = $false
 $fileExpl.InitialDirectory = "$env:userprofile"
 Write-Host "WARNING : This script will extract from your ActiveDirectory all the BitLocker recovery keys and passwords. This is CRITICAL DATA as you would not want unauthorized users to be able to unlock the protected drives. Please ensure the exported data is stored somewhere safe." -Foreground "Red"
 Write-Host "Please press ENTER to start."
 Read-Host
 $global:tempfile = "$env:temp\temp-bl.csv"
 if(Test-Path $tempfile){ Remove-Item $tempfile }
 $dump = "ComputerName,DistinguishedName,msFVE-RecoveryPassword"
 Add-Content -Value $dump -path $tempfile
 $complist = Get-AdComputer -Filter *
 foreach($comp in $complist){
     $BLInfo = Get-AdObject -Filter 'objectClass -eq "msFVE-RecoveryInformation"' -SearchBase $comp.DistinguishedName -Properties 'msFVE-RecoveryPassword'
     foreach($BL in $BLInfo){
         $dn =$BL.DistinguishedName
         $dump = $comp.Name+","+"'"+$dn+"'"+","+$BL.'msFVE-RecoveryPassword'
         Add-Content -Value $dump -Path $tempfile
     }
 }
 $fileExpl.DefaultExt = "csv"
 $fileExpl.Filter = "Comma-separated values file (.csv)|.csv"
 $fileExpl.Title = "Export data to CSV file"
 $fileExpl.Filename = ""
 $fileExpl.ShowDialog() | out-null
 if ($fileExpl.Filename -ne "") {
     Copy-Item $global:tempfile -Destination $fileExpl.Filename
     if ($?){ Remove-Item $global:tempfile ; Write-Host "Data exported to"$fileExpl.Filename }
     else { Write-Host "Couldn't save the CSV file to the specified location." ; Remove-Item $global:tempfile }
 }
 else { Remove-Item $global:tempfile ; Write-Host "Data export aborted." }

Ce fichier CSV peut ensuite être importé dans Excel par exemple, en le convertissant :

Quelques billes pour crypter des stations avec BitLocker

Je travaille en ce moment sur BitLocker et après quelques jours de recherches, de tests et d’usure intensive de disques durs, je suis enfin arrivé à un résultat satisfaisant pour obtenir une GPO définissant des paramètres de sécurité rassurants. Je n’ai pas pour prétention d’avoir trouvé la formule magique vous permettant de crypter dès demain en quelques heures 25,000 stations mais ces quelques notes que je vais partager peuvent constituer une bonne base de travail ou d’appréhension de la technologie. Dans mon exemple, je pars sur des postes clients en Windows 10 équipés d’une puce TPM et avec un AD en niveau 2008 R2.

Il s’agit donc de définir proprement la GPO qui sera récupérée par les postes éligibles et ensuite de lancer le cryptage. Tous les paramètres se retrouvent dans l’arborescence suivante : Computer Configuration > Administrative Templates > Windows Components > BitLocker Drive Encryption. Il y a 3 politiques à définir : l’une concernant le disque (au sens logique du terme), la deuxième pour les disques internes et la troisième pour les disques externes.

Concernant les disques hébergeant l’OS :

  • Require additional authentication at startup propose plusieurs réglages et c’est ici que l’on définit ce qui est nécessaire pour continuer le boot du système : la puce TPM simple, un code PIN et la puce TPM, une clef USB avec la puce TPM avec informations de démarrage, ou les 3 à la fois. Attention, un seul de ces 4 paramètres peut être en « requis » (paramètre strict).
  • Si la solution choisie est celle du PIN, il est possible de modifier la longueur minimale de celui-ci dans la très claire propriété Configure minimum PIN length at startup. Par défaut, il ne s’agit que de caractères numériques mais en activant le paramètre dans Allow enhanced PINs for startup, alors les caractères alphanumériques seront autorisés.
  • Dans Enforce Drive encryption type on operating system drive on peut choisir ce qui est crypté sur le disque : l’espace utilisé ou tout le disque. Ce paramètre existe pour les disques locaux non-systèmes.
  • Choose how BitLocker-protected operating system drives can be recovered est un paramètre intéressant car c’est ici que l’on va définir comment récupérer la boulette d’un utilisateur ayant perdu son PIN ou sa clef de déverrouillage. Cela peut se faire soit par un mot de passe de 48 caractères généré aléatoirement lors du cryptage du disque, soit par une clef 256-bits (ou les 2). Ce qui est intéressant ici, c’est que l’on peut stocker dans AD DS ces informations, ce qui fait que l’utilisateur n’a pas à les noter (sous-entendu à écrire la clef de récupération sur un post-it collé sous le laptop ou sur une feuille volante dans la sacoche) et d’un point de vue administrateur, cela permet de tout avoir centré dans un dispositif déjà existant. Afin de stocker ces informations dans l’AD, il y a plusieurs pré-requis, je vous renvoie à cette documentation Microsoft pour plus d’informations. Pour plus de robustesse, il est possible de rendre impossible l’encryption du disque si la sauvegarde des moyens de récupération ne peut pas être effectuée dans l’AD.

Concernant les disques locaux non-système :

  • En fonction de la sécurité à apporter à la station, il est possible de refuser toute écriture sur un disque qui n’est pas crypté par BitLocker dans Deny write access to fixed drives not protected by BitLocker.
  • Les disques non-système ne pouvant évidemment pas demander un PIN, ils peuvent être protégés par un mot de passe. Avec Configure use of passwords for fixed data drives, on définit une politique par rapport à ces mots de passe : longueur et complexité ; la complexité adoptée pour le mot de passe du disque étant la même que celle pour les mots de passe du domaine. Attention à l’éventuel côté pénible d’avoir à se souvenir de « 5847562369 » comme PIN de démarrage et de « @nt1c0n$TitUt10n€II3mEn|- » pour déverrouiller le disque des données…
  • Tout comme les disques système, les moyens de récupération des disques locaux peuvent être stockés dans l’ActiveDirectory grâce aux mêmes réglages offerts dans Choose how BitLocker-protected operating system drives can be recovered.

Concernant les disques amovibles :

  • Une liberté peut être donnée à l’utilisateur de crypter ou non une clef USB ou un disque externe grâce à Control use of BitLocker on removable drives.
  • Et l’on retrouve les mêmes réglages que pour les disques locaux usuelsConfigure use of passwords for fixed data drives et Choose how BitLocker-protected operating system drives can be recovered.

De manière générale :

  • La sauvegarde des mots de passe de récupération et des clefs 256-bits de décryptage s’active grâce au paramètre Store BitLocker recovery information in Active Directory Domain Services. En activant l’option et en demandant de stocker ces informations dans AD DS, la sécurité est augmentée et le travail des administrateurs facilité. Il est également possible de stocker la clef dans un emplacement réseau dans Choose default folder for recovery password.
  • En fonction de l’OS cible, divers algorithmes de cryptages sont disponibles. Avec Windows 10, on peut choisir XTS-AES 256-bit qui semble être le plus sécurisé, avec un inconvénient : cet algorithme n’est pas pris en charge sur les versions inférieures. Les disques internes des stations n’ayant pas pour but d’être démontées et changées de station dans un modèle et avec un OS différent tous les jours, cela ne pose pas de problème en soi ; concernant les périphériques amovibles, la question se pose car il peut être branché sur divers appareils exécutant des OS différents : on peut donc se rabattre sur un algorithme AES-CBC.

Ensuite, côté poste de travail, c’est l’outil manage-bde qui permet d’appliquer le cryptage BitLocker sur les stations ; à noter qu’il faut préalablement que BitLocker ait été activé dans le Panneau de configuration sans quoi manage-bde sera incapable de voir l’intégralité des disques. Il est important de saisir que manage-bde crypte et possède des fonctionnalités basés sur la GPO définie plus haut. Vous ne pourrez par exemple pas crypter la station sans PIN ou ne pas obtenir de mot de passe de récupération si ils sont requis ou crypter avec un algorithme différent de celui renvoyé par la GPO.

Par exemple, si je souhaite crypter mon disque système et qu’un code PIN ainsi que mot de passe de récupération sont nécessaires, cela va se dérouler ainsi dans un cmd en administrateur :

manage-bde -on c: -tpmandpin -rp

Le PIN est demandé après la validation de l’instruction. Dans le cadre d’un disque non-système :

manage-bde -on d: -rp -password

Le mot de passe est demandé après l’envoi de la commande. Bien évidemment, l’outil manage-bde offre d’autres possibilités avec d’autres arguments, je vous renvoie à la documentation de MS à ce sujet.

A noter que l’utilisateur peut ensuite changer son PIN ou le mot de passe de déverrouillage de son disque. D’autres paramètres sont accessibles si l’utilisateur est administrateur du poste.

Une fois le cryptage commencé, on peut retrouver dans l’AD sur les propriétés d’un objet Ordinateur les informations de récupérations définies dans la GPO grâce à l’onglet BitLocker Recovery.

Oui, j’ai réalisé de nombreux tests sur mon poste pilote.

Cet onglet est visible une fois que les outils de management BitLocker ont été déployés sur le contrôleur de domaine (ou sur la machine hébergeant les outils de management).