昨天講到 Sector、Cluster 和 File Slack,知道檔案最後會被放進一個個 Cluster 裡。
但這時候還有一個問題:
磁碟底層明明只有一堆 Cluster,Windows 怎麼知道哪些資料屬於
report.docx,哪些又屬於photo.jpg?
因為一個檔案不只有真正的 File Data,系統還需要記錄檔名、大小、資料位置,以及其他和這個檔案有關的資訊。
負責管理這些資訊的,就是 File System。
今天從 Windows 很常見的 NTFS(New Technology File System) 開始,看它怎麼管理一個個 File 和 Folder。
平常打開 Windows Explorer,我們看到的可能是:
C:\
└─ Users
└─ User
└─ Desktop
└─ report.docx
但這其實已經是 File System 整理過後的結果。
磁碟底層真正存放的是 Bytes、Sector 和 Cluster,本身並不知道哪些資料屬於 report.docx。
File System 會負責管理 File 和 Folder 的資訊,再把底層資料組織成我們平常看到的檔案結構。
Physical Storage
Sector / Cluster / Raw Bytes
↓
File System
↓
File / Folder
Windows 常見的 File System 包括 FAT、exFAT 和 NTFS,今天我們先聚焦在 NTFS。
NTFS 裡還有一些用來管理 File System 的特殊 System File,名稱通常會以 $ 開頭,例如 $MFT、$MFTMirr、$LogFile、$Volume 等。
其中在 Digital Forensics 裡很重要的一個,就是 $MFT。
$MFT 的全名是 Master File Table,是 NTFS 用來記錄 File 和 Directory 資訊的重要資料表。
NTFS 中的 File 和 Directory 都會有對應的 MFT Record。
例如:
report.docx
photo.jpg
Projects\
在 Windows Explorer 裡看到的是兩個 File 和一個 Folder,而在 NTFS 裡,背後都會有各自的 MFT Record。
$MFT
│
├─ MFT Record → File
├─ MFT Record → File
├─ MFT Record → Directory
├─ MFT Record → File
└─ ...
$MFT 本身也是 NTFS 的 System File,而且前面幾筆 Record 會用來描述 NTFS 自己的重要 System File,例如 $MFT、$MFTMirr、$LogFile 和 $Volume。
在常見的 NTFS 結構中,一筆 MFT Record 通常是 1024 Bytes,整個 $MFT 會由一筆筆固定大小的 Record 組成。
$MFT
┌────────────────────┐
│ Record 0 │
│ 1024 Bytes │
├────────────────────┤
│ Record 1 │
│ 1024 Bytes │
├────────────────────┤
│ Record 2 │
│ 1024 Bytes │
├────────────────────┤
│ ... │
└────────────────────┘
所以 $MFT 並不是單純存放 File Content,而是 NTFS 管理 File 和 Directory 時非常重要的結構。
一個 File 除了真正的內容,還會有描述它的 Metadata。
例如檔案名稱、基本資訊,以及 File Data 本身,都會透過不同的 Attribute 記錄在 MFT Record 裡。
其中後面很常碰到的包括:
| Attribute | Type | 大致用途 |
|---|---|---|
$STANDARD_INFORMATION |
0x10 |
File 的基本 Metadata |
$FILE_NAME |
0x30 |
File Name 與相關 Metadata |
$DATA |
0x80 |
和 File Data 有關的資訊 |
一筆 MFT Record 會包含 Record Header 和多個 Attribute:
MFT Record
│
├─ Record Header
├─ $STANDARD_INFORMATION
├─ $FILE_NAME
├─ $DATA
└─ ...
$STANDARD_INFORMATION 負責保存 File 的基本資訊,$FILE_NAME 和檔案名稱及相關 Metadata 有關,而 $DATA 則和真正的 File Content 有關。
所以我們平常在 Windows Explorer 裡看到的 report.docx,到了 NTFS 底下,其實會有一整筆 MFT Record 來描述它。
其中 $DATA 還有一個比較特別的地方,就是File Content 不一定全部用相同的方式存放,有些 File 的 Data 可以直接放在 MFT Record 裡,有些則會放在其他 Cluster。
DAY 12 看的是磁碟底層怎麼存放資料:
Disk
↓
Sector
↓
Cluster
↓
File Data
今天再往上一層,看 NTFS 怎麼管理這些資料:
NTFS
↓
$MFT
↓
MFT Record
↓
Attribute
↓
File / Directory 的相關資訊
Sector 和 Cluster 告訴我們資料實際放在哪裡,而 $MFT 則記錄這些資料屬於哪一個 File,以及和這個 File 有關的 Metadata。
所以在 NTFS Forensics 裡,看的不只有 File Content。
描述 File 的 Metadata,本身也是很重要的線索。
而 $MFT 就是分析這些資訊時非常重要的入口。