瀏覽器劫持分析

一. 一個EXE引起的危機
網絡程序員小李最近有點忙,公司要作的網頁工程項目已經快到尾期了,但是開發小組的進度仍然遲遲跟不上來,爲了趕進度,小李去國外下了一些代碼回來參考,但那些代碼的關鍵部分都是用了字符編碼的形式加密的,小李不想手工一段段的解碼,就上網搜索了一個號稱能解碼腳本字符編碼的工具,下載回來的是一個安裝包,文件名爲「downsoft226.exe」,小李要急着用,看也沒看就雙擊執行了,可是他等了好一下子也沒見安裝界面出現,反而感受到硬盤在狂轉,機器奇慢,小李有些不安的打開了任務管理器——列表裏赫然有至少超過50個進程在後臺執行!
小李趕快手忙腳亂的中止進程,但是仍然有新的進程不斷的出現,在他停掉downsoft226.exe這個進程後,系統藍屏了,計算機重啓後跳出好幾個IE窗口,每一個窗口上都多了一些工具欄,並且更嚴重的是,IE的空白頁也再也不空白了。小李只以爲天昏地暗:完了,惡狼又找上門來了……


二. 無處不在的劫持者
以上的經歷大概許多用戶都會遇到,在網絡上看到個工具的說明很好,就下載了運行,結果運氣好的在獲得工具的同時還「獲贈」了一堆所謂的「IE助手」(BHO),運氣差的不但工具沒獲得,還引狼入室給本身惹來一身臊。在這個信任危機的網絡時代,你的瀏覽器隨時會被「劫匪」給綁了去。

QUOTE知識回顧:瀏覽器劫持
「瀏覽器劫持」(Browser Hijack)是一種不一樣於普通病毒木馬感染途徑的網絡攻擊手段,它的滲透途徑不少,目前最多見的方式有經過BHO、DLL插件、Hook技術、Winsock LSP等載體達到對用戶的瀏覽器進行篡改的目的。這些載體能夠直接寄生於瀏覽器的模塊裏,成爲瀏覽器的一部分,進而直接操縱瀏覽器的行爲,輕者把用戶帶到自家門戶網站,嚴重的則會在用戶計算機中收集敏感信息,危及用戶隱私安全。「瀏覽器劫持」的後果很是嚴重,用戶只有在受到劫持後纔會發現異常狀況,可是這時候已經太遲了。目前,瀏覽器劫持已經成爲Internet用戶最大的威脅之一。

因爲「瀏覽器劫持」的攻擊手段是能夠經過被系統承認的「合法途徑」來進行的,以目前的軟件行爲檢測技術來講,「瀏覽器劫持」是防不勝防的,即便你天天都很當心的設置安全級別、對瀏覽器彈出的安裝插件提示看了又看,你仍然不可避免會由於下載安裝了一些工具而讓「劫持者」登堂入室。若是咱們不當心讓這頭惡狼駐紮了進來,該用什麼方法驅逐它呢?

QUOTE知識回顧:爲何「瀏覽器劫持」是「合法入侵」
爲何說「瀏覽器劫持」能夠說是合法的呢?由於大部分瀏覽器劫持的發起者,都是經過一種被稱爲「BHO」(Browser Helper Object,瀏覽器輔助對象)的技術手段植入系統的。
BHO是微軟早在1999年推出的做爲瀏覽器對第三方程序員開放交互接口的業界標準,它是一種可讓程序員使用簡單代碼進入瀏覽器領域的「交互接口」(INTERACTIVED Interface)。經過BHO接口,第三方程序員能夠本身編寫代碼獲取瀏覽器的一些行爲(Action)和事件通知(Event),如「後退」、「前進」、「當前頁面」等,甚至能夠獲取瀏覽器的各個組件信息,像菜單、工具欄、座標等。因爲BHO的交互特性,程序員還可使用代碼去控制瀏覽器的行爲,好比常見的修改替換瀏覽器工具欄、在瀏覽器界面上添加本身的程序按鈕等操做,而這些操做都被視爲「合法」的,這就是一切罪惡根源的開始。
BHO的出現幫助程序員更好的打造個性化瀏覽器或者爲本身的程序實現了方便簡潔的交互功能,能夠說,若是沒有BHO接口的誕生,咱們今天就不能用一些工具實現個性化IE的功能了。從某一方面來看,BHO的確是各類繽紛網絡互動功能的幕後功臣,可是一切事物都是有兩面性的,這個恆古不變的真理一樣對BHO有效,因而就有了今天讓安全界頭痛的「瀏覽器劫持」的攻擊手段誕生。

