Windows下的個人防火牆-網路資料包攔截技術概覽

來源:互聯網
上載者:User
 

 

隨著網路安全問題日益嚴重,網路安全產品也被人們重視起來。防火牆作為最早出現的網路安全產品和使用量最大的安全產品,也受到使用者和研發機構的青睞。從防火牆的應用角度來看基本上可以分為兩種:網路級的防火牆和個人防火牆。Windows作業系統作為使用最為廣泛的PC作業系統,因此在Windows作業系統下開發的個人防火牆產品數不勝數。國外比較著名的有AtGuard,Outpost Firewall,ZoneAlarm,Tiny Personal Firewall,Norton Personal Firewall以及Sygate Personal Firewall等,國內用的比較多的有天網防火牆等產品。

所有基於Windows作業系統的個人防火牆核心技術點在於Windows作業系統下網路資料包攔截技術。本文主要講述的是Windows作業系統下網路資料包攔截的技術。首先讀者應該對Windows網路體繫結構有一定瞭解,並且對開發Windows驅動程式有一定瞭解。

Windows 網路驅動程式結構

圖1顯示了Windows 2000下的網路驅動程式結構。

微軟和3Com公司在1989年制定了一套開發Windows下網路驅動程式的標準,稱為NDIS( Network Driver Interface Specification)。NDIS為網路驅動的開發提供了一套標準的介面,使得網路驅動程式的跨平台性更好。NDIS提供以下幾個層次的介面:

?1、NDIS小連接埠驅動(Miniport driver)。這也就是我們常說的網卡驅動。

?2、NDIS 協議驅動(Protocol driver)。例如TCPIP協議驅動。

?3、NDIS 中介層驅動(Intermediate driver)。這是基於鏈路層和IP層之間的驅動。

從圖1中我們可以很清楚地看到網路驅動的分層結構,這就給我們提供了攔截網路資料包的基本思路。

總的來說,要攔截Windows下的網路資料包可以在兩個層面進行:使用者態(user-mode)和核心態(kernel-mode)

使用者態下的網路資料包攔截

在使用者態下進行網路資料包攔截有以下幾種方法:

1) Winsock Layered Service Provider (LSP)。這種方法在MSDN裡有很詳細的文檔,並且給出了一個例子(SPI.CPP)。這種方法的好處是可以獲得調用Winsock的進程詳細資料。這就可以用來實現QoS,資料流加密等目的。但是,如果應用程式直接通過TDI(Transport Driver Inface)調用TCPIP來發送資料包,這種方法就無能為力了。對於一些木馬和病毒來說要實現通過TDI直接調用TCPIP是一件很容易的事情。因此,大多數的個人防火牆都不使用這種方法。國內也有使用該方法實現的個人防火牆,例如Xfilter(www.xfilter.com)。

2) Windows 2000 包過濾介面。Windows 2000 IPHLP API提供了安裝包過濾器的功能。但是,包過濾的規則有很多限制,對於個人防火牆來說是遠遠不夠的。

3) 替換系統內建的WINSOCK動態串連庫。這種方法可以在很多文章裡面找到詳細的實現細節。

很顯然,在使用者態下進行資料包攔截最致命的缺點就是只能在Winsock層次上進行,而對於網路通訊協定棧中底層協議的資料包無法進行處理。對於一些木馬和病毒來說很容易避開這個層次的防火牆。

利用驅動程式攔截網路資料包

大多數的個人防火牆都是利用網路驅動程式來實現的。從圖1中我們馬上可以想到可以從以下幾個方面來做文章:

? 1、TDI過濾驅動程式(TDI Filter Driver)

? 2、NDIS中介層驅動程式(NDIS Intermediate Driver)

? 3、Win2k Filter-Hook Driver

? 4、NDIS Hook Driver

以下我們大體介紹這幾種方法。具體的實現細節請參見Win2k DDK文檔。

TDI過濾驅動程式。當應用程式要發送或接收網路資料包的時候,都是通過與協議驅動所提供的介面來進行的。協議驅動提供了一套系統預定義的標準介面來和應用程式之間進行互動。在Windows 2000/NT下,ip,tcp,udp是在一個驅動程式裡實現的,叫做tcp.sys,這個驅動程式建立了幾個裝置:DeviceRawIp,DeviceUdp,DeviceTcp,DeviceIp, DeviceMULTICAST。應用程式所有的網路資料操作都是通過這幾個裝置進行的。因此,我們只需要開發一個過濾驅動來截獲這些互動的介面,就可以實現網路資料包的攔截。TDI層的網路資料攔截還可以得到操作網路資料包的進程詳細資料,這也是個人防火牆的一個重要功能。

