木馬各種隱藏技術披露(也許你看到過)(轉)

BSDLite發表於2007-08-13
木馬各種隱藏技術披露(也許你看到過)(轉)[@more@]感覺這篇文章對我們菜鳥來說很有幫助拿來和大家一起分享!
以前,我曾認為只要不隨便執行網友發來的檔案就不會中病毒或木馬,但後來出現了利用漏洞傳播的衝擊波、震盪波;以前,我曾認為不上小網站就不會中網頁木馬,但後來包括國內某知名遊戲網站在內的多個大網站均在其首頁被駭客掛上了木馬。從此,我知道:安全,從來沒有絕對的。

  雖然沒有絕對的安全,但如果能知已知彼,瞭解木馬的隱藏手段,對於木馬即使不能百戰百勝,也能做到及時發現,使損失最小化。那麼,木馬究竟是如何躲在我們的系統中的呢?

  最基本的隱藏:不可見窗體+隱藏檔案

  木馬程式無論如何神秘,但歸根究底,仍是Win32平臺下的一種程式。Windows下常見的程式有兩種:

  1.Win32應用程式(Win32 Application),比如QQ、Office等都屬於此行列。

  2.Win32控制檯程式(Win32 Console),比如硬碟引導修復程式FixMBR。

  其中,Win32應用程式通常會有應用程式介面,比如系統中自帶的“計算器”就有提供各種數字按鈕的應用程式介面。木馬雖然屬於Win32應用程式,但其一般不包含窗體或隱藏了窗體(但也有某些特殊情況,如木馬使用者與被害者聊天的視窗),並且將木馬檔案屬性設定為“隱藏”,這就是最基本的隱藏手段,稍有經驗的使用者只需開啟“工作管理員”,並且將“資料夾選項”中的“顯示所有檔案”勾選即可輕鬆找出木馬,於是便出現了下面要介紹的“程式隱藏”技術。

  第一代程式隱藏技術:Windows 98的後門

  在Windows 98中,微軟提供了一種能將程式註冊為服務程式的方法。儘管微軟沒有公開提供這種方法的技術實現細節(因為Windows的後續版本中沒有提供這個機制),但仍有高手發現了這個秘密,這種技術稱為RegisterServiceProcess。只要利用此方法,任何程式的程式都能將自己註冊為服務程式,而服務程式在Windows 98中的工作管理員中恰巧又是不顯示的,所以便被木馬程式鑽了空子。

  要對付這種隱藏的木馬還算簡單,只需使用其他第三方程式管理工具即可找到其所在,並且採用此技術進行隱藏的木馬在Windows 2000/XP(因為不支援這種隱藏方法)中就得現形!中止該程式後將木馬檔案刪除即可。可是接下來的第二代程式隱藏技術,就沒有這麼簡單對付了。

  第二代程式隱藏技術:程式插入

  在Windows中,每個程式都有自己的私有記憶體地址空間,當使用指標(一種訪問記憶體的機制)訪問記憶體時,一個程式無法訪問另一個程式的記憶體地址空間,就好比在未經鄰居同意的情況下,你無法進入鄰居家吃飯一樣。比如QQ在記憶體中存放了一張圖片的資料,而MSN則無法透過直接讀取記憶體的方式來獲得該圖片的資料。這樣做同時也保證了程式的穩定性,如果你的程式存在一個錯誤,改寫了一個隨機地址上的記憶體,這個錯誤不會影響另一個程式使用的記憶體。

