萬盛學電腦網

 萬盛學電腦網 >> 健康知識 >> 是誰劫持了浏覽器?到底是助手還是敵人

是誰劫持了浏覽器?到底是助手還是敵人

一。 誰誤導了浏覽器

今天是大年初二,王先生家中來了許多客人,把平時埋頭於工作的王先生弄了個手忙腳亂,由於客人帶來的幾個小孩子嚷嚷著要出去上網,王先生只好把寢室裡的電腦讓給了這一群孩子玩,好容易到了晚上,客人散盡,王先生想在休息前上網浏覽一下新聞,可是當他打開IE的時候,卻發現它自動連接到一個莫名其妙的網站去了,而且收藏夾裡也多了一些奇怪的網址,王先生擔心是系統感染了病毒,趕緊輸入一個在線殺毒工具的網址,結果IE打開的卻是另一個不知所謂的網站。看著IE地址欄裡准確無誤的殺毒工具網址和下面那根本扯不上關系的內容,王先生真的手忙腳亂了……

相信不少用戶也遇到過與之類似的奇怪事情,究竟是誰,把我們的浏覽器領到了一處陌生的地方呢?

近年來,針對浏覽器的攻擊手段層出不窮,對浏覽器的滲透攻擊逐漸成為入侵者攻破用戶層層防御的首要目標,在“釣魚”(Publishing)危機尚未解除的時候,另一種攻擊方式也在同時進行著,這就是“浏覽器劫持”——故意誤導浏覽器行進路線的策劃者。

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

二。 BHO,你是助手還是敵人?

為什麼“浏覽器劫持”能夠如此猖狂呢?放眼眾多論壇的求助貼,我們不時可以看到諸如“我的IE被主頁被改了,我用殺毒工具掃了一遍都沒發現病毒,我把主頁改回自己的地址,可是一重啟它又回來了!”、“我的系統一開機就跳出一個廣告,我明明用了最新版的殺毒軟件的啊!”等這類關於IE異常問題的求助,80%的提問者都表示納悶,他們已經安裝了殺毒軟件,可是IE仍然被“黑”了,這又是為什麼?

其實這些都是典型的“浏覽器劫持”現象,但是受害者不是已經安裝了殺毒軟件嗎?為什麼浏覽器依然躲不過這只黑手?許多用戶對這個領域都存在一種誤區心理:浏覽器劫持?我有最新的殺毒軟件,我不怕!

於是,當他們遭遇“浏覽器劫持”時,驚訝了。

要知道,殺毒軟件自身也只是一種輔助工具,它不可能完全保護系統的安全,更何況,殺毒軟件用戶必須知道一個事實:“浏覽器劫持”的攻擊手段是可以通過被系統認可的“合法途徑”來進行的!殺毒軟件只能通過“特征碼”的形式來判斷程序是否合法,但這是建立在人為定義以後的,而實施“浏覽器劫持”的程序可以有很多,防不勝防。

為什麼說“浏覽器劫持”可以說是合法的呢?因為大部分浏覽器劫持的發起者,都是通過一種被稱為“BHO”(Browser Helper Object,浏覽器輔助對象)的技術手段植入系統的。

BHO是微軟早在1999年推出的作為浏覽器對第三方程序員開放交互接口的業界標准,它是一種可以讓程序員使用簡單代碼進入浏覽器領域的“交互接口”(INTERACTIVED Interface)。通過BHO接口,第三方程序員可以自己編寫代碼獲取浏覽器的一些行為(Action)和事件通知(Event),如“後退”、“前進”、“當前頁面”等,甚至可以獲取浏覽器的各個組件信息,像菜單、工具欄、坐標等。由於BHO的交互特性,程序員還可以使用代碼去控制浏覽器的行為,比如常見的修改替換浏覽器工具欄、在浏覽器界面上添加自己的程序按鈕等操作,而這些操作都被視為“合法”的,這就是一切罪惡根源的開始。

BHO的出現幫助程序員更好的打造個性化浏覽器或者為自己的程序實現了方便簡潔的交互功能,可以說,如果沒有BHO接口的誕生,我們今天就不能用一些工具實現個性化IE的功能了。從某一方面來看,BHO的確是各種缤紛網絡互動功能的幕後功臣,但是一切事物都是有兩面性的,這個恆古不變的真理同樣對BHO有效,於是就有了今天讓安全界頭痛的“浏覽器劫持”的攻擊手段誕生。

看看前面我提到的BHO接口特性,你想到了什麼?BHO可以獲知和實現浏覽器的大部分事件和功能,也就是說,它可以利用少量的代碼控制浏覽器行為。程序員可以設計出一個BHO按鈕以實現用戶點擊時通知浏覽器跳轉到某個頁面完成交互功能,當然就可以進一步寫出控制浏覽器跳轉到他想讓用戶去的頁面,這就是最初的“浏覽器劫持”的成因:BHO劫持。

在描述BHO劫持之前,我們先要對BHO接口的啟動做個簡單介紹:符合BHO接口標准的程序代碼被寫為DLL動態鏈接庫形式在注冊表裡注冊為COM對象,還要在BHO接口的注冊表入口處進行組件注冊,以後每次IE啟動時都會通過這裡描述的注冊信息調用加載這個DLL文件,而這個DLL文件就因此成為IE的一個模塊(BHO組件),與IE共享一個運行周期,直到IE被關閉。

IE啟動時,會加載任何BHO組件,這些組件直接進入IE領域,而IE則成為它們的父進程和載體,從此IE的每一個事件都會通過IUnknown接口傳遞到BHO用以提供交互的IObjectWithSite接口裡,這是BHO實現與IE交互的入口函數。