除了BHO劫持之外,現在的劫持方式更有經過DLL插件、Hook技術和Winsock LSP進行的,而這些矛頭紛紛指向瀏覽器的小壞蛋們,都會被傳統的反病毒軟件視爲正常的,由於除了惡意軟件,還有許多正常軟件須要採用這些技術來爲IE提供許多功能,所以出現了「魚與熊掌」的尷尬局面,要更改這個已經定型的環境當然不現實,那麼,要想在這個危機重重的環境下保全本身,咱們就必須掌握一套「除狼」的技術了。


三. 代號35:營救IE行動
1. 解僱死纏爛打的祕書——BHO的清理
雖然一部分BHO是衷心爲IE效力的,但是也總有那麼一小嘬搗亂分子以簡單的理由(加強瀏覽器特性、保護瀏覽器安全、上網記錄清理等等等等……)讓用戶放心的執行了安裝程序,而後再以複雜的理由(卸載不完全、不提供卸載、表面上「卸載」等等等等……)死活趕不走了,若是遇到這樣的無賴,用戶該怎麼辦呢?
首先,要確認一下它的駐留地,通常狀況下,BHO文件都在Windows目錄下的「Downloaded Program Files」目錄下,記住永遠不要用資源管理器進去,它們會騙人的,咱們必須用最原始的命令提示符(CMD.EXE)進去,只須要這幾個命令:
QUOTEcd \
cd %SystemRoot%
cd 「Downloaded Program Files」
dir *.* /a
你就會發現命令提示符和Windows資源管理器的巨大差別,若是實在用不慣命令提示符也不要緊,有不少工具能夠不偏袒任何一方的顯示出最真實的狀況,例如Total Commander這款強大的文件管理工具。可是這裏並非惟一的BHO目錄,一些BHO會把本身放在系統根目錄下的「Program Files」目錄裏,而且創建有自身所屬的文件管理目錄。
既然看到這麼多BHO的文件實體了,那麼哪一個纔是趕不走的「助手」呢?既然它一開始就不打算讓你卸載的,那麼天然不會告訴你它一共有多少個文件、文件名是什麼、分佈的目錄等關係到自身生死大事的敏感信息,這就意味着對於計算機不熟練的用戶來講,要驅逐它們並不是那麼容易,可是大部分設計者都會被一種「自我」的心理暗示,所以設計出的程序文件通常都會註明版權信息,文件名也會包含有廠商的縮寫或者該工具的英文縮寫等特徵字符,有了這些因素存在,用戶要本身尋找這些不受歡迎的客人就好辦多了,一個典型的例子是「中文實名網址」這款工具,它的大部分文件均包含有產品英文縮寫「CDN」,並且每一個程序文件都在版權信息裏清楚的寫着「中文實名」,所以用戶只要查找包含有「CDN」字符的文件名就能發現個大概了,不過因爲系統自身也可能會有幾個文件名帶有「CDN」字符,因此刪除以前請先確認該文件的版權並不是Microsoft所屬。
一些用戶也許會疑惑,爲何有些文件要刪除的時候總會提示「文件正在被使用,沒法刪除」,這是由於BHO有必定的特殊性:它是能夠被Windows的外殼進程加載的,也就是那個Explorer,只要你進了系統,只要你的桌面和窗口還在,那麼你就別想刪除它了。要解決這個問題,咱們先要嘗試用REGSVR32.EXE程序來去除它的組件註冊信息,例如反註冊HBClient.dll,只須要用命令提示符進入文件的目錄裏,執行REGSVR32.EXE /U HBClient.dll便可,而後打開任務管理器taskmgr.exe,找到Explorer.exe進程停掉,最後直接在任務管理器裏執行CMD.EXE,進入文件目錄後輸入DEL HBClient.dll就完成了該文件的清理工做。若是這個BHO組件位於Program Files目錄下的某一子目錄裏,你還能夠放心的直接執行DEL *.*命令一窩端掉。
隨着時間的流逝和技術的進步,許多BHO已經再也不簡單,有的BHO不只使用BHO技術劫持瀏覽器,還加上了Hook技術、LSP劫持甚至採用了相似於Rootkit後門的保護技術最大限度的保全本身,要對付這些愈來愈狡猾的劫持者,僅僅用上面的方法大概是遠遠不夠的。
幸運的是,如今已經出現了一批針對「瀏覽器劫持」的優秀工具,如列出全部瀏覽器環境組件的HijackThis、直接清理大部分常見惡意軟件的RogueCleaner和直接屏蔽IE安裝惡意軟件功能的Upiea等,許多須要手工清理的惡意軟件均可以經過它們配合完成,事半功倍。


