在《終結者》裡,狗是唯一可以區分敵我的工具,因為它判斷對方的方式並不僅僅靠眼睛——眼睛是可以被欺騙的,但是氣息不能,一個機器人無論偽裝得再怎麼逼真,都不能具備生命體的氣息,但是它能欺騙人類的視覺和聽覺,這就足夠了。
後門技術從誕生到現在,已經發展了好幾代,對自身的偽裝技術也越來越成熟了,從最初的啟動項結合隱藏進程方式,到最新的Ring0驅動方式,我們越來越難發現這些「客人」的痕跡,當它開始破壞的時候,已經來不及做補救措施了,所以,我們需要一種可以嗅出後門氣息的「狗」。
1.準備工作
在進行一切工作之前,用戶需要對系統有點瞭解,例如註冊表、啟動項、服務、常見的程序和進程名等,這是學習手工查毒最基本的要求,在初期可以多參考一些介紹系統概念的文章如到處都流傳的「系統進程詳解」、「WinXP系統服務簡介及優化措施」等,並做一點筆記,力求日積月累盡快記住一些最常見的系統程序和相關工具的使用方法,如果過不了這個門檻,後面的工作也就無從談起。
首先,我們必須瞭解Windows系統的三大知識點:註冊表(Registry)、進程(Process)和權限(Privilege)。
「註冊表」是出現在Windows 95及以後版本的一種數據庫。在這之前,用戶要對軟硬件工作環境進行配置,就要修改一種被稱為「配置設置」(INI)的文件來完成,但是由於每種設備或應用程序都得有自己的INI文件,無形中增加了管理難度,為瞭解決這個問題,微軟開始統一標準並將各種信息資源集中起來存儲,最終形成了將應用程序和計算機系統配置信息容納在一起的「註冊表」,用來管理應用程序和文件的關聯、硬件設備說明、狀態屬性以及各種狀態信息和數據等,註冊表維持著整個系統的正常運作。
註冊表採用一種類似文件目錄的結構樹來描述配置信息,最頂端的5個項目稱為「根鍵」(ROOT_KEY),系統能識別的所有的數據都是從它們這裡展開的,這5個根鍵分別是:
·HKEY_CLASSES_ROOT(負責各種組件註冊類別和文件並聯信息)
·HKEY_CURRENT_USER(當前登錄用戶的環境信息)
·HKEY_LOCAL_MACHINE(整個系統的公共環境信息)
·HKEY_USERS(所有用戶的環境配置信息)
·HKEY_CURRENT_CONFIG(當前的配置信息)
其中,我們主要關注的是前面三個根鍵裡的數據,它們是後門最愛篡改的地方,分別是三個啟動項目「HKEY_CURRENT_USER\Software\ Microsoft\Windows\CurrentVersion\Run」、「HKEY_LOCAL_MACHINE\Software\ Microsoft\Windows\CurrentVersion\Run」和「HKEY_LOCAL_MACHINE\Software\ Microsoft\Windows\CurrentVersion\RunServices」,一般的後門都要通過修改這裡加入自己的配置信息以達到跟隨系統啟動的目的;除此之外就是文件並聯信息「HKEY_CLASSES_ROOT」,並聯型後門最愛更改這裡的.exe、.bat、.scr、.com 等可執行文件的註冊信息,讓自己搶先一步運行。更多涉及到的註冊表內容以後會提到,現在讓我們來看看進程是什麼。
「進程」,是指一個可執行文件在運行期間請求系統在內存裡開闢給它的數據信息塊,系統通過控制這個數據塊為運行中的程序提供數據交換和決定程序生存期限,任何程序都必須擁有至少一個進程,否則它不被系統承認。進程從某一方面而言就是可執行文件把自身從存儲介質複製在內存中的映像,它通常和某個在磁盤上的文件保持著對應關係,一個完整的進程信息包括很多方面的數據,我們使用進程查看工具看到的「應用程序」選項卡包含的是進程的標題,而「進程」選項卡包含的是進程文件名、進程標識符、佔用內存等,其中「進程文件名」和「進程標識符」是必須掌握的關鍵,「進程標識符」是系統分配給進程內存空間時指定的唯一數字,進程從載入內存到結束運行的期間裡這個數字都是保持不變的,而「進程文件名」則是對應著的介質存儲文件名稱,根據「進程文件名」我們就可以找到最初的可執行文件位置。
最後是「權限」,這裡涉及的權限是指80386模式的Ring權限。操作系統是由內核(Kernel)和外殼(Shell)兩部分組成的,內核負責一切實際的工作,包括CPU任務調度、內存分配管理、設備管理、文件操作等,外殼是基於內核提供的交互功能而存在的界面,它負責指令傳遞和解釋。由於內核和外殼負責的任務不同,它們的處理環境也不同,因此處理器提供了多個不同的處理環境,把它們稱為運行級別(Ring),Ring讓程序指令能訪問的計算機資源依次逐級遞減,目的在於保護計算機遭受意外損害——內核運行於Ring 0級別,擁有最完全最底層的管理功能,而到了外殼部分,它只能擁有Ring 3級別,這個級別能操作的功能極少,幾乎所有指令都需要傳遞給內核來決定能否執行,一旦發現有可能對系統造成破壞的指令傳遞(例如超越指定範圍的內存讀寫),內核便返回一個「非法越權」標誌,發送這個指令的程序就有可能被終止運行,這就是大部分常見的「非法操作」的由來,這樣做的目的是為了保護計算機免遭破壞,如果外殼和內核的運行級別一樣,用戶一個不經意的點擊都有可能破壞整個系統。但是現在,Ring已經屢屢被後門木馬利用成為一個令人頭痛的凶器。
2.進程偽裝型後門的殲滅
最初的後門靠註冊「系統服務」的方法在Win9x系統裡隱藏自己的運行信息,到了NT架構裡,這個方法失效了——NT家族自帶的任務管理器(Task Manager,TaskMgr.exe)把所有普通進程都一視同仁的顯示出來,連初級用戶都能輕易發現後門運行的痕跡,於是後門製造者開始攻克心理學和障眼法,讓後門進程在任務管理器裡把自己標榜為「系統關鍵進程」,達到欺騙用戶的目的。
我們都知道,任務管理器列出的眾多進程裡包含著一部分「關鍵進程」,它們是無法通過任務管理器中止的,而且許多文章也會提到相關進程名,久而久之,我們又養成一個習慣:查看進程信息時,只要看到熟悉甚至類似的進程名就忽略不計了,僅僅去尋找不熟悉的進程名,於是後門製造者就直接利用這個心理暗角配合路徑遍曆法則,讓後門進程顯示為「smss.exe」、「svchost.exe」、「lsass.exe」、「csrss.exe」、「winlogon.exe」等關鍵進程名就欺騙了用戶和任務管理器。
在這種情況下,系統自己的任務管理器已經不能信任了,因為它遺漏了最重要的路徑信息,後門就利用了這一點——它可以把自己偽裝成svchost.exe 放到Windows目錄下,然後在註冊表啟動項裡加上不帶路徑信息的「svchost.exe」信息,系統在根據目錄遍曆法則一層層深入尋找 svchost.exe時會在Windows目錄裡發現並執行它,而真正的關鍵進程svchost.exe是在SYSTEM32里的,而且它也必須通過「服務管理器」(Service Control Manager,SCM)加載,於是任務管理器會顯示多個svchost.exe進程,但是由於缺乏路徑指示,我們根本不知道系統已經多了一個假的 svchost.exe。即使我們發現了它是假的,也無法用任務管理器終止它的運行,因為任務管理器只是簡單的判斷了文件名就認為它是「關鍵進程」了,自然不會讓你終止。類似的後門偽裝文件名還有「SYSTEM\rundll32.exe」、「SYSTEM32\rundll.exe」(NT架構里根本沒有rundll.exe這個程序)、「SYSTEM\services.exe」等,要發現並殲滅這些後門,除了要求我們對常見的系統關鍵進程有所瞭解以外,還需要第三方提供的擴展任務管理器協助,例如Windows優化大師攜帶的進程查看器,用它便可迅速發現路徑不對的「假兄弟」。
其實最迅速的查找方法是運行「系統配置實用程序」(MSCONFIG.EXE),切換到「啟動項」,如果在這裡發現了「系統關鍵程序」的信息,那它一定是假的。
3.服務欺騙型後門的戰役
Windows的任務管理器不可終止兩種程序的運行:一種是關鍵進程,另一種是通過服務管理器SCM啟動的系統服務程序(NT-Service),所以一部分後門製造者設法把後門做成服務形式,讓SCM直接幫助啟動服務進程,不再借用註冊表啟動項加載,這樣即使是對註冊表啟動項有一定瞭解的用戶也難以發現異常,而且就算他想終止任務管理器裡顯示的奇怪進程,也會被拒絕,如果用戶對服務管理器的瞭解不深,那他將會在眼花繚亂的服務面前變得束手無策。
這時候,我們又需要請「系統配置實用程序」出山了,切換到「服務」選項卡,把「隱藏所有Microsoft服務」,這裡就只顯示非微軟開發的普通服務程序列表了,包括服務欺騙型後門的服務項,一般它會包含欺騙性質的字符或者偽裝成某廠商的服務名,如「Rising Virus Monitor」(瑞星監控)、「Macromedia License」等,記住這裡顯示的列表名稱,接著運行「服務管理器」(Services.msc)找到對應的項目,看看屬性裡的文件和路徑是不是真的,如果你並沒有安裝KAV、MCAFEE這些殺毒軟件而SCM裡卻找到對應項目的話,它就是狡猾的後門沒錯了。一些間諜軟件還會自作主張的把自己命名為「Windows Print Controller」,簡直就是無視系統自身的「Print Spooler」服務。
找到這類後門後,不要急著終止它的運行,既然後門作者知道SCM能直接停止它們,就必然會做一些復活措施,所以我們必須先把後門服務的「啟動類型」設置為「禁止」,然後重啟一次確保後門程序無法跟隨系統啟動,這時候才能開始清理後門。其中文件的路徑信息SCM已經提供給我們了,直接在磁盤上找到刪除即可,但是服務項目不能直接用SCM刪除,要刪除這個殘留的服務項,首先要對系統服務有個最初的概念。
官方對系統服務的定義如下:
在NT架構系統中,服務是指執行指定系統功能的程序、例程或進程,以便支持其他程序,尤其是底層(接近硬件)程序。通過網絡提供服務時,服務可以在 Active Directory中發佈,從而促進了以服務為中心的管理和使用。服務是一種應用程序類型,它在後台運行。服務應用程序通常可以在本地和通過網絡為用戶提供一些功能,例如客戶端/服務器應用程序、Web服務器、數據庫服務器以及其他基於服務器的應用程序。既然服務自身也是獨立出來的程序,它就必須有一個加載的入口,我們可以把這個入口理解為第二個啟動項,這個入口是由SCM負責的,無論是什麼身份的用戶進入系統,SCM啟動服務的位置都固定在註冊表的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services分支裡,所以只要找這個分支就可以發現所有服務——也許你會說,這裡顯示的名字似乎都毫無意義,我怎麼知道哪個是我正在找的?其實很簡單,我們回到SCM,查看一個服務的屬性,例如「DNS Client」服務,它的屬性裡寫著「顯示名稱:DNS Client 服務名稱:Dnscache」,現在回到註冊表分支,查找「Dnscache」,就會看到它是CurrentControlSet \Services\Dnscache,這就是我們在SCM裡看到的「DNS Client」服務,如果你刪除掉「Dnscache」項目,那麼整個「DNS Client」服務也就消失了。以此類推,很快就可以清理掉服務欺騙型後門。
4.最艱難的尋找:Ring 0後門
隨著安全技術的發展和計算機用戶群的技術提高,一般的木馬後門越來越難生存,於是一部分有能力的後門作者把眼光投向了系統底層——Ring 0。位於Ring 0層的是系統核心模塊和各種驅動程序模塊,所以位於這一層的木馬也是以驅動的形式生存的,而不是一般的EXE。後門作者把後門寫成符合WDM規範(Windows Driver Model)的驅動程序模塊,把自身添加進註冊表的驅動程序加載入口,便實現了「無啟動項」運行。一般的進程查看器都只能枚舉可執行文件EXE的信息,所以通過驅動模塊和執行文件結合的後門程序便得以生存下來,由於它運行在Ring 0級別,擁有與系統核心同等級的權限,因此它可以更輕易的把自己隱藏起來,無論是進程信息還是文件體,甚至通訊的端口和流量也能被隱藏起來,在如此強大的隱藏技術面前,無論是任務管理器還是系統配置實用程序,甚至系統自帶的註冊表工具都失去了效果,我們不得不借助於更強大的第三方工具。幸好,一部分持有編寫Ring 0程序能力的人並沒有加入Ring 0木馬的陣營,而是把技術用到了安全檢查方面,於是我們有了IceSword、RootkitRevealer、knlsc等優秀的檢測工具。
一般的進程工具是運行在Ring 3級別的,它們讀取的依據來自Ring 0層,這些數據是可以被運行於Ring 0級別的木馬修改的,所以它們根本無法得知木馬程序信息,而IceSword等檢測工具不同,它們和Ring 0木馬一樣,也是通過驅動的模式進入Ring 0層工作的,不再需要從Ring 0層獲取信息,所以它們能得到未被木馬篡改的原始鏈表數據,例如最原始的進程信息,它是不能被更改的,如果木馬把它自身從原始進程信息裡刪除,就意味著它要自我終結了。所以一旦有進程工具從 Ring 0層直接讀取了原始數據,再把這個數據和Ring 3層獲取到的進程列表比較一下,就能迅速發現哪個是拚命隱藏自身的木馬程序了。很巧合的是,驅動程序和系統服務共享同一個加載入口,即 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,只要查找相應的Ring 0木馬文件名,就會發現它,刪除掉註冊表的加載數據後重新啟動計算機,再刪除掉木馬文件就可以解決了。
5.清理不受歡迎的附屬產品
「21世紀什麼最貴?人才!」
——《天下無賊》
黎叔說的這句話固然無可厚非,只是他大概不知道,在21世紀的網絡上,網民最恨的就是一部分利用歪點子製造「廣告軟件」(Adware)和「流氓/間諜軟件」(Spyware)的「人才」。如今的網絡已經被這些不受歡迎的軟件使用捆綁戰術給佔領了,隨便下載個共享工具,有點良心的會在安裝界面裡默認打上「安裝附屬產品」的勾,更多的則是一口氣給你把所有附屬工具都裝上了,許多用戶在安裝了一些共享軟件後,突然發現瀏覽器多了一堆這個條那個霸的,想要卸載時卻發現所謂的卸載程序只是個把用戶當小孩來哄的界面!可以說,這些惡意軟件才是當今網絡最令人厭惡的東西,「流氓軟件猛於後門也」!
與各種後門木馬的意圖不同,惡意捆綁軟件的立場是自家公司的利益,它們一般不會攜帶破壞性質的代碼(但不代表沒有),通常還會擁有一些號稱「服務大眾」的功能,這些功能或許可以讓它得到一些用戶的擁戴,但是這種光環並不能掩蓋其「服務大眾」背後的暴利黑幕。首先,惡意捆綁軟件可以輕易收集到用戶信息,任何一台被安裝了「X手X霸X豬X搜」的計算機都不再與「個人隱私」這個詞語有緣。其次,惡意捆綁軟件可以借用廣大計算機作為它無償彈出公司廣告的殖民地,如果每條廣告都能給該軟件背後的公司帶來一點利潤,那麼一年下來這個公司就已經從廣大用戶群的身上搜刮到一大筆可觀的錢財了。天下並沒有免費的午餐,在你使用這些捆綁軟件提供的「快捷服務」時,你就已經付出了代價。
最初,捆綁軟件都比較單純,僅僅使用BHO技術(Browser Helper Objects,瀏覽器輔助模塊)把自己安家在瀏覽器上而已,但是現在,也許因為被用戶清理得多了,一些公司惱羞成怒把ring 0級別的木馬技術應用在了自家產品上,配合一種令人厭惡的強制安裝技術,再利用金錢開路,讓一些網站加載自己的產品,只要用戶瀏覽某個頁面,就會不知不覺被安裝上一堆BHO,這已經不是一般的強盜行為了,而由於商業關係,一般的殺毒程序是不能去查殺它們的,即使它們與木馬後門的特徵無異,這時候,用戶就要靠自己來了。
首先,瀏覽器的BHO加載項目是固定在系統目錄的「Downloaded Program Files」文件夾裡的,對於在瀏覽器上出現的欄目,只要簡單的在這個文件夾裡選中刪除即可,但是其餘殘留文件就只能自行尋找了,由於製作惡意捆綁BHO 的公司太多,文件存放位置也不同,這裡無法給出很全面的刪除方法,所以只能推薦兩個工具:Upiea和RogueCleaner,使用它們即可快速卸載掉惹人討厭的附屬產品。
四. 生存法則
在森林裡,鹿媽媽會警告小鹿不要去到太偏僻或者太遠的地方玩耍,因為那裡可能隱藏著惡狼。在網絡上有更多的惡狼存在,但是卻沒有人能收到有效的警告。要成為自己的救世主,必須把那一份多餘的好奇心收起來,直到已經掌握了清理「不速之客」的技術以後,方可放開好奇心到處看看,否則一不小心被自己的好奇心弄得系統出毛病了,又沒法判斷清理,最終恐怕還是會回到依賴殺毒軟件的用戶群去。最後還有一句恆古不變的真理:網絡充滿風險,勤打系統補丁。
資料來源 http://bbs.tech.ccidnet.com/read.php?tid=585125
- Mar 24 Mon 2008 10:02
[賽迪網]認識黑客誘捕:計算機蜜罐技術
close
全站熱搜
留言列表