檔案系統取證分析(第11章:NTFS概念)

來源:互聯網
上載者:User

標籤:

/*

Skogkatt 開始翻譯於2015-01-24,僅作為學習研究之用,謝絕轉載。

譯註:我翻譯這本書的這三章雖然蓄謀已久,但並不是一個計劃好的工作。因為之前和vczh、mili、darkfall曾討論過everything這個軟體,也曾想過要寫一個開源的everything,於是就出來一個坑。everything這個軟體其實是從底層直接parse了NTFS MFT,然後parse類每一個FILE entry,從裡面拆出來了每一個檔案的資訊,這個操作速度遠快於Win32 FindFirstFile和FindNextFile。道理雖然簡單,但是實現起來代碼不會很少。

又,我從2013年起因工作原因開始研究和分析NTFS檔案系統,並且看過數遍《File System Forensic Analysis》這本書的NTFS三章。這三章的資訊已經略顯過時並且存在一些技術細節謬誤,翻譯出來僅僅是給英語不好的朋友們做為拓展知識所用。如果想認真研究NTFS實現細節,建議看看泄露的Windows原始碼、開源的NTFS3g庫並使用磁碟編輯工具實際看看磁碟的布局。

另外,NTFS3g目前公開的代碼坑很多,在高負荷壓力測試中會出現嚴重的資料丟失損壞甚至檔案系統掛掉,,不建議作為一個嚴謹的NTFS實現來使用。

再,翻譯進行中,不定期更新。

*/

新技術檔案系統(NTFS)是由Microsoft設計的並作為Micrtosoft Windows NT、Windows 2000、 Windows XP和Windows Server的預設檔案系統。在寫作本書的時候,Microsoft已經停止了Windows 98 和 ME 產品線的銷售,Windows XP家庭版成為新的消費系統。FAT仍將會存在於移動和小型存放裝置之中,但NTFS將會成為Windows研究中最為常見的檔案系統。NTFS是比FAT更為複雜的檔案系統,這是由於它具有眾多的功能特性和伸縮性。由於NTFS的複雜性,我們需要三章來討論它。本章將會討論NTFS的核心概念,覆蓋到我們模型中的五個分類。第12章,“NTFS分析”討論了NTFS分析和使用五分類模型來展示我們從哪裡擷取證據。第13章,“NTFS資料結構”介紹了NTFS相關的資料結構。

簡介

NTFS被設計為具有可靠性、安全性和支援大型存放裝置。伸縮性是由通用的資料結構所封裝的具有特定內容的資料來實現的。這之所以是一個可伸縮的設計,是由於內部的資料結構可以根據檔案系統新增的需求而變化,二外部的封裝可以保持不變。一個通用封裝的例子是,NTFS檔案系統的每一個位元組都被分配到檔案之中。我們稍後在本章中將會討論NTFS檔案的概念。

NTFS是一個複雜的檔案系統,不幸的是,並沒有一個從Microsoft公開的規範來描述其在磁碟上的布局。檔案系統高層組件的描述已經公開了,但是底層細節資訊仍然非常匱乏。幸運的是,其他組織已經公開了他們所認為的磁碟布局結構資訊,這些資訊包含在本書之中,並且我們將會用它們來手工深入到磁碟之中。儘管這聽起來很有難度,然而,我們仍然無法確保這裡所描述的資料結構和磁碟上面的完全一致。

NTFS是大量Windows系統的標準,並且在免費的Unix發行版中也越發常見(譯註:Linux)。沒有官方規範和單一支配應用來建立檔案系統兩個因素合并在一起,使得難以區分應用指定的功能和檔案系統通用的功能。例如,存在著Microsoft所不使用的初始設定檔案系統的方法,然而這種方法的結果是否被認為是一個“合法的NTFS”檔案系統還難以定論。Microsoft在每一次新發布Windows系統的時候都會變更檔系統內部,我將會在這裡指出這些改變。

一切都是檔案

為了瞭解NTFS的設計,一個最重要的概念是一切重要的資料都被分配為檔案。這包括其他檔案系統通常隱藏起來的基本的檔案系統管理資料。事實上,包含管理資料的檔案可以存在放卷的任何位置,和普通檔案一樣。也就是說,NTFS檔案系統並不像其他檔案系統那樣有一個特定的布局。整個檔案系統被認為是一個資料區,每一個扇區都可以分配給一個檔案。唯一不變的布局是每一個卷開始的幾個扇區,包含有開機磁區和引導代碼。

MFT概念

主檔案表格(MFT)是NTFS的心臟,這是因為它包含所有檔案和目錄的資訊。每一個檔案和目錄在表中至少有一個入口(Entry),entry本身很簡單。每一個entry都是1KB大,但是只有前42位元組有定義的用途。剩餘的空間用來儲存屬性(Attributes),屬性是很小的具有特性用途的資料結構。例如,有一個屬性用來儲存檔案的名稱,另一個屬性用來儲存檔案的內容。圖11.1一個MFT entry的基本布局,包括頭資訊和三個屬性。

圖11.1 一個MFT entry,有一個小頭部,剩餘的部分用來儲存不同的屬性。這個entry有三個屬性。

Microsoft稱每一個表中的entry為一個檔案記錄,但是我想把每一個entry簡稱為MFT entry,這樣更便於記憶。每一個entry都基於其在表中的位置有一個地址,從0開始。所有的entry的大小都是1024位元組,不過實際的大小定義在開機磁區中。

