歷代木馬程序隱身的技術(shù)分析第2/2頁
更新時間:2007年11月05日 22:34:48 作者:
3.如何插入進程
(1)使用注冊表插入DLL
早期的進程插入式木馬的伎倆,通過修改注冊表中的[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs]來達到插入進程的目的。缺點是不實時,修改注冊表后需要重新啟動才能完成進程插入。
(2)使用掛鉤(Hook)插入DLL
比較高級和隱蔽的方式,通過系統(tǒng)的掛鉤機制(即“Hook”,類似于DOS時代的“中斷”)來插入進程(一些盜QQ木馬、鍵盤記錄木馬以Hook方式插入到其他進程中“偷雞摸狗”),需要調(diào)用SetWindowsHookEx函數(shù)(也是一個Win32 API函數(shù))。缺點是技術(shù)門檻較高,程序調(diào)試困難,這種木馬的制作者必須具有相當?shù)腤in32編程水平。
你知道嗎——什么是API
Windows中提供各種功能實現(xiàn)的接口稱為Win32 API(Application Programming Interface,即“應用程序編程接口”),如一些程序需要對磁盤上的文件進行讀寫,就要先通過對相應的API(文件讀寫就要調(diào)用文件相關(guān)的API) 發(fā)出調(diào)用請求,然后API根據(jù)程序在調(diào)用其函數(shù)時提供的參數(shù)(如讀寫文件就需要同時給出需要讀寫的文件的文件名及路徑)來完成請求實現(xiàn)的功能,最后將調(diào)用結(jié)果(如寫入文件成功,或讀取文件失敗等)返回給程序。
(3)使用遠程線程函數(shù)(CreateRemoteThread)插入DLL
在Windows 2000及以上的系統(tǒng)中提供了這個“遠程進程”機制,可以通過一個系統(tǒng)API函數(shù)來向另一個進程中創(chuàng)建線程(插入DLL)。缺點很明顯,僅支持 Windows 2000及以上系統(tǒng),在國內(nèi)仍有相當多用戶在使用Windows 98,所以采用這種進程插入方式的木馬缺乏平臺通用性。
木馬將自身作為DLL插入別的進程空間后,用查看進程的方式就無法找出木馬的蹤跡了,你能看到的僅僅是一些正常程序的進程,但木馬卻已經(jīng)偷偷潛入其中了。解決的方法是使用支持“進程模塊查看”的進程管理工具(如“Windows優(yōu)化大師”提供的進程查看),木馬的DLL模塊就會現(xiàn)形了。
不要相信自己的眼睛:恐怖的進程“蒸發(fā)”
嚴格地來講,這應該算是第2.5代的進程隱藏技術(shù)了,可是它卻比前幾種技術(shù)更為可怕得多。這種技術(shù)使得木馬不必將自己插入到其他進程中,而可以直接消失!
它通過Hook技術(shù)對系統(tǒng)中所有程序的進程檢測相關(guān)API的調(diào)用進行了監(jiān)控,“任務管理器”之所以能夠顯示出系統(tǒng)中所有的進程,也是因為其調(diào)用了 EnumProcesses等進程相關(guān)的API函數(shù),進程信息都包含在該函數(shù)的返回結(jié)果中,由發(fā)出調(diào)用請求的程序接收返回結(jié)果并進行處理(如“任務管理器”在接收到結(jié)果后就在進程列表中顯示出來)。
而木馬由于事先對該API函數(shù)進行了Hook,所以在“任務管理器”(或其他調(diào)用了列舉進程函數(shù)的程序)調(diào)用EnumProcesses函數(shù)時(此時的API函數(shù)充當了“內(nèi)線”的角色),木馬便得到了通知,并且在函數(shù)將結(jié)果(列出所有進程)返回給程序前,就已將自身的進程信息從返回結(jié)果中抹去了。就好比你正在看電視節(jié)目,卻有人不知不覺中將電視接上了DVD,你在不知不覺中就被欺騙了。
所以無論是“任務管理器”還是殺毒軟件,想對這種木馬的進程進行檢測都是徒勞的。這種木馬目前沒有非常有效的查殺手段,只有在其運行前由殺毒軟件檢測到木馬文件并阻止其病毒體的運行。當時還有一種技術(shù)是由木馬程序?qū)⑵渥陨淼倪M程信息從Windows系統(tǒng)用以記錄進程信息的“進程鏈表”中刪除,這樣進程管理工具就無法從“進程鏈表”中獲得木馬的進程信息了。但由于缺乏平臺通用性而且在程序運行時有一些問題,所以沒有被廣泛采用。
你知道嗎——什么是Hook
Hook是Windows中提供的一種用以替換DOS下“中斷”的一種系統(tǒng)機制,中文譯名為“掛鉤”或“鉤子”。在對特定的系統(tǒng)事件(包括上文中的特定API函數(shù)的調(diào)用事件)進行Hook后,一旦發(fā)生已Hook的事件,對該事件進行Hook的程序(如:木馬)就會收到系統(tǒng)的通知,這時程序就能在第一時間對該事件做出響應(木馬程序便搶在函數(shù)返回前對結(jié)果進行了修改)。
毫無蹤跡:全方位立體隱藏
利用剛才介紹的Hook隱藏進程的手段,木馬可以輕而易舉地實現(xiàn)文件的隱藏,只需將Hook技術(shù)應用在文件相關(guān)的API函數(shù)上即可,這樣無論是“資源管理器”還是殺毒軟件都無法找出木馬所在了。更令人吃驚的是,現(xiàn)在已經(jīng)有木馬(如:灰鴿子)利用該技術(shù)實現(xiàn)了文件和進程的隱藏。要防止這種木馬最好的手段仍是利用殺毒軟件在其運行前進行攔截。
跟殺毒軟件對著干:反殺毒軟件外殼
木馬再狡猾,可是一旦被殺毒軟件定義了特征碼,在運行前就被攔截了。要躲過殺毒軟件的追殺,很多木馬就被加了殼,相當于給木馬穿了件衣服,這樣殺毒軟件就認不出來了,但有部分殺毒軟件會嘗試對常用殼進行脫殼,然后再查殺(小樣,別以為穿上件馬夾我就不認識你了)。除了被動的隱藏外,最近還發(fā)現(xiàn)了能夠主動和殺毒軟件對著干的殼,木馬在加了這種殼之后,一旦運行,則外殼先得到程序控制權(quán),由其通過各種手段對系統(tǒng)中安裝的殺毒軟件進行破壞,最后在確認安全 (殺毒軟件的保護已被瓦解)后由殼釋放包裹在自己“體內(nèi)”的木馬體并執(zhí)行之。對付這種木馬的方法是使用具有脫殼能力的殺毒軟件對系統(tǒng)進行保護。
你知道嗎——什么是殼
顧名思義,你可以很輕易地猜到,這是一種包在外面的東西。沒錯,殼能夠?qū)⑽募?比如EXE)包住,然后在文件被運行時,首先由殼獲得控制權(quán),然后釋放并運行包裹著的文件體。很多殼能對自己包住的文件體進行加密,這樣就可以防止殺毒軟件的查殺。比如原先殺毒軟件定義的該木馬的特征是“12345”,如果發(fā)現(xiàn)某文件中含有這個特征,就認為該文件是木馬,而帶有加密功能的殼則會對文件體進行加密(如:原先的特征是“12345”,加密后變成了 “54321”,這樣殺毒軟件當然不能靠文件特征進行檢查了)。脫殼指的就是將文件外邊的殼去除,恢復文件沒有加殼前的狀態(tài)。
相關(guān)文章
ART OF WEB-SQL-INJECTION第2卷 ORACLE篇
在國外對ORACLE的攻擊一直很收關(guān)注,只是國內(nèi)研究的人不太多,或者技術(shù)不夠~這里我就打響第一炮吧2007-10-10