保障電腦安全:木馬各種隱藏技術全批露[圖]-IT浪潮-北方網
新聞 | 天津 | 民生 | 廣電 | 津抖雲 | 微視 | 讀圖 | 文娛 | 體育 | 圖事 | 理論 | 志願 | 專題 | 工作室 | 不良信息舉報
教育 | 健康 | 財經 | 地產 | 天津通 | 旅游 | 時尚 | 購物 | 汽車 | IT | 親子 | 會計 | 訪談 | 場景秀 | 發布系統

"津雲"客戶端
  您當前的位置 : 北方網  >  IT浪潮  >  北方學院  >  軟件文庫  >  網絡相關
關鍵詞:

保障電腦安全:木馬各種隱藏技術全批露[圖]


http://www.enorth.com.cn  2006-08-30 14:49

  以前,我曾認為只要不隨便運行網友發來的文件就不會中病毒或木馬,但後來出現了利用漏洞傳播的衝擊波、震蕩波;以前,我曾認為不上小網站就不會中網頁木馬,但後來包括國內某知名游戲網站在內的多個大網站均在其首頁被黑客掛上了木馬。從此,我知道:安全,從來沒有絕對的。

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

最基本的隱藏:不可見窗體+隱藏文件

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

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

  2.Win32控制臺程序(Win32 Console),比如 硬盤 引導修復程序FixMBR。

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


圖1

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

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

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

不要相信自己的眼睛:恐怖的進程『蒸發』

  嚴格地來講,這應該算是第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』,這樣殺毒軟件當然不能靠文件特征進行檢查了)。脫殼指的就是將文件外邊的殼去除,恢復文件沒有加殼前的狀態。

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

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

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

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

  一個進程可以包含若乾線程(Thread),線程可以幫助應用程序同時做幾件事(比如一個線程向磁盤寫入文件,另一個則接收用戶的按鍵*作並及時做出反應,互相不乾擾),在程序被運行後中,系統首先要做的就是為該程序進程建立一個默認線程,然後程序可以根據需要自行添加或刪除相關的線程(見圖2 進程關系圖)。


圖2

  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 應用程序、Win32 API、系統的關系圖)。


圖3

  (3)使用遠程線程函數(CreateRemoteThread)插入DLL

  在Windows 2000及以上的系統中提供了這個『遠程進程』機制,可以通過一個系統API函數來向另一個進程中創建線程(插入DLL)。缺點很明顯,僅支持Windows 2000及以上系統,在國內仍有相當多用戶在使用Windows 98,所以采用這種進程插入方式的木馬缺乏平臺通用性。

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

 

編輯:趙國棟
[進入IT論壇]
就是這麼簡單:在Realplayer影片中放木馬
你是否被安裝了木馬?WINDOWS自帶命令幫你查
請您文明上網、理性發言並遵守相關規定,在注冊後發表評論。
 北方網精彩內容推薦
無標題文檔
天津民生資訊
天氣交通 天津福彩 每月影訊 二手市場
空氣質量 天津股票 廣播節目 二手房源
失物招領 股市大擂臺 天視節目 每日房價
熱點專題
北京奧運聖火傳遞和諧之旅 迎奧運 講文明 樹新風
解放思想 乾事創業 科學發展 同在一方熱土 共建美好家園
2008天津夏季達沃斯論壇 《今日股市觀察》視頻
北方網網絡相聲頻道在線收聽 2008高考招生簡章 復習衝刺
天津自然博物館館藏精品展示 2008年天津中考問題解答
帶你了解08春夏服飾流行趨勢 完美塑身 舞動肚皮舞(視頻)
C-NCAP碰撞試驗—雪佛蘭景程 特殊時期善待自己 孕期檢查
熱點新聞排行 財經 體育 娛樂 汽車 IT 時尚 健康 教育

Copyright (C) 2000-2021 Enorth.com.cn, Tianjin ENORTH NETNEWS Co.,LTD.All rights reserved
本網站由天津北方網版權所有