EFS-Dateien & – Ordner schnell finden

17. Mai 2011

Die Windows-Systeme sind bereits seit den Zeiten von Windows 2000 mit dem sogenannte Encrypting File System (EFS) ausgestattet, das eine Verschlüsselung einzelner Dateien oder ganzer Ordner anbietet. Unser Autor zeigt, wie ein Administrator die so geschützten Ressourcen schnell finden kann.

Dabei stellt er sowohl die Bordmittel unter Windows als auch eine eigene Lösung basierend auf VBScript vor.

Bild 1. Eine Test-Datei wird verschlüsselt: Das Windows-System warnt standardmäßig davor, eine solche Datei in einem unverschlüsseltem Verzeichnis abzulegen, da dies eine Sicherheitslücke darstellen kann.

Bereits mit der Version 3.0 des Dateisystem NTFS, das mit Windows 2000 auf die Rechner der Anwender kam, stellte Microsoft auch das sogenannte Encrypting File System (EFS) zur Verfügung. Mit diesem Feature besitzt ein Nutzer die Möglichkeit, eine einzelne Datei oder einen Ordner so zu verschlüsseln, dass nur noch er selbst auf diese zugreifen kann. Eine weitere Verschlüsselungsmöglichkeit, die mit EFS zur Verfügung steht, besteht darin einen Ordner zu verschlüsseln, so dass dann alle Dateien, die darin abgelegt werden, automatisch ebenfalls verschlüsselt werden.

Oft wichtig : Wo sind die verschlüsselten Dateien und Ordner?

In den meisten Fällen wird es sowohl für den Anwender als auch für den Systemverwalter sehr wichtig sein, dass er zunächst einmal jede verschlüsselte Datei sowie alle verschlüsselten Ordner auf einem System findet, bevor er weitere Aufgaben mit diesem Computer bearbeitet. Ein schönes Beispiel für eine derartige Situation ist ein Windows-Server, der von den Systemverwaltern nun dazu erkoren wurde, als Domänen-Controller (DC) eingesetzt zu werden. Bevor dieses System zu einem DC heraufgestuft wird, muss der Administrator sicherstellen, dass alle verschlüsselten Dateien gefunden und entsprechend behandelt wurden.

Das Gleiche gilt auch, wenn ein Domänen-Controller beispielsweise mittels des bekannten Werkzeugs Dcpromo.exe (Active Directory Installation Wizard) wieder zu einem Member-Server heruntergestuft werden soll. Wer sich bereits in diesem Dilemma befindet, kann auf den Support-Seiten von Microsoft einen entsprechenden Artikel mit einigen Lösungsvorschlägen zu dieser Thematik finden.

Aber es gibt noch andere Situationen, in denen ein Systembetreuer ganz sicher sein will, dass sich auf einem System keine Dateien und Ordner mehr befinden, die mit Hilfe von EFS verschlüsselt wurden: Wenn nämlich auf diesem System die Verschlüsselungslösung eines Drittherstellers installiert werden soll, die dann beispielsweise ganze Platten und/oder Partitionen verschlüsselt. Es ist sicher keine Überraschung, dass einige dieser Lösung nicht besonders gut mit Dateien und Ordner zusammenarbeiten, die bereits verschlüsselt sind. Auch Microsoft warnt davor, ein Laufwerk komplett mit Bitlocker zu verschlüsseln, wenn sich auf ihm mit EFS geschützte Ressourcen befinden.

Erschreckenderweise musste der Autor in seiner täglichen Praxis feststellen, dass leider eine ganze Reihe der Anbieter solcher Verschlüsselungen eine Festplatte nicht nach EFS-geschützte Dateien und Ordner durchsuchen, bevor sie mit der Arbeit beginnen: Die Ergebnisse können dann bis hin zu völlig unbrauchbaren Datenträgern reichen!

Weitere Szenarien, in denen ein Administrator über alle EFS-Dateien und –Ordner wissen sollte, betreffen eine Datei-Migration, den Austausch von Festplatten, das Entfernen eines Windows-Systems aus einer Domäne oder das Löschen beziehungsweise Überschreiben eines Anwender-Profils. Folgende Faustregel sollte dabei für alle Aktionen gelten: Bevor eine tiefergehende Operation auf irgendeinem Dateisystem durchgeführt wird, die dazu führen könnte, dass verschlüsselte Daten danach nicht mehr zugänglich sind, sollte sich die Systemadministratoren grundsätzlich über alle mittels EFS verschlüsselten Dateien und Ordner auf dem entsprechenden System informieren.

