明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

木馬病毒各種隱藏技術(shù)

[摘要]雖然沒(méi)有絕對(duì)的安全, 但如果能知已知彼, 了解木馬的隱藏手段, 對(duì)于木馬即使不能百戰(zhàn)百勝, 也能做到及時(shí)發(fā)現(xiàn), 使損失最小化。 那么, 木馬究竟是如何躲在我們的系統(tǒng)中的呢?    最基本的隱藏:不...

 

雖然沒(méi)有絕對(duì)的安全, 但如果能知已知彼, 了解木馬的隱藏手段, 對(duì)于木馬即使不能百戰(zhàn)百勝, 也能做到及時(shí)發(fā)現(xiàn), 使損失最小化。 那么, 木馬究竟是如何躲在我們的系統(tǒng)中的呢?

  

  最基本的隱藏:不可見(jiàn)窗體+隱藏文件

  木馬程序無(wú)論如何神秘, 但歸根究底, 仍是Win32平臺(tái)下的一種程序。 Windows下常見(jiàn)的程序有兩種:

  1.Win32應(yīng)用程序(Win32 Application), 比如QQ、Office等都屬于此行列。

  2.Win32控制臺(tái)程序(Win32 Console), 比如硬盤引導(dǎo)修復(fù)程序FixMBR。

  其中, Win32應(yīng)用程序通常會(huì)有應(yīng)用程序界面, 比如系統(tǒng)中自帶的“計(jì)算器”就有提供各種數(shù)字按鈕的應(yīng)用程序界面。 木馬雖然屬于Win32應(yīng)用程序, 但其一般不包含窗體或隱藏了窗體(但也有某些特殊情況, 如木馬使用者與被害者聊天的窗口), 并且將木馬文件屬性設(shè)置為“隱藏”, 這就是最基本的隱藏手段, 稍有經(jīng)驗(yàn)的用戶只需打開(kāi)“任務(wù)管理器”, 并且將“文件夾選項(xiàng)”中的“顯示所有文件”勾選即可輕松找出木馬, 于是便出現(xiàn)了下面要介紹的“進(jìn)程隱藏”技術(shù)。

  第一代進(jìn)程隱藏技術(shù):Windows 98的后門

  在Windows 98中, 微軟提供了一種能將進(jìn)程注冊(cè)為服務(wù)進(jìn)程的方法。 盡管微軟沒(méi)有公開(kāi)提供這種方法的技術(shù)實(shí)現(xiàn)細(xì)節(jié)(因?yàn)閃indows的后續(xù)版本中沒(méi)有提供這個(gè)機(jī)制), 但仍有高手發(fā)現(xiàn)了這個(gè)秘密, 這種技術(shù)稱為RegisterServiceProcess。 只要利用此方法, 任何程序的進(jìn)程都能將自己注冊(cè)為服務(wù)進(jìn)程, 而服務(wù)進(jìn)程在Windows 98中的任務(wù)管理器中恰巧又是不顯示的, 所以便被木馬程序鉆了空子。

  要對(duì)付這種隱藏的木馬還算簡(jiǎn)單, 只需使用其他第三方進(jìn)程管理工具即可找到其所在, 并且采用此技術(shù)進(jìn)行隱藏的木馬在Windows 2000/XP(因?yàn)椴恢С诌@種隱藏方法)中就得現(xiàn)形!中止該進(jìn)程后將木馬文件刪除即可。 可是接下來(lái)的第二代進(jìn)程隱藏技術(shù), 就沒(méi)有這么簡(jiǎn)單對(duì)付了。

  第二代進(jìn)程隱藏技術(shù):進(jìn)程插入

  在Windows中, 每個(gè)進(jìn)程都有自己的私有內(nèi)存地址空間, 當(dāng)使用指針(一種訪問(wèn)內(nèi)存的機(jī)制)訪問(wèn)內(nèi)存時(shí), 一個(gè)進(jìn)程無(wú)法訪問(wèn)另一個(gè)進(jìn)程的內(nèi)存地址空間, 就好比在未經(jīng)鄰居同意的情況下, 你無(wú)法進(jìn)入鄰居家吃飯一樣。 比如QQ在內(nèi)存中存放了一張圖片的數(shù)據(jù), 而MSN則無(wú)法通過(guò)直接讀取內(nèi)存的方式來(lái)獲得該圖片的數(shù)據(jù)。 這樣做同時(shí)也保證了程序的穩(wěn)定性, 如果你的進(jìn)程存在一個(gè)錯(cuò)誤, 改寫(xiě)了一個(gè)隨機(jī)地址上的內(nèi)存, 這個(gè)錯(cuò)誤不會(huì)影響另一個(gè)進(jìn)程使用的內(nèi)存。

