張輝
摘 要:論文提供了一種Windows防火墻設計方案,它是基于Windows 2000操作系統、DDK for Windows 2000工具開發包以及VC++6.0等平臺而開發的程序。該程序按照功能模式劃分,可分為兩大塊內容,一個是Filter_Hook Driver驅動,另一個就是用戶操作界面了。在這里,Filter_Hook Driver驅動的作用是注冊過濾鉤子回調函數,并且按照用戶提供的過濾規則進行數據包的過濾;用戶操作界面的作用是實現用戶自定義去增添與刪減過濾規則,用戶并且可以自行以文件形式來保存增添進來的過濾規則。
關鍵詞:網絡驅動;防火墻;回調函數
中圖分類號: TP309 文獻標識碼:B
1 引言
Internet的高速發展對人們的生活習慣、事物認知都產生了巨大的改變。人們體驗著互聯網在生活上所帶來的全新感知,習慣著信息時代所帶來的各種的便利。然而,網絡在給大家帶來生活便利的同時,也給人們的安全帶來了威脅。防火墻作為一種重要的網絡安全技術,越來越發揮著重要的作用。
防火墻的作用是按用戶自定義的規則來過濾對其所抓取的數據包,因此防火墻設計的核心任務就是要實現對數據包的抓取。抓取數據包也有很多方法,比較簡單的方法是使用一個基于Windows平臺的免費公共網絡訪問系統—Winpcap(Windows Packet Capture),但Winpcap的主要功能是獨立于主機協議(如TCP/IP)去發送和接收原始數據的。這就意味著,Winpcap并不能夠阻塞、過濾或者控制其它的應用程序對數據包的接收和發送,它的作用僅僅是監聽網絡上傳送的數據包。使用Win2000 DDK中提供的Filter-Hook Driver驅動(過濾鉤子驅動)來實現數對據包的過濾是一個更好的選擇[1,2]。
2 程序設計方案
如圖1所示,基于網絡驅動的Windows防火墻設計可以分成兩個部分,用戶界面代碼部分和過濾鉤子驅動代碼部分。而過濾鉤子驅動代碼部分又是依賴于網絡適配器模塊,網絡適配器模塊是基于IP Filter_Hook代碼和網絡適配器代碼兩部分。也就是說只要將IP Filter_Filter代碼以及網絡適配器驅動代碼做出編寫,那么這個設計的過濾鉤子驅動代碼部分也就能夠有了大概的輪廓;在用戶界面代碼部分,只要通過基礎的代碼編寫出簡易的用戶界面即可。
利用在Windows 2000 DDK中所介紹的Filter-Hook Driver驅動來實現對所有的進出接口的數據進行過濾。這其中主要是包含這些過程:首先開始先要確定并且搭建Kernel模式Filter-Hook Driver驅動,接下來就是要獲取所有指向IP Filter Driver驅動的指針,然后就要運用前面所獲取到的指針,來進行發送有不同類型的IRP(一種規范化的技術文檔)將過濾函數實現安裝,再接著將抓取到的數據準備過濾,最后在過濾數據完成以后,將能夠過濾函數撤消掉[3]。
在用戶界面代碼部分所涉及到的內容其實就是用戶能夠看到的程序界面,也就是用戶和防火墻進行對話的對象。它負責管理用戶自己定義的過濾規則,并且與數據Filter_Hook驅動功能來實現互相通信。還有就是主要利用Filter_Hook Driver驅動模塊的輸出接口所提供的對象指針來實現注冊過濾函數,撤消過濾函數,安裝新的過濾規則,清除所有規則這四個功能。
3 Filter_Hook Driver驅動的實現
3.1 創建Kernel模式驅動
首先需要通過Filter_Hook Driver驅動程序來設置回調函數,在過濾鉤子驅動程序作為該驅動程序的主體,并且通過系統提供的IPFilter Driver驅動注冊這些回調函數,做完這些之后,IP Filter_Driver驅動就可以通過濾器鉤子來想辦法去處理傳入或者傳出的數據包。PacketFilterExtensionPtr數據類型的定義是用來定義注冊過的過濾鉤子驅動。
Filter_Hook Driver驅動函數會對這些傳進來以及傳出去的數據包來做一些不一樣的處理動作。開始是將數據包的專屬信息和IP Filter Driver驅動提供給過Filter Hook的信息來做一次對比,通過這個來對比,數據包接下來該做怎樣的處理。接下來,在Filter_Hook Driver驅動對數據包做完檢測之后,就去回復響應代碼或者將PF_PASS給IP Filter_Hook,并且告知IP Filter_Hook驅動對數據包來做出處理[4]。
3.2 設置和清除Filter_Hook
通過Driver Entry函數來自定義驅動初始化的部分以及驅動卸載的部分。Filter_Hook Driver驅動程序在設置Filter Hook回調函數的時候,并且對IP Filter Hook驅動的每個傳入IP數據包或者傳出的IP數據包發出通知,讓它調來使用鉤子回調函數。Filter Hook會先清除之前注冊的過濾函數。Filter Hook驅動首先需要將設備對象的指針作為IP過濾器驅動來創建一個IRP,之后,Filter_Hook Driver驅動把這個IRP發送給IP Filter Hook驅動,這樣是為了記錄并且清除回調函數[5]。
對Filter_Hook Driver驅動的設置或者清除回歸函數的方式描述:想要獲得IP Filter Hook驅動的對象指針,Filter_Hook Driver驅動函數就需要調用IoGet函數。在這次調用中,Filter_Hook Driver驅動傳遞了指向緩沖區的指針以及容納返回的文件和設備的指針。Filter_Hook Driver驅動程序想要建立一個IRP,需要使用PF_SET_EXTENSION_POINTER控制碼,并且把它提交給IP Filter Hook驅動程序來實現,通常情況下,Filter-hook驅動程序建立所需的IRP都是通過調用IoBuildDeviceIoControlRequest函數。
END_MESSAGE_MAP()
CFirewallApp::CFirewallApp()
{}
CFirewallApp theApp;
SetRegistryKey(_T("FirewallApp"));
if (!ProcessShellCommand(cmdInfo))
return FALSE;
enum { IDD = IDD_ABOUTBOX };
protected:
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
在這次調用之中,過濾器鉤子驅動發送了指定值的IOCTL_PF_SET_EXTENSION參數以及包括了PF_SET_EXTENSION_HOOK_INFO結構的緩沖區域。同時為了設置Filter_Hook,這個結構還包含有設置Filter_Hook回調函數地址的信息。這個控制碼也被用來清除回調函數從IP Filter Hook的程序之中[6,7]。
3.3 實現FILTER_HOOK
將兩個或者兩個以上的過濾規則連在一起的鏈表稱之為過濾列表,在這個程序里它定自義了一個CFilterList的結構,也就是將指針指向后一個過濾規則的pNext指針添加到每個規則上面,通過這種辦法就能夠把兩個或者兩個以上的過濾規則連在一起形成過濾列表。而需要做的就是去記錄首地址就能夠來整理這些所有的過濾規則。在鉤子回調函數中,當有數據包需要通過時,就得去遍歷整個列表。
函數開始過濾,首先將保重的內容復制到共享的內存中,接著來判斷是否符合IP規則。如果符合IP規則,那么就對IP規則去做出處理,并且接著選取下條過濾規則,來做出判斷。如果不符合IP規則的,就再去檢查看是否符合ICMP規則,如果符合ICMP的規則,那么就按ICMP規則來處理,并且選取下一條規則,來做出判斷。如果ICMP規則也不符合的話,那么久去判斷看是否符合TCP規則,如果符合TCP規則的話,那么就按照TCP的規則來處理,并且選取下一條規則。但是,要是不符合的話,那么就檢查看是否符合UDP規則,如果符合UDP的規則的話,那么就按照UDP的規則來處理,并且來選取下一條規則。像上面的情況一樣,如果不符合規則,那么就結束規則的過濾。
通過CDriver類向驅動程序來發送這些設備控制代碼用戶程序的主要的實現。程序在初始化時通過加載Filter_Hook Driver驅動,然后當點擊開始按鈕時向驅動發送START_IP_HOOK來安裝過濾鉤子;點擊停止按鈕時發送STOP_IP_HOOK控制代碼來清除過濾鉤子;點擊添加過濾規則選項時,就會彈出添加規則對話框,來為使用者提供添加過濾規則的輸入界面;點擊刪除選項時則會實現刪除所選定的過濾規則的功能;當使用者點擊安裝規則選項和卸載規則選項時,則會分別發送控制代碼ADD_FILTER和CLEAR_FILTER來實現過濾規則的加載或者卸載。
4 結束語
本文運用了Filter-Hook Driver技術,設計了使用者自動添加、刪除過濾規則,同時可以按照使用者已有的過濾規則完成數據包過濾等的功能。然而,經過檢測使用者明顯可以觀察到,當使用者添加了比較多的過濾規則并進行數據過濾時,其反應的速度就會變的比較慢,因此使用者還需要努力對過濾規則對比算法做出進一步的改進。此外,還可以增加像日志功能這樣的一系列類似的功能,日志功能是一項比較重要的功能,只有通過防火墻日志,使用者才可以更好的對防火墻做維護以及管理。
基金項目:
1. 山西省教育科學“十三五”規劃2016年度課題“網絡工程專業一體化實踐教學體系的實踐研究”(項目編號:GH-16186)。
2. 2016年山西省信息化基金項目“基于知識工程的網絡信息安全支撐服務研究”。
參考文獻
[1] 王文鵬,黃俊.對BM模式匹配算法的一種改進[J].計算機工程與用,2011,47(32):108-111.
[2] 殷超,李大興.基于改進BMSU法的確定型有窮自動機的設計[J].微計算機信息,2008,24(3-1):215-216.
[3] 賀龍濤,方濱興,胡銘矜.對BM串匹配算法的一個改進[J].計算機應用,2003,23(3):6-8.
[4] S.Wu, U.Manber A fast algorithm for multi-pattern searching In Technical Report, TR-94-17 Dept. of Computer Science, University of Arizona 1994.
[5] 殷麗華,方濱興,張宏莉.快速的多模式匹配算法[J].哈爾濱工業大學學報,2007,39(12):1926-1929.
[6] Gary Plumbridge, Jack Whitham, Neil Audsley. Blueshell: a platform for rapid prototyping of multiprocessor NoCs and accelerators [J]. ACM SIGARCH Computer Architecture News, 2013,41(5): 107-117.
[7] Karthik Lakshmanan, Dionisio De Niz, Ragunathan Raj, Gabriel Moreno. Overload provisioning in mixed-criticality cyber-physical systems [J]. ACM Transactions on Embedded Computing Systems, 2012,11(4): 83-85.