你的防火牆可靠嗎

你的防火牆可靠嗎


    流氓軟件和木馬在各種防火牆和殺毒軟件的“打壓”之下已經開始逐步向內核“退縮”,傳統的依靠查看本地打開的端口與進程的關係的方法檢查非法網絡訪問已經不再適用,個人防火牆已經成爲裝機必備的軟件。目前主流的個人防火牆軟件都是構建在Windows內核之上的,但是Windows的內核驅動是分層的,防火牆工作在哪一層實際上就決定了防火牆的性能,工作在TDI層的防火牆是無論如何也不能知道NDIS層的數據收發情況的,因爲TDI驅動層在內核中是高於NDIS驅動層的。過去的木馬(上個世紀九十年代以前)都是構建在Windows應用層上的普通程序,工作在TDI層的防火牆可以輕易地覺察並阻斷它們非法的網絡訪問,但是對付縮進內核的木馬和流氓軟件,單純的依靠TDI層攔截已經顯得力不從心。內核木馬的特點是不依賴句柄,不綁定端口(NDIS)
),可以工作在TDI層,甚至在NDIS層,所以,真正可靠的防火牆應該在NDIS層建立防線。

    雖然真正可靠的防火牆應該工作在NDIS層,但是,個人防火牆和用於服務器的防火牆畢竟還是有一些不同之處,工作在服務器端的防火牆只需要根據協議、地址和端口判斷是轉發還是丟棄就行了,高級一點還可以分析包內容,根據預設的專家系統判斷是正常的數據包還是非法攻擊數據包,這樣的防火牆還可以用硬件實現。但是個人防火牆的特別之處就是需要與用戶交互,用戶數據多是基於IP協議的,並且用戶並不關心協議的細節(掌握這些對大多數用戶來說有點難度),所以個人防火牆除了通過IP層的協議進行過濾之外,更主要的手段是根據用戶的意願允許還是阻止某個進程(程序)訪問網絡,在這個粒度上用戶比較容易理解和控制。從這一點上講,工作在TDI層的防火牆的優勢就是能夠在網絡訪問發生的時候追蹤到發起訪問的進程名稱,從而給用戶一個提示,而工作在NDIS層的防火牆則不容易做到這一點。因爲發送數據時上層驅動將數據包提交到NDIS的發送隊列中後就返回了,當數據包被真正投遞的時候已經無從確定是哪個程序(進程)發送的了,對於收到的數據包需要根據端口號判斷是哪個程序的,但是在NDIS層並不知道端口號和進程的對應關係,所以無論數據發送還是接收都無法有效地確定是屬於哪個進程的數據。如果不能確定哪個進程訪問網絡,只是根據地址、端口和協議進行過濾對(大多數)用戶來說是很不友好的,所以最好的個人防火牆(不一定是最安全的)應該是TDI+NDIS雙保險:TDI層根據進程級訪問過濾,NDIS層根據地址、端口和協議過濾。

    前幾天,一個朋友要我給他推薦一款比較好的防火牆軟件,說實話,我也不知道哪個好,因爲我沒有比較過。沒有調查就沒有發言權,隨便應付也不是本人的風格,加上本人最近正在驗證一個在內核構建TCP/IP協議繞過防火牆的概念的可行性,需要對當前主流防火牆的能力有所瞭解,所以就把當前比較流行的防火牆都弄來研究了一下,沒想到真是大開眼界,不看不知道,一看嚇一跳。先上網搜了一下個人防火牆,沒想到有這麼多種,沒時間全搞一遍,只能對用的最多的幾個下手了,它們是“天網防火牆個人版”,“金山網鏢”,“瑞星個人防火牆”,“卡巴斯基”,“冰盾”和“風雲防火牆”,有幾個防火牆軟件不僅提供網絡防火牆功能,還提供諸如文件訪問控制,進程創建保護等功能,不過本文只是比較它們的網絡防範功能。

    首先是天網防火牆,這可是本人上學的時候最喜歡的防火牆了,簡單好用。這次使用的是天網防火牆個人版(Trial_Release_v3.0_Build1213),結果卻令人失望,天網是一個單純的TDI防火牆。下圖天網啓動後的設備驅動加載情況:

圖 1 天網防火牆設備驅動加載情況

工作在TDI層的防火牆有兩種方式,一種是做成過濾驅動掛接到支持TCP/IP協議的設備上,簡單地講,就是發送給TCP/IP協議驅動的請求會先發送給它過濾,另一種是使用Hook的方式直接Hook TCP/IP協議的驅動分派函數,相比較而言,第一種比較容易bypass,驅動層的木馬或流氓軟件通過設備直接找到TCP/IP的驅動發送請求,就可以避開Attach在其上的過濾驅動,從上圖看,天網的驅動是一個Filter驅動,除了直接向TCP/IP的驅動發送請求可以避開天網之外,還有一種方法可以讓它完全失效,就是直接摘除掛接的Filter驅動,看看下面的代碼:

void ByPassAttachDevice(PDEVICE_OBJECT DeviceObject)
{
    PDEVICE_OBJECT CurDevObj = DeviceObject;
    
    while(CurDevObj != NULL )
    {
        CurDevObj->AttachedDevice = NULL;
        CurDevObj = CurDevObj->NextDevice;
    }
}

