王旭輝 王 濤 康曉鳳
(徐州工程學(xué)院信電工程學(xué)院 徐州 221000)
隨著互聯(lián)網(wǎng)的發(fā)展,不管是在企業(yè)中還是家庭里,計算機都是辦公娛樂必不可少的工具,每時每刻都有人在上網(wǎng)、辦公,同樣每時每刻也都存在著黑客入侵等危險,為了更好的保護用戶的計算機安全,我們編寫了這套個人計算機的入侵檢測系統(tǒng),本系統(tǒng)智能、綠色、耗費資源小,能夠在Windows 7x86/x64、Vista x86/x64,Windows XP sp1/sp2/sp3等不同平臺完美運行,本系統(tǒng)利用原始套接字對流經(jīng)網(wǎng)卡的數(shù)據(jù)包進行捕獲分析,并沒有借助第三方開發(fā)包。具有易操作的界面,描述的攻擊行為簡單直觀,用戶能夠自己定義規(guī)則,并且能夠查看本機應(yīng)用程序的網(wǎng)絡(luò)連接,使之能夠清晰的意識到危險的網(wǎng)絡(luò)連接,防止木馬、后門的侵擾[1~3]。
為了使系統(tǒng)能夠小巧,穩(wěn)定的運行,我們選擇了VC++作為開發(fā)環(huán)境,它有強大的開發(fā)庫,為底層的Windows程序提供了便捷的方法,本系統(tǒng)包含數(shù)據(jù)包檢測、流量監(jiān)控圖、規(guī)則管理、網(wǎng)絡(luò)連接、幫助,六大模塊組成,為了使普通用戶方便、容易的使用本系統(tǒng),本系統(tǒng)每個模塊都采用了圖形化界面設(shè)計,并且不需安裝,即拷即用,方便的在筆記本電腦上使用[4]。
本系統(tǒng)核心模塊是對數(shù)據(jù)包的捕獲分析,檢測廣度為TCP、UDP、ICMP包,檢測深度為TCP和UDP的payload部分。根據(jù)數(shù)據(jù)包的數(shù)據(jù)部分和規(guī)則進行匹配來確定是否是危險數(shù)據(jù)包,就像殺毒軟件用病毒和病毒庫進行匹配一樣[5]。本系統(tǒng)總體框架如圖1所示。
圖1 系統(tǒng)總體框架圖
在數(shù)據(jù)包檢測模塊,我們用RichEdit控件設(shè)計了一個實時數(shù)據(jù)包顯示的界面,用ListControl控件設(shè)計了一個顯示警告信息的界面,并將警告信息自動記錄在日志文件中,用戶可以自己控制是否開啟數(shù)據(jù)包監(jiān)控。
在本模塊包含數(shù)據(jù)包捕獲、數(shù)據(jù)包檢測和日志記錄三個子模塊,數(shù)據(jù)包檢測模塊將數(shù)據(jù)包解封之后與規(guī)則庫中的規(guī)則進行對比匹配如果匹配吻合,那么就認為這個數(shù)據(jù)包為一個攻擊數(shù)據(jù)包,然后交給日志記錄模塊進行處理,日志記錄模塊記錄該數(shù)據(jù)包的來源以及該包存在的攻擊行為的類型加以記錄并及時顯示在警告信息的界面上提醒用戶,日志以日期形式命名保存在log目錄下[6]。數(shù)據(jù)報檢測過程如圖2所示,數(shù)據(jù)包檢測模塊運行界面如圖3所示[3~5]。
圖2 數(shù)據(jù)包檢測過程圖
圖3 數(shù)據(jù)包檢測模塊運行界面
在數(shù)據(jù)包捕獲模塊我們利用原始套接字將網(wǎng)卡設(shè)置為混雜模式,從而捕獲流經(jīng)網(wǎng)卡的所有數(shù)據(jù)包,然后將數(shù)據(jù)包交給數(shù)據(jù)包檢測模塊進行檢測。
本模塊在監(jiān)控網(wǎng)絡(luò)數(shù)據(jù)包功能中,使用多線程、多通道技術(shù),首先先獲得本地所有網(wǎng)卡所有IP地址,根據(jù)IP數(shù)目創(chuàng)建多個線程,線程處理函數(shù)主要進行數(shù)據(jù)包捕獲以及數(shù)據(jù)包分析、對比。并將捕獲到的數(shù)據(jù)包信息顯示在實時數(shù)據(jù)包界面中。所要顯示的數(shù)據(jù)包信息格式為:日期、協(xié)議、源IP地址:源端口、目的IP地址:目的端口、數(shù)據(jù)包大小。數(shù)據(jù)包監(jiān)控整體流程圖如圖4所示,數(shù)據(jù)包捕獲流程如圖5所示[5~7]。
圖4 數(shù)據(jù)包監(jiān)控模塊整體流程圖
圖5 數(shù)據(jù)包捕獲檢測線程流程圖
本模塊接受從數(shù)據(jù)包捕獲模塊傳遞來的數(shù)據(jù)包,將數(shù)據(jù)包進行解包操作,然后根據(jù)數(shù)據(jù)包信息進行數(shù)據(jù)包分類,分為TCP包、UDP包和ICMP包三類,然后與規(guī)則庫中的規(guī)則進行對比,如果與規(guī)則匹配,則認為這個數(shù)據(jù)包為危險數(shù)據(jù)包,進行報警并日志記錄。
在報警信息界面,使其顯示出數(shù)據(jù)包流經(jīng)網(wǎng)卡時間、源地址、目的地址以及包信息描述。用戶可以復(fù)制這條警告信息,并能右擊查詢IP歸屬地,查詢IP歸屬地功能使用QQWry.dat編程技術(shù)實現(xiàn)。數(shù)據(jù)包分析與規(guī)則匹配流程如圖6所示[6~8]。
圖6 數(shù)據(jù)包分析與規(guī)則匹配流程圖
本模塊分為添加規(guī)則和刪除規(guī)則兩個子模塊,在本模塊,我們創(chuàng)建了一個模態(tài)對話框,在此對話框中放置了一ListControl控件用來顯示已經(jīng)添加到規(guī)則庫中的規(guī)則,用戶可以在此界面上選擇添加規(guī)則和選定一條規(guī)則來刪除。為了方便的讀寫規(guī)則,我們采用了xml文件來存儲所有的規(guī)則,并采用了第三方的CMarkup類來對xml文件進行讀寫操作,規(guī)則保存在程序根目錄下rules.xml文件中。用CMarkup類的Open()、Save()方法打開和保存xml文件,用IntoElem()、FindElem()、GetData()、OutOfElem()可實現(xiàn)遍歷xml文件讀取規(guī)則。用RemoveElem()方法可以刪除一條規(guī)則[7]。
一條規(guī)則主要由proto(協(xié)議)、srcip(源地址)、dstip(目的地址)、srcport(源端口)、dstport(目的端口)、payload(特征)、direction(單雙向)、msg(消息)等組成。讀取規(guī)則文件流程如圖7所示[8~9]。
圖7 CMarkup類遍歷文件讀取規(guī)則流程圖
本模塊枚舉出計算機中存在網(wǎng)絡(luò)連接的進程,將該進程的PID、進程名、協(xié)議、本地IP地址、本地端口、遠程IP地址、遠程端口、遠程IP歸屬地、連接狀態(tài)以及進程程序所在的路徑顯示出來,由于不同的操作系統(tǒng)iphlpapi.dll版本不同,本模塊針對不同的操作系統(tǒng)從iphlpapi.dll中的不同的擴展函數(shù)來枚舉這些進程,在Windows xp、2003操作系統(tǒng)中使用 AllocateAndGetTcpExTableFromStack()和 AllocateAndGetUdpExTableFromStack()函數(shù),在 windows 7、server 2008、vista等中使用InternalGetTcpTable2()和InternalGetUdpTableWithOwnerPid()函數(shù)大大提高了與各種系統(tǒng)的兼容性。運行界面如圖8所示[10,14]:
圖8 網(wǎng)絡(luò)連接查看模塊運行界面
本系統(tǒng)的設(shè)計思想來源于Snort入侵檢測系統(tǒng),設(shè)計過程中涉及到 Windows GDI、Socket、多線程、文件操作、定時器等編程技術(shù),是一個集多種編程技術(shù)為一體的系統(tǒng),在設(shè)計編寫過程中,極大地鍛煉了我們的編程能力以及編程思想,使我們對IDS這門技術(shù)有了更深的了解,本系統(tǒng)的設(shè)計編寫經(jīng)驗對我們今后從事網(wǎng)絡(luò)安全相關(guān)的工作起到了很大的幫助作用。
[1]卡斯維爾.Snort2.0入侵檢測[M].北京:國防工業(yè)出版社,2004(01):22.
[2]陳偉.Snort輕量級入侵檢測系統(tǒng)全攻略[M].北京:北京郵電大學(xué)出版社,2009:31.
[3]韓東海.入侵檢測系統(tǒng)及實例剖析[M].北京:清華大學(xué)出版社,2002:54.
[4]孫鑫.VC++深入詳解[M].北京:電子工業(yè)出版社,2006:155.
[5]唐正軍.網(wǎng)絡(luò)入侵檢測系統(tǒng)的設(shè)計與實現(xiàn)[M].北京:電子工業(yè)出版社,2002:87.
[6]梁洋洋.Visual C++黑客編程揭秘與防范[M].北京:人民郵電出版社,2009:237.
[7]羅軍舟.TCP/IP協(xié)議及網(wǎng)絡(luò)編程技術(shù)[M].北京:清華大學(xué)出版社,2004:86.
[8]安東尼·瓊斯.Windows網(wǎng)絡(luò)編程技術(shù)[M].北京:機械工業(yè)出版社,2000:64.
[9]百度文庫.CMarkup類的使用方法[EB/OL].http://wenku.baidu.com/view/a9c27eed0975f46527d3e15d.html,2011.
[10]陳堅,陳偉.Visual C++網(wǎng)絡(luò)高級編程[M].北京:人民郵電出版社,2001:149.
[11]杜海娟.網(wǎng)絡(luò)入侵檢測系統(tǒng)中動態(tài)克隆選擇算法的優(yōu)化[J].計算機與數(shù)字工程,2010(7).
[12]沈艷,方湘艷,韓威,等.基于四層過濾的網(wǎng)絡(luò)入侵檢測系統(tǒng)模型[J].計算機與數(shù)字工程,2011(6).
[13]孫大朋.改進的模糊聚類算法在入侵檢測中的研究[J].計算機與數(shù)字工程,2010(3).
[14]哈特.Windows系統(tǒng)編程[M].北京:機械工業(yè)出版社,2006:117.