秦志紅
摘? ?要:NTFS流是NTFS文件系統(tǒng)非常實用的功能,可以把文件的很多非常規(guī)屬性以流的形式進(jìn)行表達(dá),但同時也提供了一種數(shù)據(jù)隱藏的方式,數(shù)據(jù)以NTFS流的方式進(jìn)行隱藏在Windows操作系統(tǒng)中比較常見。文章通過分析NTFS交換數(shù)據(jù)流原理,重點研究以NTFS流進(jìn)行數(shù)據(jù)隱藏的若干種形式,提出了有針對性的數(shù)據(jù)分析檢驗方法和線索發(fā)現(xiàn)手段,為相關(guān)應(yīng)用行業(yè)提供技術(shù)依據(jù)。
關(guān)鍵詞:數(shù)據(jù)隱藏;NTFS流;數(shù)據(jù)檢驗
1? ? NTFS交換數(shù)據(jù)流原理
新技術(shù)文件系統(tǒng)(New Technology File System,NTFS)交換數(shù)據(jù)流也稱備用數(shù)據(jù)流(Alternate Data Streams,ADS),是NTFS文件系統(tǒng)的主要特性,在NTFS文件系統(tǒng)中允許文件附加多個數(shù)據(jù)流。眾所周知,每個文件都有主文件流,包括文件大小、時間戳等基本屬性,但在ADS功能中文件還可以在主文件流之外存在許多非主文件流,這些非主文件流寄宿在主文件流中,盡管通過正常的文件瀏覽是沒辦法看到這些非主文件流的信息,但其卻是真實地存在于磁盤空間中的,NTFS文件系統(tǒng)特有的數(shù)據(jù)組織方式可以滿足操作系統(tǒng)對非主文件流的管理[1]。
1.1? NTFS文件的數(shù)據(jù)組織方式
與之前的文件配置表(File Allocation Table,F(xiàn)AT)文件系統(tǒng)不同的是,NTFS采用主文件表(Master File Table,MFT)對文件的各種數(shù)據(jù)信息進(jìn)行組織和管理,每個MFT分配1 024個字節(jié),即兩扇區(qū)大小,包括從10 H到B0 H的多個屬性,不同的屬性表達(dá)不同含義,如圖1為1.txt文件的數(shù)據(jù)組織方式,框內(nèi)分別為10 H屬性和80 H屬性,其中,80 H屬性中包含了文件內(nèi)容“1234567890”。對于比較小的文件,如果MFT的大小能夠滿足,則系統(tǒng)不會另外分配存儲空間。
圖2為2.jpg文件的數(shù)據(jù)組織方式,很明顯,框內(nèi)的80 H屬性中沒有包含文件的所有內(nèi)容,文件內(nèi)容根據(jù)80 H屬性的data runs由系統(tǒng)另外分配了存儲空間。
1.2? NTFS流的數(shù)據(jù)組織方式
通過分析NTFS的文件數(shù)據(jù)組織方式,可以看到MFT的80 H屬性能夠反映文件的數(shù)據(jù)存儲形式,根據(jù)該屬性可以找到文件中所包含數(shù)據(jù)所在位置。正是利用NTFS文件系統(tǒng)的這一特性,為交換數(shù)據(jù)流提供了數(shù)據(jù)存儲的可能性。如圖3所示為在1.txt文件中寄宿2.jpg數(shù)據(jù)內(nèi)容的MFT[1]??梢钥吹皆谶@個MFT中存在2個80 H屬性,前面一個為1.txt文件的數(shù)據(jù)內(nèi)容,后一個為2.jpg文件的數(shù)據(jù)內(nèi)容。徹底刪除2.jpg文件后,通過正常的數(shù)據(jù)瀏覽只能看到1.txt文件,但事實上,2.jpg的數(shù)據(jù)仍然存在于磁盤空間中,只是被1.txt的交換流隱藏了起來。
可見,NTFS流隱藏數(shù)據(jù)的原理就是利用MFT中80 H屬性表達(dá)數(shù)據(jù)內(nèi)容的特性,在其中增加若干個80 H屬性,宿主文件位居第一,其他的寄宿流文件分別被分配不同的80 H屬性,代表不同的數(shù)據(jù)內(nèi)容。
2? ? NTFS流隱藏數(shù)據(jù)的方式
從原理上來看,NTFS流可以隱藏所有數(shù)據(jù),具體來說包括各種類型的文件和單純的文本,但隱藏文本和文件的方式是不同的。
2.1? NTFS流隱藏文本
隱藏文本采用的命令是:echo “文本”>宿主文件:寄宿文件。例如,把文本“pass”隱藏在文件1.txt中,在命令行輸入echo pass>1.txt:2,其中2為寄宿文件,可以不指定擴展名,并不影響把數(shù)據(jù)隱藏在磁盤空間中[2]。如果宿主文件的MFT空間能夠容納文本大小,則會在其MFT中增加一個80 H屬性,并且數(shù)據(jù)內(nèi)容存在于該屬性中,否則系統(tǒng)會另外分配存儲空間給文本,而80 H屬性只會保存data runs。
2.2? NTFS流隱藏文件
NTFS流可以隱藏所有類型的文件,隱藏文件的方式與隱藏文本基本相同,只是所采用的命令是type。例如把文件2.jpg隱藏在1.txt中,在命令行輸入type 2.jpg>1.txt:2,其中2也是寄宿文件,這個文件類型是jpg。如果用圖片瀏覽類工具可以查看其內(nèi)容。表現(xiàn)在MFT中,也是在1.txt的MFT中增加一個80 H屬性,用于表達(dá)2.jpg的數(shù)據(jù)內(nèi)容。
3? ? NTFS流隱藏數(shù)據(jù)的檢驗
需要特別說明的是,NTFS流對可執(zhí)行文件的隱藏。病毒、木馬等惡意程序大都需要以可執(zhí)行文件的形式進(jìn)行傳播并在受害者終端運行,這些文件很容易被殺毒軟件或者防火墻發(fā)現(xiàn),無法達(dá)到目的,需要進(jìn)行隱藏,而NTFS流提供了很好的隱藏功能,被惡意程序廣泛使用。然而隨著此類問題日益突出,Windows操作系統(tǒng)升級過程中取消了使用start命令執(zhí)行流隱藏exe文件的功能,導(dǎo)致此類文件即使被隱藏,也無法運行,雖然此舉可以避免惡意代碼傳播,但同時也阻止了正常exe文件的執(zhí)行,造成諸多不便。如果確實需要使用此類文件,可以建立mklink指向寄宿文件。
如前所述,通過NTFS流隱藏的數(shù)據(jù)很多是惡意程序,在公安機關(guān)電子數(shù)據(jù)取證過程中需要對此類行為進(jìn)行檢驗并作證據(jù)固定,從而印證違法行為。
3.1? 查看隱藏數(shù)據(jù)
隱藏數(shù)據(jù)和加密數(shù)據(jù)相比,前者傾向于對數(shù)據(jù)所采取的保密方法不能為人所知,而加密數(shù)據(jù)則更注重于密鑰的保護(hù)。因此,如果已經(jīng)知道了此類數(shù)據(jù)的隱藏方法,查看就不再是難題。了解NTFS流隱藏數(shù)據(jù)的原理后,就可以有針對性的查看其中隱藏的數(shù)據(jù)。具體來說,就是對所懷疑文件的MFT進(jìn)行分析,如果存在多個80 H屬性,則表明該文件中寄宿有非主文件流,逐一對各個非主文件流進(jìn)行分析以后,每個寄宿文件的數(shù)據(jù)內(nèi)容、存儲位置就能查看了。如圖3所示,表明宿主文件1.txt中存在以NTFS流方式寄宿的隱藏數(shù)據(jù)。
至于隱藏數(shù)據(jù)的內(nèi)容,則需要更進(jìn)一步分析才能查看。如果寄宿的數(shù)據(jù)比較少,在80 H屬性中可以直接查看;但情況如圖3所示寄宿的數(shù)據(jù)比較多,則要分析data runs,data runs的結(jié)構(gòu)和普通80 H一樣,如圖4所示,第一個字節(jié)21 H指明文件的位置和占用空間大小。21中的“2”表示寄宿文件所在位置為0598 H簇,“1”表示所占空間為07 H簇。按照這個指示就可以找到文件位置并能夠查看內(nèi)容了。
然而很多時候,檢驗人員并不能夠知道哪個文件中被寄宿了交換數(shù)據(jù)流,無法有針對性地分析其MFT的80H屬性。為了更快地進(jìn)行鑒別,可以選擇工具作為初選,常用的工具有低空探測系統(tǒng)(Low-Altitude Detection System,LADS),Streams等,最簡單的還可以使用cmd命令中的dir /r來查看,但這個方法經(jīng)常會漏檢,選擇時要慎重。經(jīng)過初查后,會發(fā)現(xiàn)可能的宿主文件,然后再使用WinHex等編輯器進(jìn)一步分析和查看隱藏文件的內(nèi)容。
3.2? 提取固定隱藏數(shù)據(jù)
在公安實際工作中,如果NTFS流隱藏的數(shù)據(jù)能證明嫌疑人的違法行為,還需要對證據(jù)進(jìn)行提取和固定,這一過程必須規(guī)范。
3.2.1? 提取固定宿主文件
使用前面提到的工具找到宿主文件,對宿主文件生成數(shù)字簽名并復(fù)制到U盤等存儲介質(zhì)。需要特別注意的是,NTFS流隱藏的數(shù)據(jù)信息標(biāo)識在宿主文件的MFT中,MFT是NTFS文件系統(tǒng)特有的,如果宿主文件被復(fù)制到FAT文件系統(tǒng)中,由于對文件的管理不再是MFT,則會丟失NTFS流數(shù)據(jù),導(dǎo)致隱藏的數(shù)據(jù)無法繼續(xù)提取并固定。所以,提取宿主時存儲目標(biāo)介質(zhì)的文件系統(tǒng)要求必須是NTFS。
3.2.2? 提取固定寄宿的隱藏數(shù)據(jù)
如果在宿主計算機上直接提取,發(fā)現(xiàn)宿主文件后分析其中寄宿的隱藏數(shù)據(jù)個數(shù),逐一提取。對于文本類的隱藏數(shù)據(jù),可以在powershell下執(zhí)行g(shù)et-content命令先查看內(nèi)容,如果有必要再進(jìn)行提取。非文本類隱藏數(shù)據(jù),也可以通過get-content命令查看,但由于其中包含較多的不可識別字符,一般需要對隱藏數(shù)據(jù)直接進(jìn)行提取后再分析。
可能某些原因不適合在現(xiàn)場進(jìn)行隱藏數(shù)據(jù)的提取,或者當(dāng)時并沒有發(fā)現(xiàn)隱藏數(shù)據(jù)的存在,經(jīng)過進(jìn)一步分析后才找到的NTFS流數(shù)據(jù),應(yīng)分析宿主文件并提取其中的隱藏數(shù)據(jù)[2]。在這種情況下需要注意的是,分析以前要對宿主文件再生成一次數(shù)字簽名,并與之前的簽名相比對,只有兩者相符才可以進(jìn)行下一步操作。宿主文件要放在NTFS文件系統(tǒng)下,打開文件的MFT,找到80 H屬性并逐一分析,對于存在多個80 H屬性的文件,使用get-content命令分別提取。
提取完成以后,隱藏的寄宿文件也要分別進(jìn)行數(shù)字簽名,以保證證據(jù)的有效性,當(dāng)然在提取的過程中有必要的話,還需要進(jìn)行截屏、錄像等操作。
4? ? 結(jié)語
NTFS文件系統(tǒng)的ADS功能被越來越多人熟知以后,利用NTFS交換數(shù)據(jù)流進(jìn)行數(shù)據(jù)隱藏的行為更普遍了,其中也會摻雜較多的惡意行為。并且,隨著檢測技術(shù)的提升,利用NTFS流隱藏的數(shù)據(jù)也更為復(fù)雜,電子數(shù)據(jù)取證工作面臨的挑戰(zhàn)愈加艱巨。文章針對筆者近幾年在工作中常見的NTFS流隱藏數(shù)據(jù)進(jìn)行分析,并提出具體的解決方法,對從事相關(guān)行業(yè)的技術(shù)人員具有一定的參考意義和借鑒作用。