Das Wissen um das Vorhandensein oder das Fehlen solcher verschlüsselter Dateien kann einem Systemverwalter die Entscheidung erleichtern, wie er weiter verfahren muss. Existieren nämlich keine derartigen Dateien und Ordner, so brauchen auch keine Ressourcen zuvor entschlüsselt werden und es ist zudem auch nicht notwendig, Zertifikate oder private Schlüssel vor weiteren Schritten entsprechend zu exportieren.

Auf dem Markt existiert eine ganze Reihe von Werkzeugen, die das Finden von verschlüsselten Ordner und Dateien erleichtern. Wir stellen hier einige davon vor, einschließlich eines VB-Skripts, das unser Autor selbst für diesen Zweck entwickelt hat. Aber bevor wir näher auf die einzelnen Werkzeuge eingehen, sollten wir zunächst einmal sicherstellen, dass wir wenigstens eine EFS-Datei und einen ebenfalls verschlüsselten Ordner auf dem Rechner haben, damit wir die Tools auch richtig testen können.

Bild 2. Ein Programm aus dem Resource Tool Kit kann helfen: Aber auch der „efsinfo“-Befehl gibt erst in Zusammenarbeit mit dem systemeigenen „find“-Kommando eine brauchbare Information am Bildschirm aus.

Test: Erstellen einer verschlüsselten Datei und eines Ordners

Damit wir die entsprechende Vorgehensweise ausprobieren können, legen wir in einem Verzeichnis ein Unterverzeichnis mit der Bezeichnung „EFS-Test“ an. Dieses Verzeichnis kann durch einen Rechtsklick und anschließender Auswahl der Eigenschaften bearbeitet werden. In den Eigenschaften muss dazu dann die Schaltfläche „Erweitert“ ausgewählt werden. Ein anschließender Klick auf die Checkbox mit der Bezeichnung „Inhalt verschlüsseln, um Daten zu schützen“ überführt diesen Ordner dann in den sicheren Zustand. Abgeschlossen wird der gesamte Vorgang durch einen Klick auf OK.

In einem nächsten Schritt legen wir dann im Verzeichnis, das auch dieses nun verschlüsselte Verzeichnis beinhaltet, eine Text-Datei mit dem Namen EFS-Test.txt an, die wir auf die gleiche Art und Weise verschlüsseln, wie bereits anhand des Ordners erläutert. Allerdings warnt das Betriebssystem an dieser Stelle dann noch einmal davor, dass der Anwender gerade im Begriff ist, ein Datei in einem unverschlüsseltem Verzeichnis zu verschlüsseln (Bild 1): Diese Warnung ist deshalb wichtig, weil bei dieser Konstellation Anwendungsprogramme möglicherweise beim Öffnen der so gesicherten Datei unverschlüsselte Kopien anlegen, die das Sicherheitskonzept dann auf diese Art aushebeln. Wir wollen aber in diesem Fall nur diese eine Datei und nicht den Ordner verschlüsseln, in dem sie sich befindet.

In diesem Zusammenhang noch ein Hinweis: Wer bei dieser Meldung dann das Kästchen „Immer nur Datei verschlüsseln“ ankreuzt, bekommt sie nie wieder zu sehen – dem Autor ist bisher auch noch kein Weg (außer einen Neuinstallation) bekannt, auf dem diese Meldung wiederhergestellt werden kann.

Nun existieren auf jedem Fall einen verschlüsselte Datei und ein ebenfalls verschlüsselter Ordner auf dem Testsystem und wir können daran gehen, die unterschiedlichen Methoden zu betrachten, durch deren Einsatz diese Ressourcen schnell und einfach gefunden werden können.

Suchmethoden: Hoher Zeitansatz und bessere Wege des Suchens

Administratoren und Anwender, die über genug Zeit verfügen und zudem auch ein gehöriges Maß an Frustrationstoleranz ihr Eigen nennen, können natürlich mit der Such-Funktionalität des Windows-Systems nach den verschlüsselten Dateien suchen. Mittels der Wildcard „*.*“ kann sich der Anwender alle Dateien und Verzeichnisse auf dem System anzeigen lassen und dann die heraussuchen, deren Dateiname in Grün angezeigt wird – vorausgesetzt, dass auf dem System diese Standardfarbe für verschlüsselte Dateien nicht geänderte wurde. Dieser Ansatz ist wenig sinnvoll und wird vom Autor auf keinem Fall empfohlen, wir haben ihn hier nur der Vollständigkeit halber mit aufgenommen.