你知道嗎——程式(Process)是什麼


  對應用程式來說,程式就像一個大容器。在應用程式被執行後,就相當於將應用程式裝進容器裡了,你可以往容器里加其他東西(如:應用程式在執行時所需的變數資料、需要引用的DLL檔案等),當應用程式被執行兩次時,容器裡的東西並不會被倒掉,系統會找一個新的程式容器來容納它。

  一個程式可以包含若干執行緒(Thread),執行緒可以幫助應用程式同時做幾件事(比如一個執行緒向磁碟寫入檔案,另一個則接收使用者的按鍵操作並及時做出反應,互相不干擾),在程式被執行後中,系統首先要做的就是為該程式程式建立一個預設執行緒,然後程式可以根據需要自行新增或刪除相關的執行緒

  1.程式插入是什麼

  獨立的地址空間對於程式設計人員和使用者來說都是非常有利的。對於程式設計人員來說,系統更容易捕獲隨意的記憶體讀取和寫入操作。對於使用者來說,作業系統將變得更加健壯,因為一個應用程式無法破壞另一個程式或作業系統的執行。當然,作業系統的這個健壯特性是要付出代價的,因為要編寫能夠與其他程式進行通訊,或者能夠對其他程式進行操作的應用程式將要困難得多。但仍有很多種方法可以打破程式的界限,訪問另一個程式的地址空間,那就是“程式插入”(Process Injection)。一旦木馬的DLL插入了另一個程式的地址空間後,就可以對另一個程式為所欲為,比如下文要介紹的盜QQ密碼。

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

  普通情況下,一個應用程式所接收的鍵盤、滑鼠操作,別的應用程式是無權“過問”的。可盜號木馬是怎麼偷偷記錄下我的密碼的呢?木馬首先將1個DLL檔案插入到QQ的程式中併成為QQ程式中的一個執行緒,這樣該木馬DLL就赫然成為了QQ的一部分!然後在使用者輸入密碼時,因為此時木馬DLL已經進入QQ程式內部,所以也就能夠接收到使用者傳遞給QQ的密碼鍵入了,真是“家賊難防”啊!

  3.如何插入程式

  (1)使用登錄檔插入DLL

  早期的程式插入式木馬的伎倆,透過修改登錄檔中的[HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrentVersionWindowsAppInit_DLLs]來達到插入程式的目的。缺點是不實時,修改登錄檔後需要重新啟動才能完成程式插入。

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

  比較高階和隱蔽的方式,透過系統的掛鉤機制(即“Hook”,類似於DOS時代的“中斷”)來插入程式(一些盜QQ木馬、鍵盤記錄木馬以Hook方式插入到其他程式中“偷雞摸狗”),需要呼叫SetWindowsHookEx函式(也是一個Win32 API函式)。缺點是技術門檻較高,程式除錯困難,這種木馬的製作者必須具有相當的Win32程式設計水平。

