在前一篇文章中,我針對 ADS 做了基本介紹。在本篇文章中,我將繼續此一話題,並將介紹重點移至如何實際進行 ADS 的相關操作。篇幅有些長,但是因為大多是截圖的關係,所以在閱讀上應該是不會花費太多的時間。
- 首先我們建立一個空的目錄(D:\ads),並在此一目錄下進行測試。
- 我們產生一個一般的文字檔,內容是”Hello World”,大小為16位元組。
- 透過 type 指令確認檔案內容為”Hello World”。
- 接下來我們使用下列指令產生 ADS 資料,其中 hello.txt:hidden.txt 表示將名為 hidden.txt 的 ADS 資料附掛在 hello.txt 上。檔案內容為 “I’m Hidden”。
- 檢查一下檔案,雖然時間變了,但是大小卻沒有變。
- 查看原始檔案內容,同樣沒有任何變動。
- 使用 type 指令如法炮製,看看 ADS 內容是甚麼。很不幸的,系統顯示找不到這個檔案。難道是指令下錯了?
- 改用記事本試看看,沒有錯誤訊息。
- 筆記本顯示出我們原先輸入的內容,而且注意檔名正是 hello.txt:hidden (最後一個txt的副檔名被記事本自動隱藏了)。由此證明雖然 hello.txt 的檔案大小沒有改變,而且 type 指令也無法顯示,但是我們剛剛輸入的資料確實被儲存在 ADS 中。 事實上,使用其他應用程式也可以看到這個檔案的內容。
- 一個檔案可以擁有多個 ADS 資料,而且不需要同樣的類型。我們將一個執行檔 (calc.exe) 覆掛在 hello.txt 中,原先 hello.txt 已經有另外一個 ADS 資料,名稱為 hidden.txt 。
- 雖然之前我們曾經使用 dir 指令時無法看到任何有關 ADS 的資訊,但是其實 dir 有一個參數 - /r 可以用來查看 ADS 資訊。透過 dir * /r 指令我們確認 hello.txt 有兩個 ADS 資料。不過很可惜的是, /r 參數在Vista 之前的 Windows 版本是不提供的。
- 我們嘗試直接執行儲存於 ADS 內的檔案,系統出現錯誤訊息。
- 上網查詢,可以找到程式啟動的方式必須透過 start 這個指令,執行後卻同樣出現錯誤。 如果你出現跟我一樣的錯誤,恭喜你,表示你的系統至少不是很舊的系統。
- 為了證明資料不假,我特定找了一個 Windows 2000 的系統,並將小算盤 (calc.exe) 覆掛在 xcopy.exe 的 ADS (ADS 名稱為 hidden.exe) 中。同樣的,直接執行會出現錯誤,但是使用 start 指令可以正確的呼叫出小算盤。
- 查看執行程序,可以看到 xcopy.exe 在執行中,卻看不到 calc.exe 在執行,可是實際上真正執行的程式是 calc.exe。此為一大問題,表示 ADS 的檔案就算被執行了,也無法從工作管理員中看到,而且不需要使用到 rootkit 的技術。
- 如果你以為只有舊系統才會有這個問題,新系統已經免疫了,先別高興得太早。我們先將一個名為 hfs.exe 的檔案附掛在 calc.exe 的 ADS 之中以備測試。
- 使用 start 指令依舊失敗,這次我們改用 runas 這個指令來啟動程式。
- hfs.exe 被正確啟動了,而且是在 Vista SP1 的環境下。
- 唯一值得慶幸的是在工作管理員的顯示名稱為 calc.exe:hfs.exe ,而不再僅是 calc.exe 。
- 當我們嘗試複製包含 ADS 資料的檔案時,ADS 資料也會被一併複製 (只要目的磁碟區也支援 ADS 的功能)。我們看到透過複製的指令 hello2.txt 包含與 hello.txt 相同的 ADS 資料。
透過前面的例子,我們看到儲存於 ADS 的資料不但不容易被發現,而且可以被正常的讀取、修改、甚至是執行。雖然微軟也確實做了部分的修正,來避免原先 ADS 可能造成的損害,但是卻不是全面的。以我個人的看法,這樣部分的修改比原先不修改可能還來的更差。原因是這樣會造成更多不一致的現象(尤其是同一個系統內的不一致),而不一致往往造成使用者的混淆,甚至誤解,因而衍生額外的問題。
除了透過微軟內建的指令外,也有一些第三方的工具可以處理 ADS 的資料。像 Alternate Data Stream Tools for NTFS 這個工具可以掃描並列出系統中所有的 ADS 資料,算是一個很方便的小工具。
沒有留言:
張貼留言