?

基于NDIS中間層驅動的DDoS防火墻的設計

2015-05-08 06:48
實驗科學與技術 2015年2期
關鍵詞:句柄中間層調用

萬 偉

(西南科技大學 理學院,四川 綿陽 621010)

基于NDIS中間層驅動的DDoS防火墻的設計

萬 偉

(西南科技大學 理學院,四川 綿陽 621010)

分布式拒絕服務攻擊是當前網絡上最為嚴重的攻擊手段之一。為了有效防御DDoS攻擊,文中討論一種Windows平臺下,基于網絡驅動接口規范中間層驅動技術防御DDoS攻擊的原理。由于NDIS中間層驅動位于Windows網絡組件很低的層次,因此,可以攔截所有的以太網包,具有效率高、攔截準確、系統資源開銷小的特點,配合黑白名單、單個IP連接數等策略,幾乎讓攻擊者沒有可利用的漏洞。它特別適合用來做大型專業網絡的防火墻。

網絡驅動接口規范;中間層驅動;分布式拒絕服務; 防火墻

分布式拒絕服務(distributed denial of service,DDoS)是網絡上一種成本較低、效果明顯、使用范圍廣泛的攻擊手段。以拒絕服務攻擊(denial of service,DoS)為基礎,攻擊者通過自己控制的成千上萬的“肉雞”,在同一時間內各自向服務器發送大量服務請求,導致應用層服務器占用資源或網絡流量急速增大,無法及時響應包括正常服務器在內的服務請求,直至系統癱瘓[1-4]。DDoS攻擊是目前網絡服務器面臨的最為嚴重的攻擊手段之一。

1 中間層驅動的概念和數據包攔截原理

1.1 NDIS中間層驅動的概念

網絡驅動接口規范(network driver interface specification,NDIS)是微軟和一些網絡設備生產商共同制定的一種標準。Windows 2000網絡組件結構從上到下依次為:用戶應用程序、網絡API(application program interface)層、網絡API的內核實現層、TDI層(transport driver interface,傳輸層接口)、NDIS協議驅動層、NDIS小端口驅動層、物理設備層[5-6],如圖1所示。

NDIS中間層驅動是一種混合型的驅動。它把NDIS協議驅動和NDIS小端口驅動合在一起,對NDIS協議驅動扮演NDIS小端口驅動的角色,對NDIS小端口驅動扮演NDIS協議驅動的角色[7-9],如圖2所示。

1.2 NDIS中間層驅動的工作原理

由于NDIS中間層驅動位于NDIS協議驅動和NDIS小端口驅動之間,所有NDIS協議驅動和NDIS小端口驅動之間的交互活動都不得不經過NDIS中間層驅動。經過NDIS中間層驅動的數據包都是比較原始的以太網包,可以分析數據包的協議類型、源地址與端口、目的地址與端口,可以記錄數據包的信息,修改數據包的內容,決定是讓數據包通過、丟棄或者轉發,處理起來非常靈活。

圖1 Windows 2000網絡組件結構

圖2 微軟WDK文檔中NDIS中間層驅動的結構圖

NDIS中間層驅動在加載時需要完成初始化包裝句柄、注冊小端口特征、注冊協議特征、關聯NDIS協議驅動和NDIS小端口驅動接口等工作。驅動程序將上述步驟注冊的NDIS小端口句柄和NDIS協議句柄關聯起來,系統會自動將這兩個句柄在內部結構中關聯并保存。

新創建的NDIS中間層驅動需要綁定到其他的設備驅動程序上,從本質上講,就是綁定網絡適配器(network interface card,NIC),也就是我們通常說的網卡。

完成設備綁定以后,要讓驅動程序的小端口能夠工作,真正實現發送數據包的功能,還必須對小端口進行初始化。

由于中間層在創建時就直接綁定到了適配器上,并創建了一個虛擬的適配器,所以,NDIS協議驅動就綁定在了這個虛擬的適配器上。當網絡包到達時,NDIS協議驅動收到這個包后先進行處理,再將其發送到綁定的適配器上。這樣,數據包就進入了NDIS中間層驅動的處理流程,如圖3所示。

圖3 NDIS中間層攔截發送數據包

2 NDIS中間層驅動的實現

2.1 NDIS中間層驅動初始化

1)初始化包裝句柄

初始化包裝句柄只需要調用NdisMInitializeWrapper傳入驅動對象指針和注冊表路徑即可。這兩個信息都來至DriverEntry入口點傳入的參數。

2)注冊小端口特征

使用NdisIMRegisterLayeredMiniport注冊小端口特征,特征由NDIS_MINIPORT_CHARACTERISTICS結構描述。

NDIS_MINIPORT_CHARACTERISTICS結構大部分域都是用來指定回調函數,指明小端口希望處理哪些事件。注冊完成后,當相應的事件發生時,系統會自動調用用戶注冊的回調函數,完成用戶指定的功能。這些回調函數需要用戶實現。

