摘 ?要:信息時代個人電腦成為了生活的重要組成部分,對個人防火墻的研究對保護信息安全有重要的現(xiàn)實意義。目前防火墻大多在驅(qū)動層面使用包過濾技術,對數(shù)據(jù)的封包處理能力有限,并且無法接觸應用層信息,過濾匹配算法也大多為線性時間算法。為了提高防火墻的過濾能力,文章提出加入LSP過濾技術對網(wǎng)絡封包進行全面深度過濾,并改善了匹配算法,設計了一款內(nèi)核與應用層雙重過濾的驅(qū)動防火墻。經(jīng)過測試,它對網(wǎng)絡數(shù)據(jù)包有強大的過濾能力。
關鍵詞:網(wǎng)絡驅(qū)動接口規(guī)范;防火墻;LSP;包過濾
中圖分類號:TP393.08 ? ? ? 文獻標識碼:A 文章編號:2096-4706(2020)12-0140-03
Abstract:Personal computer plays an important role of life in the information age. Therefore it is important and realizable for us to research the firewall. At present,most firewalls use packet filtering technology at the driver level,which has limited processing capacity for data packets,and can not contact the application layer information,and most of the filtering and matching algorithms are linear time. In order to improve the filtering ability of firewall,LSP filtering technology is proposed to filter network packets comprehensively and deeply,and the matching algorithm is improved. A driver firewall with dual filtering of kernel and user layer is designed. After testing,it has a strong filtering ability for network packets.
Keywords:network driver interface specification;firewall;LSP;packet filtering
0 ?引 ?言
防火墻是保護網(wǎng)絡安全的一種重要手段,它通常部署在內(nèi)網(wǎng)入口處與個人主機上,具有硬件與軟件的形式。防火墻通常為包過濾防火墻、狀態(tài)檢測防火墻等[1]。此類防火墻主要根據(jù)一些過濾規(guī)則對網(wǎng)絡包五元組(即目的與源IP地址、目的與源端口、協(xié)議)進行過濾[2],同時匹配模式通常是從第一條規(guī)則開始逐步比對,直到遇到相同規(guī)則或者按照缺省規(guī)則處理。
由于此類防火墻通常處于網(wǎng)絡結構下層,無法感知用戶層信息。為了提升防火墻能力,本文加入了用戶層的過濾HOOK;同時由于過濾匹配通常為線性算法,為了提高過濾效率,將過濾規(guī)則以哈希雙鏈表的方式組織[3]。實驗表明加入用戶層HOOK的防火墻擁有了感知應用層信息的能力,并且當過濾規(guī)則數(shù)量較多時,哈希雙鏈表也能有效提高匹配效率。
本文基于校內(nèi)工業(yè)協(xié)議防火墻的項目對防火墻進行了研究,在NDIS中間層的過濾驅(qū)動中加入了LSP過濾HOOK,改善了過濾匹配算法,并使用共享內(nèi)存與IOCTL作為主界面UI、應用層DLL、內(nèi)核層驅(qū)動之間的通信方式,設計并實現(xiàn)了一款基于LSP與NIDS的驅(qū)動防火墻。
1 ?系統(tǒng)設計
1.1 ?模塊設計
本防火墻將分為三個模塊:主界面UI、應用層DLL、內(nèi)核層驅(qū)動,交互過程圖如圖1所示。
(1)主界面UI:負責與用戶的交互,例如加載LSP的DLL鉤子、設定應用層與內(nèi)核層的過濾規(guī)則、顯示網(wǎng)絡訪問監(jiān)視界面、詢問用戶決定以及設置注冊表等功能。本模塊通過共享內(nèi)存與應用層DLL模塊通信、通過IOCTL與內(nèi)核層驅(qū)動模塊通信,保證兩層過濾模塊能夠及時獲得用戶期望的過濾行為。
(2)應用層DLL:這是一個運行在用戶模式并注入系統(tǒng)協(xié)議鏈的DLL模塊。負責在Winsock的層面截獲應用程序訪問網(wǎng)絡的請求,并根據(jù)與主界面UI的共享內(nèi)存設定過濾函數(shù)的邏輯,判斷網(wǎng)絡請求是否記錄、通行等。
(3)內(nèi)核層驅(qū)動:這是一個NDIS中間層過濾驅(qū)動,負責在內(nèi)核模式根據(jù)IOCTL與主界面UI的通信結果來管理輸入輸出封包、記錄網(wǎng)絡活動狀態(tài)等。
1.2 ?過濾規(guī)則
防火墻將根據(jù)用戶設置的過濾規(guī)則對流經(jīng)網(wǎng)絡的數(shù)據(jù)包進行過濾與攔截[4]。各個模塊具體規(guī)則信息如表1所示。
2 ?核心技術
2.1 ?匹配算法
本系統(tǒng)采用哈希雙鏈表的方式進行過濾規(guī)則匹配。通常的規(guī)則匹配都是采用循環(huán)對比的方式,此方式在規(guī)則數(shù)量足夠多時將會極大影響系統(tǒng)的運行效率[5]。因此本系統(tǒng)將規(guī)則以哈希表的形式存儲,匹配時計算規(guī)則Key值進行匹配,時間復雜度為O(1),極大地提高了防火墻的匹配效率。
2.2 ?內(nèi)核層面過濾
本系統(tǒng)采用中間層驅(qū)動作為系統(tǒng)內(nèi)核層的過濾方式。在Windows網(wǎng)絡中,應用層的網(wǎng)絡請求將通過SPI接口進入內(nèi)核,通過TDI接口協(xié)議驅(qū)動、中間層驅(qū)動、網(wǎng)卡驅(qū)動傳輸至下層NIC設備發(fā)送。其實這些驅(qū)動都可以選擇作為防火墻的過濾技術,也各有商業(yè)軟件的實現(xiàn)。
底層網(wǎng)絡驅(qū)動中,協(xié)議驅(qū)動方便捕獲所有接收包,但不利于捕獲發(fā)送包;而網(wǎng)卡驅(qū)動則更加片面不能過濾到所有的封包。中間層驅(qū)動兼?zhèn)鋬烧咛匦?,對上表現(xiàn)網(wǎng)卡驅(qū)動接口,對下表現(xiàn)協(xié)議驅(qū)動接口,是內(nèi)核中過濾網(wǎng)絡數(shù)據(jù)包的最佳選擇,因此本系統(tǒng)選擇中間層驅(qū)動作為內(nèi)核層的過濾技術。通過中間層驅(qū)動可以過濾原始以太網(wǎng)絡包、分析協(xié)議類型、修改網(wǎng)絡數(shù)據(jù)包,可以過濾或修改源地址與端口、目的地址與端口、數(shù)據(jù)包內(nèi)容,并可以進行任意修改、轉(zhuǎn)發(fā)、丟棄,放行[6]。
本系統(tǒng)中間層驅(qū)動中,注冊了包裝句柄、小端口句柄、關聯(lián)句柄、協(xié)議句柄、填寫特征函數(shù)、綁定網(wǎng)卡設備、創(chuàng)建設備對象、填寫IRP操作函數(shù)等。在系統(tǒng)發(fā)送網(wǎng)絡數(shù)據(jù)時會調(diào)用NdisSend或者NdisSendPackets函數(shù),本系統(tǒng)的中間層驅(qū)動將對上層展示為網(wǎng)卡驅(qū)動,獲取從設備棧上層的Send操作,并在Send操作中完成對數(shù)據(jù)的過濾。同理系統(tǒng)Receive的回調(diào)也以類似的方式實現(xiàn)。
Windows傳輸封包在底層網(wǎng)絡中為NDIS_PACKET、NDIS_BUFFER。NDIS_PACKET(包描述符)是一組存放NDIS_BUFFER(緩沖描述符)的鏈表結構。在過濾時要以兩套過濾方法對兩種結構進行過濾,因為系統(tǒng)接收時調(diào)用的函數(shù)是不確定的,所以要對兩種結構的收發(fā)函數(shù)同時過濾才能截獲所有封包。
2.3 ?應用層過濾
本系統(tǒng)采用LSP技術進行應用層過濾。此技術本質(zhì)上是一個HOOKDLL,用戶打開主程序后,本系統(tǒng)會將LSPDLL注冊安裝到當前主機的Winsock目錄,并且更改協(xié)議鏈的順序,否則在API調(diào)用時新的提供者將在目錄結尾,永遠不會被默認調(diào)用。
通過HOOK技術掛入主機協(xié)議鏈后,用戶系統(tǒng)調(diào)用WSAStartup進行Winsock編程時,會調(diào)用本系統(tǒng)注冊的SPI函數(shù),當主機系統(tǒng)進行網(wǎng)絡通信,例如使用Connect、Socket、SendTo等函數(shù),將會傳遞到本系統(tǒng)在DLL中的Winsock API;使用WSPConnect、WSPSocket、WSPSendTo等函數(shù),此時所有網(wǎng)絡數(shù)據(jù)將會按照防火墻DLL中的規(guī)則對網(wǎng)絡封包進行過濾。
2.4 ?系統(tǒng)通信方式
用戶對防火墻進行操作時會通過主模塊與過濾模塊進行交互,例如設定內(nèi)核層或者應用層的過濾規(guī)則。同時過濾模塊在進行過濾時也需要與用戶進行交互,例如詢問用戶過濾動作、顯示當前過濾信息等。因此本系統(tǒng)需要實現(xiàn)各個模塊之間的信息交互功能。
主界面UI與應用層DLL之間的通訊采用共享內(nèi)存的方法實現(xiàn)。本系統(tǒng)在DLL中分配一片可讀可寫的共享內(nèi)存作為通信緩沖區(qū),在應用程序中需要使用CreateFileMapping創(chuàng)建內(nèi)存映射獲取句柄再通過MapViewOfFile獲得映射用來訪問共享內(nèi)存。此方法在訪問共同資源時需要進行對資源訪問鎖的控制,防止雙方同時改寫數(shù)據(jù)造成數(shù)據(jù)沖突。
應用層與內(nèi)核層驅(qū)動之間的通訊采用IOCTL的方法實現(xiàn)。進行設備讀寫時,通常用戶會操控UserBuffer直接進行讀寫,但是此方式會重復復制緩沖區(qū)的信息,在防火墻中信息量通常比較大,直接用UserBuffer效率十分將低下,所以本系統(tǒng)使用DO_DIRECT_IO的方式進行讀寫。使用此方式時用戶訪問讀寫區(qū)域的內(nèi)存結構是一個MDL,這相當于一個指針,將應用層內(nèi)存空間映射到內(nèi)核空間中,這是內(nèi)核空間的內(nèi)存通過分頁表等手段向外部的一次映射。Irp->MdlAddress則是這個MDL的指針的句柄,通過內(nèi)置函數(shù)MmGetSystemAddressForMdlSage,即可得到UserBuffer對內(nèi)存進行高效訪問。
3 ?程序調(diào)試與測試
調(diào)試環(huán)境:VMware Windows 7
開發(fā)環(huán)境:Visual Studio 2017,WDK 10、SDK 10
防火墻系統(tǒng)運行之前需要將防火墻DLL與驅(qū)動注入主機系統(tǒng),DLL注入使用LoadLibrary函數(shù),在防火墻主機面點擊加載DLL按鈕即可完成DLL的加載。
驅(qū)動加載有兩種方式,一種是右鍵打開本地連接-屬性,在網(wǎng)絡選線中選擇安裝,在對話框中選擇防火墻的SYS文件進行安裝。另一種是使用已經(jīng)編譯好的安裝程序鍵入命令installdrv mfw.sys進行安裝。完成后即可使用防火墻的全部功能,圖2所示為防火墻的網(wǎng)絡訪問監(jiān)視界面。
4 ?結 ?論
本文針對傳統(tǒng)防火墻過濾能力單一的問題,設計了一款基于LSP與NDIS雙層過濾的驅(qū)動防火墻,討論了防火墻的模塊設計和主要技術以及思路,詳細闡述了如何實現(xiàn)數(shù)據(jù)包過濾以及一些重要技術。雖然NDIS中間層過濾驅(qū)動功能強大,但其位于系統(tǒng)底層,獲取信息能力有限。針對這個問題,本文在防火墻加入了應用層的DLL防火墻,使防火墻過濾底層網(wǎng)絡封包又可兼顧上層應用過濾。
驅(qū)動程序復雜,稍不注意就會出現(xiàn)級別越界、訪問越界等問題導致藍屏死機,同時內(nèi)核系統(tǒng)函數(shù)也復雜多樣,所以編寫程序時也需要一份樣例來指導。此防火墻在應用層與內(nèi)核層進行雙重過濾,穩(wěn)定高效,安全性能顯著,并且擁有圖形交互界面,方便操作。本文重點闡述了防火墻的技術難點,為NDIS驅(qū)動編寫人提供參考。
參考文獻:
[1] DIEKMANN C,HUPEL L,JULIUS MICHAELIS,et al. Verified iptables Firewall Analysis and Verification [J]. Journal of Automated Reasoning,2018,61(1-4):191-242.
[2] NEVILLE U,F(xiàn)OLEY S N. Reasoning about firewall policies through refinement and composition [J]. Journal of Computer Security,2018,26(2):207-254.
[3] TRABELSI Z,ZEIDAN S,MASUD M M,et al. Statistical dynamic splay tree filters towards multilevel firewall packet filtering enhancement [J]. Computers & Security,2015,53:109-131.
[4] 宮鼎.基于權重與匹配效率的防火墻規(guī)則集優(yōu)化算法 [J].現(xiàn)代計算機(專業(yè)版),2014(14):45-50.
[5] 萬偉.基于NDIS中間層驅(qū)動的DDoS防火墻的設計 [J].實驗科學與技術,2015,13(2):32-35.
[6] 王婷婷.基于NDIS中間層驅(qū)動的網(wǎng)絡內(nèi)容過濾關鍵技術研究 [D].天津:天津理工大學,2017.
作者簡介:梅足輝(1996.11—),男,漢族,江蘇鎮(zhèn)江人,研究生,研究方向:軟件開發(fā)。