Eine etwas bessere Vorgehensweise besteht darin, ein Kommandozeilen-Werkzeug zu verwenden, das den Namen „EFSinfo“ trägt. Dieser Werkzeug gehört ursprünglich zum Windows 200 Resource Kit, ist aber auch auf der CD des Windows Servers 2003 im Verzeichnis \Support\Tools zu finden. Zudem kann es auch direkt von den Microsoft-Seiten heruntergeladen werden.

Dieses einfache Werkzeug kann dazu verwendet werden, die verschlüsselten Dateien und Ordner auf einem Windows-Rechner zu finden. Allerdings zeigt es seine Ergebnisse in der Regel in einer sehr schnell über die Konsole laufenden Anzeige, die die Suche ebenfalls nicht erleichtert. So sollte ein Administrator zunächst einmal das folgende Kommando ausprobieren:

efsinfo /S:C:

Dabei wird er feststellen, dass dieses Kommando den Rechner zwar sehr schnell durchsucht, aber die Anzeigen ebenso schnell auf dem Bildschirm wieder verschwinden. Eine bessere Vorgehensweise besteht darin, die Ausgabe des Kommandos mittels einer Pipe an den „Find“-Befehl des Betriebssystems weiterzuleiten und diesen wiederum nach dem String “: Encrypted“ suchen zu lassen:

efsinfo /S:C: | Find “: Encrypted“

Damit bekommt der Anwender, wie in unserem Bild 2 zu sehen, nun immerhin eine Anzeige der Form:

EFS-Test: Encrypted
EFS-Test.txt: Encrypted

innerhalb der der Konsole angezeigt. Leider bringt diese Anzeige den Pfad der entsprechenden Dateien nicht mit auf den Bildschirm, so dass sie unserem Zweck auch noch nicht besonders dienlich sind.

Ob es, wie in einigen Postings im Internet behauptet wird, eine neuere Version von efsinfo.exe von Microsoft geben wird, die dann diese Fähigkeit mitbringt, konnten wir leider zum Zeitpunkt der Erstellung dieses Artikels (Mitte Mai 2011) nicht herausfinden: Microsoft bietet im Moment nur diese alte Version an und auf der Server-DVD für den Windows Server 2008 ist es leider auch nicht zu finden.

Erfahrene Administratoren werden nun zu Recht einwenden, dass es ja noch das „cipher“-Tool gibt und genau das wollen jetzt auch verwenden. Dieses sehr mächtige Kommandozeilen-Werkzeug stellt sehr viele Möglichkeiten zur Verfügung, um mit Verschlüsselung umzugehen und diese auch zu bearbeiten. Das Tool bietet auch spezielle Schaltereinstellungen, um alle verschlüsselten Dateien auf einem System anzuzeigen. Der folgende Aufruf:

cipher /U /N

durchsucht das komplette Windows-System auf dem der Befehl gestartet wurde und endet mit einer Anzeige in der folgenden Form:

Verschlüsselte Datei(en) auf dem System:
T:\tmp\EFS-Test.txt

Damit sind wir schon ein ganzes Stück weiter, den dieses Kommando zeigt auch den kompletten Pfad zu den entsprechenden Dateien – bei uns befanden sich sowohl die verschlüsselte Datei als auch das verschlüsselte Verzeichnis in dem gleichen tmp-Verzeichnis auf dem Laufwerk T.

Und so zeigt sich schon das Problem dieses ansonsten so vielfältig einzusetzenden Programms: Wir konnten es bei all unseren Versuchen unter Windows 7 nicht dazu bringen, dass es auch den leeren verschlüsselten Ordner mit auflistet.

Bild 3. Eine Lösung, die alle verschlüsselten Dateien und Ordner findet: Das VBS-Skript arbeitet dabei alle lokalen Festplatten ab und gibt das Ergebnis in einer Log-Datei aus.
Bild 4. Ein eindeutiger Ort für die Ergebnisse: Das Skript speichert die Ergebnisse der Überprüfung in einem eigenen Schlüssel in der Registry des jeweiligen Systems ab.

Ein Programm, das genau das Gewünschte erledigt: EFS-Find.vbs

Was tut also ein Administrator, wenn alle vorhandenen Werkzeuge nicht genau so arbeiten, wie er es für seine Arbeit verlangt? Er überlegt sich, ob er die Aufgabe nicht Hilfe eines VBS-Skriptes erledigen kann. Deshalb hat unser Autor das Skript „EFS-Find.vbs“ entwickelt, das wir auch hier auf NT4Admins zum kostenlosen Download bereitstellen.