你知道嗎——什麼是API


  Windows中提供各種功能實現的介面稱為Win32 API(Application Programming Interface,即“應用程式程式設計介面”),如一些程式需要對磁碟上的檔案進行讀寫,就要先透過對相應的API(檔案讀寫就要呼叫檔案相關的API)發出呼叫請求,然後API根據程式在呼叫其函式時提供的引數(如讀寫檔案就需要同時給出需要讀寫的檔案的檔名及路徑)來完成請求實現的功能,最後將呼叫結果(如寫入檔案成功,或讀取檔案失敗等)返回給程式。

  (3)使用遠端執行緒函式(CreateRemoteThread)插入DLL

  在Windows 2000及以上的系統中提供了這個“遠端程式”機制,可以透過一個系統API函式來向另一個程式中建立執行緒(插入DLL)。缺點很明顯,僅支援Windows 2000及以上系統,在國內仍有相當多使用者在使用Windows 98,所以採用這種程式插入方式的木馬缺乏平臺通用性。

  木馬將自身作為DLL插入別的程式空間後,用檢視程式的方式就無法找出木馬的蹤跡了,你能看到的僅僅是一些正常程式的程式,但木馬卻已經偷偷潛入其中了。解決的方法是使用支援“程式模組檢視”的程式管理工具(如“Windows最佳化大師”提供的程式檢視),木馬的DLL模組就會現形了。

  不要相信自己的眼睛:恐怖的程式“蒸發”

  嚴格地來講,這應該算是第2.5代的程式隱藏技術了,可是它卻比前幾種技術更為可怕得多。這種技術使得木馬不必將自己插入到其他程式中,而可以直接消失!

  它透過Hook技術對系統中所有程式的程式檢測相關API的呼叫進行了監控,“工作管理員”之所以能夠顯示出系統中所有的程式,也是因為其呼叫了EnumProcesses等程式相關的API函式,程式資訊都包含在該函式的返回結果中,由發出呼叫請求的程式接收返回結果並進行處理(如“工作管理員”在接收到結果後就在程式列表中顯示出來)。

  而木馬由於事先對該API函式進行了Hook,所以在“工作管理員”(或其他呼叫了列舉程式函式的程式)呼叫EnumProcesses函式時(此時的API函式充當了“內線”的角色),木馬便得到了通知,並且在函式將結果(列出所有程式)返回給程式前,就已將自身的程式資訊從返回結果中抹去了。就好比你正在看電視節目,卻有人不知不覺中將電視接上了DVD,你在不知不覺中就被欺騙了。

  所以無論是“工作管理員”還是防毒軟體,想對這種木馬的程式進行檢測都是徒勞的。這種木馬目前沒有非常有效的查殺手段,只有在其執行前由防毒軟體檢測到木馬檔案並阻止其病毒體的執行。當時還有一種技術是由木馬程式將其自身的程式資訊從Windows系統用以記錄程式資訊的“程式連結串列”中刪除,這樣程式管理工具就無法從“程式連結串列”中獲得木馬的程式資訊了。但由於缺乏平臺通用性而且在程式執行時有一些問題,所以沒有被廣泛採用。

  你知道嗎——什麼是Hook

  Hook是Windows中提供的一種用以替換DOS下“中斷”的一種系統機制,中文譯名為“掛鉤”或“鉤子”。在對特定的系統事件(包括上文中的特定API函式的呼叫事件)進行Hook後,一旦發生已Hook的事件,對該事件進行Hook的程式(如:木馬)就會收到系統的通知,這時程式就能在第一時間對該事件做出響應(木馬程式便搶在函式返回前對結果進行了修改)。

  毫無蹤跡:全方位立體隱藏

  利用剛才介紹的Hook隱藏程式的手段,木馬可以輕而易舉地實現檔案的隱藏,只需將Hook技術應用在檔案相關的API函式上即可,這樣無論是“資源管理器”還是防毒軟體都無法找出木馬所在了。更令人吃驚的是,現在已經有木馬(如:灰鴿子)利用該技術實現了檔案和程式的隱藏。要防止這種木馬最好的手段仍是利用防毒軟體在其執行前進行攔截。

  跟防毒軟體對著幹:反防毒軟體外殼

  木馬再狡猾,可是一旦被防毒軟體定義了特徵碼,在執行前就被攔截了。要躲過防毒軟體的追殺,很多木馬就被加了殼,相當於給木馬穿了件衣服,這樣防毒軟體就認不出來了,但有部分防毒軟體會嘗試對常用殼進行脫殼,然後再查殺(小樣,別以為穿上件馬夾我就不認識你了)。除了被動的隱藏外,最近還發現了能夠主動和防毒軟體對著幹的殼,木馬在加了這種殼之後,一旦執行,則外殼先得到程式控制權,由其透過各種手段對系統中安裝的防毒軟體進行破壞,最後在確認安全(防毒軟體的保護已被瓦解)後由殼釋放包裹在自己“體內”的木馬體並執行之。對付這種木馬的方法是使用具有脫殼能力的防毒軟體對系統進行保護。

  你知道嗎——什麼是殼

  顧名思義,你可以很輕易地猜到,這是一種包在外面的東西。沒錯,殼能夠將檔案(比如EXE)包住,然後在檔案被執行時,首先由殼獲得控制權,然後釋放並執行包裹著的檔案體。很多殼能對自己包住的檔案體進行加密,這樣就可以防止防毒軟體的查殺。比如原先防毒軟體定義的該木馬的特徵是“12345”,如果發現某檔案中含有這個特徵,就認為該檔案是木馬,而帶有加密功能的殼則會對檔案體進行加密(如:原先的特徵是“12345”,加密後變成了“54321”,這樣防毒軟體當然不能靠檔案特徵進行檢查了)。脫殼指的就是將檔案外邊的殼去除,恢復檔案沒有加殼前的狀態。
摘自瑞星官網論壇 ——木馬各種隱藏技術披露

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-955254/,如需轉載,請註明出處,否則將追究法律責任。

相關文章