流氓軟件及反流氓軟件的技術(shù)分析
www.hexun.com
【2006.09.21 10:56】來源:網(wǎng)易科技
流氓軟件的技術(shù)五花八門,任何一項功能都有可能成為流氓技術(shù),就象武器,用好了可以伸張正義,用歪了卻成為罪惡的幫兇。
首先我從win32下的一些流氓著數(shù)分析開始:
1。我想做為一個流氓軟件,首先要做到的是實時運行,譬如在注冊表的run下,在boot下增加它的啟動。這應(yīng)該是比較老的方法,以前 3721好象就是在run下,但是現(xiàn)在一般的人都知道了。
2。作為流氓軟件,已經(jīng)改變了以前一些木馬的特性了,他沒必要使自己一定要實時啟動了,而是需要自己的時候再啟動,譬如說打開一個瀏覽器窗口,這是一般流氓軟件的方法,因為他需要連上網(wǎng)才能有利益可圖,所以瀏覽器肯定是流氓軟件必定監(jiān)控的進程。
3。使用BHO插件,這種技術(shù)早先特別流行,這是微軟提供的接口,本意是讓IE瀏覽器可以擴充功能。每當(dāng)一個ie瀏覽器啟動的時候,都會調(diào)用BHO下必要的插件,流氓軟件就是利用這一點。監(jiān)控了瀏覽器所有事件與信息。
4。還有最笨的辦法就是利用進程快照監(jiān)控進程,判斷有它自己所監(jiān)控的進程啟動,就使用atl得到瀏覽器指針,從而監(jiān)控瀏覽器所有事件與信息。
5,還有一種方法就是使用spi,這是我在網(wǎng)上看到的。spi是分層協(xié)議,當(dāng)winsock2啟動的時候都會調(diào)用它的dll,可以監(jiān)控所有應(yīng)用層數(shù)據(jù)包。從而監(jiān)控用戶信息,而且能實時啟動。
6。hook方法,hook技術(shù)可以所應(yīng)用太廣泛了,特別是監(jiān)控方面。所以流氓軟件也不會錯過。首先應(yīng)用的是api函數(shù)hook,譬如windows核心編程里的apihook類,或者微軟的detous都可以完成,兩者方法其實相同就是修改IDT函數(shù)入口地址。api hook鉤住createprocess 就可以監(jiān)控進程,比進程快照性能更強,可以鉤住spi下的函數(shù)可以完成spi下的所有功能。還有消息hook,鼠標(biāo)消息,鍵盤消息,日子消息等等鉤子,方法實在太多,都可以利用。
上面列舉了一些流氓軟件的使用方法,但是流氓軟件的一個特性是他無法卸載。所以它又要使用下面的方法了
因為上面的很多方法都可以刪除注冊表卸載他們,那怎么辦呢,那就會時時監(jiān)控,它會在它的進程,或者線程里監(jiān)控注冊表項,設(shè)置一個循環(huán)監(jiān)控,發(fā)現(xiàn)沒了就繼續(xù)安裝,增加。我想這應(yīng)該是很多流氓軟件的技術(shù)。
那現(xiàn)在又出現(xiàn)了一個新問題,那就是流氓軟件的進程線程要是結(jié)束掉怎么辦呢???看西面
7。一種方法就是上面的api hook技術(shù),鉤住openprocess ,用自己的函數(shù)判斷只要打開的是自己進程就返回正確,使用這種方法,用戶或者一般的軟件就無法結(jié)束它的進程了。
8。還有一種是上面象bho,spi根本沒有進程。一般的用戶也無法刪除他
9。還有一種方法是遠(yuǎn)程線程,這個技術(shù)用的也很普遍,首先是象api hook一樣向目標(biāo)進程里申請一段內(nèi)存空間,然后使用自己映射過去,然后使用CreateRemoteThread創(chuàng)建遠(yuǎn)程線程。一般很多流氓軟件或者以前的一些木馬程序,都是把線程注入到系統(tǒng)進程譬如explorer,service等等,使用用戶或者一般的殺毒軟件很難處理或者結(jié)束。。
10。注冊成服務(wù)后,也可以簡單的隱藏進程。還有更可笑的是把自己的進程名跟一些系統(tǒng)進程名譬如lsass相同后,也就無法結(jié)束了。
從我上面列舉的方法已經(jīng)差不多可以形成好幾款流氓軟件了。但是你別高興太早,因為這些技術(shù)只是應(yīng)用層的,現(xiàn)在出現(xiàn)了一堆驅(qū)動層的反流氓軟件工具,譬如超級兔子,完美卸載,木馬克星,雅虎助手,還有現(xiàn)在火熱的360安全衛(wèi)士。
這些反流氓軟件的方法刪除以上流氓軟件軟件就比較簡單。優(yōu)先于流氓軟件啟動,截獲所有訪問流氓軟件文件的irp,然后刪除注冊表項,刪除文件。輕松的完成了反流氓任務(wù)。
為了針對這些反流氓軟件,流氓軟件出現(xiàn)了內(nèi)核層的了。
1。首先是使用文件過濾驅(qū)動,保護自己的文件,流氓軟件過濾了create里對于自己文件的所有fileopen外的所有irp和SetInformation下所有的irp,從而有效的保護了自己的文件。
2。內(nèi)核級hook技術(shù),可hook住所有公開的或者未公開的內(nèi)核函數(shù),譬如zwcreatefile,zwSetInformation,也可以有效的保護文件。
3。驅(qū)動層下的流氓軟件還使用內(nèi)核級hook技術(shù),替換Regdeletekey,RegDeleteValueKey,RegSetValueKey從而有效的保護了注冊表
4。利用內(nèi)核級hook技術(shù)還有隱藏進程,或者監(jiān)控進程,重起進程。
對于上面的流氓軟件的方法一些驅(qū)動層下的反流氓軟件工具又有點束手無策了。因為同是驅(qū)動程序相互攔截irp等于大家都無法操作,反流氓軟件工具的刪除irp會被攔截,或者刪除函數(shù)會被替換。刪除注冊表函數(shù)會被替換。雖然驅(qū)動的加載有先后,但是無法保證能完全的刪除流氓軟件,從而出現(xiàn)了一些更頂級的反流氓軟件,他直接發(fā)刪除文件irp到文件系統(tǒng).,刪除注冊表也直接發(fā)送到文件系統(tǒng)。這類流氓軟件又能有效的完成了反流氓任務(wù),但是根據(jù)我了解,這樣的軟件不多。現(xiàn)在火熱的360安全衛(wèi)士都還只是使用了笨辦法,優(yōu)先于驅(qū)動流氓軟件啟動,創(chuàng)建一個驅(qū)動流氓軟件同設(shè)備名的設(shè)備,,使流氓驅(qū)動創(chuàng)建不成功。具我了解他優(yōu)先于流氓驅(qū)動啟動是把自己創(chuàng)建于PNP_TDI這個組下面,就是簡單的ndis就能優(yōu)先于360啟動。如果前面的組,那360就束手無策了。所以對付這類流氓驅(qū)動只能用直接發(fā)irp到文件系統(tǒng)。
流氓軟件又怎么來防止直接發(fā)irp到文件系統(tǒng)的反流氓軟件呢?rootkit,我看很多對于rootkit有誤解,很多都認(rèn)為hook也是rootkit.呵呵,rootkit說白了就是嵌入操作系統(tǒng)文件。你不是發(fā)irp到文件系統(tǒng)嗎?,可是我把文件系統(tǒng)給改了,不過rootkit根據(jù)我的觀察unix或者linex下比較多,在windows下還是比較少的,因為需要使用匯編了,哎太晚了,不寫了,我想如果流氓軟件做到這個技術(shù)程度,它也沒必要做流氓了,直接做操作系統(tǒng)得了。