Nach dem Download der Datei „efs-find.zip“ und dem Entpacken, muss das Programm auf Window-Vista- und Windows-7-Systemen mit Administratorrechten gestartet werden, so dass es notwendig ist, eine entsprechende Eingabeaufforderung mit diesen Rechten zu starten. Dort ist dann der folgende Aufruf in einer Zeile (wie auch in Bild 3 zu sehen) einzugeben:

Cscript // NOLOGO EFS-Find.vbs

Das Skript durchsucht dann alle lokalen Festplatten des Systems und schreibt die Ergebnisse in eine Log-Datei. Dabei werden im Gegensatz zum cipher-Kommando dann auch leere verschlüsselte Ordner auf dem System mit aufgeführt.

Neben der Anzeige auf dem Bildschirm, mittels der das Skript den Fortschritt bei der Suche dokumentiert, zeigt es am Ende auch den Namen der Log-Datei, in der es den kompletten Bericht ablegt. Der Name dieser Datei besitzt die Form EFS-Find-%COMPUTERNAME%.txt. Dadurch wird es auch für Administratoren leichter, die Log-Dateien unterschiedlicher Systeme zu archivieren, in einem Verzeichnis abzuspeichern und wieder richtig zuzuordnen.

Das Skript ist so aufgebaut, dass diese Log-Datei in dem Verzeichnis abgespeichert wird, das vom Windows-System in der Umgebungs-Variablen %TEMP% für den entsprechenden Anwender festgelegt wurde.

Das Skript prüft beim Start zunächst, ob es mit Administratorrechten aktiv ist: Ist das nicht der Fall, so gibt es eine entsprechende Meldung aus und bricht ab. Wenn es weiter abläuft, führt es für jedes eingebaute Laufwerk des Systems zwei Überprüfungen durch: Dabei werden zunächst alle Ordner daraufhin untersucht, ob sich verschlüsselt sind. Dies geschieht durch den Einsatz der „Win32_Directory“-Klasse der Windows Management Instrumentation (WMI).

Im zweiten Durchlauf wird jede Datei daraufhin untersucht, ob sie verschlüsselt ist. Dies geschieht wiederum mit einer WMI-Klasse, hier kommt „CIM_DataFiles" zum Einsatz. Danach schreibt das Skript die Ergebnisse in die Log-Datei hinein, die es öffnet, bevor es selbst die Arbeit beendet. Wer das Skript nicht interaktiv einsetzen will, kann diese Feature leicht ausschalten. Dazu muss er nur im Quellcode die folgende Zeile finden:

objShell.Run """" & strLogFileName & """"

und ausdokumentieren. Im Quellcode, der insgesamt sehr gut dokumentiert ist, findet sich zudem auch noch ein entsprechender Hinweis.

Eine weitere Eigenschaft des Skripts besteht darin, dass es zusätzlich auch noch Informationen in der Registry des entsprechenden Systems ablegt. Dies geschieht, wie in Bild 4 zu sehen, im Pfad:

HKLM\SOFTWARE\EFS-Find

Auf diese Weise existiert auf dem jeweiligen System immer ein eindeutiger Speicherort, an dem die Statusinformationen zu diesem Skript zu finden sind. Zudem kann der Administrator so ganz sicher sein, was den Status der verschlüsselten Dateien und Ordner zu dem dort abgespeicherten Zeitpunkt angeht. Schließlich gibt das Skript – wie es sich für ein sauber programmiertes Programm/Skript gehört – auch einen Fehlerstatus zurück, den ein Administrator auswerten kann, um es beispielsweise auch innerhalb von Batch-Dateien einzusetzen.

Der folgende Befehl, der direkt an der Kommandozeile eingegeben wird, zeigt direkt nach dem Ablauf des Skripts diesen Code an, was ebenfalls in Bild 3 zu sehen ist:

echo %errorlevel%

Wird dabei ein Code „10“ ausgegeben, so bedeutet dies, dass das Skript nicht ausgeführt wurde, weil keine Administratorrechte zur Verfügung standen. Der Code „999“ zeigt an, dass wenigstens eine Datei oder ein Ordner gefunden wurden, die mit EFS verschlüsselt sind. Wird der Code „0“ ausgegeben, so wurden keine derart verschlüsselten Dateien auf dem System gefunden.

Harry Verge/ fms

Lesen Sie auch