王旭輝 王 濤 康曉鳳
(徐州工程學院信電工程學院 徐州 221000)
隨著互聯網的發展,不管是在企業中還是家庭里,計算機都是辦公娛樂必不可少的工具,每時每刻都有人在上網、辦公,同樣每時每刻也都存在著黑客入侵等危險,為了更好的保護用戶的計算機安全,我們編寫了這套個人計算機的入侵檢測系統,本系統智能、綠色、耗費資源小,能夠在Windows 7x86/x64、Vista x86/x64,Windows XP sp1/sp2/sp3等不同平臺完美運行,本系統利用原始套接字對流經網卡的數據包進行捕獲分析,并沒有借助第三方開發包。具有易操作的界面,描述的攻擊行為簡單直觀,用戶能夠自己定義規則,并且能夠查看本機應用程序的網絡連接,使之能夠清晰的意識到危險的網絡連接,防止木馬、后門的侵擾[1~3]。
為了使系統能夠小巧,穩定的運行,我們選擇了VC++作為開發環境,它有強大的開發庫,為底層的Windows程序提供了便捷的方法,本系統包含數據包檢測、流量監控圖、規則管理、網絡連接、幫助,六大模塊組成,為了使普通用戶方便、容易的使用本系統,本系統每個模塊都采用了圖形化界面設計,并且不需安裝,即拷即用,方便的在筆記本電腦上使用[4]。
本系統核心模塊是對數據包的捕獲分析,檢測廣度為TCP、UDP、ICMP包,檢測深度為TCP和UDP的payload部分。根據數據包的數據部分和規則進行匹配來確定是否是危險數據包,就像殺毒軟件用病毒和病毒庫進行匹配一樣[5]。本系統總體框架如圖1所示。

圖1 系統總體框架圖
在數據包檢測模塊,我們用RichEdit控件設計了一個實時數據包顯示的界面,用ListControl控件設計了一個顯示警告信息的界面,并將警告信息自動記錄在日志文件中,用戶可以自己控制是否開啟數據包監控。
在本模塊包含數據包捕獲、數據包檢測和日志記錄三個子模塊,數據包檢測模塊將數據包解封之后與規則庫中的規則進行對比匹配如果匹配吻合,那么就認為這個數據包為一個攻擊數據包,然后交給日志記錄模塊進行處理,日志記錄模塊記錄該數據包的來源以及該包存在的攻擊行為的類型加以記錄并及時顯示在警告信息的界面上提醒用戶,日志以日期形式命名保存在log目錄下[6]。數據報檢測過程如圖2所示,數據包檢測模塊運行界面如圖3所示[3~5]。

圖2 數據包檢測過程圖

圖3 數據包檢測模塊運行界面
在數據包捕獲模塊我們利用原始套接字將網卡設置為混雜模式,從而捕獲流經網卡的所有數據包,然后將數據包交給數據包檢測模塊進行檢測。
本模塊在監控網絡數據包功能中,使用多線程、多通道技術,首先先獲得本地所有網卡所有IP地址,根據IP數目創建多個線程,線程處理函數主要進行數據包捕獲以及數據包分析、對比。并將捕獲到的數據包信息顯示在實時數據包界面中。所要顯示的數據包信息格式為:日期、協議、源IP地址:源端口、目的IP地址:目的端口、數據包大小。數據包監控整體流程圖如圖4所示,數據包捕獲流程如圖5所示[5~7]。

圖4 數據包監控模塊整體流程圖

圖5 數據包捕獲檢測線程流程圖
本模塊接受從數據包捕獲模塊傳遞來的數據包,將數據包進行解包操作,然后根據數據包信息進行數據包分類,分為TCP包、UDP包和ICMP包三類,然后與規則庫中的規則進行對比,如果與規則匹配,則認為這個數據包為危險數據包,進行報警并日志記錄。
在報警信息界面,使其顯示出數據包流經網卡時間、源地址、目的地址以及包信息描述。用戶可以復制這條警告信息,并能右擊查詢IP歸屬地,查詢IP歸屬地功能使用QQWry.dat編程技術實現。數據包分析與規則匹配流程如圖6所示[6~8]。

