两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

用于網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)的快速匹配方法

文檔序號(hào):7678042閱讀:181來源:國知局

專利名稱::用于網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)的快速匹配方法
技術(shù)領(lǐng)域
:本發(fā)明涉及一種網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng),更具體而言,涉及一種用于網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)的快速匹配算法。
背景技術(shù)
:在1998年,MartinRoesch先生用C語言開發(fā)了開放源代碼的入侵檢測(cè)系統(tǒng)Snort(“SNORTNetworkIntrusionDetectionSystem,,,http://www.snort,org)。直至今天,Snort已發(fā)展成為一個(gè)多平臺(tái)、實(shí)時(shí)流量分析、網(wǎng)絡(luò)IP數(shù)據(jù)包記錄等特性的強(qiáng)大的網(wǎng)絡(luò)入侵檢測(cè)/防御系統(tǒng)(NetworklntrusionDetection/PreventionSystem),即NIDS/NIPS。Snort符合通用公共許可(GPL-GUNGeneralPubicLicense),在網(wǎng)上可以通過免費(fèi)下載獲得Snort,并且只需要幾分鐘就可以安裝并開始使用它.snort基于libpcap。網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)(NIDS)對(duì)于網(wǎng)絡(luò)管理員保護(hù)網(wǎng)絡(luò)而言是一種重要的安全性工具,它通過檢查監(jiān)測(cè)實(shí)時(shí)數(shù)據(jù)包和檢測(cè)諸如未經(jīng)授權(quán)的訪問、端口掃描和拒絕服務(wù)(DoS)攻擊拒絕之類的惡意攻擊,能讓網(wǎng)絡(luò)管理員監(jiān)控好網(wǎng)絡(luò)。NIDS使用規(guī)則(或簽名)數(shù)據(jù)庫對(duì)數(shù)據(jù)包進(jìn)行分類,以確定數(shù)據(jù)包是否是惡意的。一種有效地搜索匹配規(guī)則的常見方法是,即為給定的規(guī)則集建立諸如規(guī)則樹或有限自動(dòng)機(jī)之類的圖表,并使用數(shù)據(jù)包作為輸入字符串來對(duì)其進(jìn)行遍歷。由于流量和網(wǎng)絡(luò)威脅的日益增長,入侵檢測(cè)變得更加耗費(fèi)資源,再加以現(xiàn)今的高速網(wǎng)絡(luò)和大型規(guī)則集,一個(gè)網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)會(huì)占用CPU大量時(shí)間和內(nèi)存。因此,高吞吐量的模式匹配引擎以及對(duì)內(nèi)存訪問頻率的降低是整體入侵檢測(cè)性能的關(guān)鍵。除數(shù)據(jù)包頭預(yù)處理外,在當(dāng)前的網(wǎng)絡(luò)的許多重要的服務(wù)都是基于有效載荷檢查的。NIDS、流量監(jiān)控和第7層過濾要求對(duì)數(shù)據(jù)包內(nèi)容的精確分析,以與包含應(yīng)用程序,病毒,協(xié)議定義等具體的一個(gè)預(yù)定義的數(shù)據(jù)包匹配。傳統(tǒng)上,這些數(shù)據(jù)集由一系列數(shù)字簽名構(gòu)成,這些數(shù)字簽名可以通過字符串匹配進(jìn)行查找,安全簽名已被指定為基于字符串的精確匹配,但確切的字符串匹配不足以發(fā)現(xiàn)惡意模式,所以現(xiàn)在更有表現(xiàn)力的正則表達(dá)式(regulationexpressoin)被用來形容各種有效載荷的數(shù)字簽名。例如,在Linux應(yīng)用協(xié)議分類器中,所有的協(xié)議標(biāo)識(shí)符都被表示為正則表達(dá)式。相似地,開放源碼的網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)Snort("SNORTNetworklntrusionDetectionSystem",http://www.snort,org)已經(jīng)從2003年4月沒有正則表達(dá)式規(guī)則集的狀態(tài),發(fā)展到2010年11月8786種規(guī)則中的5549種含有至少有一個(gè)Perl兼容正則表達(dá)式(PCRE)。另一個(gè)開源入侵檢測(cè)系統(tǒng)Bro也將正則表達(dá)用為其模式語言。這些都被不同的廠商應(yīng)用于防火墻和設(shè)備中,例如思科公司。數(shù)據(jù)包內(nèi)容掃描對(duì)于網(wǎng)絡(luò)安全和網(wǎng)絡(luò)監(jiān)控是至關(guān)重要的?,F(xiàn)代網(wǎng)絡(luò)設(shè)備需要高速地執(zhí)行深度數(shù)據(jù)包檢測(cè)以實(shí)現(xiàn)安全性和特殊用途的服務(wù)。Boyer-Moore串查找算法——這是一種特別有效的字符串搜索算法,并已用于實(shí)際的字符串搜索文獻(xiàn)的基準(zhǔn)——被廣泛使用于深度的數(shù)據(jù)包檢測(cè),但它存在兩個(gè)重要的不足第一,由于需要對(duì)每一個(gè)目標(biāo)字符串(密鑰)進(jìn)行預(yù)處理并且不能同時(shí)搜索多個(gè)密鑰,它的速度實(shí)在不夠快;第二,它僅執(zhí)行精確的字符串匹配。近來,有限自動(dòng)機(jī)(FA)是最流行的用于實(shí)現(xiàn)正則表達(dá)式匹配的方法,但它們需要復(fù)雜的預(yù)處理來構(gòu)成FA,并且需要大量的內(nèi)存。非確定性有限自動(dòng)機(jī)(NFA)對(duì)于每個(gè)字符需要更多的狀態(tài)轉(zhuǎn)換,因此查找的時(shí)間復(fù)雜度為0(m),其中m表示NFA中的狀態(tài)數(shù)量。另一方面,NFA也是空間方面極其有效的結(jié)構(gòu)。然而,確定性有限自動(dòng)機(jī)(DFA)對(duì)每個(gè)字符只需要一個(gè)狀態(tài)遍歷,但是對(duì)于目前的正則表達(dá)式集合它們需要一個(gè)極大的內(nèi)存量。當(dāng)檢查一個(gè)特定數(shù)據(jù)包的有效載荷時(shí),僅需要考慮規(guī)則集合的一個(gè)很小的子集,因此DFA會(huì)浪費(fèi)絕大部分的內(nèi)存?;谝陨显颍@些解決方法對(duì)于實(shí)際的深度包檢測(cè)中并不適用,因?yàn)樗鼈冊(cè)诰€處理數(shù)據(jù)包時(shí)要求很高的速度。為了加快模式匹配的速度,提出了一些硬件解決方案已經(jīng)被提出(例如,C.H.Lin,C.T.Huang,C.P.Jiang禾口S.C.Chang,“OptimizationofPatternMatchingCircuitsforRegularExpressiononFPGAIEEETransactionsonVeryLargeScaleIntegrationSystems,Vol.15,Iss.12,pp.1303—1310,2007年10月;W.Zhang,Y.Xue,D.S.Wang,Τ.Song,"Amultiplesimpleregularexpressionmatchingarchitectureandcoprocessorfordeeppacketinspection,,,Asia-PacificConferenceonComputerSystemsArchitecture,pp.1-8,2008年;P.Marco,B.Ivano,S.MarcoD.,"ReCPUAparallelandpipelinedarchitectureforregularexpressionmatching,,,IFIPInternationalConferenceonVeryLargeScaleIntegration,pp.19-24.2007年10月;I.Bonesana,Μ.Paolieri,Μ.D.Santambrogio,"AnadaptableFPGA-basedSystemforRegularExpressionMatching",Design,AutomationandTestinEurope,DATE'08,pp.1262-1267,2008^3^;N.Yamagaki,R.Sidhu,S.Kamiya,"High-speedregularexpressionmatchingengineusingmulti-characterNFAInternationalConferenceonFieldProgrammableLogicandApplications,pp.131-136,2008年9月),它們大多是基于有限自動(dòng)機(jī)(FA)的。因此,當(dāng)前始終存在對(duì)于能夠通過減少CPU時(shí)鐘周期占用時(shí)間和內(nèi)容訪問次數(shù)來提高入侵檢測(cè)速度的網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)的需求。
發(fā)明內(nèi)容根據(jù)現(xiàn)在的知識(shí)水平而言,本文提出一個(gè)創(chuàng)新的、不同的模式匹配方法我們把數(shù)據(jù)包的有效載荷劃分成多個(gè)固定長度的塊,逐個(gè)地對(duì)每一塊執(zhí)行模式匹配。對(duì)于每一個(gè)塊僅需要較少數(shù)量的比較,這是基于這樣一個(gè)事實(shí)網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)中正常的數(shù)據(jù)流幾乎不與任何病毒簽名相匹配,而且我們需要比較的大部分密鑰都很短。對(duì)多個(gè)密鑰的并行檢查加快了處理速度,減少指令間數(shù)據(jù)相關(guān)性。對(duì)于非固定長度的正則表達(dá)式密鑰,我們的算法被用作一個(gè)哈希表來盡可能避免對(duì)大部分?jǐn)?shù)據(jù)包的進(jìn)一步檢查。我們的算法只需要少量的內(nèi)存來存儲(chǔ)經(jīng)常使用的數(shù)據(jù),這些數(shù)據(jù)存儲(chǔ)在高速緩存(Cache)中,因此CPU絕大部分時(shí)間并不需要訪問主內(nèi)存。內(nèi)存訪問延遲的時(shí)間通常是數(shù)百倍于CPU時(shí)鐘周期,由于需要很少的內(nèi)存訪問,我們的算法加快了模式匹配的速度。根據(jù)一個(gè)實(shí)施例,一種基于Snort入侵檢測(cè)系統(tǒng)的快速字符串匹配方法,其中,把數(shù)據(jù)包的有效負(fù)荷劃分成多個(gè)相同大小的塊,每一塊的長度是L字節(jié),而且需要3個(gè)長度為L-比特的窗來記錄暫時(shí)的結(jié)果。用來記錄正在被檢查的塊的結(jié)果的窗被稱為CW,用來記錄前一個(gè)塊所產(chǎn)生的結(jié)果的窗稱為PW,用來記錄由當(dāng)前塊產(chǎn)生并用于下一個(gè)塊匹配的結(jié)果的窗被稱作NW,該方法包括以下步驟(1)對(duì)于第一個(gè)塊,將這三個(gè)窗中的比特全部設(shè)定成0,并且將一個(gè)計(jì)數(shù)器“CNT”初始化為L;(2)如果CNT是L,將當(dāng)前塊與密鑰的第一個(gè)字符的L個(gè)副本進(jìn)行NXOR(異或非)運(yùn)算,并將該L-比特的結(jié)果存儲(chǔ)至CW中;如果不是,將當(dāng)前塊與密鑰的下一個(gè)字符的L個(gè)副本進(jìn)行NXOR運(yùn)算,隨后與CW進(jìn)行AND運(yùn)算,并將結(jié)果存儲(chǔ)至Cff;(3)如果這是密鑰中的最后一個(gè)字符,且新的CW不是0,則就找到了匹配;如果不是,則進(jìn)入第四步;(4)如果PW和CW都是0,則將{CW,NW}向右移CNT個(gè)比特,然后將NW復(fù)制至PW,設(shè)置CNT為L并移動(dòng)至下一個(gè)塊并進(jìn)行至步驟2以進(jìn)行進(jìn)一步的檢查;(5)如果PW全部是0,且CW除了最低有效比特之外也全是0,則將{CW,NW}向右移CNT個(gè)比特,然后將NW復(fù)制至PW,將CNT設(shè)置成L并移動(dòng)至下一個(gè)塊并進(jìn)行至步驟2以進(jìn)行進(jìn)一步的檢查;(6)如果PW不是0,或者CW不是0或1,則將{PW,Cff,NW}向右移1個(gè)比特,并將CNT數(shù)減1;(7)回到步驟2。圖1是在Snort中使用的一種簡單的樹結(jié)構(gòu);圖2是根據(jù)本發(fā)明的實(shí)施例的快速字符串匹配的結(jié)構(gòu);以及圖3是根據(jù)本發(fā)明的實(shí)施例的快速字符串匹配方法的實(shí)例的示意圖。具體實(shí)施例方式NIDS和SnortSnort("SNORTNetworkIntrusionDetectionSystem",http://www.snort,org)使用一種簡單的語言來定義規(guī)則,用以描述網(wǎng)絡(luò)行為。每種規(guī)則由五個(gè)必要字段和大量的可選字段構(gòu)成。必要字段包括協(xié)議類型(例如TCP,UDP)、源/目的IP地址和端口號(hào),所有這些都是一個(gè)數(shù)據(jù)包報(bào)頭的一部分。Snort把括號(hào)中的關(guān)鍵字解釋為“可選字段”。常用可選字段是^content”(搜索數(shù)據(jù)包的有效載荷以查找指定模式),“msg”(設(shè)置當(dāng)數(shù)據(jù)包產(chǎn)生一個(gè)事件時(shí)要發(fā)送的消息),等等。用來檢查一個(gè)數(shù)據(jù)包是否與任一規(guī)則相匹配的一種直接的方法是以蠻力方式查找規(guī)則庫針對(duì)該數(shù)據(jù)包逐個(gè)地測(cè)試每一個(gè)規(guī)則。這種方法很容易操作,但是比較耗費(fèi)時(shí)間。為了減少要檢查的規(guī)則數(shù)量,Snort建立了一個(gè)名為“規(guī)則樹”的樹結(jié)構(gòu)來儲(chǔ)存并組織所有的規(guī)則,見圖1。對(duì)于每一個(gè)規(guī)則,必要字段存儲(chǔ)在規(guī)則樹節(jié)點(diǎn)(RTN),可選字段存儲(chǔ)在可選樹節(jié)點(diǎn)(OTN)。OTN與相應(yīng)的RTN相關(guān)聯(lián)。如果多個(gè)規(guī)則具有相同的必要字段,則僅創(chuàng)建單個(gè)RTN,多個(gè)OTN會(huì)共享該單個(gè)RTN。Snort的檢測(cè)引擎構(gòu)建了用于源端口字段和目的端口字段的索引,以便快速訪問TCP和UDP的規(guī)則。然后使用每個(gè)輸入數(shù)據(jù)包的源端口號(hào)和目標(biāo)端口號(hào)來搜索其索引,以便識(shí)別匹配規(guī)則。如果在索引結(jié)構(gòu)中找到了匹配規(guī)則,則Snort在所匹配的規(guī)則與輸入數(shù)據(jù)包的有效負(fù)荷之間執(zhí)行字符串模式匹配。如果字符串模式匹配成功,則檢查在規(guī)則樹中存儲(chǔ)的所有剩余的必要字段(協(xié)議類型,例如TCP,UDP,源/目的IP地址)和可選條件。然而,針對(duì)有效載荷的字符串模式匹配會(huì)花費(fèi)更多的時(shí)間和資源。因此,為了減少針對(duì)有效載荷的字符串模式匹配的數(shù)量,本發(fā)明將檢查所有協(xié)議字段,而不僅僅是端口號(hào),這樣的話Snort就可以拒絕更多的數(shù)據(jù)包不進(jìn)入字符串模式匹配階段。由于當(dāng)前索引是基于對(duì)數(shù)據(jù)包報(bào)頭中所有必要字段進(jìn)行檢查的,檢測(cè)引擎僅對(duì)全部數(shù)據(jù)包中很少數(shù)據(jù)的數(shù)據(jù)包執(zhí)行字符串模式匹配,這對(duì)于以線性速度來檢測(cè)數(shù)據(jù)包的NIDS而言是至關(guān)重要的。正則表達(dá)式匹配的相關(guān)工作本發(fā)明的快速正則表達(dá)式匹配算法,專注于對(duì)數(shù)據(jù)包的有效負(fù)荷執(zhí)行模式匹配。當(dāng)一種規(guī)則與數(shù)據(jù)包報(bào)頭中的全部必要字段皆匹配時(shí),本發(fā)明的模式匹配引擎針對(duì)有效負(fù)荷執(zhí)行字符串模式匹配,并將密鑰存儲(chǔ)在相應(yīng)的OTN集合中。傳統(tǒng)的基于NIDS的DFA有三個(gè)主要的限制首先,有一個(gè)事實(shí)他們沒有充分利用,那就是正常的數(shù)據(jù)流幾乎與任何病毒簽名皆不匹配;第二,DFA對(duì)于很多部分匹配簽名而言是極其不充分的;第三,當(dāng)規(guī)則集更新時(shí),DFA需要長時(shí)間去重建。本發(fā)明提出的機(jī)制能夠解決這些弊端,可以更有效率地執(zhí)行NIDS。當(dāng)需要對(duì)有效負(fù)荷的字符串模式匹配時(shí),僅需要檢查少量的密碼。最典型的是在微處理器上,通過以下來執(zhí)行密碼匹配首先要把給定的密鑰轉(zhuǎn)換成相應(yīng)的NFA或者DFA,NFA或DFA然后會(huì)被用來搜索輸入文本字符。當(dāng)一個(gè)DFA可以在一個(gè)恒定時(shí)間內(nèi)對(duì)每一個(gè)字符進(jìn)行處理時(shí)(即,其需要的時(shí)間為0(1)),對(duì)于一個(gè)η字符密鑰來說,DFA狀態(tài)的數(shù)量可以達(dá)到0(2η),這在某些情況下會(huì)顯著地降低計(jì)算機(jī)的性能。一些新方法用所有的密鑰來建構(gòu)大的DFA,以便并行地檢查全部密鑰;這些新方法能夠每次檢查一個(gè)字符,但卻幾乎每次都需要訪問內(nèi)容,這將會(huì)增加搜索的等待時(shí)間。不幸的是,絕大多數(shù)數(shù)據(jù)包幾乎不與任何密鑰匹配,因此我們希望能夠盡快地排除那些不匹配的數(shù)據(jù)包,并且能夠并行地檢查一個(gè)數(shù)據(jù)包的有效負(fù)荷,而不是每次檢查一個(gè)字符??焖僬齽t表達(dá)式匹配方法以下參考圖2-3給出根據(jù)本發(fā)明的實(shí)施例的快速正則表達(dá)式匹配方法。首先,考慮精確的字符串匹配。我們把數(shù)據(jù)包的有效負(fù)荷劃分成相同大小的塊,假定每一塊的長度是L字節(jié),而且需要3個(gè)長度為L-比特的窗來記錄暫時(shí)的結(jié)果。用來記錄正在被檢查的塊的結(jié)果的窗被稱為CW(Currentwindows),用來記錄前一個(gè)塊所產(chǎn)生的結(jié)果的窗被稱為PW(Previ0uSwindows),用來記錄由當(dāng)前塊產(chǎn)生并用于下一個(gè)塊匹配的結(jié)果的窗被稱作NW(Nextwindows)。在圖2中示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的字符串匹配引擎的結(jié)構(gòu)。根據(jù)一個(gè)實(shí)施例,圖2所示的引擎通過逐步地執(zhí)行以下步驟來對(duì)各個(gè)塊進(jìn)行檢查(1)對(duì)于第一個(gè)塊,將這三個(gè)窗中的比特全部設(shè)定成0,并且將一個(gè)計(jì)數(shù)器“CNT”初始化為L。(2)如果CNT是L,將當(dāng)前塊與密鑰的第一個(gè)字符的L個(gè)副本進(jìn)行NX0R(異或非)運(yùn)算,并將該L-比特的結(jié)果存儲(chǔ)至CW中;如果不是,將當(dāng)前塊與密鑰的下一個(gè)字符的L個(gè)副本進(jìn)行NXOR運(yùn)算,隨后與CW進(jìn)行AND運(yùn)算,并將結(jié)果存儲(chǔ)至CW。(3)如果這是密鑰中的最后一個(gè)字符,且新的CW不是0,則就找到了匹配;如果不是,則進(jìn)入第四步。(4)如果PW和CW都是0,則將組合{CW,NW}向右移CNT個(gè)比特,然后將NW復(fù)制至PW,設(shè)置CNT為L并移動(dòng)至下一個(gè)塊并進(jìn)行至步驟2以進(jìn)行進(jìn)一步的檢查。(5)如果PW全部是0,且CW除了最低有效比特之外也全是0,則將組合{CW,NW}向右移CNT個(gè)比特,然后將NW復(fù)制至PW,將CNT設(shè)置成L并移動(dòng)至下一個(gè)塊并進(jìn)行至步驟2以進(jìn)行進(jìn)一步的檢查。(6)如果PW不是0,或者CW不是0或1,則將組合{PW,Cff,NW}向右移1個(gè)比特,并將CNT數(shù)減1。(7)回到步驟2。在圖3中給出了使用以上各個(gè)步驟的一個(gè)具體實(shí)例。在實(shí)例中,1^=8,密鑰=“key”,塊1和塊2包含字符串“Tmnorrkeyinokruk”。從(b)至(c),移動(dòng)至一個(gè)新的塊,并且{CW.NW}向右移7個(gè)比特(CNT=7)。在圖3中省略了一些窗。如果窗的內(nèi)容是“00000000”,則在(e)中找到了匹配。上述各步驟僅是本發(fā)明的方法一個(gè)子集,因?yàn)槲覀儾豢紤]正則表達(dá)式中的通配符,而且我們假定密鑰的長度小于或等于塊的長度。這兩個(gè)問題將會(huì)在以下內(nèi)容中得到進(jìn)一步論述。從理論和實(shí)踐的基礎(chǔ)上,我們可以得出下列結(jié)論a.如果一個(gè)塊不包含密鑰的第一個(gè)字符,則對(duì)于這個(gè)塊僅需要執(zhí)行一次檢查,并且實(shí)驗(yàn)結(jié)果表明,當(dāng)L=8的時(shí)候,大約83%的塊只需要執(zhí)行1到3次檢查。b.塊的長度越長,就會(huì)得到越好的性能,因?yàn)橐粋€(gè)塊的比較次數(shù)只取決于在這個(gè)塊和前一個(gè)塊中的最長的匹配。因此,在一個(gè)較大的組合塊中的比較次數(shù)大致等同于在那些較小塊的最長次數(shù)中的比較次數(shù)。c.該方法不需要預(yù)處理,并且由于不需要保存或恢復(fù)太多的數(shù)據(jù)而很少訪問內(nèi)存。d.我們可以同時(shí)檢查多個(gè)密鑰。逐個(gè)地用密鑰匹配一個(gè)塊,并且只需要保存每個(gè)密鑰的臨時(shí)結(jié)果,這些臨時(shí)結(jié)果可以存儲(chǔ)在寄存器或高速緩存中以避免耗時(shí)的內(nèi)存訪問。這也可以減少在單個(gè)密鑰的指令執(zhí)行過程中的數(shù)據(jù)相關(guān)性。我們需要考慮最壞的情況,盡管它看起來不可能發(fā)生。在最壞的情況下,每一塊都需要和一個(gè)密鑰進(jìn)行L次比較,但是只有一個(gè)特定的密鑰能和這種最壞的情況相匹配。即使是需要更多次比較,本發(fā)明的方法仍然可以達(dá)到很高的數(shù)據(jù)包吞吐量,因?yàn)榕c內(nèi)存訪問相比(其往往需要幾十個(gè)CPU時(shí)鐘周期),這些簡單的指令有著更短的等待時(shí)間(最多十幾個(gè)CPU時(shí)鐘周期)。我們?cè)谥髮?duì)這種最壞的情況進(jìn)行探討。特殊情況以上方法是基于一定的假設(shè)的,但是在實(shí)踐中需要考慮到所有情況,因此我們來討論這些特殊情況。1.長密鑰問題如果一個(gè)密鑰的長度大于塊的長度,則可以使用雙窗(或多窗),用類似的方法進(jìn)行處理和運(yùn)算。對(duì)于本領(lǐng)域技術(shù)人員而言,很容易將上述單個(gè)CW的實(shí)施例擴(kuò)展至雙窗或多窗的設(shè)計(jì)。實(shí)際上,我們將一長密鑰分割成長度為L字節(jié)的幾段,并分別將它們和一個(gè)塊進(jìn)行比較,然后將所得到的多個(gè)結(jié)果傳遞至下一個(gè)塊的比較。2.不精確字符在近來的規(guī)則集中,一些字符是不“精確”的,但是這些字符的長度是精確的,例如“!a”和“a|b”,其分別表示“不是字符a”和“字符a或者字符b”。對(duì)于這些字符,我們僅需要修改在比較中使用的運(yùn)算。例如,我們可以使用M)R(異或)運(yùn)算代替NXOR運(yùn)算來表示“!a”,使用(NXORa)|(NXORb)來表示“ab”。3.變長密鑰一些正則表達(dá)式中具有可變的長度,例如克林星(KleeneMar)(*),其是一個(gè)通配符,常常用來表示匹配正則表達(dá)式中的零或更多次出現(xiàn)。因此,當(dāng)密鑰中有隨機(jī)數(shù)量的字符時(shí),我們有兩種方法來處理。第一種方法,我們可以尋找密鑰的固定長度的前綴作為一個(gè)哈希值,用這個(gè)哈希值作為一個(gè)新的密鑰,一些數(shù)據(jù)包就會(huì)被排除。這是因?yàn)槿绻粋€(gè)數(shù)據(jù)包的有效負(fù)荷與密鑰的一部分不匹配,則一定與整個(gè)密鑰不匹配。并且我們也可以證明在任何正則表達(dá)式中都可以找到至少一個(gè)字符長度的準(zhǔn)確前綴,因?yàn)樵诿總€(gè)正則表達(dá)式的第一個(gè)字符一定不能以克林星來標(biāo)記。例如,正則表達(dá)式“a*bc+d”等價(jià)于“bc+d”,因?yàn)椤癮*”是無意義的,而且我們只需檢查“be”(其是最大的準(zhǔn)確前綴)作為哈希值,來執(zhí)行對(duì)數(shù)據(jù)包的有效負(fù)荷的字符串匹配。當(dāng)找到第一個(gè)匹配后,就需要進(jìn)行更近一步的匹配檢查。不過,我們不需要檢查全部的正則表達(dá)式,只需檢查其剩余部分,這樣就減少了DFA的狀態(tài)。因此我們?yōu)檎齽t表達(dá)式中的剩余部分構(gòu)造簡單的DFA,并使用由該哈希值產(chǎn)生的結(jié)果進(jìn)行進(jìn)一步的檢查。僅需進(jìn)一步檢查在所匹配的哈希值之后的字符串,并在DFA中的狀態(tài)為有效時(shí)完成該可能的匹配檢查。因此當(dāng)數(shù)據(jù)包的有效負(fù)荷需要進(jìn)一步檢查時(shí),只有其一小部分進(jìn)入DFA。我們可以不建立幾個(gè)小的DFA,而是可以選擇建立一個(gè)較大的DFA引擎來合并所有這些變長密鑰。但實(shí)驗(yàn)結(jié)果表明,這種方法不如前者,這是因?yàn)?1)建立幾個(gè)小的DFA比建立一個(gè)大的組合DFA更快;(在檢查了前綴之后,僅需要進(jìn)一步檢查數(shù)據(jù)包有效負(fù)荷的一小部分,并且僅有數(shù)據(jù)包有效負(fù)荷的一小部分進(jìn)入DFA;(3)一些小的DFA可以被其他數(shù)據(jù)包重復(fù)使用,也易于被存入緩存中。第二種方法,使用計(jì)數(shù)器而不是DFA。這種方法避免了使用DFA但是需要對(duì)正則表達(dá)式進(jìn)行預(yù)處理。預(yù)處理器將正則表達(dá)式分割成幾個(gè)部分,用來區(qū)分長度確定的部分和長度可變的部分。例如,“abc+d”可以被分成三個(gè)部分“abc”,“c*”和“d”。在檢查“abc”和“d”時(shí)使用的方法與之前討論的相同,唯一的區(qū)別是如何檢查W在檢查了字符串“abc”后,我們的匹配引擎檢查“c*”的匹配,不同之處是NXOR操作的結(jié)果被存儲(chǔ)在一個(gè)臨時(shí)窗(Tff)中,而不是更新當(dāng)前窗(CW),且三個(gè)窗(PW,CW和NW)在本次匹配過程中保持不變。隨后,匹配引擎使用NXOR運(yùn)算來比較字符“d”,其結(jié)果記為T。CW中的第i個(gè)字節(jié)可利用下列等式更新Cff(i)=T(i)&(CW(i)I(TW(i+l)&CW(i+l))|(TW(i+2)&TW(i+l)&CW(i+2))|···(Tff(L-I)&...&TW(i+l)&CW(L-I)))(1)如果正則表達(dá)式對(duì)字符“C”的長度有要求,則我們需要使用計(jì)數(shù)器來記錄在"abc"和“d”之間的“C”的長度。例如對(duì)字符“C”匹配N次或更多次匹配。與Boyer-Moore字符串搜索法的比較Boyer-Moore字符串查找法是一種特別有效的字符串搜索算法,它是針對(duì)實(shí)際字符串搜索方法的一個(gè)標(biāo)準(zhǔn)基準(zhǔn)。通常,Snort使用Boyer-Moore字符串搜索法來完成模式匹配,但是這種算法需要對(duì)每一個(gè)密鑰進(jìn)行預(yù)處理并且每次僅檢查一個(gè)字符,即使可以跳過有效負(fù)荷中的一些字符。此外,此算法隨著所搜索的密鑰的長度的變長而變得更快,但是在Snort的規(guī)則中,大部分的密鑰都很短。與Boyer-Moore串查找法相比,我們的算法有以下優(yōu)勢(shì)1.該算法不需要對(duì)每一個(gè)密鑰預(yù)處理。2.數(shù)據(jù)包有效負(fù)荷移動(dòng)的長度是固定的(一個(gè)塊),但是在Boyer-Moore算法中,數(shù)據(jù)包有效負(fù)荷移動(dòng)的長度取決于之前的檢查結(jié)果。.3.以上兩個(gè)“靜態(tài)”特性使本發(fā)明的方法更容易應(yīng)用于硬件開發(fā),例如FPGA。4.數(shù)據(jù)包移動(dòng)長度固定而非取決于之前檢驗(yàn)結(jié)果的特點(diǎn),使得本發(fā)明的方法更容易并行地檢查多個(gè)密鑰。5.該算法使用并行方式檢查多個(gè)字符,而不是逐個(gè)檢驗(yàn)。6.該算法更易于擴(kuò)展。對(duì)于Boyer-Moore算法來說,尋找有效負(fù)荷中所有匹配的最壞情況需要大約3*N次比較,其中N為有效負(fù)荷中字符的數(shù)量。在本發(fā)明的方法中,最壞的情況需要大約N次比較。在最壞情況下,密鑰的長度與塊的長度相等。盡管前述公開文件論述了示例性方案和/或?qū)嵤├?,但?yīng)注意,在不背離由權(quán)利要求書定義的描述的方案和/或?qū)嵤├姆秶那闆r下,可以在此做出許多變化和修改。而且,盡管以單數(shù)形式描述或要求的所述方案和/或?qū)嵤├囊?,但也可以設(shè)想復(fù)數(shù)的情況,除非明確表示了限于單數(shù)。另外,任意方案和/或?qū)嵤├娜炕虿糠侄伎梢耘c任意其它方案和/或?qū)嵤├娜炕虿糠纸Y(jié)合使用,除非表明了有所不同。權(quán)利要求1.一種基于Snort網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)的快速字符串匹配方法,其中,把數(shù)據(jù)包的有效負(fù)荷劃分成多個(gè)相同大小的塊,每一塊的長度是L字節(jié),而且需要3個(gè)長度為L-比特的窗來記錄暫時(shí)的結(jié)果。用來記錄正在被檢查的塊的結(jié)果的窗被稱為CW,用來記錄前一個(gè)塊所產(chǎn)生的結(jié)果的窗稱為PW,用來記錄由當(dāng)前塊產(chǎn)生并用于下一個(gè)塊匹配的結(jié)果的窗被稱作NW,該方法包括以下步驟(1)對(duì)于第一個(gè)塊,將這三個(gè)窗中的比特全部設(shè)定成0,并且將一個(gè)計(jì)數(shù)器“CNT”初始化為L;(2)如果CNT是L,將當(dāng)前塊與密鑰的第一個(gè)字符的L個(gè)副本進(jìn)行NXOR(異或非)運(yùn)算,并將該L-比特的結(jié)果存儲(chǔ)至CW中;如果不是,將當(dāng)前塊與密鑰的下一個(gè)字符的L個(gè)副本進(jìn)行NXOR運(yùn)算,隨后與CW進(jìn)行AND運(yùn)算,并將結(jié)果存儲(chǔ)至CW;(3)如果這是密鑰中的最后一個(gè)字符,且新的CW不是0,則就找到了匹配;如果不是,則進(jìn)入第四步;(4)如果Pff和Cff都是0,則將{CW,NW}向右移CNT個(gè)比特,然后將Nff復(fù)制至Pff,設(shè)置CNT為L并移動(dòng)至下一個(gè)塊并進(jìn)行至步驟2以進(jìn)行進(jìn)一步的檢查;(5)如果PW全部是0,且CW除了最低有效比特之外也全是0,則將{CW,NW}向右移CNT個(gè)比特,然后將NW復(fù)制至PWJfCNT設(shè)置成L并移動(dòng)至下一個(gè)塊并進(jìn)行至步驟2以進(jìn)行進(jìn)一步的檢查;(6)如果PW不是0,或者CW不是0或1,則將{PW,CW,NW}向右移1個(gè)比特,并將CNT數(shù)減1;(7)回到步驟2。2.如權(quán)利要求1所述的方法,其中,使用雙窗(或多窗)來替代所述的CW、PW和NW。3.如權(quán)利要求1所述的方法,其中,對(duì)于包含不精確字符的密鑰,可以使用XOR(異或)運(yùn)算代替NXOR運(yùn)算。4.如權(quán)利要求1所述的方法,其中,對(duì)于變長密鑰,尋找密鑰的固定長度的前綴作為一個(gè)哈希值,用這個(gè)哈希值作為一個(gè)新的密鑰,對(duì)該密鑰的剩余部分進(jìn)行進(jìn)一步檢查。5.一種現(xiàn)場(chǎng)可編程門陣列,其包含用于實(shí)現(xiàn)基于Snort入侵檢測(cè)系統(tǒng)的快速字符串匹配的邏輯,其中,把數(shù)據(jù)包的有效負(fù)荷劃分成多個(gè)相同大小的塊,每一塊的長度是L字節(jié),而且需要3個(gè)長度為L-比特的窗來記錄暫時(shí)的結(jié)果。用來記錄正在被檢查的塊的結(jié)果的窗被稱為CW,用來記錄前一個(gè)塊所產(chǎn)生的結(jié)果的窗稱為PW,用來記錄由當(dāng)前塊產(chǎn)生并用于下一個(gè)塊匹配的結(jié)果的窗被稱作NW,所述邏輯用以實(shí)現(xiàn)以下步驟(1)對(duì)于第一個(gè)塊,將這三個(gè)窗中的比特全部設(shè)定成0,并且將一個(gè)計(jì)數(shù)器“CNT”初始化為L;(2)如果CNT是L,將當(dāng)前塊與密鑰的第一個(gè)字符的L個(gè)副本進(jìn)行NXOR(異或非)運(yùn)算,并將該L-比特的結(jié)果存儲(chǔ)至CW中;如果不是,將當(dāng)前塊與密鑰的下一個(gè)字符的L個(gè)副本進(jìn)行NXOR運(yùn)算,隨后與CW進(jìn)行AND運(yùn)算,并將結(jié)果存儲(chǔ)至CW;(3)如果這是密鑰中的最后一個(gè)字符,且新的CW不是0,則就找到了匹配;如果不是,則進(jìn)入第四步;(4)如果PW和CW都是0,則將{CW,NW}向右移CNT個(gè)比特,然后將NW復(fù)制至PW,設(shè)置CNT為L并移動(dòng)至下一個(gè)塊并進(jìn)行至步驟2以進(jìn)行進(jìn)一步的檢查;(5)如果PW全部是0,且CW除了最低有效比特之外也全是0,則將{CW,NW}向右移CNT個(gè)比特,然后將NW復(fù)制至PWJfCNT設(shè)置成L并移動(dòng)至下一個(gè)塊并進(jìn)行至步驟2以進(jìn)行進(jìn)一步的檢查;(6)如果PW不是0,或者CW不是0或1,則將{PW,Cff,NW}向右移1個(gè)比特,并將CNT數(shù)減1;(7)回到步驟2。6.一種網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng),其使用了一種快速字符串匹配方法,其中,把數(shù)據(jù)包的有效負(fù)荷劃分成多個(gè)相同大小的塊,每一塊的長度是L字節(jié),而且需要3個(gè)長度為L-比特的窗來記錄暫時(shí)的結(jié)果。用來記錄正在被檢查的塊的結(jié)果的窗被稱為CW,用來記錄前一個(gè)塊所產(chǎn)生的結(jié)果的窗稱為PW,用來記錄由當(dāng)前塊產(chǎn)生并用于下一個(gè)塊匹配的結(jié)果的窗被稱作NW,該方法包括以下步驟(1)對(duì)于第一個(gè)塊,將這三個(gè)窗中的比特全部設(shè)定成0,并且將一個(gè)計(jì)數(shù)器“CNT”初始化為L;(2)如果CNT是L,將當(dāng)前塊與密鑰的第一個(gè)字符的L個(gè)副本進(jìn)行NXOR(異或非)運(yùn)算,并將該L-比特的結(jié)果存儲(chǔ)至CW中;如果不是,將當(dāng)前塊與密鑰的下一個(gè)字符的L個(gè)副本進(jìn)行NXOR運(yùn)算,隨后與CW進(jìn)行AND運(yùn)算,并將結(jié)果存儲(chǔ)至CW;(3)如果這是密鑰中的最后一個(gè)字符,且新的CW不是0,則就找到了匹配;如果不是,則進(jìn)入第四步;(4)如果PW和CW都是0,則將{CW,NW}向右移CNT個(gè)比特,然后將NW復(fù)制至PW,設(shè)置CNT為L并移動(dòng)至下一個(gè)塊并進(jìn)行至步驟2以進(jìn)行進(jìn)一步的檢查;(5)如果PW全部是0,且CW除了最低有效比特之外也全是0,則將{CW,NW}向右移CNT個(gè)比特,然后將NW復(fù)制至PWJfCNT設(shè)置成L并移動(dòng)至下一個(gè)塊并進(jìn)行至步驟2以進(jìn)行進(jìn)一步的檢查;(6)如果PW不是0,或者CW不是0或1,則將{PW,Cff,NW}向右移1個(gè)比特,并將CNT數(shù)減1;(7)回到步驟2。全文摘要本文提出一個(gè)創(chuàng)新的、不同的模式匹配方法我們把數(shù)據(jù)包的有效載荷劃分成多個(gè)固定長度的塊,逐個(gè)地對(duì)每一塊執(zhí)行模式匹配。對(duì)于每一個(gè)塊僅需要較少數(shù)量的比較,這是基于這樣一個(gè)事實(shí)網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)中正常的數(shù)據(jù)流幾乎不與任何病毒簽名相匹配,而且我們需要比較的大部分密鑰都很短。對(duì)多個(gè)密鑰的并行檢查加快了處理速度,減少指令間數(shù)據(jù)相關(guān)性。對(duì)于非固定長度的正則表達(dá)式密鑰,我們的算法被用作一個(gè)哈希表來盡可能避免對(duì)大部分?jǐn)?shù)據(jù)包的進(jìn)一步檢查。我們的算法只需要少量的內(nèi)存來存儲(chǔ)經(jīng)常使用的數(shù)據(jù),這些數(shù)據(jù)存儲(chǔ)在高速緩存(Cache)中,因此CPU絕大部分時(shí)間并不需要訪問主內(nèi)存。內(nèi)存訪問延遲的時(shí)間通常是數(shù)百倍于CPU時(shí)鐘周期,由于需要很少的內(nèi)存訪問,我們的算法加快了模式匹配的速度。文檔編號(hào)H04L29/06GK102201948SQ20111013954公開日2011年9月28日申請(qǐng)日期2011年5月27日優(yōu)先權(quán)日2011年5月27日發(fā)明者張萌萌申請(qǐng)人:北方工業(yè)大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
翼城县| 万全县| 腾冲县| 镇原县| 宣化县| 吉木萨尔县| 汤原县| 汾阳市| 抚州市| 娱乐| 布尔津县| 玉树县| 广河县| 恩平市| 类乌齐县| 青神县| 廊坊市| 区。| 林西县| 南陵县| 阜新市| 五莲县| 运城市| 房产| 文成县| 大田县| 公安县| 土默特左旗| 佛坪县| 治多县| 宜兰市| 藁城市| 象山县| 沁源县| 烟台市| 乌审旗| 华容县| 民勤县| 武威市| 延安市| 长寿区|