你知道嗎——進(jìn)程(Process)是什么

  對(duì)應(yīng)用程序來(lái)說(shuō), 進(jìn)程就像一個(gè)大容器。 在應(yīng)用程序被運(yùn)行后, 就相當(dāng)于將應(yīng)用程序裝進(jìn)容器里了, 你可以往容器里加其他東西(如:應(yīng)用程序在運(yùn)行時(shí)所需的變量數(shù)據(jù)、需要引用的DLL文件等), 當(dāng)應(yīng)用程序被運(yùn)行兩次時(shí), 容器里的東西并不會(huì)被倒掉, 系統(tǒng)會(huì)找一個(gè)新的進(jìn)程容器來(lái)容納它。

  一個(gè)進(jìn)程可以包含若干線程(Thread), 線程可以幫助應(yīng)用程序同時(shí)做幾件事(比如一個(gè)線程向磁盤寫(xiě)入文件, 另一個(gè)則接收用戶的按鍵操作并及時(shí)做出反應(yīng), 互相不干擾), 在程序被運(yùn)行后中, 系統(tǒng)首先要做的就是為該程序進(jìn)程建立一個(gè)默認(rèn)線程, 然后程序可以根據(jù)需要自行添加或刪除相關(guān)的線程。

  1.進(jìn)程插入是什么

  獨(dú)立的地址空間對(duì)于編程人員和用戶來(lái)說(shuō)都是非常有利的。 對(duì)于編程人員來(lái)說(shuō), 系統(tǒng)更容易捕獲隨意的內(nèi)存讀取和寫(xiě)入操作。 對(duì)于用戶來(lái)說(shuō), 操作系統(tǒng)將變得更加健壯, 因?yàn)橐粋(gè)應(yīng)用程序無(wú)法破壞另一個(gè)進(jìn)程或操作系統(tǒng)的運(yùn)行。 當(dāng)然, 操作系統(tǒng)的這個(gè)健壯特性是要付出代價(jià)的, 因?yàn)橐帉?xiě)能夠與其他進(jìn)程進(jìn)行通信, 或者能夠?qū)ζ渌M(jìn)程進(jìn)行操作的應(yīng)用程序?qū)⒁щy得多。 但仍有很多種方法可以打破進(jìn)程的界限, 訪問(wèn)另一個(gè)進(jìn)程的地址空間, 那就是“進(jìn)程插入”(Process Injection)。 一旦木馬的DLL插入了另一個(gè)進(jìn)程的地址空間后, 就可以對(duì)另一個(gè)進(jìn)程為所欲為, 比如下文要介紹的盜QQ密碼。

  2.木馬是如何盜走QQ密碼的

  普通情況下, 一個(gè)應(yīng)用程序所接收的鍵盤、鼠標(biāo)操作, 別的應(yīng)用程序是無(wú)權(quán)“過(guò)問(wèn)”的。 可盜號(hào)木馬是怎么偷偷記錄下我的密碼的呢?木馬首先將1個(gè)DLL文件插入到QQ的進(jìn)程中并成為QQ進(jìn)程中的一個(gè)線程, 這樣該木馬DLL就赫然成為了QQ的一部分!然后在用戶輸入密碼時(shí), 因?yàn)榇藭r(shí)木馬DLL已經(jīng)進(jìn)入QQ進(jìn)程內(nèi)部, 所以也就能夠接收到用戶傳遞給QQ的密碼鍵入了, 真是“家賊難防”啊!

  3.如何插入進(jìn)程

  (1)使用注冊(cè)表插入DLL

  早期的進(jìn)程插入式木馬的伎倆, 通過(guò)修改注冊(cè)表中的[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs]來(lái)達(dá)到插入進(jìn)程的目的。 缺點(diǎn)是不實(shí)時(shí), 修改注冊(cè)表后需要重新啟動(dòng)才能完成進(jìn)程插入。

  (2)使用掛鉤(Hook)插入DLL

  比較高級(jí)和隱蔽的方式, 通過(guò)系統(tǒng)的掛鉤機(jī)制(即“Hook”, 類似于DOS時(shí)代的“中斷”)來(lái)插入進(jìn)程(一些盜QQ木馬、鍵盤記錄木馬以Hook方式插入到其他進(jìn)程中“偷雞摸狗”), 需要調(diào)用SetWindowsHookEx函數(shù)(也是一個(gè)Win32 API函數(shù))。 缺點(diǎn)是技術(shù)門檻較高, 程序調(diào)試?yán)щy, 這種木馬的制作者必須具有相當(dāng)?shù)腤in32編程水平。