3)注冊協議特征

注冊協議特征與注冊小端口特征類似,通過調用NdisRegisterProtocol實現,協議的特征由NDIS_PROTOCOL_CHARACTERISTICS結構描述。

4)關聯NDIS協議驅動和小端口驅動

NdisIMAssociateMiniport函數關聯已經注冊的協議和小端口,傳輸的參數分別是上面兩步得到的小端口和協議的NDIS句柄。

2.2 綁定適配器(NIC設備)

注冊小端口特征時,將NDIS_MINIPORT_CHARACTERISTICS結構的InitializeHandler設置為MPInitialize,這就是小端口初始化例程。在這個例程中,應該完成小端口與NIC設備的綁定。在MPInitialize中,獲取系統為NDIS中間層驅動小端口分配的適配器上下文:

pAdapt=NdisIMGetDeviceContext(MiniportAdapterHandle);

檢查可選的媒質類型中有沒有NdisMedium802_3。若有,則將小端的媒質類型填寫為對應的類型;否則,應該直接返回不支持。使用NdisMSetAttributesEx重新設置小端口的適配器的上下文。最后,生成一個設備控制對象,填寫好設備分派例程,調用NdisMRegisterDevice生成,完成小端口的初始化工作。

3 中間層驅動攔截數據包的實現

從初始化中間層驅動時注冊協議特征的步驟中發現,當小端口中某些事件發生時,NDIS庫會自動調用設置的回調函數。與上面的屬性域相對應的事件為:異步發送完成時、上層請求傳送數據完成時、有數據達到時、異步接收完成時、有數據包達到時。

服務器防火墻的設計主要考慮外部到達的數據,所以,中間層驅動主要關注攔截和過濾接收包,對應上面的例程包括:PtReceive、PtReceiveComplete、PtReceivePacket。

3.1 小端口驅動接收數據包的方式

小端口驅動可以用兩種方式指示數據包接收:(1)調用過濾無關的NdisMIndicateRecveivePacket通知上層NDIS驅動;(2)調用過濾相關的NdisMXxxIndicateReceive通知上層NDIS驅動。當小端口驅動以NdisMIndicateRecveivePacket方式操作數據包時,如果中間層驅動指定了ReceivePacketHandler域,則NDIS調用ReceivePacketHandler域的回調函數;否則,NDIS調用ReceiveHandler域指定的回調函數。當小端口驅動以NdisMXxxIndicateReceive方式操作數據包時,NDIS調用ReceiveHandler指定的回調函數。

3.2 接收數據包

本文中ReceiveHandler的具體實現為PtReceive函數。當NDIS調用該函數時,將傳入數據包頭地址、包頭長度、前視緩沖區指針、前視緩沖區長度、數據包長度(不包括包頭)。如果前視緩沖區長度大于或等于數據包長度,則說明前視緩沖區中已經包含了數據包的全部內容。

NdisMXxxIndicateReceive根據數據包的不同而不同。對于以太網數據包,對應的函數為NdisMEthIndicateReceive;對于令牌環數據包,對應的函數為NdisMTrIndicateReceive;對于PDDI包,對應的函數為NdisMFddiIndicateReceive。具體的數據包類型在PtReceive中可以由第一個參數協議綁定上下文來獲取。

4 中間層驅動過濾數據包的實現

前文講述接收數據包的方法,無論是NdisGetReceivedPacket獲取到的,還是NdisTransferData獲取到的,或是在PtTransferDataComplete中獲取到的,都僅僅是包描述符。專用服務器防火墻關心的重點是TCP數據包的源地址、目的端口等參數。根據這些參數及防火墻策略丟棄非法數據包。在NDIS中間層驅動中,我們必須從包描述符中獲取到數據包內容,并將其格式化為協議數據包,再交由策略分析器進行分析。對包的丟棄非常簡單,直接在上面三個接收包描述符的回調函數中返回NDIS_STATUS_FAILURE,系統就會自動將該數據包丟棄。

4.1 包內容的獲取

WDK中包描述符號定義為NDIS_PACKET結構,與包內容相關的域為Private,這個域又被定義為NDIS_PACKET_PRIVATE結構。包描述符中所包含的包數據實際是一個鏈表。NDIS庫提供了對該鏈表的操作函數:NdisQueryPacket獲取第一個NDIS_BUFFER,NdisGetNextBuffer獲取下一個NDIS_BUFFER,NdisQueryBufferSafe獲取數據地址和長度。使用這個函數,可以從頭到尾將NDIS_BUFFER遍歷,并獲取到全部包數據。

4.2 格式化包協議

NDIS中間層收到的數據包是原始的以太網幀數據,如表4所示。

除去前導碼和幀開始符、目的MAC地址、源MAC地址即是IP首部,IP首部在MSDN(microsoft developer network)中定義為IP_HEADER:

typedef struct IP_HEADER