運行在驅動層的木馬只要對設備驅動運行一下ByPassAttachDevice()函數就可以讓天網和所有使用這種技術的防火牆形同虛設。口說無評,本人專門寫了一個驅動來驗證,首先在天網的設置中禁止IE訪問網絡,此時IE的網絡訪問會被禁止:



圖 2 天網防火牆組織IE訪問網絡

然後用驅動加載測試工具加載本人編寫的驅動程序(文後附有加載工具和驅動程序,以及使用說明,可以用來測試一下你用的防火牆是否安全),假設這是一個運行在內核的木馬或流氓軟件:


圖 3 加載Bypass驅動程序

運行後天網就失效了,看看IE可以訪問網絡了,不僅IE,所有被禁止的程序都可以訪問網絡了:


圖 4 天網防火牆失效了

    結論,就不說了,真的很失望。


    下面看看金山網鏢,這個是我的朋友很喜歡用的,一直說它好用,本次比較用的是金山安全套件2008中附帶的金山網鏢,先看看它的驅動加載情況:


圖 5 金山網鏢驅動加載情況

這也是一個TDI Filter,沒有在NDIS層做工作,使用前面的工具可以輕鬆bypass,不說了,下一個。


    接下來是瑞星個人防火牆,使用的版本是瑞星個人防火牆2008。瑞星的驅動在TDI層使用了不容易bypass的TDI hook,除此之外,在NDIS層也使用了Hook,先看看TDI層的情況:


圖 6 瑞星驅動的TDI Hook情況

再看看在NDIS層的Hook情況:

圖 7 瑞星驅動的NDIS Hook情況

從驅動上看瑞星防火牆要比前兩個強很多,本人曾試着手工恢復被hook的函數,雖然恢復後不再彈出“某某程序要訪問網絡”的提示,但是實際上還是不能訪問網絡,不知爲何,有興趣的朋友可以研究一下。

    再來看看卡巴斯基,這次使用的是卡巴斯基的互聯網安全套裝6.0個人版,從驅動上看卡巴斯基採用的是用TDI Filter驅動+NDIS Hook:


圖 8 卡達斯基的驅動加載情況

但是可能卡巴斯基的NDIS Hook只是用來分析可以的數據才使用的,也或者是爲實現其它功能設置的Hook,總之,使用本文的程序可以bypass卡巴斯基的防火牆功能。

    再看看冰盾防火牆,冰盾是一個服務器防火牆,這次使用的是冰盾8.1 Build 60214,從驅動加載情況看,冰盾使用了一個NDIS中間層驅動,沒有Hook,也沒有處理TDI層的事務,畢竟它不是個人防火牆,沒必要處理TDI層的事情(這只是本人的看法的)。工作在NDIS層的好處是可以探測工作在TDI層的rootkit木馬,但是對於個人計算機用戶來說,冰盾的設計不太好用(或者說比較難理解,相對於其它幾種防火牆軟件),另外,中間層驅動還容易被Hook,rootkit木馬可以Hook它的處理函數,比如指向一個空函數,就可以癱瘓中間層驅動。


    最後一個是風雲防火牆,這個是從網上搜到的,以前沒聽說過,使用的版本是V1.26 正式版。這個軟件除了防火牆功能之外,還有很多附加功能,比如文件訪問監控,註冊表訪問監控等等,不過其網絡防火牆這塊使用的策略和卡巴斯基一樣,可以被本文的工具bypass

    從分析的結果來看,這幾款防火牆軟件對於應用程序的訪問控制都是沒有問題的,但是對於同樣工作在內核級別上的木馬和流氓軟件則問題很多,只有瑞星防火牆結果好一點,其它的幾款防火牆軟件都挺令人失望,特別是天網防火牆。最後需要強調一點的是即使是瑞星這樣使用TDI Hook + NDIS Hook的方式也不一定就是安全的,因爲在應用程序級別上進行網絡訪問控制還是粒度太粗,如果使用rootkit工具將木馬注入到防火牆允許訪問網絡的程序的進程中,就可以在防火牆眼皮底下堂而皇之地訪問網絡了,比如IE的一些BHO插件就是這麼幹得。

驅動加載測試工具以及bypass驅動下載


附錄: 驅動加載測試工具以及bypass驅動的使用方法

首先將hook_test.sys複製到windows的系統驅動程序目錄中(如果是windows xp的系統,這個目錄可能是c:/windows/system32/drivers),然後運行drv_test.exe,在驅動文件位置中填入驅動文件hook_test.sys的完整路徑名,在驅動名稱中填入驅動名稱,這個比較重要,因爲後面的啓動、停止和卸載驅動都需要這個驅動名稱,不過不一定是“hook_test”,顯示名稱隨便填寫就行了。輸入完成後首先點擊“安裝驅動”按鈕安裝驅動,如果沒有錯誤再點擊“啓動驅動”按鈕啓動這個驅動程序,然後就可以測試你的防火牆軟件了。測試的方法很簡單,就是運行一個訪問網絡的程序,如果防火牆有效,會提示是否阻止程序訪問網絡,如果防火牆失效,則沒有任何提示,卸載驅動先點擊“停止驅動”按鈕,然後點擊“卸載驅動”按鈕就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章