你知道嗎——什么是API

  Windows中提供各種功能實(shí)現(xiàn)的接口稱為Win32 API(Application Programming Interface, 即“應(yīng)用程序編程接口”), 如一些程序需要對(duì)磁盤上的文件進(jìn)行讀寫(xiě), 就要先通過(guò)對(duì)相應(yīng)的API(文件讀寫(xiě)就要調(diào)用文件相關(guān)的API)發(fā)出調(diào)用請(qǐng)求, 然后API根據(jù)程序在調(diào)用其函數(shù)時(shí)提供的參數(shù)(如讀寫(xiě)文件就需要同時(shí)給出需要讀寫(xiě)的文件的文件名及路徑)來(lái)完成請(qǐng)求實(shí)現(xiàn)的功能, 最后將調(diào)用結(jié)果(如寫(xiě)入文件成功, 或讀取文件失敗等)返回給程序。

  (3)使用遠(yuǎn)程線程函數(shù)(CreateRemoteThread)插入DLL

  在Windows 2000及以上的系統(tǒng)中提供了這個(gè)“遠(yuǎn)程進(jìn)程”機(jī)制, 可以通過(guò)一個(gè)系統(tǒng)API函數(shù)來(lái)向另一個(gè)進(jìn)程中創(chuàng)建線程(插入DLL)。 缺點(diǎn)很明顯, 僅支持Windows 2000及以上系統(tǒng), 在國(guó)內(nèi)仍有相當(dāng)多用戶在使用Windows 98, 所以采用這種進(jìn)程插入方式的木馬缺乏平臺(tái)通用性。

  木馬將自身作為DLL插入別的進(jìn)程空間后, 用查看進(jìn)程的方式就無(wú)法找出木馬的蹤跡了, 你能看到的僅僅是一些正常程序的進(jìn)程, 但木馬卻已經(jīng)偷偷潛入其中了。 解決的方法是使用支持“進(jìn)程模塊查看”的進(jìn)程管理工具(如“Windows優(yōu)化大師”提供的進(jìn)程查看), 木馬的DLL模塊就會(huì)現(xiàn)形了。

  不要相信自己的眼睛:恐怖的進(jìn)程“蒸發(fā)”

  嚴(yán)格地來(lái)講, 這應(yīng)該算是第2.5代的進(jìn)程隱藏技術(shù)了, 可是它卻比前幾種技術(shù)更為可怕得多。 這種技術(shù)使得木馬不必將自己插入到其他進(jìn)程中, 而可以直接消失!

  它通過(guò)Hook技術(shù)對(duì)系統(tǒng)中所有程序的進(jìn)程檢測(cè)相關(guān)API的調(diào)用進(jìn)行了監(jiān)控, “任務(wù)管理器”之所以能夠顯示出系統(tǒng)中所有的進(jìn)程, 也是因?yàn)槠湔{(diào)用了EnumProcesses等進(jìn)程相關(guān)的API函數(shù), 進(jìn)程信息都包含在該函數(shù)的返回結(jié)果中, 由發(fā)出調(diào)用請(qǐng)求的程序接收返回結(jié)果并進(jìn)行處理(如“任務(wù)管理器”在接收到結(jié)果后就在進(jìn)程列表中顯示出來(lái))。

  而木馬由于事先對(duì)該API函數(shù)進(jìn)行了Hook, 所以在“任務(wù)管理器”(或其他調(diào)用了列舉進(jìn)程函數(shù)的程序)調(diào)用EnumProcesses函數(shù)時(shí)(此時(shí)的API函數(shù)充當(dāng)了“內(nèi)線”的角色), 木馬便得到了通知, 并且在函數(shù)將結(jié)果(列出所有進(jìn)程)返回給程序前, 就已將自身的進(jìn)程信息從返回結(jié)果中抹去了。 就好比你正在看電視節(jié)目, 卻有人不知不覺(jué)中將電視接上了DVD, 你在不知不覺(jué)中就被欺騙了。

  所以無(wú)論是“任務(wù)管理器”還是殺毒軟件, 想對(duì)這種木馬的進(jìn)程進(jìn)行檢測(cè)都是徒勞的。 這種木馬目前沒(méi)有非常有效的查殺手段, 只有在其運(yùn)行前由殺毒軟件檢測(cè)到木馬文件并阻止其病毒體的運(yùn)行。 當(dāng)時(shí)還有一種技術(shù)是由木馬程序?qū)⑵渥陨淼倪M(jìn)程信息從Windows系統(tǒng)用以記錄進(jìn)程信息的“進(jìn)程鏈表”中刪除, 這樣進(jìn)程管理工具就無(wú)法從“進(jìn)程鏈表”中獲得木馬的進(jìn)程信息了。 但由于缺乏平臺(tái)通用性而且在程序運(yùn)行時(shí)有一些問(wèn)題, 所以沒(méi)有被廣泛采用。

  你知道嗎——什么是Hook

  Hook是Windows中提供的一種用以替換DOS下“中斷”的一種系統(tǒng)機(jī)制, 中文譯名為“掛鉤”或“鉤子”。 在對(duì)特定的系統(tǒng)事件(包括上文中的特定API函數(shù)的調(diào)用事件)進(jìn)行Hook后, 一旦發(fā)生已Hook的事件, 對(duì)該事件進(jìn)行Hook的程序(如:木馬)就會(huì)收到系統(tǒng)的通知, 這時(shí)程序就能在第一時(shí)間對(duì)該事件做出響應(yīng)(木馬程序便搶在函數(shù)返回前對(duì)結(jié)果進(jìn)行了修改)。

  毫無(wú)蹤跡:全方位立體隱藏

  利用剛才介紹的Hook隱藏進(jìn)程的手段, 木馬可以輕而易舉地實(shí)現(xiàn)文件的隱藏, 只需將Hook技術(shù)應(yīng)用在文件相關(guān)的API函數(shù)上即可, 這樣無(wú)論是“資源管理器”還是殺毒軟件都無(wú)法找出木馬所在了。 更令人吃驚的是, 現(xiàn)在已經(jīng)有木馬(如:灰鴿子)利用該技術(shù)實(shí)現(xiàn)了文件和進(jìn)程的隱藏。 要防止這種木馬最好的手段仍是利用殺毒軟件在其運(yùn)行前進(jìn)行攔截。

  跟殺毒軟件對(duì)著干:反殺毒軟件外殼

  木馬再狡猾, 可是一旦被殺毒軟件定義了特征碼, 在運(yùn)行前就被攔截了。 要躲過(guò)殺毒軟件的追殺, 很多木馬就被加了殼, 相當(dāng)于給木馬穿了件衣服, 這樣殺毒軟件就認(rèn)不出來(lái)了, 但有部分殺毒軟件會(huì)嘗試對(duì)常用殼進(jìn)行脫殼, 然后再查殺(小樣, 別以為穿上件馬夾我就不認(rèn)識(shí)你了)。 除了被動(dòng)的隱藏外, 最近還發(fā)現(xiàn)了能夠主動(dòng)和殺毒軟件對(duì)著干的殼, 木馬在加了這種殼之后, 一旦運(yùn)行, 則外殼先得到程序控制權(quán), 由其通過(guò)各種手段對(duì)系統(tǒng)中安裝的殺毒軟件進(jìn)行破壞, 最后在確認(rèn)安全(殺毒軟件的保護(hù)已被瓦解)后由殼釋放包裹在自己“體內(nèi)”的木馬體并執(zhí)行之。 對(duì)付這種木馬的方法是使用具有脫殼能力的殺毒軟件對(duì)系統(tǒng)進(jìn)行保護(hù)。

  你知道嗎——什么是殼

  顧名思義, 你可以很輕易地猜到, 這是一種包在外面的東西。 沒(méi)錯(cuò), 殼能夠?qū)⑽募?比如EXE)包住, 然后在文件被運(yùn)行時(shí), 首先由殼獲得控制權(quán), 然后釋放并運(yùn)行包裹著的文件體。 很多殼能對(duì)自己包住的文件體進(jìn)行加密, 這樣就可以防止殺毒軟件的查殺。 比如原先殺毒軟件定義的該木馬的特征是“12345”, 如果發(fā)現(xiàn)某文件中含有這個(gè)特征, 就認(rèn)為該文件是木馬, 而帶有加密功能的殼則會(huì)對(duì)文件體進(jìn)行加密(如:原先的特征是“12345”, 加密后變成了“54321”, 這樣殺毒軟件當(dāng)然不能靠文件特征進(jìn)行檢查了)。 脫殼指的就是將文件外邊的殼去除, 恢復(fù)文件沒(méi)有加殼前的狀態(tài)

 


上面是電腦上網(wǎng)安全的一些基礎(chǔ)常識(shí),學(xué)習(xí)了安全知識(shí),幾乎可以讓你免費(fèi)電腦中毒的煩擾。