摘要:入侵檢測技術是一種主動保護網絡資源免受黑客攻擊的安全技術。可以彌補防火墻的不足,幫助網絡快速發現網絡攻擊的發生,起著主動防御的作用,為網絡安全提供實時的入侵檢測及采取相應的防護手段。本文對提高Snort性能的核心技術進行分析,提出一種能夠有效提高匹配效率的AC—WM的模式匹配算法,并對改進后的Snort系統進行測試,顯著提高了系統的性能。
關鍵詞:入侵檢測;Snort;模式匹配
中圖分類號:TP393.1 文獻標識碼:A
Research on Instrution Detection System Based on Snort and its Improvement
REN Ying1,LI Huawei1,2,WANG Lina1
(1.Naval Aeronautical and Astronautical University,Yantai264000,China;
2.Shan dong Businss Institute , Shandong Yantai264001,China)
Abstract:Intrusion detection technology is an active safety technology to protect network resources from hacker attacks.and can make up for the lack of a firewall to help the network to quickly find the occurrence of cyber attacks,and plasys an active defense role,to provide realtime instrusion detection for network security and take appropriate protective measures.This paper to improve the performance of Snort core technology undertook an analysis, put forward a kind of can effective improve the matching efficiency of ACWM pattern matching algorithm, and the improved Snort system was tested, significantly improve the performance of system .
Key words:instrusion detection;Snort;pattern matching
1引言
隨著互聯網技術和信息技術的飛速發展,網絡安全風險系數不斷提高。有些攻擊方式可以繞過防火墻,直接入侵到內部網絡,使得網絡安全收到威脅[1]。入侵檢測技術(IDS—Intrusion Detection System)可以彌補防火墻的不足,能夠幫助網絡快速發現網絡攻擊的發生,采用探測與控制相結合的技術,起著主動防御的作用,為網絡安全提供實時的入侵檢測及采取相應的防護手段[2]。
2Snort入侵檢測系統
2.1Snort的體系結構
Snort在邏輯上分成多個部件,這些部件共同工作,產生符合特定要求的輸出格式。它是由以下幾個主要的模塊組成:包捕獲器、包解碼器、檢測引擎、預處理插件、輸出插件(日志與報警子系統)等[3]。Snort系統的數據包處理流程如圖1所示。
圖1snort的數據處理流程
2.1.1包捕獲器
為了將數據包輸送給預處理程序以及隨后的檢測引擎,必須先做一些準備工作,snort需要一個外部的捕包程序庫:libpcap。snort利用libpcap獨立地從物理鏈路上進行捕包,它可以借助libpcap的平臺可一致性被安裝到幾乎所有地方。
計算技術與自動化2012年9月
第31卷第3期任穎等:基于Snort的入侵檢測系統的研究與改進
2.1.2包解碼器
數據包解碼器主要是對各種協議棧上的數據包進行解析、預處理,以便提交給檢測引擎進行規則匹配。由于包解碼器是基于libpcap截獲的鏈路層數據,snort通過調用不同的功能函數來處理鏈路層數據并對鏈路層協議進行解碼。解碼后的數據會根據需要進入到下一層的協議分析,直到滿足檢測引擎處理的要求為止。
2.1.3預處理器
預處理器是Snort在檢測引擎做出某些操作來發現數據包是否用來入侵或者修改數據包的組件或者插件。它的作用就是針對當前截獲的數據包進行預處理,可以根據實際環境的需要啟動或停止預處理器插件。
2.1.4檢測引擎
檢測引擎是Snort的核心模塊。它的作用是探測數據包中是否包含著入侵行為。檢測引擎通過Snort規則來達到目的,規則被讀入到內部的數據結構或者鏈表中。并與所以的數據包對比。如果一個數據包與某一規則匹配,就會有相應的動作(記錄日志或報警等)產生,否則數據包就會被丟棄。
2.1.5報警日志模塊
檢測引擎檢查后的Snort數據需要以某種方式輸出。如檢測引擎中的某條規則被匹配,則會出發一條報警,這條報警信息會通過網絡、UNIX socket,WindowsPopop或SNMP協議的trap命令送給日志文件[5]。
2.2Snort系統工作流程
Sonrt工作流程如圖2所示。程序啟動后,完成初始化工作,對命令行進行解析,讀入系統的規則庫,生成用于檢測的二維鏈表,然后就進入循環的檢測過程。
程序通過Libpcap接口從網絡中抓取一個數據包,調用數據解析函數,根據數據包的類型和所處的網絡層次,對數據包進行協議解析,包括數據鏈路層、網絡層和傳輸層,解析后的結果存放在一個Packet結構中,用于以后的分析。
數據包解析過程完成以后,如果命令行中指定了根據規則庫對數據包進行分析(—c),就會啟動檢測引擎,將存放在Packet結構中的數據包的數據和根據規則庫所生成的二維鏈表進行逐一的比較。如果找到匹配的規則條目,則根據其規定的響應方式進行響應,然后結束數據包的處理過程,再抓取下一個數據包;如果沒有匹配的規則條目,則直接返回,抓取下一個數據包進行處理。
圖2Snort工作流程
3Snort系統的改進
3.1Snort性能分析
在snort系統中,相對耗時的操作主要有4個:從網絡傳輸介質上捕獲數據包,分析數據結構,規則匹配以及對每一個數據包進行校驗[6]。提高Snort的性能可以從好幾個方面來入手。本文主要從字符串匹配方面來研究如何提高系統性能。
3.2模式匹配算法的改進
文本提出了一種新的多模式匹配算法(AC—WM),其基本原理是:應用WM算法的啟發式搜索策略產生字符跳躍,并對跳躍的位移表進行改進,以增加盡可能多的位移;同時應用AC算法的有限狀態自動機構造模式數,匹配過程中使用模式樹,減少字符比較次數。AC—WM算法分為兩個部分,即預處理階段和匹配階段。
3.2.1算法預處理
預處理階段構造兩個位移表(shift表和shift2表)和一個樹型有限狀態自動機。Shift表的構造方法如下:設X是長度為N的塊字符,X被映射到shift[h],則shift[h]是X在所有模式串中出現的最后面位置。有以下兩種情況:
1) 如果X不在任何模式串中出現,則shift[h]=s—N+1。
2) 如果X出現在有些模式串中,設X在模式串P的位置q結束,并且X在任何其他
模式串中都不會在比q更后面的位置結束,則shift[h]=s—q。
Shift2表的構造方法如下:設X是長度為N的塊字符,X被映射到shift2[h],則shift2[h]是X在所有模式串中出現的次后面位置。有以下兩種情況:
1) 如果X不在任何模式串中出現或在所有模式串中共出現一次,則shift2[h]=s—N+1。
2) 如果X出現在模式串中的總次數≥2,設X在模式串P的位置q結束,并且X在其他模式串中有且只有一次在比比q更后面的位置結束,則shift2[h]=s—q。
ACWM算法中goto函數和output函數按照如下方法生成:初始狀態為0;然后依次取出模式集中的每一個模式串,執行如下操作:從模式串的最后一個字符開始從后向前,逐個取出模式串的每個字符,從狀態0出發,由當前狀態和新取出的字符決定下一個狀態。如果下一個狀態不為空,則將下一狀態賦為當前狀態;否則,添加一個標號比已有狀態標號大1的新狀態,并用一條矢線從當前狀態指向新加入的狀態,并將新加入的狀態賦為當前狀態。每處理完一個模式串,將該模式串加入到當前狀態的output函數中。
3.2.2算法的匹配過程
ACWM算法的匹配過程如下:
1)計算文本串text的當前N個字符的hash值h(從text的第s—N+1個字符處開始)。
2)檢查shift[h]的值。如果shift[h]>0,則將text向后移動shift[h]個字符,然后轉到1)執行;否則,轉到3)執行。
3)利用有限狀態自動機進行字符串比較。從text的當前字符開始,從后向前逐個取出text的每個字符,從狀態0出發,根據goto函數進入下一狀態;當某個狀態的output函數不為空時輸出其值,表示在文本串中找到該模式串;否則text向后移動1個字符,轉到2)執行。
4)如果達到text末尾,循環結束;否則,將text向后移動shift2[h]個字符,轉到1)執行。
3.3改進后Snort系統的測試與性能評價
在snort的官方網站下載源碼包。在VC中打開工程文件snort.dsw,打開snort.c,找到系統入口函數main,進行編譯。Snort源程序中,函數InterfaceThread完成了數據包數量的整個流程,通過對此函數的編寫修改,完成多線程的處理數據包的實現。mstring.c(.h)是實現字符串匹配算法的程序。在VC中選擇debug版本,采用MYSQL數據庫進行編譯,生成/win32/WIN32_Prj/snort_Win32_Mysql_Debug/snort.exe。
本文使用某實驗室提供的入侵檢測訓練數據集,選取一天的流量數據作為測試數據集。測試環境:CPU2.8GHz,內容1GB,影片40GB,Windows XP Professional。表1比較了三種算法的平均匹配時間隨著模式數目增加的變化情況。其中,AW表示AC—WM算法;AC表示Aho Corasick算法;WM表示Wu—Manber算法。
表1模式匹配算法對比測試
模式數目(個)
AW/μs
AC/μs
WM/μs
10
1.120
1.24
1.15
20
1.23
1.29
1.47
50
1.319
1.585
1.68
100
1.54
1.85
2.04
200
1.78
2.62
2.17
500
2.27
4.1
2.7
1000
2.76
5.764
3.268
表1顯示,AC—WM算法的匹配效率明顯高于于AC算法,同樣優于WM算法。主要原因是ACWM算法在匹配時盡可能多地進行字符跳躍,減少了字符比較的次數,從而提高了系統的性能。
4小結
本文對提高Snort性能的核心技術進行了分析,主要從模式匹配算法著手,提出了一種能夠有效提高匹配效率的AC—WM的模式匹配算法,并對改進后的Snort系統進行了測試。從實驗結果和數據分析可以看出,在入侵檢測系統中應用AC—WM算法,能夠顯著提高模式匹配的效率,從而提高了系統的性能。
參考文獻
[1]Ptacek TH,Nwesham T.Insertion,Evasion and Denial of Service:Eluding Network Intrusion Detection,Secure Networks Inc.,1998:47—52.
[2]馬力,焦李成,盧濤,等.一種基于代理的分布式入侵檢測系統結構設計,通信和計算機,2005,2(6):55—58.
[3]韓東海,王超,李群.入侵檢測系統實例剖析[M].北京:清華大學出版社,2002.
[4]Crosbie MS.Pafford G.Applying Genetic Programming to Intrusion Detection[J].Computer Science,1997,15(3):112—118.
[5]R.A.Kemmereer,G.Vigna.Intrusion Detection:A Brief History and Overview[J].Computer,2002,4(35):27—30.
[6]劉芳,王玲.基于矩陣行搜索求解排課表問題的算法[J].四川師范大學學報:自然科學版,2007(4):530—532.