2. 尋回我遺失的首頁
「瀏覽器劫持」的另外一個顯著特徵就是篡改IE首頁,首先,惡意軟件把IE首頁改成它要帶用戶去瀏覽的網址,如某個廣告頁、帶毒頁等,即便用戶本身把首頁設置爲「about:blank」(空白頁),再打開IE仍然會發現瀏覽器在地址爲「about:blank」的狀況下本身跳轉到了那個惡意頁面,這就是常常搞得一批用戶人心惶惶最後不得不重裝系統的「IE空白頁劫持」事件,若是不慎被這種惡意軟件糾纏上了該怎麼辦呢?
首先,咱們要理解「空白頁劫持」的機制,它通常經過兩種方法進行,第一種是利用BHO技術進行劫持的,惡意程序員編寫了一個能檢測當前IE地址的BHO組件,若是該組件截獲到地址爲「about:blank」,則觸發跳轉代碼,控制瀏覽器訪問該組件內置的地址去;另外一種是利用了IURLSearchHook技術實現的內部跳轉,IURLSearchHook被瀏覽器用來轉換一個未知的URL協議地址,當瀏覽器企圖去打開一個未知協議的URL地址時,瀏覽器首先嚐試從這個地址獲得當前的協議,若是不成功,瀏覽器將尋找系統裏全部註冊爲「URL Search Hook」(資源搜索鉤子,USH)的對象並把這個IE不能理解的地址發送過去,若是某個USH對象「認識」這個地址,它就返回一個特定的標識告訴IE它知道怎麼打開這個地址,而後IE就根據約定的方法調用它,最終打開這個地址。
這樣描述也許很模糊,舉個例子就好理解了,例如,當用戶輸入一個不帶協議標記的資源地址時(資源定位協議規定標準格式爲協議標記://資源所在地址/目錄/文件名),瀏覽器自身並不認識它的,因此它會枚舉全部在系統註冊的USH對象,並把資源請求逐條傳遞過去,若是某一個USH「認識」該資源特徵,則告訴瀏覽器它認識這個請求,瀏覽器就會加載它最終打開目標鏈接。一般,默認的協議標記被指定爲「http」,它是屬於urlmon.dll負責的,而屬於mshtml.dll負責的「about」協議被用於本地信息輸出調試和擴展功能的實現(你們能夠嘗試在瀏覽器裏輸入about:<a%20href=mailto:lk007@163.com>小金</a>@<a%20href=bbs.nettf.net>網絡技術論壇</a> 看看效果),若是有個惡意的USH對象把「about」協議的解釋權搶了過來,用戶指定的空白頁天然就會被帶到某個不知名的地方去了。
對於BHO形成的頁面劫持,只要用清理BHO的方法去查找就能夠了,而若是是被USH劫持,那麼找起來會有點困難,因爲USH對象並不像BHO組件會在前臺出現蛛絲馬跡,對通常用戶而言會形成搜索困難,其實只要你理解了我在上文對USH機制的解釋,要找到它們就不困難了,一些USH對象實施的是本地跳轉,因此產生的頁面會帶有到自身文件的鏈接,用戶只需查看頁面源代碼,而後搜索到「res://」開頭的那個HTML元素,後面那一連串百分號和字符就是該USH的完整文件地址,它們是用Unicode編碼過的,不要看到那一堆相似加密的字符串就退卻了,既然瀏覽器能認識,那麼咱們也就能讓它顯示出來,只須要在IE瀏覽器的地址欄裏輸入這麼一句腳本代碼:「javascript:document.write(unescape('被Unicode編碼的字符串'));」,瀏覽器就把它還原回可讀字符串了,記下這個文件名去查找刪除掉,「空白頁劫持」就不復存在了,例如一個字符串爲「'%62%62%73%2E%6E%65%74%74%66%2E%6E%65%74」,只須要在瀏覽器地址欄裏輸入「javascript:document.write(unescape('%62%62%73%2E%6E%65%74%74%66%2E%6E%65%74'));」,就能夠知道它表示什麼了,各位能夠去試驗一下親自看看效果。
若是是另外一種稍微狡猾點的沒有使用本地跳轉代碼的USH對象,以上方法就行不通了,可是咱們也不用怕,因爲Windows的註冊表管理機制,任何USH對象都必須經過註冊表項目來加載,所以只要運行REGEDIT,定位到如下注冊表鍵:HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\URLSearchHooks,裏面列出的項目就是可能被添加的USH入口,只要刪除掉便可解除「空白頁劫持」危機。


3. 不應有你的世界——啓動項的清理
有時候,即便咱們清理了惡意劫持,一重啓機器,卻發現它又回來了,或者由劫持帶來的開機自彈廣告惡意頁面仍是依舊出現,這是爲何呢?由於在註冊表中,並非只有與IE有關的地方纔會被流氓軟件改寫的,另外一處最多見的加載入口——啓動項也經常被它們光臨,惡意軟件還會篡改這三個啓動項目「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_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\Run」項,而後從這裏啓動自身,因爲系統配置實用程序並不會檢測這個地方,因此常被一些新型後門鑽了空子。
如何快速篩選正常啓動項和惡意啓動項一直是普通用戶最頭痛的問題,俗話說「不打沒有準備的仗」,平時咱們必須記住系統常有的啓動項,到時候就能迅速發現新增長的項目列表了,通常來講,最乾淨的系統啓動項只有兩個,甚至只有一個:
QUOTEWindows 2000最少啓動項:
啓動項目:Synchronization Manager  命令:mobsync.exe /logon  做用:系統數據管理同步
啓動項目:Internat                命令:Internat.exe          做用:輸入法指示器

Windows XP/2003 最少啓動項:
啓動項目:CTFMON              命令:CTFMON.exe        做用:輸入法指示器

對於XP/2003,默認狀況下可能會有一些IME開頭的啓動項,可是這些項目徹底能夠刪除掉。除了這幾個項目,剩下的就是根據各人安裝程序和設備時產生的相應管理啓動項了,因此只能靠各用戶平時的觀察和記錄來判斷了,可是一般狀況下,莫名其妙出如今Windows系統目錄或者以一些Windows系統文件來命名的啓動項90%不是什麼好東西(若是你安裝了涉及系統管理的程序組件除外)!例如svchost.exe、C:\WINDOWS\SYSTEM32\CApp.exe等,還有一些DLL類型的Hook組件靠Rundll32.exe進行自啓動,例如某著名廠商的某某BHO就是這麼作的,若是這裏沒能清理乾淨,那麼下次啓動的時候,你剛纔辛苦清理的流氓們就又復活了。


4.和李鬼的鬥爭——Winsock LSP的清除
LSP全稱爲「Windows Socket Layered Service Provider」(分層服務提供商),這是Winsock 2.0纔有的功能,它須要Winsock支持服務提供商接口(Service Provider Interface,SPI)才能實現,SPI是一種不能獨立工做的技術,它依賴於系統商已經存在的基本協議提供商,如TCP/IP協議等,在這些協議上派分出的子協議即爲「分層協議」,如SSL等,它們必須經過必定的接口函數調用,LSP就是這些協議的接口。
近年來採用LSP技術進行瀏覽器劫持的惡意軟件也慢慢浮出水面了,使用LSP的好處在於,這類瀏覽器劫持方案能夠不分瀏覽器「種族」的進行,即便你不用IE,你的Opera、NC、Firefox等非IE內核的瀏覽器也難逃厄運,由於LSP是直接從Winsock獲取信息的,而全部瀏覽器最終的數據傳輸都必須創建在Winsock接口上,因此一旦LSP層被惡意劫持,用戶的全部請求都有可能被控制了。
LSP服務接口位於註冊表的「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\NameSpace_Catalog5\Catalog_Entries」項目內,全部接口都經過一串長數字項表示。普通狀況下,系統就已經帶有了兩個LSP接口分別負責TCP/IP組件(rnr20.dll)和NTDS組件(winrnr.dll)的正常工做,而LSP劫持則是把本身加入該項目內,並把優先權提升(用長數字項表示),例如默認狀況下TCP/IP組件的優先權爲000000000001,若是發生了LSP劫持,惡意LSP可能會把自身改成000000000001,而系統原有的LSP項目就被日後推爲000000000002等,以便數據包輪尋的時候能優先被惡意LSP處理。
要清理LSP劫持不能簡簡單單的直接把鼠標往「NameSpace_Catalog5」項目上點「刪除」完事,這樣作之後你就會發現系統也不能使用任何網絡功能了,由於系統自身也必須依賴兩個內置的LSP進行工做,這種架構看起來的確很麻煩,可是若是微軟連本身提出的技術本身都不去使用的話,還期望別人會用?
因此,正確的清理步驟必須這樣進行:
 確認LSP劫持已經發生,能夠經過手工檢查上文提到的註冊表鍵值判斷,或者使用HijackThis作一次全面掃描。
 查找並刪除LSP驅動文件,可直接經過相應LSP項目的「LibraryPath」子項獲得。
 刪除相應的LSP組件項目,它是用一長串數字表示的。
 重命名正常的LSP組件項目,TCP/IP爲000000000001,NTDS爲000000000002,若是還有其餘的話,依次排序。
 重啓計算機,再用HijackThis掃描一下惡意LSP是否已經完全清理掉。


5.不得不恨——迎戰驅動形式的瀏覽器劫持
原本已經不想說這個噁心的東西了,看看「驅動」兩個字,你想起了什麼?沒錯,這是Rootkit的代名詞!這個東西本來就不屬於瀏覽器劫持範疇的,但是自從一些廠商和我的首次採用並嚐到「甜頭」後,這股風氣逐漸蔓延開來,我不得不暗自慶幸現在能真正寫出好用的Rootkit的人還沒那麼多,不然之後通常用戶的日子更很差過了,這類劫持一般不作主要工做,它只負責隱藏惡意BHO文件、啓動項和進程信息等,這樣即便咱們用上面的幾個方法清理了流氓軟件,幾秒鐘後它就又回來了,或者直接就不給你刪除文件!既然爲了損害用戶利益把劫持技術研究到這種地步了,爲什麼不去作正事呢?

QUOTE知識回顧:什麼是Rootkit
隨着安全技術的發展和計算機用戶羣的技術提升,通常的木馬後門愈來愈難生存,因而一部分有能力的後門做者把眼光投向了系統底層——Ring 0。位於Ring 0層的是系統核心模塊和各類驅動程序模塊,因此位於這一層的木馬也是以驅動的形式生存的,而不是通常的EXE。後門做者把後門寫成符合WDM規範(Windows Driver Model)的驅動程序模塊,把自身添加進註冊表的驅動程序加載入口,便實現了「無啓動項」運行,通常的進程查看器都只能枚舉可執行文件EXE的信息,因此經過驅動模塊和執行文件結合的後門程序便得以生存下來,因爲它運行在Ring 0級別,擁有與系統核心同等級的權限,所以它能夠更輕易的把本身隱藏起來,不管是進程信息仍是文件體,甚至通信的端口和流量也能被隱藏起來,在如此強大的隱藏技術面前,不管是任務管理器仍是系統配置實用程序,甚至系統自帶的註冊表工具都失去了效果,這種形式的後門被稱爲Rootkit。


要清理這類劫持並不是HijackThis和其餘同類軟件能作到的了,手工查找也比較困難,這時候咱們必須請出IceSword了,主要關心的位置是「進程」和「SSDT」(順便提一下,IceSword也能看系統當前註冊的BHO信息),注意找被IceSword標註爲紅色的項目,它們就是罪魁禍首,對於進程列表裏的紅色進程,先嚐試用「結束進程」中止掉該進程運行,而後看看它還會不會「復活」,我不推薦用戶直接刪除紅色進程的文件,由於這些進程雖然是被Rootkit出於某種目的隱藏起來的,可是它們也有多是被Rootkit借來駐留的系統進程載體(例如線程注射),隨便刪除容易致使系統出錯。
確認沒有紅色進程後,咱們來看「SSDT」,SSDT意爲「系統服務描述表」,裏面存放着最底層的接口函數,Rootkit要實現各類隱藏都要修改這個地方實現對系統底層函數的控制和轉移,正常狀況下SSDT的函數都是從ntoskrnl.exe導出的,若是有Rootkit控制了部分函數,在IceSword裏就會表示爲紅色的,而且指出該函數被哪一個文件擄走了(一些殺毒軟件爲了查殺Rootkit,也會在這裏留下本身的痕跡,如卡巴斯基的klif.sys等,檢查的時候要注意看文件版權信息以避免誤殺),咱們先要記下該文件名,而後進入註冊表的「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services」裏查找該文件並刪除對應的子項名稱,從新啓動計算機後再用IceSword檢查,若是沒有再出現紅色,那麼恭喜一下,這場反劫持戰爭咱們終於勝利了!


四. IE,爲何受傷的老是你
也許是由於瀏覽器的訪問直接表明着利益關係,因此愈來愈多人把眼光投向瀏覽器,使用戶替代他們完成諸如訪問流量、廣告點擊等工做,不知道繼「網絡釣魚」、「瀏覽器劫持」之後,廣大的網絡用戶明天又該會面對什麼樣的危機?
瀏覽器的戰爭,會有休止的那一天嗎?javascript

相關文章
相關標籤/搜索