NTFS不利的一面
翻譯+整理: 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:winntotepad.exe > myfile.txt:np.exe

D:ads>type c:winntsystem32sol.exe > myfile.txt:sol2.exe

同樣,像圖片檔,音效檔案或任何其他的資料流程都可以隱藏在ADSs中.

最後,Windows Explorer提供了一種方法來創建特殊的ADSs(RUSS00)

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

_blank>/UpLoadFiles/NewsPhoto/31511210.gif
圖一
如果某個用戶沒有寫檔的許可權,那麼他就不能在該檔上添加ADS.

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

檢測,查看,利用ADSs

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

看下圖:
_blank>/UpLoadFiles/NewsPhoto/74413189.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:winntotepad.exe > myfile.txt:np.exe

但是在2000上執行時會出現錯誤,這時因為我們提供的路徑資訊不夠

所以,我們應該指明路徑,不管時絕對路徑還是相對路徑.比如,下面的任何一個命令都可以:

d:ads>start d:adsmyfile.txt:np.exe

d:ads>start .myfile.txt:np.exe

是不是出現了記事本??

當命令執行時進程會出現比較有意思的現象.例如,運行pslist.exe會出現下圖情況
_blank>/UpLoadFiles/NewsPhoto/53098127.jpg
圖三
出現的進程名是myfile.txt:

看看任務管理器中的情況:
_blank>/UpLoadFiles/NewsPhoto/74639617.jpg
圖四

再看看下圖:
_blank>/UpLoadFiles/NewsPhoto/85933109.jpg
圖五


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

_blank>/UpLoadFiles/NewsPhoto/10248550.jpg
圖六

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

現在我們雙擊這個圖示,就可以執行這個檔了.看執行後的結果:
_blank>/UpLoadFiles/NewsPhoto/05442063.jpg

圖七

還有一種比較簡便的方法是直接在註冊表中的run鍵下添加資料流程檔的完整路徑:

HKEY_LOCAL_MACHINESoftwareMicrosoft
WindowsCurrentVersionRun,下次系統啟動時就會自動運行該隱藏檔

在開始的運行框中也可以執行ADSs比如: file:///d:/ads/myfile.txt:sol2.exe

對於使用perl的管理員可用下面的代碼執行ADSs

my $file = 'd:adsmyfile.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 _blank>http://www.heysoft.de/nt/lads.zip

pslists: _blank>http://www.sysinternals.com/files/pslist.zip


arrow
arrow
    全站熱搜

    hechian 發表在 痞客邦 留言(2) 人氣()