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