圖6 數據包分析與規則匹配流程圖
本模塊分為添加規則和刪除規則兩個子模塊,在本模塊,我們創建了一個模態對話框,在此對話框中放置了一ListControl控件用來顯示已經添加到規則庫中的規則,用戶可以在此界面上選擇添加規則和選定一條規則來刪除。為了方便的讀寫規則,我們采用了xml文件來存儲所有的規則,并采用了第三方的CMarkup類來對xml文件進行讀寫操作,規則保存在程序根目錄下rules.xml文件中。用CMarkup類的Open()、Save()方法打開和保存xml文件,用IntoElem()、FindElem()、GetData()、OutOfElem()可實現遍歷xml文件讀取規則。用RemoveElem()方法可以刪除一條規則[7]。
一條規則主要由proto(協議)、srcip(源地址)、dstip(目的地址)、srcport(源端口)、dstport(目的端口)、payload(特征)、direction(單雙向)、msg(消息)等組成。讀取規則文件流程如圖7所示[8~9]。

圖7 CMarkup類遍歷文件讀取規則流程圖
本模塊枚舉出計算機中存在網絡連接的進程,將該進程的PID、進程名、協議、本地IP地址、本地端口、遠程IP地址、遠程端口、遠程IP歸屬地、連接狀態以及進程程序所在的路徑顯示出來,由于不同的操作系統iphlpapi.dll版本不同,本模塊針對不同的操作系統從iphlpapi.dll中的不同的擴展函數來枚舉這些進程,在Windows xp、2003操作系統中使用 AllocateAndGetTcpExTableFromStack()和 AllocateAndGetUdpExTableFromStack()函數,在 windows 7、server 2008、vista等中使用InternalGetTcpTable2()和InternalGetUdpTableWithOwnerPid()函數大大提高了與各種系統的兼容性。運行界面如圖8所示[10,14]:

圖8 網絡連接查看模塊運行界面
本系統的設計思想來源于Snort入侵檢測系統,設計過程中涉及到 Windows GDI、Socket、多線程、文件操作、定時器等編程技術,是一個集多種編程技術為一體的系統,在設計編寫過程中,極大地鍛煉了我們的編程能力以及編程思想,使我們對IDS這門技術有了更深的了解,本系統的設計編寫經驗對我們今后從事網絡安全相關的工作起到了很大的幫助作用。
[1]卡斯維爾.Snort2.0入侵檢測[M].北京:國防工業出版社,2004(01):22.
[2]陳偉.Snort輕量級入侵檢測系統全攻略[M].北京:北京郵電大學出版社,2009:31.
[3]韓東海.入侵檢測系統及實例剖析[M].北京:清華大學出版社,2002:54.
[4]孫鑫.VC++深入詳解[M].北京:電子工業出版社,2006:155.
[5]唐正軍.網絡入侵檢測系統的設計與實現[M].北京:電子工業出版社,2002:87.
[6]梁洋洋.Visual C++黑客編程揭秘與防范[M].北京:人民郵電出版社,2009:237.
[7]羅軍舟.TCP/IP協議及網絡編程技術[M].北京:清華大學出版社,2004:86.
[8]安東尼·瓊斯.Windows網絡編程技術[M].北京:機械工業出版社,2000:64.
[9]百度文庫.CMarkup類的使用方法[EB/OL].http://wenku.baidu.com/view/a9c27eed0975f46527d3e15d.html,2011.
[10]陳堅,陳偉.Visual C++網絡高級編程[M].北京:人民郵電出版社,2001:149.
[11]杜海娟.網絡入侵檢測系統中動態克隆選擇算法的優化[J].計算機與數字工程,2010(7).
[12]沈艷,方湘艷,韓威,等.基于四層過濾的網絡入侵檢測系統模型[J].計算機與數字工程,2011(6).
[13]孫大朋.改進的模糊聚類算法在入侵檢測中的研究[J].計算機與數字工程,2010(3).
[14]哈特.Windows系統編程[M].北京:機械工業出版社,2006:117.