Get-BitlockerReport

Die Daten auf Festplatten sind gegen fremde Zugriffe zu schützen,. DAs gilt für Notebooks im Außendienst ebenso wie für Daten auf Server und in der Cloud. Bitlocker ist neben TrueCrypt/VeraCrypt ein effektiver Weg dieses Ziel zu erreichen. Wie stellen Sie aber sicher, dass alle Disks auch verschlüsselt und sie als Firma einen Recovery-Key haben?. Get-BitlockerReport liefert eine Liste der Computer und der hinterlegten Bitlocker Schlüssel. Keine 100% Lösung aber für Firmen besser als Blindflug

Vorarbeiten und Einschränkungen

Bitlocker kann nur Windows Vista/7 Enterprise/Ultimate, Windows 8/8.1/10 Enterprise/Professional oder Windows Server 2008 und höher genutzt werden. Beim Einsatz in Firmen sollten Sie aber unbedingt mit Gruppenrichtlinien dafür sorgen, dass Bitlocker auf den gewünschten Zielsystemen "zwingend" ist und die Verschlüsselung erst startet, wenn der Encryptionkey auch beim Computerobjekt im Active Directory hinterlegt ist. Beides ist eine Einstellung in den Gruppenrichtlinien. Eine ausführliche Beschreibung finden Sie auf Bitlocker.

Das hier beschriebene Skript nutzt genau dieses Wissen, um die Daten aus dem Active Directory auszulesen und daraus eine Liste der Clients zu liefern, die Bitlocker nutzen oder eben auch noch nicht nutzen.

Damit ist aber auch klar, dass Sie eben auch nur solche Geräte aufgelistet bekommen, die zumindest per Gruppenrichtlinie die Hinterlegung im Active Directory vorgeschrieben bekommen. Leider wird diese Funktion auch nur aktiviert, wenn die Bitlocker-Verschlüsselung gestartet wird. Wenn Sie heute also schon Computer mit aktivierter Bitlocker-Verschlüsselung einsetzen und dann erst die Gruppenrichtlinie aktivieren, wird der Eintrag nicht mehr nachträglich durchgeführt. Hier können Sie aber per Komandozeile nachhelfen, um den Schlüssel wieder zu veröffentlichen. Der Computer wird also bis dahin irrtümlich als "unsicher" geführt.
Schlimmer ist es aber, wenn ein Computer in der Liste mit einem Schlüssel auftaucht, der aber schon veraltet ist. Festplatten können ausfallen und ersetzt werden und Computer können mit dem gleichen Namen wieder installiert werden. Wenn dann allerdings die Gruppenrichtlinie korrekt greift, wird auch Bitlocker natürlich wieder aktiviert. Es kümmert sich aber niemand darum, die alten Schlüssel der früheren Installation oder Festplatte zu entfernen. Es kann also sein, dass ein Computer mehrere Einträge hat, ob wohl es nur eine Festplatte gibt. Aber auch mit dieser Einschränkungen kann man leben, solange die Gruppenrichtlinie BitLocker vorschreibt.

Der Platz im Active Directory

Objekte, die im Active Directory gespeichert werden, finden Sie sehr einfach per ADSIEDIT. In diesem Fall ist der Blick an das Computerobjekt angebracht, wo sich sehr schnell die Schlüssel zeigen

Dieser Computer hat wohl schon mindestens 10 Festplatten (oder auch USB-Keys) verschlüsselt. Welche die aktuelle Disk ist, ist so gar nicht zu erkennen. Ich habe aber hier nur die Werte anzeigen lassen, die auch beschreibbar sind. Jedes AD-Objekte hat natürlich noch zumindest die Properties "WhenCreated" und "WhenChanged", anhand derer zumindest das Datum ermittelt werden kann, wann die Partition verschlüsselt wurde. Letztlich gibt es hier aber keinen Hinweis auf die aktuelle Festplatte. Jedes per Bitlocker geschützte Speichermedium wird gleich behandelt. Auch hier gilt wieder, dass eine GPO sicherstellen muss, dass eine Festplatte auf jeden Fall verschlüsselt wird.

Daten generieren

Es ist kein sehr umfangreiches Skript, um per ADSI nach den Bitlocker-Informationen zu suchen, sich dann per ADSI damit zu verbinden um das dazugehörige Parent-Objekt zu erhalten. Sicher könnte man auch aus den "DN" schon das Objekt ermitteln, aber damit kennt man noch nicht den dnsHostname und andere interessante Zusatzinformationen.

