Gelöschte Ordner mit ShellBags nachweisen
Mit ShellBags belegen, dass ein gelöschter oder umbenannter Ordner existierte: Pfad, eingebettete Zeiten, MFT-Eintrag und Sequenz, bestätigt über $MFT und USN.
TL;DR. ShellBags behalten Einträge, nachdem der Ordner gelöscht wurde; vollständiger Pfad, Name und eingebettete Zeiten eines verschwundenen Ordners überleben also im Hive des Benutzers. Unter NTFS enthält das Shell-Item zudem die MFT-Eintrags- und Sequenznummer des Ordners. Schlagen Sie diesen Eintrag in der aktuellen $MFT nach: gleiche Sequenz und gleicher Name, der Ordner (oder sein Datensatz) existiert noch; höhere Sequenz, er wurde gelöscht und der Datensatz wiederverwendet; nicht belegter Datensatz mit gleicher Sequenz, gelöscht, aber noch nicht wiederverwendet. Nehmen Sie dann die Dateireferenz mit ins USN-Journal, um die Löschung zu datieren.
„Diesen Ordner gab es nie“ und „den habe ich vor Monaten gelöscht“ sind Aussagen, die sich mit ShellBags gut überprüfen lassen. Hier ist mein Vorgehen, einschließlich seiner Grenzen.
Warum der Eintrag überlebt
Der Explorer räumt BagMRU-Einträge nicht auf, wenn ein Ordner gelöscht wird. Der Schlüssel beschreibt einen Ort, zu dem der Benutzer navigiert ist, kein lebendes Objekt. Praktiker verlassen sich darauf seit den frühen ShellBags-Forschungen, etwa Chad Tilburys SANS-Beitrag zur Rekonstruktion längst verschwundener Wechseldatenträger. Was Einträge entfernt: Windows' eigene Obergrenze für gemerkte Ordner, Profil-Resets und Bereinigungstools (siehe Grenzen und Anti-Forensik).
Der überlebende Eintrag liefert:
| Feld | Quelle | Nutzen |
|---|---|---|
| Vollständiger Pfad | Aus dem BagMRU-Baum zusammengesetzt | Wo der Ordner lag, auch wenn seine Elternordner ebenfalls weg sind |
| Langer Name und 8.3-Name | File-Entry-Item + 0xBEEF0004-Block | Exakter Name, einschließlich Zeichen, die in manchen Auflistungen verloren gehen |
| Erstellt / geändert / Zugriff | Eingebettete FAT-Zeiten | Wann der Ordner laut Dateisystem angelegt wurde |
| MFT-Eintrag + Sequenz | Erweiterungsblock ab Version 7 | Verknüpft den Eintrag mit einem bestimmten NTFS-Datensatz |
| Schlüssel-LastWrite, MRU-Position | Registry | Wann der Benutzer zuletzt darin oder in der Nähe war |
Schritt 1: Kandidaten finden
Listen Sie alles in den ShellBags des Benutzers auf und vergleichen Sie es mit dem aktuellen Dateisystem. Mit dem ShellBags Parser exportieren Sie als CSV und gleichen die Pfade mit einer Dateiliste aus dem Abbild ab (oder mit einer ausgewerteten $MFT). Ordner, die in den ShellBags, aber nicht auf dem Datenträger vorkommen, sind Ihre Kandidaten.
Zwei Dinge sollten Sie früh aussortieren:
- Wechseldatenträger- und Netzwerkpfade. Ein fehlendes
E:\exfilist nicht gelöscht; das Laufwerk ist nur nicht hier. Prüfen Sie es am Gerät oder Server, wenn Sie Zugriff bekommen. - Archivpfade. Items unterhalb einer
.zipexistierten nie als Ordner auf dem Datenträger. Siehe ShellBags und ZIP-Dateien.
Schritt 2: die MFT-Referenz lesen
Notieren Sie für jeden lokalen NTFS-Kandidaten MFT-Eintrag und Sequenz aus dem Detailbereich (das Suchfeld filtert auch nach MFT-Eintragsnummer). Das Format ist Microsofts MFT_SEGMENT_REFERENCE: eine 48-Bit-Eintragsnummer und eine 16-Bit-Sequenznummer, von Microsoft als zyklisch wiederverwendete Kennung beschrieben. Die NTFS-Dokumentation von libyal hält fest, dass die Sequenznummer bei jeder Freigabe des Datensatzes erhöht wird.
Ohne MFT-Referenz (Items aus der XP-Zeit mit Erweiterungsversion 3, FAT-/exFAT-Volumes, Netzwerk-Items) springen Sie zu Schritt 4.
Schritt 3: mit der aktuellen $MFT vergleichen
Werten Sie die $MFT desselben Volumes aus und schlagen Sie den Eintrag nach:
| Aktueller $MFT-Datensatz | Deutung |
|---|---|
| Belegt, gleiche Sequenz, gleicher Name und Elternordner | Der Ordner existiert noch (vielleicht übersehen). Weicht der Name ab, auf Umbenennung prüfen. |
| Belegt, gleiche Sequenz, anderer Name | Umbenannt (oder innerhalb des Volumes verschoben): gleicher Datensatz, neuer Name. |
| Nicht belegt, gleiche Sequenz | Ordner gelöscht, Datensatz noch nicht wiederverwendet. Seine Attribute und womöglich seine Indexeinträge sind eventuell noch lesbar. |
| Sequenz höher als im ShellBag | Ursprünglicher Ordner gelöscht; der Datensatz gehört jetzt zu etwas anderem. |
| Sequenz niedriger als im ShellBag | Falsches Volume oder ein anderes Abbild des Volumes. Erneut prüfen. |
Dieser Vergleich macht aus „ein ShellBag nennt diesen Ordner“ ein „genau dieser Ordnerdatensatz existierte und wurde gelöscht“, was sich viel schwerer bestreiten lässt.
Eine Umbenennung verdient eine eigene Notiz. Teilen sich zwei ShellBag-Einträge im selben Elternordner MFT-Eintrag und Sequenz, tragen aber unterschiedliche Namen, wurde der Ordner zwischen den beiden Besuchen sehr wahrscheinlich umbenannt. Der alte Name ist der des Eintrags mit der älteren Schlüsselzeit.
Schritt 4: die Löschung datieren
Der ShellBag sagt nicht, wann der Ordner gelöscht wurde. Andere Artefakte schon:
- USN-Journal. Filtern Sie
$UsnJrnl:$Jnach der Dateireferenznummer des Ordners (Eintrag + Sequenz). Ein GrundFILE_DELETEliefert die Zeit; ein PaarRENAME_OLD_NAME/RENAME_NEW_NAMEliefert Umbenennungen. Der USN-Parser erledigt das im Browser. - Papierkorb. Ein in den Papierkorb verschobener Ordner wird zu
$R...mit einer zugehörigen$I...-Datei, die den ursprünglichen Pfad und die Löschzeit enthält. Der Papierkorb-Parser liest$I-Dateien. - Volumeschattenkopien. Ein älterer Snapshot kann den Ordner samt Inhalt noch enthalten.
- LNK-Dateien und Jump Lists. Dateien, die vor dem Löschen aus dem Ordner geöffnet wurden, können in LNK-Dateien und Jump Lists referenziert sein, mit eigenen MFT-Referenzen.
Schritt 5: die Zeitachse eingrenzen
Führen Sie die Teile zusammen:
- Eingebettete Erstellungszeit: Der Ordner existierte spätestens ab diesem Zeitpunkt.
- ShellBags-Schlüsselzeiten (wo möglich MRU-abgeleitet): Der Benutzer war um diese Zeit dort. Siehe ShellBags-Zeitstempel erklärt.
- USN / Papierkorb: Der Ordner wurde zu diesem Zeitpunkt gelöscht.
Eine hypothetische Formulierung (erfundene Werte): „Ein Ordner namens staging existierte unter C:\Users\Public\staging (MFT-Eintrag 104233, Sequenz 3), angelegt am [Datum]. Das Konto hat ihn durchsucht, zuletzt gegen [Uhrzeit]. Der Datensatz wurde freigegeben und wiederverwendet (aktuelle Sequenz 4). Das USN-Journal verzeichnet seine Löschung um [Uhrzeit].“ Jede Aussage stützt sich auf genau eine Quelle, die Sie vorlegen können.
Grenzen
- Keine MFT-Referenz, keine Datensatzprüfung. Items aus der XP-Zeit, FAT-/exFAT-Volumes und manche Item-Typen haben keine verwertbare Referenz.
- Der Eintrag kann älter sein, als Sie denken. Ein vor Jahren in einem migrierten Profil entstandener ShellBag kann auf einen Ordner auf einem längst nicht mehr vorhandenen Datenträger verweisen.
- Bereinigungstools zielen genau auf diesen Nutzen. Werkzeuge, die „Spuren gelöschter Ordner“ entfernen, löschen ShellBags, deren Ordner verschwunden sind. Ein Fehlen beweist nichts.
- Nicht jedes Werkzeug stellt gelöschte Schlüssel wieder her. Aus dem Hive entfernte Einträge können in nicht zugeordneten Zellen liegen; Registry Explorer kann gelöschte Schlüssel anzeigen. Der ShellBags Parser stellt sie noch nicht wieder her.
Häufige Fragen
Behalten ShellBags Einträge für gelöschte Ordner?
Ja. Das Löschen eines Ordners entfernt seinen BagMRU-Eintrag nicht. Der Eintrag bleibt, bis Windows ihn ausdünnt oder ein Bereinigungstool ihn löscht, mit Pfad, eingebetteten Zeiten und unter NTFS der MFT-Eintrags- und Sequenznummer des Ordners.
Wie erkenne ich, ob der MFT-Datensatz des Ordners wiederverwendet wurde?
Vergleichen Sie die Sequenznummer im ShellBag mit dem aktuellen $MFT-Datensatz desselben Eintrags. NTFS erhöht die Sequenznummer, wenn ein Datensatz freigegeben wird; ein höherer aktueller Wert bedeutet, dass der ursprüngliche Ordner weg ist und der Datensatz neu vergeben wurde.