ShellBags¶
Was ShellBags sind¶
Der Explorer merkt sich, wie jeder von einem Benutzer geöffnete Ordner angezeigt wird: Ansicht, Symbolgröße, Sortierreihenfolge und Fensterposition. Um die Einstellungen eines Ordners wiederzufinden, speichert er die Identität des Ordners in der Registry des Benutzers als Baum von Shell-Items – dieselben Items, die die Ziel-ID-Liste einer Verknüpfung enthält: ein Laufwerk, dann jeder Ordner bis hinunter zum geöffneten. Diese Bäume sind die ShellBags.
Sie umfassen Ordner, die im Explorer sowie in Dialogen zum Öffnen und Speichern geöffnet wurden, einschließlich Ordnern auf Wechsel- laufwerken, Netzwerkfreigaben, tragbaren Geräten (Telefone, Kameras), ZIP-Archiven und FTP-Servern sowie Seiten der Systemsteuerung. Sie bleiben erhalten, nachdem der Ordner, das Laufwerk oder die Netzwerkfreigabe verschwunden ist.
Bestmögliche Schlussfolgerung: Der Explorer dieses Benutzers hat diesen Ordner angezeigt (oder einen Ordner darunter). Ein ShellBag zeigt nicht, was in dem Ordner getan wurde, und es datiert nicht jeden Besuch: siehe die Zeiten unten.
Speicherort¶
C:\Users\<user>\AppData\Local\Microsoft\Windows\UsrClass.dat
Local Settings\Software\Microsoft\Windows\Shell\BagMRU (Windows Vista and later)
Wow6432Node\Local Settings\Software\Microsoft\Windows\Shell\BagMRU (32-bit Explorer)
C:\Users\<user>\NTUSER.DAT
Software\Microsoft\Windows\Shell\BagMRU (desktop and network items)
Software\Microsoft\Windows\ShellNoRoam\BagMRU (Windows XP: local folders)
Ein BagMRU-Schlüssel enthält nummerierte Werte, jeder ein Shell-Item, und einen MRUListEx-Wert, der ihre
Reihenfolge angibt, das zuletzt geöffnete zuerst. Jeder Wert hat einen gleichnamigen Unterschlüssel für die Items
darunter, sodass ein Pfad aus den Items von BagMRU bis hinunter zu einem Wert besteht. Das NodeSlot eines Unterschlüssels ist die
Nummer seines Bags\<N>-Schlüssels, in dem die Ansichtseinstellungen des Ordners liegen.
Sichern Sie UsrClass.dat und NTUSER.DAT mit ihren Transaktionsprotokollen (.LOG1, .LOG2) für jedes
Profil sowie den SOFTWARE-Hive des Systems, der die SID des Benutzers einer NTUSER.DAT liefert.
Welche Zeiten was aussagen¶
- Die Zeiten des Shell-Items (
ItemModifiedUTC,ItemCreatedUTC,ItemAccessedUTC) sind die eigenen Dateisystemzeiten des Ordners (FAT-Genauigkeit: 2 Sekunden) zum Zeitpunkt, als der Explorer das Item schrieb. Sie datieren den Ordner, nicht den Besuch, und werden bei späteren Besuchen nicht aktualisiert. FAT-Uhren haben keinen gespeicherten UTC-Offset. Die althergebrachtenUTC-Überschriften und das angezeigte SuffixZsind Darstellungskonventionen, kein Beweis für die Zeitzone der Quelle.auto-parse --timezonebewahrt diese Felder unverändert; interpretieren Sie sie mit dem Kontext des Quellsystems. - Die Zeit des letzten Schreibzugriffs auf einen Schlüssel ändert sich, wenn sein
MRUListExneu geschrieben wird, also wenn eines seiner Items geöffnet und nach vorn verschoben wird. Daher ist die Zeit des Schlüssels, in dem der Wert eines Items steht (ParentKeyLastWrittenUTC), der Zeitpunkt der letzten Öffnung des Items nur dann, wenn es das jüngste Item in diesem Schlüssel ist (IsMostRecentInParenttrue,MruPosition0). Für die anderen Items ist es ein späterer Zeitpunkt, zu dem ein Geschwister-Item geöffnet wurde. - Der eigene Schlüssel eines Items (
KeyLastWrittenUTC) datiert auf dieselbe Weise die Öffnung seines jüngsten untergeordneten Items.
Hinweise für die Analyse¶
- Fehlen beweist wenig. Der Explorer schreibt ShellBags, wenn die Ansicht eines Ordners gespeichert wird; ein Ordner, der nur kurz angezeigt oder auf andere Weise geöffnet wurde (Befehlszeile, Skript, Programm), hat möglicherweise keine. Ein Benutzer kann die Schlüssel löschen.
- Eine NTFS-Referenz ist die des Ordners (
MftEntry,MftSequence) zum Zeitpunkt, als das Item geschrieben wurde. Schlagen Sie sie in der$MFTnach, um zu sehen, ob derselbe Ordner noch existiert oder eine andere Datei den Eintrag wiederverwendet hat. - Wechsellaufwerke werden nach ihrem Laufwerksbuchstaben benannt. Es ist der Buchstabe, den das Laufwerk damals hatte; ordnen Sie ihn mit dem Verlauf von USB- und eingebundenen Geräten dem Gerät zu.
- Namen stammen aus dem Item. Ein später umbenannter Ordner behält hier seinen alten Namen. Stamm- und bekannte
Ordner werden so benannt, wie forensische Tools sie üblicherweise benennen (
This PC,Quick Access,Downloads);Guidliefert ihre Kennung. - Suchergebnisse, Bibliotheken und Seiten der Systemsteuerung sind Ansichten, keine Ordner auf dem Datenträger
(
property_view,control_panel_item,control_panel_category). - Ein Item, das kein Parser kennt, behält seine Bytes in
DataRaw, mitItemTypeunknownund seinem Klassenbyte inItemClass. Beschädigte oder ungewöhnliche Items werden inProblemsgemeldet, und auch ihre Bytes bleiben erhalten. - Einem „dirty“ Hive können ohne seine Protokolle die neuesten Items fehlen. Juntei spielt die Protokolle neben dem
Hive ein, sofern nicht
--no-logsangegeben ist;TransactionLogStatusgibt an, ob ein Datensatz aus ihnen stammt.
Mit Juntei parsen¶
Usage: juntei parse-registry shell-bags <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find UsrClass.dat and NTUSER.DAT hives
-f, --file <FILE> Parse one UsrClass.dat or NTUSER.DAT
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Parsing:
--code-page <NUMBER> Windows code page for ANSI names in shell items (default: 1252)
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry shell-bags -d evidence/ -o shellbags.csv
juntei parse-registry shell-bags -f UsrClass.dat -t jsonl \
| jq 'select(.ItemType == "volume" and .GUID == "{F5FB2C77-0E2F-4A16-A381-3E560C68BC83}")'
Shell-Items werden mit ys-lnk-parser dekodiert, dem Shell-Item-Parser von parse-file lnk. Die
Zusammenfassung listet die zuletzt geöffneten Ordner (neueste zuerst) anhand der Zeit des letzten Schreibzugriffs auf ihren Elternschlüssel auf,
zusammen mit ihren Benutzern.
Ausgabefelder¶
| Feld | Interpretation |
|---|---|
Host, User, UserSID, SourcePath, HiveType |
Host, Name des Profilordners, SID des Benutzers (der Stammschlüssel einer UsrClass.dat benennt sie; bei NTUSER.DAT die ProfileList des Systems), der Hive und sein Typ. |
BagKey |
Der Schlüssel des Items unterhalb des Hive-Stamms (…\BagMRU\4\3\0): Sein Wert steht im darüberliegenden Schlüssel. |
MRU-Position, IsMostRecentInParent |
Seine Position im MRUListEx des Elternschlüssels (0: das zuletzt geöffnete); leer, wenn die Liste es nicht enthält. |
NodeSlot |
Die Nummer seines Bags\<N>-Schlüssels (die Ansichtseinstellungen des Ordners). |
Path |
Die Items von der Spitze seines Baums bis zu ihm, verbunden mit \. [unknown] steht für ein Item, dessen Wert fehlt. |
ItemType, ItemClass |
Was das Item ist (root_folder, volume, directory, file, network_location, uri, ftp_folder, compressed_folder, portable_device, portable_device_folder, users_files_folder, property_view, control_panel_item, control_panel_category, cd_burn, unknown), und sein Klassenbyte. |
ItemName, GUID |
Sein Name (der lange Name eines Ordners) und die Klassenkennung eines Stammordners, Systemsteuerungselements oder Delegatordners. |
ItemModifiedUTC, ItemCreatedUTC, ItemAccessedUTC |
Aus dem Shell-Item: die Zeiten des Ordners zum Zeitpunkt, als das Item geschrieben wurde (FAT, 2 Sekunden Genauigkeit). |
MFT-Entry, MFT-Sequence |
Aus dem Shell-Item: die NTFS-Dateireferenz des Ordners. |
ExtensionBlocks |
Wie viele Erweiterungsblöcke das Item hat. |
KeyLastWrittenUTC |
Aus der Registry: der letzte Schreibzugriff auf den eigenen Schlüssel des Items: wann sein jüngstes untergeordnetes Item geöffnet wurde. |
ParentKeyLastWrittenUTC |
Aus der Registry: der letzte Schreibzugriff auf den Schlüssel, in dem sein Wert steht: wann es zuletzt geöffnet wurde, sofern IsMostRecentInParent true ist. |
DataRaw |
Die Bytes des Werts (hexadezimal) bei einem Item, das nicht vollständig verstanden wird oder Probleme aufweist. |
TransactionLogStatus, LogsApplied |
Kontext der Registry-Wiederherstellung. |
Problems |
Ein Wert, den das MRUListEx seines Schlüssels nennt, den der Schlüssel aber nicht hat, ein Wert, den die Liste nicht nennt, ein Unterschlüssel ohne seinen Wert, ein Wert, der nicht binär ist, ein NodeSlot des falschen Typs, eine beschädigte Shell-Item-Liste. |
Untersuchungsstrategie¶
- Listen Sie Wechsellaufwerke (
volumemit derGuidfür Removable Drives), Netzwerkorte, FTP- Ordner und tragbare Geräte sowie die Ordner darunter auf. - Suchen Sie nach relevanten Ordnern: für Benutzer beschreibbare Staging-Orte (
Temp,ProgramData,Public), Tool- und Archivordner, Profile anderer Benutzer und nicht mehr existierende Ordner (prüfen Sie die NTFS-Referenz in der$MFT). - Datieren Sie Besuche nur mit
ParentKeyLastWrittenUTCvon Items, bei denenIsMostRecentInParenttrue ist; korrelieren Sie den Rest mit LNK-Dateien, Jump Lists und RecentDocs, die das Öffnen von Dateien datieren. - Verwenden Sie
parse-registry read --recover-deletedfür gelöschteBagMRU-Schlüssel und -Werte.
Weitere Informationen¶
Die SID-Ermittlung aus ProfileList erfordert genau eine eindeutige, syntaktisch gültige SID. Mehrdeutige Zuordnungen von Profilordnern und Sicherungsschlüssel wie S-1-...bak lassen UserSid unbekannt.