馮愛娟 王蔚然 (電子科技大學電子工程學院, 成都 610054)
摘要:主機防火墻在分布式防火墻體系結構中承擔了重要的角色,其把安全策略延伸到網絡的各個主機。本文介紹了幾種利用驅動程序來實現基于Windows2000的嵌入式主機防火墻的方法,比較了其中的優劣,并對其中的NDIS HOOK實現防火墻技術給出了一個具體例子。
關鍵詞:分布式防火墻; 主機防火墻; NDIS; NDIS HOOK
隨著網絡的廣泛使用 ,網絡安全問題成為人們關注的焦點 。以往采用的安全保護中使用得最多的是傳統的防火墻機制 ,但是由于它對網絡拓撲結構的依賴,隨著不斷擴大的網絡互連,傳統防火墻的缺陷也日益突出,由此分布式防火墻應運而生。分布式防火墻在保留傳統防火墻優勢的同時,減小甚至去除了它對網絡拓撲結構的依賴性。分布式防火墻可以認為是由3部分組成的立體防護系統:一部分是網絡防火墻,它承擔著傳統邊界防火墻看守大門的職責;一部分是主機防火墻,它解決了邊界防火墻不能解決的問題(例如來自內部的攻擊和結構限制等);還有一部分是集中管理,它解決了由分布技術而帶來的管理問題。分布式防火墻最重要的優勢在于它能夠保護物理拓撲上不屬于內部網絡、但位于邏輯上的"內部"網絡的那些主機。
分布式防火墻技術增加了針對主機的入侵檢測和防護功能,加強了對來自內部攻擊防范,對用戶網絡環境可以實施全方位的安全策略,并提供了多層次立體的防范體系。在分布式防火墻的組成里,主機防火墻是最有特色的部分。主機防火墻駐留在被保護的主機上,用戶可以針對該主機上的具體應用和對外提供的服務設定個性化的安全策略。主機防火墻對分布式防火墻體系結構的突出貢獻是,使安全策略不僅僅停留在網絡與網絡之間,還把安全策略推廣延伸到每個網絡的各個主機上。
1 主機防火墻技術
主機防火墻運行于宿主機操作系統內核,通過替換或掛接操作系統網絡協議堆棧完成數據包過濾,因此與主機操作系統及網絡協議有莫大的關系。其主要手段是分析主機操作系統網絡協議,在適當的位置插入攔截點,所有的網絡數據包通訊都要經過這些攔截點,再根據安全策略制定的規則對經過攔截點的網絡信息進行監控和審查,過濾掉不符合安全規則的信息,以保護主機不受外界的非法訪問和攻擊。目前在絕大多數內部網的主機運行的是Windows操作系統,也是主機防火墻最重要的系統運行平臺。下面主要闡述在Windows2000中主機防火墻的關鍵技術及其實現。
1.1 Windows操作系統的總體構架
Windows操作系統的總體構架分為兩個層次,上面的為應用層(用戶態),下面的為核心層(核心態)。其結構如圖1所示。