NDIS中介層驅動。中介層驅動介於協議層驅動和小連接埠驅動之間,它能夠截獲所有的網路資料包(如果是乙太網路那就是以太幀)。NDIS中介層驅動的應用很廣泛,不僅僅是個人防火牆,還可以用來實現VPN,NAT,PPPOverEthernet以及VLan。中介層驅動的概念是在Window NT SP4之後才有的,因此對於Windows9x來說無法直接利用中介層驅動的功能。Windows DDK提供了兩個著名的中介層驅動例子:Passthru以及Mux。開發人員可以在Passthru的基礎上進行開發,Mux則實現了VLan功能。目前個人防火牆的產品還很少用到這種技術,主要的原因在於中介層驅動的安裝過於複雜,尤其是在Windows NT下。Windows 2000下可以通過程式實現自動安裝,但是如果驅動沒有經過數位簽章的話,系統會提示使用者是否繼續安裝。中介層驅動功能強大,應該是今後個人防火牆技術的趨勢所在,特別是一些附加功能的實現。

Win2k Filter-Hook Driver。這是從Windows2000開始系統所提供的一種驅動程式,該驅動程式主要是利用ipfiltdrv.sys所提供的功能來攔截網路資料包。Filter-Hook Driver在結構非常簡單,易於實現。但是正因為其結構過於簡單,並且依賴於ipfiltdrv.sys,Microsfot並不推薦使用Filter-Hook Driver。

NDIS Hook Driver。這是目前大多數個人防火牆所使用的方法。Hook的概念在Windows9x下非常流行,而且實現也很容易。在Windows9x下,驅動程式(VxD)通過使用Hook_Device_Service可以掛接NDIS所提供的所有服務。在Windows NT/2000下面如何?Hook呢?有兩種不同的思路:

1) 通過修改NDIS.SYS的Export Table。在Windows NT/2000下,可執行檔(包括DLL以及SYS)都是遵從PE(Portable Executable)格式的。所有向其他動作系統組件提供介面的驅動程式都有Export Table,因此只要修改NDIS.SYS的Export Table就可以實現對關鍵NDIS API的掛接。由於協議驅動程式在系統啟動的時候會調用NdisRegisterProtocol來向系統進行協議註冊,因此這種方法關鍵在於修改NDIS.SYS所提供的NdisRegisterProtocol/NdisDeRegisterProtocol/NdisOpenAdapter/NdisCloseAdapter/NdisSend函數的起始地址。我們知道,在使用者態模式要修改PE檔案格式可以用一些API來實現,而NDIS.SYS位於系統的核心記憶體區,因此要修改NDIS.SYS就不得不通過寫驅動程式來實現,也就要求我們對PE檔案格式有比較深入的瞭解。使用這種方法還要注意驅動程式的載入次序,顯然Hook Driver必須在NDIS.SYS被載入之後,而在協議驅動程式如tcpip.sys被載入之前。另外,Windows2000還提供了系統檔案保護機制,因此在修改ndis.sys還需要通過修改註冊表屏蔽系統檔案保護機制。

2) 向系統註冊假協議(fake protocol)。在Windows核心中,所有登入的協議是通過一個單向的協議鏈表來維護的。這個單向鏈表儲存了所有登入協議的NDIS_PROTOCOL_BLOCK結構的地址,在這個結構中儲存了協議驅動所指定的相應的派發函數的地址如RECEIVE_HANDLER等。並且,每個協議驅動還對應一個NDIS_OPEN_BLOCK的單向鏈表來維護其所綁定的網卡資訊。當協議驅動調用NdisRegisterProtocol之後,NDIS總是會把新註冊的協議放在協議鏈表的表頭並返回這張表,所以只要我們註冊一個新的協議通過新協議註冊返回的鏈表頭就可以輕而易舉遍曆系統中所有協議表。但是,如果要成功地掛接派發函數,還需要對協議所對應的NDIS_OPEN_BLOCK結構裡的派發函數進行掛接,因為NDIS並不是直接調用協議驅動在NDIS_PROTOCOL_CHARACTERISTICS所註冊的派發函數地址,而是調用NDIS_OPEN_BLOCK裡的派發函數。值得注意的是,在Windows9x/Me/NT的DDK中,NDIS_PROTOCOL_BLOCK的定義是很明確的,而在Windows 2000/xp的DDK中,並沒有該結構的詳細定義,也就是說該結構在Windows2000/xp下是非公開的,因此開發人員需要利用各種調試工具來發掘該結構的詳細定義。也正是因為如此,這種方法對平台的依賴性比較大,需要在程式中判斷不同的作業系統版本而使用不同的結構定義。

總結

本文重點描述了在WindowsNT/2000/xp下個人防火牆核心技術-網路資料包攔截技術,分析了各種可能的方法以及各種方法的優缺點,實際上許多個人防火牆結合了幾種不同的技術來在不同層面上進行網路資料包攔截。值得說明的是,網路資料包攔截技術不僅僅可以用來開發個人防火牆,還可以用來開發其他的產品。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.