簡介:微軟的平台不斷在增加
公司用的服務器和桌面操作系統運行的一般是winNT和win
而家庭用戶和學生用的系統一般是winXP
這些平台是很受歡迎的並且被大范圍的使用
可是使用這些操作系統的用戶和管理員卻對NTFS文件系統的某個特性知道的很少
那就是
交換數據流
(alternate data streams)
NTFS因為它的穩定性 強大的功能 以及它所提供的安全性而成為一種更優越的文件系統
NTFS交換數據流(ADSs)是為了和Macintosh的HFS文件系統兼容而設計的
它使用資源派生(resource forks)來維持與文件相關的信息
比如說圖標及其他的東西
而微軟提供了一種方法通過Windows explorer來創建特殊的ADSs
檢測這種特殊的ADSs的必要工具和功能相當缺乏
說來也奇怪
系統一直以來都有允許用戶創建ADSs以及在這種流文件中執行隱藏代碼的功能和工具
Microsoft KnowledgeBase 中Q
號文章承認了基於API的win
不能很好的支持ADSs
這篇文章的目的是詳細的介紹ADSs是怎麼被創建和利用的
以及隱藏在ADSs中的代碼是怎麼被執行的
基於不同的系統(NT
K 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\system
\sol
exe > myfile
txt:sol
exe
同樣
像圖片文件
聲音文件或任何其他的數據流都可以隱藏在ADSs中
最後
Windows Explorer提供了一種方法來創建特殊的ADSs(RUSS
)
看下圖:我們在值那一欄可以填入很多東西
educity
cn/img_
/
/
/
gif >
圖一
如果某個用戶沒有寫文件的權限
那麼他就不能在該文件上添加ADS
此外
windows 文件保護功能可以防止系統文件被替換
但是他不能阻止有適當權限的用戶在這些系統文件上添加ADSs
有個工具System File Checker(sfc
exe)可以檢查受保護系統文件是否被覆蓋
可是它不能檢測ADSs
檢測
查看
利用ADSs
如前所述
微軟並沒有提供工具來檢測ADSs的存在
現在檢測ADSs最好的工具是由Frank Heyne寫了Lads
exe
這個工具現在的版本是
它是一個命令行工具
看下圖:
educity
cn/img_
/
/
/
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
FAT
或者ext
上
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
但是在
上執行時會出現錯誤
這時因為我們提供的路徑信息不夠
所以
我們應該指明路徑
不管時絕對路徑還是相對路徑
比如
下面的任何一個命令都可以:
d:\ads>start d:\ads\myfile
txt:np
exe
d:\ads>start
\myfile
txt:np
exe
是不是出現了記事本??
當命令執行時進程會出現比較有意思的現象
例如
運行pslist
exe會出現下圖情況
educity
cn/img_
/
/
/
jpg >
圖三
出現的進程名是myfile
txt:
看看任務管理器中的情況:
educity
cn/img_
/
/
/
jpg >
圖四
再看看下圖:
educity
cn/img_
/
/
/
jpg >
圖五
我們來看看在xp的管理器中進程的情況:
educity
cn/img_
/
/
/
jpg >
圖六
還有一種比較簡便的方法是直接在注冊表中的run鍵下添加數據流文件的完整路徑:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
下次系統啟動時就會自動運行該隱藏文件
在開始的運行框中也可以執行ADSs比如: file:///d:/ads/myfile
txt:sol
exe
對於使用perl的管理員可用下面的代碼執行ADSs
my $file =
d:\ads\myfile
txt:sol
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兼容而設計的
可是由於比較難於被發覺
所以對於管理員來說是一種危險
現在
A這個組織的Bennie和Ratter已經發布了一種叫做W
K
Stream病毒
這個病毒就是利用ADSs的
我們並不能以不使用NTFS來作為解決這個問題的辦法
因為NTFS在安全性和可靠性方面是有很大作用的
其實
管理員應該對文件和目錄正確的使用DACLs(discretionary access control lists)
並且經常使用工具比如說lads
exe來掃描他們自己的系統
From:http://tw.wingwit.com/Article/os/xtgl/201311/9219.html