翻譯+整理: By Bigworm 不當之處請指正這篇文章是根據H. Carvey的The Dark Side of NTFS (Microsoft’s Scarlet Letter)
翻譯的,可以自由轉載,但請保持譯者和來源以及文章的完整性.
簡介:微軟的平台不斷在增加.公司用的伺服器和案頭作業系統啟動並執行一般是winNT和win2000,而家庭使用者和學生用的系統一般是winXP.這些平台是很受歡迎的並且被大範圍的使用.可是使用這些作業系統的使用者和管理員卻對NTFS檔案系統的某個特性知道的很少,那就是”交換資料流”(alternate data streams). NTFS因為它的穩定性 強大的功能 以及它所提供的安全性而成為一種更優越的檔案系統,NTFS交換資料流(ADSs)是為了和Macintosh的HFS檔案系統相容而設計的,它使用資源派生(resource forks)來維持與檔案相關的資訊,比如說表徵圖及其他的東西.而微軟提供了一種方法通過Windows explorer來建立特殊的ADSs,檢測這種特殊的ADSs的必要工具和功能相當缺乏.說來也奇怪,系統一直以來都有允許使用者建立ADSs以及在這種流檔案中執行隱藏代碼的功能和工具.Microsoft KnowledgeBase 中Q101353號文章承認了基於API的win32不能很好的支援ADSs. 這篇文章的目的是詳細的介紹ADSs是怎麼被建立和利用的,以及隱藏在ADSs中的代碼是怎麼被執行的.基於不同的系統(NT 2K XP)處理ADSs也是很不同的. 建立ADSs 建立ADSs的文法相對比較簡單和直接.比如說建立和檔案myfile.txt相關聯的ADSs,只需簡單的用冒號把檔案名稱和ADSs名分開即可. D:/ads>echo This is an ADS > myfile.txt:hidden 此外,ADSs還可用另外一個檔案的內容來建立. D:/ads>echo This is a test file > test.txt D:/ads>type test.txt > myfile.txt:hidden 然後你可以用記事本去檢驗一下看看,命令如下: d:/ads>notepad myfile.txt:hidden 可是,用dir命令去看不出任何變化,Windows Explorer也沒有任何可用的轉換和設定來檢測這種建立的ADSs的存在. 此外,ADSs可以被建立以及與目錄列表相關聯,而不是與一個檔案關聯.這種特性在文章的後面將會顯示出他的重要性,但現在我們介紹怎麼建立ADSs以及足夠了. D:/ads>echo This ADS is tied to the directory listing > :hidden 這種類型的ADSs也可以通過type和notepad命令來建立. ADSs檔案的內容並不只限於text(文本)資料,任何二進位資訊的流都可以組成一個檔案,而且ADS也就是一個檔案而已.可執行檔東西也能夠相當容易的隱藏在ADSs中,看下面的例子: D:/ads>type c:/winnt/notepad.exe > myfile.txt:np.exe D:/ads>type c:/winnt/system32/sol.exe > myfile.txt:sol2.exe 同樣,像圖片檔案,音效檔或任何其他的資料流都可以隱藏在ADSs中. 最後,Windows Explorer提供了一種方法來建立特殊的ADSs(RUSS00) 看:我們在值那一欄可以填入很多東西 圖一 如果某個使用者沒有寫檔案的許可權,那麼他就不能在該檔案上添加ADS. 此外,windows 檔案保護功能可以防止系統檔案被替換,但是他不能阻止有適當許可權的使用者在這些系統檔案上添加ADSs,有個工具System File Checker(sfc.exe)可以檢查受保護系統檔案是否被覆蓋,可是它不能檢測ADSs. 檢測,查看,利用ADSs 如前所述,微軟並沒有提供工具來檢測ADSs的存在.現在檢測ADSs最好的工具是由Frank Heyne寫了Lads.exe.這個工具現在的版本是3.10,它是一個命令列工具 看: 圖二 從我們可以看出lad.exe多有用了,不僅可以顯示ADSs的存在,還可以顯示ADSs的路徑和大小.我們仔細注意和myfile.txt相關聯的四個檔案,其中三個是以很像撲克裡黑桃形狀的ASCII開頭的,另外一個就是在花括弧中有一大串數字和字母的那個檔案,這四個檔案就是我們用圖一所示方法建立的. 既然找到了這些檔案,我們應該怎麼看檔案的內容那?其實notepad就是一個很好的工具,但是這中間還有個陷阱. 比如,以下命令就出現我們不希望的結果 d:/ads>notepad myfile.txt:hidden 執行這個命令時notepad就會問是否建立一個新檔案,這個就很奇怪了,因為myfle.txt:hidden我們早就建立了.為了執行的結果是我們所希望的,應該輸入下面的命令: d:/ads>echo This is another ADS > myfile.txt:hidden.txt d:/ads>notepad myfile.txt:hidden.txt 這樣就出現了我們所希望的結果,檔案名稱後增加的副檔名允許用notepad開啟ADSs,這種方法也同樣適用於其他的ADSs,比如: d:/ads>notepad myfile.txt:np.exe ADSs是NTFS檔案系統的特徵,所以帶有ADS的檔案如果被移動到其他的檔案系統,比如FAT,FAT32或者ext2上,ADS就會被刪掉,因為這些檔案系統都不支援ADS,如果是在NTFS分區之間移動,ADSs就會被保留下來. 刪除ADSs相對簡單,用下面的命令即可 d:/ads>type myfile.txt > myfile.bat d:/ads>del myfile.txt d:/ads>ren myfile.bat myfile.txt 現在用lads.exe看一下,可以看到所有的ADSs都不見了. 執行ADSs 前面的例子中,我們已經把可執行檔代碼藏在ADSs中,這個看起來好像沒什麼用處,除非代碼可以自動執行.其實,start命令就可以用來執行這些代碼,現在我們再來建立ADSs d:/ads>type d:/winnt/notepad.exe > myfile.txt:np.exe 但是在2000上執行時會出現錯誤,這時因為我們提供的路徑資訊不夠 所以,我們應該指明路徑,不管時絕對路徑還是相對路徑.比如,下面的任何一個命令都可以: d:/ads>start d:/ads/myfile.txt:np.exe d:/ads>start ./myfile.txt:np.exe 是不是出現了記事本?? 當命令執行時進程會出現比較有意思的現象.例如,運行pslist.exe會出現情況 圖三 出現的進程名是myfile.txt: 看看工作管理員中的情況: 圖四 再看看: 圖五 我們來看看在xp的管理器中進程的情況: 圖六 還有一種比較簡便的方法是直接在註冊表中的run鍵下添加資料流檔案的完整路徑: HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Run,下次系統啟動時就會自動運行該隱藏檔案 在開始的運行框中也可以執行ADSs比如: file:///d:/ads/myfile.txt:sol2.exe 對於使用perl的管理員可用下面的代碼執行ADSs my $file = 'd:/ads/myfile.txt:sol2.exe'; `$file`; 把檔案存為ads.pl,用下面的命令即可執行 d:/perl>ads.pl 其實用windows的WSH也可以執行ADSs: d:/ads>echo MsgBox "VBS file to test ADSs" > ads.vbs d:/ads>wScript ads.vbs d:/ads>type ads.vbs > myfile.txt:ads.vbs d:/ads>wScript myfile.txt:ads.vbs 或者: D:/ads>start ./myfile.txt:ads.vbs 總結: ADSs是NTFS的一個特徵,它是為了和HFS相容而設計的.可是由於比較難於被發覺,所以對於管理員來說是一種危險,現在29A這個組織的Bennie和Ratter已經發布了一種叫做W2K.Stream病毒,這個病毒就是利用ADSs的. 我們並不能以不使用NTFS來作為解決這個問題的辦法,因為NTFS在安全性和可靠性方面是有很大作用的.其實,管理員應該對檔案和目錄正確的使用DACLs(discretionary access control lists),並且經常使用工具比如說lads.exe來掃描他們自己的系統.文章中有些地方經過我自己的整理,刪除了有些無關緊要的內容
如果想看原文可以參http://patriot.net/~carvdawg/docs/dark_side.html.
上面提到的工具鏈接如下:lads http://www.heysoft.de/nt/lads.zip
pslists: http://www.sysinternals.com/files/pslist.zip