Das Skript erwartet keinerlei Eingaben und sucht sich in der aktuellen Domäne selbst einen GC um über den Filter "(objectclass=msFVE-RecoveryInformation)" alle Objekte mit dem Unterobjekt zu finden und in eine Liste einzutragen. Dann sucht das Skript ein zweites mal mit dem veränderten Filter "(objectclass=Computer)" um nun alle Computer zu finden. Dabei geht es dann alle Computer durch und ergänzt die Liste um die Anzahl der Bitlocker-Elemente, die es dann einfach ausgibt. Die Ausgabe können Sie mit weiteren PowerShell-Befehlen natürlich filtern, sortieren, gruppieren oder einfach in eine CSV-Datei schreiben, die dann später mit Power Bi oder anderen Werkzeugen ausgewertet werden kann.

Der Aufruf muss als Administrator erfolgen, damit sie die Bitlocker-Informationen auch wirklich finden können. Aktuell wird das noch nicht überprüft und sie bekommen 0 Ergebnisse und das Skript wirft einen Fehler, weil die Prozentanzeige ein "Division durch Null"-Fehler generiert.

get-bitlockerreport.1.0.ps1

Die vom Skript zurück gegebenen Daten sind ein PowerShell-Objekt mit den folgenden Properies:

get-bitlockercomputer: End

   TypeName: Selected.System.String

Name              MemberType   Definition
----              ----------   ----------
Equals            Method       bool Equals(System.Object obj)
GetHashCode       Method       int GetHashCode()
GetType           Method       type GetType()
ToString          Method       string ToString()
bitlockervolumes  NoteProperty  bitlockervolumes=null
computername      NoteProperty System.String computername=NAWSV010
distinguishedname NoteProperty System.String distinguishedname=CN=NAWSV010,O...
dNSHostName       NoteProperty System.String dNSHostName=nawsv010.netatwork.de

Interessant für die weitere Betrachtung sind die vier "NoteProperty"-Felder. Der einfachste Aufruf exportiert die Daten gleich in eine CSV-Datei

get-bitlockerreport.ps1 | export-csv .\bitlockerreport.csv -notypinformation -delimiter ";" -encoding unicode

Über das Trennzeichen lässt sich die Datei in einem deutschen Excel sehr viel einfacher öffnen.

Auswertung mit Powershell

Da die Daten über die Pipeline ausgegeben werden, können Sie natürlich auch die Nachverarbeitung über die PowerShell durchführen. Sortieren und Filtern sind hier sicher die häufigsten Ansätze. Wenn sie ihre Computer in entsprechende OUs einsortiert haben, dann können Sie über den Distinguishedname hier filtern. Sehr große Umgebungen werden natürlich das Skript selbst anpassen und schon bei der Suche nach den Computern und Bitlocker-Informationen einen "BaseDN" angeben. Ich habe darauf aber aus Vereinfachungsgründen verzichtet.

Hier eine exemplarische Ausgabe gleich gruppiert nach der Anzahl der Bitlocker-Einträge an den Computern

PS C:\> C:\get-bitlockerreport\get-bitlockerreport.1.0.ps1  | group bitlockervolumes -noelements
get-bitlockercomputer: Start
get-bitlockercomputer: Search for Recovery Information
 Search for all Computers to generate list
get-bitlockercomputer: End

Count Name
----- ----
   56
   28 1 
    3 10
    2 3
    1 5
    2 4
    9 2

Hier ist gut zu sehen, dass 56 Systeme zumindest keine entsprechenden Informationen veröffentlicht haben und drei Systeme wohl schon 10 Volumes hinterlegt habe,

Weiterentwicklung

Mit dieser mal schnell entwickelten Version habe ich in einer Umgebung einen entsprechenden ersten Bericht erstellen können. Wünschenswert wäre natürlich z.B. die Steuerung über Parameter z.B. bezüglich von Computername, OUs oder auch Computergruppen. Ich könnte mir auch vorstellen, dass das Skript umgekehrt funktioniert und per Pipeline eine Liste der Computer vorne eingekippt wird, für die dann die Bitlocker-Properties ermittelt werden. Letztlich hängt es davon ab, was das Skript erreichen soll um es entsprechend anzupassen.

Anhand des vorhandenen Source-Code können Sie aber sehr einfach solche Anforderungen auch selbst umsetzen, so dass ich erst einmal keine Weiterentwicklung vorgesehen habe.

Weitere Links

  • Bitlocker
    Einsatz und Konfiguration von Bitlocker
  • Power Bi
    Auswertung von CSv-Dateien per PowerBI