流氓軟件和木馬在各種防火墻和殺毒軟件的“打壓”之下已經(jīng)開始逐步向內(nèi)核“退縮”,傳統(tǒng)的依靠查看本地打開的端口與進(jìn)程的關(guān)系的方法檢查非法網(wǎng)絡(luò)訪問(wèn)已經(jīng)不再適用,個(gè)人防火墻已經(jīng)成為裝機(jī)必備的軟件。目前主流的個(gè)人防火墻軟件都是構(gòu)建在Windows內(nèi)核之上的,但是Windows的內(nèi)核驅(qū)動(dòng)是分層的,防火墻工作在哪一層實(shí)際上就決定了防火墻的性能,工作在TDI層的防火墻是無(wú)論如何也不能知道NDIS層的數(shù)據(jù)收發(fā)情況的,因?yàn)門DI驅(qū)動(dòng)層在內(nèi)核中是高于NDIS驅(qū)動(dòng)層的。過(guò)去的木馬(上個(gè)世紀(jì)九十年代以前)都是構(gòu)建在Windows應(yīng)用層上的普通程序,工作在TDI層的防火墻可以輕易地覺察并阻斷它們非法的網(wǎng)絡(luò)訪問(wèn),但是對(duì)付縮進(jìn)內(nèi)核的木馬和流氓軟件,單純的依靠TDI層攔截已經(jīng)顯得力不從心。內(nèi)核木馬的特點(diǎn)是不依賴句柄,不綁定端口(NDIS)
),可以工作在TDI層,甚至在NDIS層,所以,真正可靠的防火墻應(yīng)該在NDIS層建立防線。
雖然真正可靠的防火墻應(yīng)該工作在NDIS層,但是,個(gè)人防火墻和用于服務(wù)器的防火墻畢竟還是有一些不同之處,工作在服務(wù)器端的防火墻只需要根據(jù)協(xié)議、地址和端口判斷是轉(zhuǎn)發(fā)還是丟棄就行了,高級(jí)一點(diǎn)還可以分析包內(nèi)容,根據(jù)預(yù)設(shè)的專家系統(tǒng)判斷是正常的數(shù)據(jù)包還是非法攻擊數(shù)據(jù)包,這樣的防火墻還可以用硬件實(shí)現(xiàn)。但是個(gè)人防火墻的特別之處就是需要與用戶交互,用戶數(shù)據(jù)多是基于IP協(xié)議的,并且用戶并不關(guān)心協(xié)議的細(xì)節(jié)(掌握這些對(duì)大多數(shù)用戶來(lái)說(shuō)有點(diǎn)難度),所以個(gè)人防火墻除了通過(guò)IP層的協(xié)議進(jìn)行過(guò)濾之外,更主要的手段是根據(jù)用戶的意愿允許還是阻止某個(gè)進(jìn)程(程序)訪問(wèn)網(wǎng)絡(luò),在這個(gè)粒度上用戶比較容易理解和控制。
這一點(diǎn)上講,工作在TDI層的防火墻的優(yōu)勢(shì)就是能夠在網(wǎng)絡(luò)訪問(wèn)發(fā)生的時(shí)候追蹤到發(fā)起訪問(wèn)的進(jìn)程名稱,從而給用戶一個(gè)提示,而工作在NDIS層的防火墻則不容易做到這一點(diǎn)。因?yàn)榘l(fā)送數(shù)據(jù)時(shí)上層驅(qū)動(dòng)將數(shù)據(jù)包提交到NDIS的發(fā)送隊(duì)列中后就返回了,當(dāng)數(shù)據(jù)包被真正投遞的時(shí)候已經(jīng)無(wú)從確定是哪個(gè)程序(進(jìn)程)發(fā)送的了,對(duì)于收到的數(shù)據(jù)包需要根據(jù)端口號(hào)判斷是哪個(gè)程序的,但是在NDIS層并不知道端口號(hào)和進(jìn)程的對(duì)應(yīng)關(guān)系,所以無(wú)論數(shù)據(jù)發(fā)送還是接收都無(wú)法有效地確定是屬于哪個(gè)進(jìn)程的數(shù)據(jù)。如果不能確定哪個(gè)進(jìn)程訪問(wèn)網(wǎng)絡(luò),只是根據(jù)地址、端口和協(xié)議進(jìn)行過(guò)濾對(duì)(大多數(shù))用戶來(lái)說(shuō)是很不友好的,所以最好的個(gè)人防火墻(不一定是最安全的)應(yīng)該是TDI+NDIS雙保險(xiǎn):TDI層根據(jù)進(jìn)程級(jí)訪問(wèn)過(guò)濾,NDIS層根據(jù)地址、端口和協(xié)議過(guò)濾。
前幾天,一個(gè)朋友要我給他推薦一款比較好的防火墻軟件,說(shuō)實(shí)話,我也不知道哪個(gè)好,因?yàn)槲覜](méi)有比較過(guò)。沒(méi)有調(diào)查就沒(méi)有發(fā)言權(quán),隨便應(yīng)付也不是本人的風(fēng)格,加上本人最近正在驗(yàn)證一個(gè)在內(nèi)核構(gòu)建TCP/IP協(xié)議繞過(guò)防火墻的概念的可行性,需要對(duì)當(dāng)前主流防火墻的能力有所了解,所以就把當(dāng)前比較流行的防火墻都弄來(lái)研究了一下,沒(méi)想到真是大開眼界,不看不知道,一看嚇一跳。先上網(wǎng)搜了一下個(gè)人防火墻,沒(méi)想到有這么多種,沒(méi)時(shí)間全搞一遍,只能對(duì)用的最多的幾個(gè)下手了,它們是“天網(wǎng)防火墻個(gè)人版”,“金山網(wǎng)鏢”,“瑞星個(gè)人防火墻”,“卡巴斯基”,“冰盾”和“風(fēng)云防火墻”,有幾個(gè)防火墻軟件不僅提供網(wǎng)絡(luò)防火墻功能,還提供諸如文件訪問(wèn)控制,進(jìn)程創(chuàng)建保護(hù)等功能,不過(guò)本文只是比較它們的網(wǎng)絡(luò)防范功能。
首先是天網(wǎng)防火墻,這可是本人上學(xué)的時(shí)候最喜歡的防火墻了,簡(jiǎn)單好用。這次使用的是天網(wǎng)防火墻個(gè)人版(Trial_Release_v3.0_Build1213),結(jié)果卻令人失望,天網(wǎng)是一個(gè)單純的TDI防火墻。下圖天網(wǎng)啟動(dòng)后的設(shè)備驅(qū)動(dòng)加載情況:
工作在NDIS層的好處是可以探測(cè)工作在TDI層的rootkit木馬,但是對(duì)于個(gè)人計(jì)算機(jī)用戶來(lái)說(shuō),冰盾的設(shè)計(jì)不太好用(或者說(shuō)比較難理解,相對(duì)于其它幾種防火墻軟件),另外,中間層驅(qū)動(dòng)還容易被Hook,rootkit木馬可以Hook它的處理函數(shù),比如指向一個(gè)空函數(shù),就可以癱瘓中間層驅(qū)動(dòng)。
最后一個(gè)是風(fēng)云防火墻,這個(gè)是從網(wǎng)上搜到的,以前沒(méi)聽說(shuō)過(guò),使用的版本是V1.26 正式版。這個(gè)軟件除了防火墻功能之外,還有很多附加功能,比如文件訪問(wèn)監(jiān)控,注冊(cè)表訪問(wèn)監(jiān)控等等,不過(guò)其網(wǎng)絡(luò)防火墻這塊使用的策略和卡巴斯基一樣,可以被本文的工具bypass
從分析的結(jié)果來(lái)看,這幾款防火墻軟件對(duì)于應(yīng)用程序的訪問(wèn)控制都是沒(méi)有問(wèn)題的,但是對(duì)于同樣工作在內(nèi)核級(jí)別上的木馬和流氓軟件則問(wèn)題很多,只有瑞星防火墻結(jié)果好一點(diǎn),其它的幾款防火墻軟件都挺令人失望,特別是天網(wǎng)防火墻。最后需要強(qiáng)調(diào)一點(diǎn)的是即使是瑞星這樣使用TDI Hook + NDISHook的方式也不一定就是安全的,因?yàn)樵趹?yīng)用程序級(jí)別上進(jìn)行網(wǎng)絡(luò)訪問(wèn)控制還是粒度太粗,如果使用rootkit工具將木馬注入到防火墻允許訪問(wèn)網(wǎng)絡(luò)的程序的進(jìn)程中,就可以在防火墻眼皮底下堂而皇之地訪問(wèn)網(wǎng)絡(luò)了,比如IE的一些BHO插件就是這么干得。
驅(qū)動(dòng)加載測(cè)試工具以及bypass驅(qū)動(dòng)下載
附錄: 驅(qū)動(dòng)加載測(cè)試工具以及bypass驅(qū)動(dòng)的使用方法
首先將hook_test.sys復(fù)制到windows的系統(tǒng)驅(qū)動(dòng)程序目錄中(如果是windowsxp的系統(tǒng),這個(gè)目錄可能是c:\windows\system32\drivers),然后運(yùn)行drv_test.exe,在驅(qū)動(dòng)文件位置中填入驅(qū)動(dòng)文件hook_test.sys的完整路徑名,在驅(qū)動(dòng)名稱中填入驅(qū)動(dòng)名稱,這個(gè)比較重要,因?yàn)楹竺娴膯?dòng)、停止和卸載驅(qū)動(dòng)都需要這個(gè)驅(qū)動(dòng)名稱,不過(guò)不一定是“hook_test”,顯示名稱隨便填寫就行了。輸入完成后首先點(diǎn)擊“安裝驅(qū)動(dòng)”按鈕安裝驅(qū)動(dòng),如果沒(méi)有錯(cuò)誤再點(diǎn)擊“啟動(dòng)驅(qū)動(dòng)”按鈕啟動(dòng)這個(gè)驅(qū)動(dòng)程序,然后就可以測(cè)試你的防火墻軟件了。測(cè)試的方法很簡(jiǎn)單,就是運(yùn)行一個(gè)訪問(wèn)網(wǎng)絡(luò)的程序,如果防火墻有效,會(huì)提示是否阻止程序訪問(wèn)網(wǎng)絡(luò),如果防火墻失效,則沒(méi)有任何提示,卸載驅(qū)動(dòng)先點(diǎn)擊“停止驅(qū)動(dòng)”按鈕,然后點(diǎn)擊“卸載驅(qū)動(dòng)”按鈕就可以了。
聯(lián)系客服