ShellBags¶
Apa itu ShellBags¶
Explorer mengingat bagaimana setiap folder yang dibuka pengguna ditampilkan: tampilannya, ukuran ikon, urutan pengurutan, dan posisi jendela. Untuk menemukan kembali pengaturan sebuah folder, Explorer menyimpan identitas folder tersebut di registry pengguna sebagai pohon shell item, yaitu item yang sama dengan yang disimpan dalam target ID list sebuah tautan: sebuah drive, lalu setiap folder hingga folder yang dibuka. Pohon-pohon inilah yang disebut ShellBags.
ShellBags mencakup folder yang dibuka di Explorer dan di dialog buka dan simpan, termasuk folder di drive lepas pasang, network share, perangkat portabel (ponsel, kamera), arsip ZIP dan server FTP, serta halaman Control Panel. ShellBags tetap ada setelah folder, drive, atau network share tersebut tidak ada lagi.
Kesimpulan terbaik: Explorer milik pengguna ini menampilkan folder ini (atau folder di bawahnya). ShellBag tidak menunjukkan apa yang dilakukan di dalam folder, dan tidak memberi tanggal pada setiap kunjungan: lihat waktu-waktu di bawah ini.
Lokasi¶
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)
Key BagMRU menyimpan nilai-nilai bernomor, masing-masing satu shell item, dan nilai MRUListEx yang memberikan
urutannya, yang terakhir dibuka terlebih dahulu. Setiap nilai memiliki subkey dengan nama yang sama untuk item-item
di bawahnya, sehingga sebuah path adalah item-item dari BagMRU hingga sebuah nilai. NodeSlot sebuah subkey adalah
nomor key Bags\<N>-nya, tempat pengaturan tampilan folder berada.
Kumpulkan UsrClass.dat dan NTUSER.DAT beserta log transaksinya (.LOG1, .LOG2) untuk setiap
profil, serta hive SOFTWARE milik sistem, yang memberikan SID pengguna sebuah NTUSER.DAT.
Waktu mana yang menyatakan apa¶
- Waktu shell item (
ItemModifiedUTC,ItemCreatedUTC,ItemAccessedUTC) adalah waktu sistem berkas milik folder itu sendiri (presisi FAT: 2 detik) ketika Explorer menulis item tersebut. Waktu ini memberi tanggal pada folder, bukan kunjungan, dan tidak diperbarui pada kunjungan berikutnya. Jam FAT tidak memiliki offset UTC yang tersimpan. JudulUTClawas dan akhiranZyang ditampilkan adalah konvensi tampilan, bukan bukti zona waktu sumber.auto-parse --timezonemempertahankan field-field ini; interpretasikan dengan konteks sistem sumber. - Waktu last-write sebuah key berubah ketika
MRUListEx-nya ditulis ulang, yaitu ketika salah satu itemnya dibuka dan dipindahkan ke depan. Jadi, waktu key tempat nilai sebuah item berada (ParentKeyLastWrittenUTC) adalah saat item tersebut terakhir dibuka hanya jika item itu adalah item terbaru di key tersebut (IsMostRecentInParentbernilai true,MruPosition0). Untuk item lainnya, itu adalah waktu yang lebih belakangan, ketika item saudaranya dibuka. - Key milik item itu sendiri (
KeyLastWrittenUTC) memberi tanggal pada pembukaan child terbarunya dengan cara yang sama.
Peringatan bagi analis¶
- Ketiadaan membuktikan sedikit. Explorer menulis ShellBags ketika tampilan sebuah folder disimpan; folder yang hanya dilihat sebentar, atau dibuka dengan cara lain (baris perintah, skrip, program), mungkin tidak memilikinya. Pengguna dapat menghapus key-key tersebut.
- Referensi NTFS adalah milik folder (
MftEntry,MftSequence) ketika item ditulis. Cari di$MFTuntuk melihat apakah folder yang sama masih ada, atau berkas lain telah menggunakan kembali entri tersebut. - Drive lepas pasang dinamai berdasarkan huruf drive-nya. Huruf tersebut adalah huruf yang dimiliki drive pada saat itu; cocokkan dengan riwayat USB dan perangkat yang di-mount untuk mengetahui perangkatnya.
- Nama berasal dari item. Folder yang kemudian diubah namanya tetap memiliki nama lamanya di sini. Folder root dan known
folder dinamai sebagaimana alat forensik umumnya menamainya (
This PC,Quick Access,Downloads);Guidmemberikan pengenalnya. - Hasil pencarian, library, dan halaman Control Panel adalah tampilan, bukan folder di disk
(
property_view,control_panel_item,control_panel_category). - Item yang tidak dikenal parser mana pun menyimpan byte-nya di
DataRaw, denganItemTypeunknowndan byte kelasnya diItemClass. Item yang rusak atau tidak biasa dilaporkan diProblems, dan byte-nya juga disimpan. - Hive yang dirty mungkin tidak memiliki item terbarunya tanpa log-nya. Juntei me-replay log yang berada di samping
hive kecuali
--no-logs;TransactionLogStatusmenunjukkan apakah sebuah record berasal dari log tersebut.
Mengurai dengan Juntei¶
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 item didekode dengan ys-lnk-parser, parser shell item yang digunakan oleh parse-file lnk.
Ringkasan mencantumkan folder yang terakhir dibuka (terbaru terlebih dahulu), berdasarkan waktu last-write key parent-nya,
beserta penggunanya.
Field keluaran¶
| Field | Interpretasi |
|---|---|
Host, User, UserSID, SourcePath, HiveType |
Host, nama folder profil, SID pengguna (nama root key UsrClass.dat menyebutkannya; untuk NTUSER.DAT, ProfileList milik sistem), hive, dan tipenya. |
BagKey |
Key item, di bawah root hive (…\BagMRU\4\3\0): nilainya berada di key di atasnya. |
MRU-Position, IsMostRecentInParent |
Posisinya dalam MRUListEx milik key parent-nya (0: yang terakhir dibuka); kosong bila daftar tidak memilikinya. |
NodeSlot |
Nomor key Bags\<N>-nya (pengaturan tampilan folder). |
Path |
Item-item dari puncak pohonnya hingga item tersebut, digabungkan dengan \. [unknown] mewakili item yang nilainya hilang. |
ItemType, ItemClass |
Jenis item (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), dan byte kelasnya. |
ItemName, GUID |
Namanya (nama panjang folder), dan pengenal kelas dari root folder, item Control Panel, atau delegate folder. |
ItemModifiedUTC, ItemCreatedUTC, ItemAccessedUTC |
Dari shell item: waktu folder ketika item ditulis (FAT, presisi 2 detik). |
MFT-Entry, MFT-Sequence |
Dari shell item: referensi berkas NTFS milik folder. |
ExtensionBlocks |
Jumlah extension block yang dimiliki item. |
KeyLastWrittenUTC |
Dari registry: last write dari key milik item itu sendiri: saat child terbarunya dibuka. |
ParentKeyLastWrittenUTC |
Dari registry: last write dari key tempat nilainya berada: saat item terakhir dibuka, jika IsMostRecentInParent bernilai true. |
DataRaw |
Byte nilai (hex), untuk item yang tidak sepenuhnya dipahami atau memiliki masalah. |
TransactionLogStatus, LogsApplied |
Konteks pemulihan registry. |
Problems |
Nilai yang disebutkan oleh MRUListEx key-nya tetapi tidak dimiliki key tersebut, nilai yang tidak disebutkan oleh daftar, subkey tanpa nilainya, nilai yang bukan biner, NodeSlot dengan tipe yang salah, daftar shell item yang rusak. |
Strategi investigasi¶
- Daftarkan drive lepas pasang (
volumedenganGuidRemovable Drives), lokasi jaringan, folder FTP, dan perangkat portabel, serta folder-folder di bawahnya. - Cari folder yang menarik: lokasi staging yang dapat ditulis pengguna (
Temp,ProgramData,Public), folder alat dan arsip, profil pengguna lain, dan folder yang sudah tidak ada (periksa referensi NTFS di$MFT). - Beri tanggal pada kunjungan hanya dengan
ParentKeyLastWrittenUTCdari item yangIsMostRecentInParent-nya bernilai true; korelasikan sisanya dengan berkas LNK, Jump Lists, dan RecentDocs, yang memberi tanggal pada pembukaan berkas. - Gunakan
parse-registry read --recover-deleteduntuk key dan nilaiBagMRUyang dihapus.
Detail lebih lanjut¶
Pencarian SID dari ProfileList memerlukan satu SID yang unik dan valid secara sintaksis. Pemetaan folder profil yang ambigu dan key cadangan seperti S-1-...bak membuat UserSid tidak diketahui.