如NTFS中的所有一切一樣,MFT也是一個檔案。導致這個令人困惑的是MFT有一個它自己的entry。表中第一個entry名字叫做$MFT,它描述了MFT在磁碟上的位置。實際上,這是唯一描述MFT在磁碟上的位置的地方;也就是說,你需要處理這個entry才能得知MFT的布局和大小。MFT的起始位置在開機磁區給出,開機磁區始終是檔案系統的第一個扇區。我們可以在圖11.2看到這個,如何使用開機磁區找到第一個MFT entry,它顯示出MFT被分為片段,有32到34和56到58的簇組成。類似於FAT,NTFS使用簇,簇由連續的扇區組成。

圖11.2 開機磁區和$MFT的關係,用來確定MFT的布局。

在Microsoft實現的NTFS中,MFT開始保持盡量小的尺寸,當需要更多的entry時擴充MFT。理論上說,作業系統可以在建立檔案系統的時候建立固定數量的entry,但是Microsoft實現的動態特性允許很方便的通過分卷擴充檔案系統容量。Microsoft在MFT entry建立後不刪除它們。

MFT entry內容

每一個MFT entry的大小定義在開機磁區之中,但是Microsoft使用的所有版本都使用1024位元組大小。資料結構開始的42個位元組包含12個域,剩餘的982位元組沒有特定的結構,可以用屬性填充。你可以把一個MFT entry想想為一個用來存放你物品的大盒子。盒子外面是你的基本資料,比如你的名字和地址。基本資料等價於MFT entry的固定域。盒子裡面一開始是空的,但是它可以用來儲存任何比它小的容器。這非常像MFT entry沒有內部結構並且它含有一些包含特定資訊的屬性。

每一個MFT entry的第一個域是簽名,一個標準的entry是ASCII字串“FILE”,如果一個entry裡面發現了錯誤,它可能含有字串“BAAD”,還有一個標誌域用來標識這個entry是否使用、這個entry是否是一個目錄。一個MFT entry的分配狀態也可以通過$MFT檔案的$BITMAP屬性來檢查,詳見第13章。

如果一個檔案無法把它的所有屬性放進一個entry,它可以使用多個entry。當這種情況發生的時候買第一個entry被稱為基本檔案記錄,或者基本MFT entry,後續的每一個entry都在它的固定域儲存有基本entry的地址。

第13章顯示了一個MFT entry的資料結構,並分解了我們的樣本檔案系統鏡像。

MFT entry 地址

每一個MFT entry都使用一個48位的順序地址,第一個entry地址是0。MFT最大地址隨著MFT的增長而增大,它的值由$MFT的大小除以每一個entry的大小來計算。Microsoft稱這個順序地址為檔案編號(File number)。

每一個MFT entry還有一個16位的順序號,當entry分配的時候這個順序號增長。例如,想象一下MFT entry313的順序號是1.entry313的檔案刪除了,然後這個entry被分配給一個新的檔案。當這個entry被重新分配,它得到了一個新的順序號2。MFT entry和順序號組合起來,順序號放在高16位,組成了一個64位的檔案參考地址,見圖11.3。

圖11.3 MFT地址和順序號組成一個檔案參考地址的例子。

NTFS使用檔案參考地址來引用MFT entry,這是由於順序號使得檢查檔案系統是否處於一種損壞狀態變得容易。例如,如果系統在一個檔案的資料結構被分配的時候崩潰了,順序號可以用來判斷一個資料結構是否包含MFT entry,是因為上一個檔案使用了它還是它是新檔案的一部分。我們也可以用它來恢複被刪除的內容。例如,如果我們有一個未分配的資料結構,裡面有檔案參考號,我們可以判斷這個資料結構被使用以來MFT entry是否被重新分配過。順序號在資訊挖掘中有很大的作用,但是在本章為簡單起見,我將主要討論檔案號,或者MFT entry地址。

檔案系統元檔案

由於卷的每一個位元組都被分配給了檔案,必定有檔案儲存了檔案系統的管理資料。Microsoft稱它們為元檔案,但這樣會導致困惑,因為我們還要討論檔案中繼資料。我將會稱這些特殊檔案為檔案系統元檔案。

Microsoft保留了前16個MFT entry作為檔案系統元檔案(Microsoft文檔聲稱只保留了前16個entry,但是實際上第一個使用者檔案或者目錄從entry24開始。entry17到23作為緩衝entry防止預留的不夠用導致溢出),這些保留並且未用的entry被置為分配狀態並且只有基本的資訊。每個檔案系統元檔案都列在根目錄,儘管通常情況下普通使用者是看不到它們的。每一個檔案系統元檔案的名字都由“$”開始,並且第一個字母大寫。我們將在第12章討論每一個檔案系統元檔案,但是我們現在把它們列在表11.1作為一個方便參考。

表11.1標準的NTFS檔案系統元檔案

Entry

File Name

Description

0 $MFT MFT自身的entry
1 $MFTMirr 含有MFT起始的幾個entry的備份
2 $LogFile 含有中繼資料事務的日誌
3 $Volume 含有卷資訊
4 $AttrDef 含有屬性資訊
5 . 檔案系統根目錄
6 $Bitmap 檔案系統簇的分配狀態
7 $Boot 開機磁區和檔案系統引導代碼
8 $BadClus 含有壞扇區的簇
9 $Secure 還有安全和存取控制相關資訊
10 $Upcase 含有每一個Unicode字元的大寫形式
11 $Extend 含有可選擴充檔案的目錄。

MFT入口屬性概念

// TODO

其他屬性概念

// TODO

索引

// TODO

分析工具

// TODO

總結

NTFS之中的每一個關鍵元素都被關聯給了一個檔案或者一個索引。本章之中,我們討論了NTFS的核心概念:MFT入口、屬性和索引。通過使用這些基本的概念,我們現在就可以檢查特定的屬性和分析第12章中的分類項目。

參考資料

略,請看原著

檔案系統取證分析(第11章:NTFS概念)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.