NTFS不利的一面——ADS流文件

這篇文章是根據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)

看下圖:我們在值那一欄可以填入很多東西

http://www.3389.net/bbs/uploadImages/20021221731511210.gif
圖一
如果某個用戶沒有寫文件的權限,那麼他就不能在該文件上添加ADS.

此外,windows 文件保護功能可以防止系統文件被替換,但是他不能阻止有適當權限的用戶在這些系統文件上添加ADSs,有個工具System File Checker(sfc.exe)可以檢查受保護系統文件是否被覆蓋,可是它不能檢測ADSs.

檢測,查看,利用ADSs

如前所述,微軟並沒有提供工具來檢測ADSs的存在.現在檢測ADSs最好的工具是由Frank Heyne寫了Lads.exe.這個工具現在的版本是3.10,它是一個命令行工具

看下圖:
http://www.3389.net/bbs/uploadImages/2002122174413189.jpg
圖二
從上圖我們可以看出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會出現下圖情況
http://www.3389.net/bbs/uploadImages/200212217153098127.jpg
圖三
出現的進程名是myfile.txt:

看看任務管理器中的情況:
http://www.3389.net/bbs/uploadImages/20021221774639617.jpg
圖四

再看看下圖:
http://www.3389.net/bbs/uploadImages/20021221785933109.jpg
圖五


我們來看看在xp的管理器中進程的情況:

http://www.3389.net/bbs/uploadImages/20021221710248550.jpg
圖六

還有一種可選擇的用來執行隱藏文件流的方法,我們來示範一下,先在桌面上創建一個快捷方式,項目位置填入d:/ads/myfile.txt.假設你創建的流文件是sol2.exe(也就是用這個命令type d:/winnt/system32/sol.exe > myfile.txt:sol2.exe),現在我們到創建的快捷方式的屬性裏修改,讓快捷方式指向d:/ads/myfile.txt:sol2.exe,觀察一下快捷方式的圖標,是不是起了變化?

現在我們雙擊這個圖標,就可以執行這個文件了.看執行後的結果:
http://www.3389.net/bbs/uploadImages/200212217105442063.jpg

圖七

還有一種比較簡便的方法是直接在註冊表中的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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章