應用程序位于上層,處于用戶態,工作在Ring-3級,受到Windows保護機制的嚴格限制,例如不能直接操作硬件,不能直接操作其他應用程序的內存緩沖區等。而核心層的驅動程序則不一樣,它處于核心態,工作在Ring-0級,可以執行任何特權指令,幾乎可以對所用資源進行直接讀寫操作,Windows 不為它提供任何保護,它具有與操作系統核心同等級別的權限。由于操作系統自身存在許多安全漏洞,運行在其上的應用軟件無一不受到威脅。主機防火墻運行在該主機上,所以其運行機制是主機防火墻的關鍵技術之一。為了自身的安全和徹底堵住操作系統的漏洞,主機防火墻嵌入操作系統內核的形態運行,直接接管網卡,把所有數據包進行檢查后再提交給操作系統,從操作系統最底層實現對非法訪問的阻截。本文介紹的基于Windows2000的主機防火墻采用核心層數據包過濾技術。
1.2 NDIS的基本概念
Windows的網絡模型最主要的包括一個NDIS(網絡驅動程序接口規范)的管理庫,它不僅抽象了底層硬件驅動程序的接口,也抽象了上層協議的接口和協議之上的傳輸設備接口。NDIS為網絡驅動的開發提供了一套標準的接口,給數據交換提出了一個靈活的環境,使得網絡驅動程序的跨平臺性更好,傳輸協議可用它與網卡驅動程序進行通信。所有的網絡通信最終必須通過 NDIS 完成,所以這是網絡數據攔截的良好位置。其模型如圖2所示。
NDIS支持下列幾種類型的驅動程序:
1. 小端口驅動程序(Miniport drivers)。小端口驅動可以通過NDIS接口來管理網絡接口卡(NIC),并且開放Miniport接口供高級驅動程序調用。
2. 中間驅動程序 (Intermediate drivers,簡稱IM Driver)。中間層驅動處于驅動程序層級的中間位置,能夠截獲所有的Protocol 驅動程序通信。
3. 協議驅動程序(Protocol drivers)。協議驅動程序,處于驅動程序層級的最高層,開放Protocol接口供底層驅動調用,實現與Protocol與Miniport接口的對接。
1.3 利用驅動程序實現數據包過濾技術
利用驅動程序來攔截網絡數據包一般有以下幾種方法來實現:
1、 NDIS中間層驅動程序 (IM Driver)。由于IM Driver所處的特殊位置,所以它可以攔截所有的數據包(如果是以太網就是以太幀)。利用NDIS IM Driver可以在網卡驅動程序和傳輸驅動程序之間插入一層自己的處理,從而用來攔截所有的數據報并完成重新組包、加密、網絡地址轉換以及過濾等操作。這樣速度非?,效率也非常高。但是中間層驅動過濾技術編程接口復雜,而且與操作系統版本關心密切,與硬件聯系大,移植性低,而且自動安裝太困難。由于以上原因,市面上還沒有基于IMD的防火墻。
2、 TDI過濾驅動程序(TDI Filter Driver)。當應用程序要發送或接收網絡數據包的時候,都是通過與協議驅動所提供的接口來進行的。協議驅動提供了一套系統預定義的標準接口來和應用程序之間進行交互。因此,我們只需要開發一個過濾驅動來截獲這些交互的接口,就可以實現網絡數據包的攔截。TDI層的網絡數據攔截還可以得到操作網絡數據包的進程詳細信息,這也是個人防火墻的一個重要功能。但是TDI 過濾驅動器位于TcpIp.sys之上,那些由TcpIp.sys接收并直接處理的數據包(比如ICMP)就不會傳到上面,從而無法過濾這些數據包。
3、 NDIS HOOK 解決了IM Driver和TDI Filter Driver具有的問題,是較為常用的數據包過濾技術。NDIS HOOK 的工作原理是直接替換NDIS的函數庫中函數地址,這樣只要向NDIS發出的請求,就會先經過自己編寫的函數處理,這些函數可以過濾掉特定的網絡數據包再轉發給系統函數。NDIS HOOK安裝前后的結構示意圖分別如圖3和圖4所示。NDIS HOOK可以完成NDIS函數和TDI函數所能完成的功能,而且攔截的是較為底層的數據包,不容易被滲透。
2 使用NDIS HOOK實現主機防火墻
Windows2000的驅動程序流程,如圖5所示,其主要掛接過程如下:
1、 在操作系統加載了NDIS驅動程序之后,通過自定義函數HookFunction替換NdisSend函數入口為MyNdisSend,并保存原函數指針為NdisSendAddr。與Windows 9x/Me不同,Windows2000下的協議驅動一般不再通過NdisSend發送數據,而是通過協議驅動與網卡綁定后NDIS為其分配的SendHandler來進行數據的發送,必須HOOK這個SendHandler才能真正截獲發送的數據包。
2、 通過HookFunction函數替換NdisRegisterProtocol函數入口為MyNdisRegisterProtocol,并保存函數指針為NdisRegisterProtocolAddr。
3、 在MyNdisRegisterProtocol函數替換TCP/IP協議驅動的接收函數ReceiveHandler指針為MyReceriveHandler, 截獲接收到的ICMP、IGMP、TCP、UDP等數據包,對它們依據防火墻過濾規則進行檢驗,對允許通過的數據包,將調用原來的函數處理;否則丟棄數據包。MyNdisRegisterPro還替換了OpenAdapterCompletehandler函數指針為MyOpenAdapterComplete。
4、 通過HookFunction函數替換了完成協議與網卡的綁定的函數NdisOpenAdapter為MyNdisOpenAdapter,再利用MyNdisOpenAdapter或者MyOpenAdapterComplete HOOK TCP/IP協議驅動數據包發送函數SendHandler,截獲待發送的ICMP、IGMP、TCP、UDP等數據包,對它們依據防火墻過濾規則進行檢驗,對于允許通過的數據包,將調用原來的函數處理;否則丟棄數據包。
5、 驅動程序卸載時,卸載函數PacketUnload還原被HookFunction替換的系統函數。
3 小結
Windows平臺使用NDIS HOOK 實現主機防火墻是比較合適的技術,這種方法在實驗室中投入運行(運行環境:Windows 2000)。實踐證明采用這種技術實現的主機防火墻安裝方便,而且能過濾所有的網絡數據包,必將在網絡防范中起重要作用。
作者簡介:
馮愛娟,女,1979出生,電子科技大學碩士研究生,主要研究方向網絡安全。王蔚然,電子科技大學教授、博導,電子學會會士,主要研究方向為網絡安全,信息獲取、傳輸、處理等。