1. 程式人生 > >裝了防火牆就可以高枕無憂了嗎?

裝了防火牆就可以高枕無憂了嗎?

    最近和幾個朋友聊天,無意間又談到了防火牆的安全性,一個朋友說看了我以前寫的一篇博文“你的防火牆安全嗎?”,他覺得我的文章有些言過其實,換句話說就是危言聳聽。於是我們之間發生了這樣一段對話:

我:“你怎麼就能確定你的計算機是安全的?”
他:“我安裝的防火牆軟體總是能夠攔截到非法的網路訪問。”
我:“你有方法能夠獲知你計算機上全部非法的網路訪問嗎?如果沒有,那你怎麼確定你的防火牆攔截了全部非法訪問?”
他:“......”
我:“你的防火牆攔截到的都是過時的技術,不要抱太高的希望。”
他:“那你的電腦保安嗎?你用什麼防火牆?”
我:“我用自己寫的一個簡陋的防火牆,但技術上肯定比大多數使用TDI Hook技術的防火牆安全。儘管如此,我也不敢掉以輕心,未曝光的漏洞很多,只要接在網路上就可能中招。”
他:“我知道漏洞很多,但是目前的情況是惡意軟體很多,真正破壞計算機的病毒很少,只要能攔截非法的網路訪問就可以看作是安全的。”
我:“你很相信你的防火牆軟體?”
他:“當然!我以前也做過網路驅動程式,知道怎麼比較防火牆,現在用的XX就是最先進的。”
我:“好,假設某惡意軟體利用某個未公開的漏洞將一個驅動程式安裝到你的系統中,從核心中直接訪問網路呢?”
他:“那它至少要用系統的網路功能吧,只要用就可以被攔截。”
我:“如果不用呢?”
他:“怎麼可能?”
我:“怎麼不可能,可以不使用TDI層封裝好的TCP/IP協議,直接在NDIS或更低一層上實現一個TCP/IP協議就行了。”
他:“你又騙我!”(怎麼會多了個“又”呢?)
我:“打個賭吧,我可以不用任何程式碼注入,從核心中直接連線網路下載一個程式並執行,並讓你的防火牆感知不到。”
他:“你能做到?”
我:“當然,我一年多前就實現了這樣一個東東,一直放在我的計算機上沒什麼用,現在剛好從你身上賺點好處,嘿嘿。”
他:“賭什麼?”
我:“你的PSP 30x100給我玩一個月,如果我輸了,我去買一個PSP,先讓你白玩一個月。”
他:“成交!”

    一週以後,我在朋友的電腦上裝好了我的驅動程式,然後將他指定的一個程式用工具壓進一個JPEG點陣圖檔案後上傳到某網路硬碟上,並將下載連結寫到登錄檔中的某個位置上。靜靜等了兩三分鐘後,那個程式的窗口出現在我朋友的電腦上,他深信不疑的防火牆沒有任何反應。他吃驚的程度超出了我的想象,我想不是因為心疼他的PSP,而是因為精神支柱倒了,呵呵。

    我的朋友想不通我怎麼有閒心和毅力在Windows核心中繞開TDI構建另一個TCP/IP協議棧,嗯,我才沒有閒心從頭開始搞一個TCP/IP協議棧,有很多成熟的開源TCP/IP協議棧,費點心將其移植到Windows的核心中就行了。最完整最強大的就是從開源的BSD socket移植,從linux核心移植也可以,但是工作量也是巨大的,想想就行了,千萬別真的去做。我選的是某嵌入式系統中常用的一個微型TCP/IP協議棧,很小巧,佔用記憶體也小,但是最大隻支援1024個TCP連線,不過好像夠用了,關鍵是穩定。除此之外,該協議棧原始碼還提供了一套和巴克利套接字介面90%相容的socket API,呵呵,有了這套API,能幹的事情就多了,就可以在此基礎上實現一個DNS協議和HTTP協議。

    扯遠了,現在言歸正傳。我不是第一個想到直接在核心中構建TCP/IP協議繞過TDI防火牆檢測的人,幾年前在rootkit.com上就有人放出了一個名為NTRoot的驅動,不使用Windows的socket在核心中啟動一個telnet服務,通過埠檢測檢視不到佔用的埠,其它計算機卻可以telnet到這個機器上執行一些簡單的命令。當然這個TCP/IP協議棧十分簡陋,沒有實現TCP/IP協議中的很多特性,也很不穩定,但這個“概念”肯定會激發很多人,我可以將一個微型的開源TCP/IP協議棧移植到Windows核心,別人肯定也可以,而且是幾年前就開始了。因此我一直強調一個觀點,就是:不要以為裝了防火牆就可以高枕無憂。

    羅嗦了這麼多,如果把大家嚇得不敢上網了,那一定不是我的本意。我的目的是提醒大家注意個人資訊的保護,你一定不希望自己三天兩頭到騰訊去申訴QQ號被盜,也不希望自己辛苦幾年攢下的網遊行頭一夜之間被人賣個精光,當然更不希望某天發現自己的銀行賬戶上只剩幾毛錢了,資訊保安問題將成為新世紀網路問題的焦點。網路是精彩的,想遠離網路是不現實的,惡意程式如此狡詐,到底怎麼辦才能安全上網?要回答這個問題,首先要了解一下惡意軟體是如何攻入使用者的計算機,國外某安全網站做過一個統計,42%的使用者是在瀏覽網頁時被“掛馬”網頁上的漏洞利用程式碼攻破計算機的。這些網頁有的本身就是惡意網站,用各種誘人的連結欺騙使用者訪問,有些是正常的網站被黑客攻破,然後在網頁上“掛馬”,前些年就有國內某著名入口網站首頁被黑客“掛馬”,導致數百萬使用者被惡意程式攻擊。另外,還有27%的使用者是執行從網路上下載的來歷不明的被捆綁了木馬程式的軟體而被攻破計算機的,某軟體的破解程式,盜版的Windows安裝盤,升級補丁等都是很好的木馬捆綁物件。通過接收電子郵件被攻破計算機的使用者比例是14%。

    當然其它還有很多方法會導致使用者的計算機被攻破,但是這三項原因就佔到了83%,如果能防住這三項,就能極大地增加計算機的安全性。問題是怎麼防?用防火牆或其它反病毒軟體嗎?當然不能依賴它們,原因我前面說過,我推薦大家的方法就是隔離,或者說區別訪問。現在很多家庭都有兩臺以上的電腦,將其中一臺專門用於瀏覽網頁,接收電子郵件和安裝從網路下載的程式,另外一臺電腦專用於安全網路訪問,比如QQ、網上銀行、網上支付等等。如果只有一臺電腦的家庭怎麼辦?或者對於一臺膝上型電腦每天從家背到公司,再從公司揹回家的IT人士怎麼辦?難道要背兩臺?當然不是,你可以在一臺電腦上安裝兩個作業系統用來區分訪問,一個用於不安全的網路訪問,一個用於安全的網路訪問。這樣做還有一個好處就是一個系統崩潰了,可以用另一個系統恢復,不過缺點就是需要不停地重啟電腦,如果不想頻繁重啟電腦就只有用虛擬機器了。虛擬機器是一種模擬器類軟體,可以在計算機上虛擬多個計算機,這些虛擬的計算機與主機互相是獨立的,虛擬的計算機之間也是互相獨立的,但是都可以通過網路介面互聯,如果你的主機記憶體夠大,可以在一臺計算機上同時虛擬幾臺虛擬計算機組成一個小網路。虛擬機器軟體有很多,比較著名的有VmWare、Virtual PC和Virtual Box。VmWare和Virtual PC都是商業軟體,VmWare是功能最強的虛擬機器軟體,通過設定可以支援DirectX 3D,最新的VmWare 7甚至支援Windows 7的玻璃效果。Virtual PC是微軟出品的虛擬機器軟體,給測試使用者提供的測試版本,包括作業系統,通常都是用虛擬機發布的,使用者不需要安裝,直接用虛擬機器載入就可以使用。Virtual Box也是一款非常好的虛擬機器軟體,而且是開源的,深受很多人的歡迎。很多人可能對虛擬機器有偏見,認為用虛擬機器很慢,其實不然,隨著計算機硬體的發展,虛擬機器中間代理帶來的效能損失幾乎可以忽略,在一臺2G記憶體的計算機上給虛擬機器配置1G記憶體,並禁止虛擬機器使用硬碟交換檔案後執行Windows 7,感覺和主機上沒什麼區別。我是搞嵌入式開發的,我的主機上安裝的都是嵌入式開發環境,為了防止編譯器之間互相影響,我的Visual Studio 2008就是安裝在虛擬機器中的,最新版本的TabSiPlus就是在虛擬機器上安裝64位Windows 7進行開發和測試的。

    最後強調一點,對於資訊保安,沒有好的方法,裝兩個系統或使用虛擬機器都只是一個形式,真正的安全取決於你的態度,“態度決定一切”,平時多瞭解一些電腦保安方面的知識,不要總是做“小白”。