{

unsigned char VIHL; // Version and IHL

unsigned char TOS; // Type Of Service

short TotLen; // Total Length

short ID; // Identification

short FlagOff; // Flags and Fragment Offset

unsigned char TTL; // Time To Live

unsigned char Protocol; // Protocol

unsigned short Checksum; // Checksum

struct in_addr iaSrc; // Internet Address-Source

struct in_addr iaDst; // Internet Address-Destination

}IP_HEADER, *PIP_HEADER;IP_HEADER的Protocol字段指定了應用程序網絡協議,根據不同的網絡協議,將協議首部、數據提交給策略分析模塊,通過對源地址、目的端口、策略的分析,確定是否返回NDIS_STATUS_FAILURE丟棄數據。

表4 以太網幀數據結構

5 結束語

本文所述的Windows平臺下基于NDIS中間層驅動技術的防火墻,通過在NDIS協議驅動層和NDIS小端口驅動層之間注冊中間層驅動的方法攔截以太網包,經用戶手動或客戶端數字簽名認證的方法自動增刪黑名單、限制單個IP連接數等策略實現對非認證連接和數據包的屏蔽,達到防御DDoS攻擊,保護專用網絡的目的。

由于NDIS中間層驅動位于Windows網絡組件很低的層次,因此,可以攔截所有的以太網包,具有效率高、攔截準確、系統資源開銷小的特點。配合黑白名單、單個IP連接數等策略,幾乎讓攻擊者沒有可利用的漏洞。它的這些特點,使其特別適合用來做大型專業網絡的防火墻。

[1] Ranjan S, Swaminathan R, Uysal M, et al. DDoS shield: DDoS-resilient scheduling to counter application layer attacks[J]. IEEE/ACM Transactions on Networking, 2009, 17(1): 26-39.

[2] Kandula S, Katabi D, Jacob M, et al. Botz-4-scale:surviving organized DDoS attacks that mimic flash crowds[C]Proceedings of the 2nd Conference on Symposium on Networked Systems Design & Implementation. Kyoto, Japan:[s.n.],2005: 287-300.

[3] Yu J, Chen H, Chen X. A detection and offense mechanism to defense against application layer DDoS attacks[C].Proceedings of the 3rd International Conference on Networking and Services. Athens, Greece:[s.n.], 2007: 251-261.

[4] 田俊峰,朱宏濤,孫冬冬,等.基于用戶信譽值防御 DDoS 攻擊的協同模型[J].通信學報,2009,30(3): 13-20.

[5]Greg Hoglund, James Butler. Rootkit—windows 內核的安全防護 [M].北京:清華大學出版社,2007.

[6] 張帆,史彩成. Windows 驅動開發技術詳解 [M].北京:電子工業出版社,2008.

[7] 程克勤,鄧林,王繼波,等.基于應用層的Windows個人防火墻的設計與實現[J].合肥工業大學學報:自然科學版,2010,34(5):695-699.

[8] 易克非,胡慶鋒.基于DSP的實時多任務調度內核設計[J].通信技術,2011,44(6):135-137.

[9]文軍,王加懂.DSP 程序在線編程的研究與實現[J].信息安全與通信保密,2007(8):192-195,198.

Design of Firewall Against DDoS Attacks Based on NDIS Intermediate Drivers

WAN Wei

(Department of Physics, Southwest University of Science and Technology, Mianyang 621010, China)

The attack by Distributed Denial of service is one of the most grievous ploys in internet at the present time. On the platform of Windows, based on NDIS intermediate drivers a principle of defense is proposed to handle DDos attacks in this paper. Because NDIS intermediate drive is located in the rather low level of Windows network components, it can intercept all Ethernet packets, having such features as being efficient, intercepting precisely and having small expenses of systemic resources. Coordinating with such tactics as black-and-white lists and single IP linkage numbers, almost no loopholes can be taken advantage of by attackers. All of these features can be best applied to make large scale and specialized network firewalls.

network driver interface specification; intermediate drivers; distributed denial of service;firewall

2014-05-09;修改日期: 2014-06-04

西南科技大學實驗技術研究基金資助項目(13syjs-32)。

萬 偉(1965-),男,學士,工程師,主要從事實驗教學及實驗技術、實驗方法的研究工作。

TP393.08

A

10.3969/j.issn.1672-4550.2015.02.010

猜你喜歡
句柄中間層調用
一種十七股子午胎鋼絲簾線
核電項目物項調用管理的應用研究
LabWindows/CVI下基于ActiveX技術的Excel調用
高校圖書館持久標識符應用研究
編譯程序語法分析句柄問題分析與探討
基于系統調用的惡意軟件檢測技術研究
鎳基高溫合金TLP擴散焊中間層材料研究進展
B含量對IC10合金TLP焊接用中間層材料及接頭組織的影響
利用RFC技術實現SAP系統接口通信
柵格中間層數據在數字地形分析中的應用
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合