BHO接收到IE接口傳遞來的參數後開始判斷IE正在做什麼,理論上BHO可以獲取IE的大部分事件,然後根據程序員編寫的代碼,BHO持有對特定事件做出反應的決定權,例如一個可以實現“中文網址”的BHO,就是通過GetSite方法獲取到IE當前打開的站點URL(或通過IURLSearchHook接口來獲知),如果BHO發現獲取到的URL和內置的判斷條件匹配,該BHO就會啟用SetSite方法強制IE跳轉到程序員設定的頁面去,這個過程就是利用about:blank篡改主頁的“浏覽器劫持”方法之一,它的實現原理其實很簡單,程序員編寫一個惡意BHO組件,當它獲取到IE窗口的當前站點為“about:blank”時就強制IE內部跳轉到指定的廣告頁面,於是鬧出了不久之前沸沸揚揚的“IE空白頁劫持事件”。

了解了這種類似惡作劇的作案手段,要解決它就容易了,只要找到並刪除這個隱藏在系統裡的BHO程序即可。

除了這類“廣告軟件”性質的BHO,還有一種利用IURLSearchHook接口實現的另一類更隱蔽的BHO,這種BHO從某些方面來說大概不算BHO,因為它並不是響應IUnknown,而是等待IE創建IURLSearchHook來啟動。IURLSearchHook被浏覽器用來轉換一個未知的URL協議地址,當浏覽器企圖去打開一個未知協議的URL地址時,浏覽器首先嘗試從這個地址得到當前的協議,如果不成功,浏覽器將尋找系統裡所有注冊為“URL Search Hook”(資源搜索鉤子,USH)的對象並把這個IE不能理解的地址發送過去,如果某個USH對象“認識”這個地址,它就返回一個特定的標識告訴IE它知道怎麼打開這個地址,然後IE就根據約定的方法調用它,最終打開這個地址。其實USH對象並不陌生,我們一些偷懶的用戶就經常為了省事而不輸入“”,但是IE最終還是能認出並打開某個地址,就是USH的功勞,但是這一點又被惡意程序員拿來磨刀了,通過創建自己的USH對象,惡意程序員能夠命令IE在找不到一些網站時自動跳轉到事先設置的站點裡,如果這個站點帶毒或者掛馬,用戶就完了。

這類BHO的解決方法和前面一樣,只是它比較隱蔽,除非用戶經常偷懶,否則可能直到系統崩潰也不會知道自己已經感染了這種東西。也許你會說,只要用戶的輸入永遠不會讓IE無法識別,這種滲透不就白費了?但是事實不容樂觀,我們無法得知BHO作者還會不會通過其他方法攔截IE,說不定每隔一段時間就讓IE彈出一個廣告呢?

上面說了這麼多BHO和IE合作搞破壞的事例,可能會給讀者造成一種“BHO必須在IE傳遞數據後才能行動”的誤解,然而事實並非如此,浏覽器自身也是一個標准的可執行程序,而BHO只是借用這個程序進程啟動的DLL,它並非API那種要用的時候就讓你過來忙活,忙活完了就一腳踹開的奴隸形態DLL,前面說過了,BHO是一種在浏覽器加載時一同啟動的例程,它相當於一種自身運行邏輯不太明確的子進程(裡面都是對IE事件的響應和操作代碼),這個特性就造成了BHO DLL和API DLL本質的區別,BHO並不需要所有事件都必須依賴這個大家伙,它可以有自己決定的權利,只要適當的修改,就能用BHO實現類似DLL木馬的功能,當然,這並不是說我們就能在IE眼皮下公然的肆無忌彈干壞事的,由於BHO自身是作為IE子進程啟動的,,它就必須受到一些限制,例如程序員不能在裡面自己創建網絡連接,這樣會導致IE報錯崩潰並供出你寫的DLL,害怕BHO成為另一種後門的用戶可以松口氣了,要在BHO裡實現Winsock大概只能在IE休息的時候才可以,但是會有哪個用戶開著個開空IE什麼事情都不做呢?

但這並不是說BHO就一定能無害了,雖然用它不能做到遠程控制,但是別忘記,BHO能看到IE的所有東西,也就能任意的訪問用戶文件和注冊表,在這個條件成立的前提下,入侵者可以編寫代碼查找用戶隱私,然後在適當時候通過SetSite提交出去——誰叫現在Webmail這麼流行呢?這就是為什麼許多廠商發布諸如“中文網址”、“網絡搜索”、“IE定制”、“IE監視”這些功能的BHO的同時都保證“不搜集用戶隱私”的原因,只要你想要,BHO就能得到一切。

有些人也許會想,既然BHO是微軟浏覽器的權利,那我不用IE了,我用Opera、Firefox不行?對於這點固然無可厚非,但是你用不用Windows?用不用共享軟件?如果你用Windows,那麼,你仍然可能處於被BHO接觸到的世界,因為Windows本身就是和IE緊密結合的,這就把“IE進程”的范圍給擴大了,細心的用戶大概會發現,IE裡能直接訪問“我的電腦”,“我的電腦”窗口也能迅速變成IE,因為它們實質都是依賴於IE內核的,正因為這個原因,BHO可以在你打開一個文件夾時跟著偷偷啟動。同時,現在的網絡正處於一種“共享軟件捆綁戰略”大肆實施的時代,你再

copyright © 萬盛學電腦網 all rights reserved