Verschlüsselte Dateien unter Windows wiederfinden

Bei einem Kunden stand neben der Migration der Active Directory Domäneninfrastruktur auch eine Neuorganisation und -installation der bestehenden Zertifikatsdienste (AD CS) an. Diese waren ursprünglich nur für das ein oder andere intern auszustellende Zertifikat gedacht und auf einem der bestehenden Domänencontroller beheimatet. Der Plan sah zunächst vor die bestehende Zertifizierungsstelle (CA) außer Betrieb zu nehmen und dann eine neue CA-Infrastruktur bereitzustellen. Anschließend sollten die wenigen sich noch im Umlauf befindlichen Zertifikate durch Zertifikate der neuen CA ausgetauscht werden.

Allerdings fielen uns während der Begutachtung der alten CA eine Menge ausgestellter und noch gültiger Basis-EFS Zertifikate ins Auge. Scheinbar hatte in den vergangenen Jahren zahlreiche Benutzer innerhalb der Active Directory Infrastruktur das seit Windows 2000 vorhandene NTFS-Attribut Encrypting File System (EFS) genutzt, um gespeicherte Dateien lokal oder auch auf Dateiservern zu verschlüsseln.

Die ausgestellten EFS-Zertifikate waren dabei nicht wirklich bedeutsam und könnten durch die neue CA im Bedarfsfall ebenfalls wieder angeboten werden. Die lokale Administration wollte jedoch in Erfahrung bringen wo Benutzer verschlüsselte Dateien abgelegt hatten.

Entweder mit cipher.exe…

Um dies in Erfahrung zu bringen kam mir zunächst das Befehlszeilentool cipher.exe in den Sinn – die folgende Konstellation würde bedingt durch den Schalter /u rekursiv alle Verzeichnisse auf verschlüsselte Dateien durchsuchen und anzeigen. Dabei wird durch den Schalter /n verhindert das bereits verschlüsselte Dateien durch einen eventuell neueren Schlüssel aktualisiert werden.

cipher.exe /u /n

Das Ergebnis sieht in diesem Fall wie folgt aus:

cipher1
Verwendung von cipher.exe

Über das PowerShell-Cmdlet ‚Get-ChildItem‘ – hier exemplarisch angezeigt – ist die rekursive Verzeichnisstruktur des Ordners C:\Temp ersichtlich. In zwei Unterordnern befinden sich jeweils eine verschlüsselte und eine unverschlüsselte Textdatei. Unabhängig vom aktuellen Verzeichnispfad beginnt cipher.exe die Arbeit im Root-Verzeichnis, arbeitet sich anschließend wie gewünscht durch die Unterordner und findet die einzigen verschlüsselten Dateien auf der Festplatte.

…oder mit PowerShell Cmdlets…

Alternativ könnte an der PowerShell jedoch direkt das Cmdlet ‚Get-ChildItem‘ für das Auffinden verschlüsselter Dateien verwendet werden. Dazu muss lediglich nach dem Attributswert ‚Encrypted‘ gefiltert werden.

Get-ChildItem -Path C:\ -Recurse -Force -ErrorAction SilentlyContinue | Where-Object -FilterScript {$PSitem.Attributes -ge 'Encrypted'} | Format-List -Property Name,Attributes

Da es sich bei der Eigenschaft ‚Attributes‘ potentiell um ein Datenarray handelt, darf nicht der Vergleichsoperator ‚Equals‘ (-eq) zum Einsatz kommen. Statt dessen wird hier ‚Greater than or equals‘ (-ge) verwendet.

Im Ablauf stellt sich das wie folgt dar:

cipher2
Verwendung von Get-ChildItem

Die erste Zeile zeigt erneut den rekursiven Inhalt des Verzeichnisses C:\Temp, diesmal unter Angabe der Attributes-Eigenschaft. Anschließend folgt die Auflistung der lokal verschlüsselten Dateien.

Was ist schneller?

Abschließend habe ich die beiden Varianten einem Zeitvergleich unterzogen, wobei die Variante mit ‚Get-ChildItem‘ einen leichten Vorteil zeigt. Mit Hilfe des Cmdlet ‚Measure-Command‘ ergaben sich die folgenden Zeitwerte:

cipher3
Zeitvergleich zwischen cipher.exe und Get-ChildItem

 

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.