互聯(lián)網(wǎng)絡(luò )蓬勃發(fā)展的今天,在網(wǎng)絡(luò )入侵檢測系統(NIDS)中,大部分的網(wǎng)絡(luò )入侵檢測設備幾乎都依賴(lài)于一些基于特征碼檢測的字符串匹配算法,而字符串匹配算法的實(shí)現幾乎都是由軟件來(lái)實(shí)現的。目前應用比較成功的實(shí)例有,Snort軟件使用字符串匹配算法對包含特征碼的數據包進(jìn)行檢測。但是軟件在內容字節流中進(jìn)行搜索匹配時(shí),需要在不同的處理單元中/內搬移或讀取數據,這對于高速實(shí)現線(xiàn)速(OC-48)的檢測系統來(lái)說(shuō),帶來(lái)了很大的處理負荷。因此,如果采用硬件在數據包進(jìn)入內存之前實(shí)現字符串匹配這一功能,將大大減少后端軟件操作的處理負載。 基于IXP2400和FPGA的系統結構 IXP2400是英特爾公司推出的第二代網(wǎng)絡(luò )處理器芯片,大量應用于寬帶接入、防火墻、NIDS和負載均衡等系統中,它能滿(mǎn)足OC-48網(wǎng)絡(luò )線(xiàn)速的處理要求。玉衡銥達公司設計開(kāi)發(fā)的骨干網(wǎng)絡(luò )監控系統采用了IXP2400作為數據包主處理器,FPGA作為協(xié)處理器的硬件架構來(lái)實(shí)現,系統結構框圖如圖1所示。 如圖1所示,系統外接了4個(gè)千兆光口,用以接收和發(fā)送數據包,它是整個(gè)監控系統和骨干網(wǎng)絡(luò )的交際通道。光口數據包通過(guò)光模塊進(jìn)入PMC-Sierra公司的MAC3386芯片。接收數據包時(shí),以太網(wǎng)幀數據包從千兆光口進(jìn)入MAC3386,MAC3386對數據包進(jìn)行解碼后通過(guò)POS PHY3接口進(jìn)入FPGA的FIFO單元,同時(shí)對進(jìn)入FPGA的數據包進(jìn)行模式字符串(Pattern-String)的匹配操作,處理后的數據包通過(guò)POS PHY3接口傳輸到IXP2400的MSF單元進(jìn)行下一步的處理。發(fā)送時(shí),FPGA只需要將IXP2400發(fā)送來(lái)的數據包通過(guò)POS PHY3接口傳輸給MAC3386,MAC3386對數據包進(jìn)行編碼后發(fā)送給光模塊,光模塊通過(guò)光口將數據包發(fā)送出去。IXP2400提供了一組數據總線(xiàn)來(lái)訪(fǎng)問(wèn)外部設備寄存器,IXP2400中稱(chēng)之為慢端口(Slow Port)。在這里,和FPGA相連的慢端口總線(xiàn)的一部分功能是作為寫(xiě)入FPGA的模式字符串通道。 圖1:基于IXP2400和FPGA的系統結構示意圖。 POS PHY3是一種標準化的網(wǎng)絡(luò )傳輸接口,接口數據傳輸速率為2.5Gbps,最大支持OC-48的傳輸速率接口。POS PHY3包括接收和發(fā)送兩組32位總線(xiàn),工作頻率為104MHz,峰值吞吐率為3.2Gbps。支持2.5Gbps數據包的全雙工操作。POS PHY3接口接收時(shí)序圖如圖2所示。 圖2:POS PHY3接口接收邏輯時(shí)序圖。 該時(shí)序圖描述了POS PHY3接口接收數據包時(shí),數據流在POS PHY3總線(xiàn)上的傳輸方式和相關(guān)的控制信號關(guān)系。關(guān)于更進(jìn)一步的詳細描述可以參考POS PHY3接口標準文檔。 系統采用時(shí)鐘同步設計,在時(shí)鐘上升沿進(jìn)行數據采樣,與FPGA相連的MAC3386、IXP2400的工作時(shí)鐘由FPGA的DCM單元提供,可以保證數據采集的同步和穩定性。 CAM的設計 本設計中,由于要實(shí)現幾路32B的模式字符串匹配,需要占用大量的RAM存儲單元,同時(shí)還得為數據包緩存FIFO保留一定的存儲單元,綜合幾家FPGA芯片廠(chǎng)商RAM的存儲容量,決定選用賽靈思的Virtex2或Virtex Pro系列的FPGA芯片,因為對于相同規模的邏輯資源和寄存器資源來(lái)說(shuō), Virtex2或Virtex Pro系列的FPGA芯片的RAM容量比其他廠(chǎng)商都要多幾倍。 FPGA中,與RAM存儲單元相關(guān)的資源有三類(lèi):Block RAM、LUT、寄存器。這三類(lèi)資源可以通過(guò)配置和粘合邏輯(Glue Logic)實(shí)現為不同類(lèi)型和位寬大小的單端口/雙端口RAM、ROM、CAM、FIFO等。FPGA中CAM的實(shí)現和配置非常靈活,CAM是實(shí)現模式字符串模式匹配的核心資源。 CAM即內容可尋址存儲器。CAM這種存儲器在其每個(gè)存儲單元都包含了一個(gè)內嵌的比較邏輯,CAM基于內容尋址,通過(guò)硬件電路并行查找,實(shí)現快速匹配。一般來(lái)說(shuō)在一個(gè)時(shí)鐘周期內,寫(xiě)入CAM的待比較數據和其內部存儲的每一個(gè)數據進(jìn)行比較,并返回與端口數據相同的內部數據存儲的地址和是否匹配的標識符。CAM的這種并行處理特性使得它在數據分選領(lǐng)域倍受青睞,被廣泛應用在以太網(wǎng)網(wǎng)址搜尋、路由器中的地址交換表、高速數據處理等方面。 CAM對于高速的數據包模式字符串匹配查找操作來(lái)說(shuō),我們需要足夠快的時(shí)間來(lái)完成,如果按照POS PHY3接口標準來(lái)說(shuō),必須保證寄存器建立(Setup)時(shí)間和CAM一次查找匹配時(shí)間之和小于1個(gè)周期10ns(一般情況下,FPGA設計中的保持(Hold Up)時(shí)間都可以滿(mǎn)足,可以不予考慮)。根據FPGA芯片廠(chǎng)商數據手冊提供的性能基準數據,我們配置CAM存儲器選用的資源是Block RAM,配置的地址匹配類(lèi)型選擇的是非編碼地址的多匹配方式(Multi Match Unencoded),選用該項配置的CAM32_32完成一次匹配查找的操作時(shí)間為7ns左右,CAM32_32的配置大小是32位位寬,32個(gè)存儲單元的地址深度。 對于POS PHY3的接口標準來(lái)說(shuō),數據傳輸操作周期為10ns,根據性能基準數據,我們因此除去寄存器的建立時(shí)間(<2ns),完成一次CAM匹配操作是完全可以和POS PHY3的接口標準相匹配的。根據數據包在POS PHY3接口的傳輸字節情況和實(shí)際設計需要,我們設計了一個(gè)CAM-heap來(lái)完成數據包的一路32B模式字符串的匹配操作。一個(gè)CAM-heap是由4個(gè)相同結構和配置的CAM32_32組成。CAM32_32是根據設計需要由自己配置定義的,其配置端口示意圖如圖3所示。 圖3:CAM32_32端口示意圖。 模式字符串匹配實(shí)現過(guò)程 在NIDS檢測系統中,先將協(xié)議解碼后的域值與事先精心提取的攻擊特征(規則)提取相應的字段,即模式字符串,然后從數據包包頭和凈載荷中進(jìn)行查找匹配模式字符串,從中發(fā)現潛在的攻擊行為;谀J阶址哪J狡ヅ涫且豁梻鹘y而成熟的入侵檢測技術(shù),提供了很高的準確性與廣泛性。例如:目前網(wǎng)絡(luò )應用中大部分使用了一種被稱(chēng)為智能隧道(Smart Tunnel)的技術(shù),其特點(diǎn)是:服務(wù)端(或接收端)沒(méi)有綁定任何固定的端口,客戶(hù)端(或發(fā)起端)可以自行使用任意隨機端口連接服務(wù)器,如P2P(點(diǎn)到點(diǎn))應用(如各種P2P 下載工具、IP電話(huà)等)、IMS(實(shí)時(shí)消息系統 如MSN、Yahoo Pager)、網(wǎng)絡(luò )在線(xiàn)游戲等。他們避開(kāi)了防火墻、NIDS 產(chǎn)品。但是我們可以通過(guò)上層的協(xié)議識別和動(dòng)態(tài)分析網(wǎng)絡(luò )報文中包含的協(xié)議特征,發(fā)現其所在協(xié)議,提取相關(guān)的幾段模式字符串,然后遞交給模式字符串模式匹配引擎(FPGA)進(jìn)行處理。 模式字符串匹配過(guò)程可以用紙帶傳輸的過(guò)程來(lái)進(jìn)行描述。假設一條紙帶上附有數據包的全部?jì)热?abcd..xyz0123456789...),從包頭sop字段ABCD開(kāi)始一直到包結束eop字段,依次單個(gè)字符的向前流動(dòng),有一個(gè)匹配字符串xyz0123456789模板和該數據包進(jìn)行匹配。當字符串的流入模板長(cháng)度等于模式匹配字符串長(cháng)度后就進(jìn)行比較,數據包字符串每向前流進(jìn)一個(gè)字符,模式匹配字符串就和數據包流入的字符串匹配一次,直到數據包最后的字符串流入模板,查找結束。如果字符串流入直至流出過(guò)程中,數據包中存在與模板字符串相同的序列,則說(shuō)明匹配成功,否則沒(méi)有模板匹配字符串。上例中,當流入模板的數據包字符串為xyz0123456789時(shí),則指示該匹配成功。 MAC3386傳輸數據包給FPGA與紙帶傳輸數據包類(lèi)似,只不過(guò)在POS PHY3接口傳輸數據包時(shí)是每周期4字符/字節。FPGA進(jìn)行模式字符串匹配時(shí),在CAM-heap中每周期進(jìn)行一次4個(gè)輸入字符串的匹配操作。采用并行操作的原理,使用4個(gè)CAM模塊一個(gè)周期進(jìn)行4個(gè)字符/字節的匹配操作。 舉例說(shuō)明4個(gè)CAM單元的操作關(guān)系:假設輸入數據包的某段內容是ABCD EFGH IJKL,要匹配的模式字符串是CD EFGH IJ,先將要匹配的模式字符串按照一定規則寫(xiě)入4個(gè)CAM單元中。數據包傳輸FPGA時(shí)第一個(gè)周期傳入的是ABCD,第二個(gè)周期傳入的是EFGH,第三個(gè)周期傳入的是IJKL,在第二個(gè)周期到來(lái)后,開(kāi)始進(jìn)行字符串的匹配操作。 第二個(gè)周期進(jìn)行匹配時(shí),CAM1輸入待匹配的字符串是ABCD(匹配失敗);CAM2輸入待匹配的字符串是BCDE (匹配失敗);CAM3輸入待匹配的字符串是CDEF(匹配成功);CAM4輸入待匹配的字符串是DEFG(匹配成功),所有的匹配地址都保存于寄存器中。 第三個(gè)周期進(jìn)行匹配時(shí),CAM1輸入待匹配的字符串是EFGH(匹配成功);CAM2輸入待匹配的字符串是FGHI(匹配成功);CAM3輸入待匹配的字符串是GHIJ(匹配成功);CAM4輸入待匹配的字符串是HIJL(匹配失敗)。所有的匹配地址都保存于寄存器中。 因為我們匹配是8個(gè)字符的字符串,因此在第二個(gè)周期CAM3匹配成功后,到第三個(gè)周期CAM3的匹配成功,根據一定的邏輯關(guān)系和算匹配地址中匹配情況,就可以知道該字符串是否匹配成功。 我們把完成一個(gè)標準模式字符串匹配的4個(gè)CAM稱(chēng)之為一個(gè)CAM-heap,一個(gè)CAM-heap完成一路字符串的匹配查找。如果一個(gè)完整的數據包都流經(jīng)模式字符串模板后,綜合每周期保存匹配地址的寄存器的結果,就可以知道流入的字符串是否和模式字符串匹配。在進(jìn)行模式字符串的匹配之前,需要先將模式字符串進(jìn)行4字節的分段,不同段的4個(gè)字節寫(xiě)入不同的CAM單元和不同CAM單元的不同地址中。因為一個(gè)CAM-heap可以完成一路字符串的匹配查找,因此我們可以設計幾個(gè)CAM-heap并行操作來(lái)完成幾路模式字符串的匹配。匹配的模式字符串路數需要根據所選FPGA芯片RAM資源大小來(lái)決定。 FPGA的設計實(shí)現 模式字符串的FPGA輸入是通過(guò)IXP2400的慢端口來(lái)寫(xiě)入的。在接收數據包之前,FPGA譯碼慢端口控制信號,通過(guò)IXP2400的慢端口接收模式字符串并寫(xiě)入FPGA的ROM中。要匹配的模式字符串接收完畢后,設置CAM寫(xiě)使能信號WE,將幾路模式字符串按照一定格式分別寫(xiě)入不同的CAM單元中,然后進(jìn)行下一步的字符串匹配操作。 接收的數據包按照數據流的先后順序寫(xiě)入FPGA的FIFO中,先入先出。模式字符串匹配完成后,在FIFO出口端添加一個(gè)模式字符串的匹配標識頭,來(lái)描述該數據包與模式字符串的匹配情況(包括與哪一個(gè)數據包匹配還是幾個(gè)同時(shí)匹配,還是沒(méi)有匹配),該匹配標識頭添加在數據包頭,作為數據包內容的一部分發(fā)送給IXP2400。IXP2400在接收數據包時(shí),對接收的數據包頭進(jìn)行解碼,便可知道該數據包的模式字符串模式的匹配情況,以便進(jìn)行下一步的動(dòng)作。 從模式字符串匹配實(shí)現過(guò)程來(lái)看,數據包的流入過(guò)程和匹配過(guò)程是同時(shí)進(jìn)行的,也就是模式字符串匹配過(guò)程的時(shí)間開(kāi)銷(xiāo)隱藏在數據包的接收階段,接收完畢,模式字符串匹配結束。數據包只有在接收完畢后,才能決定發(fā)送什么樣的數據包字符串匹配標識頭,因此數據包在FPGA芯片中的延時(shí)為數據包的輸入延時(shí),按照網(wǎng)絡(luò )傳輸最大數據包為1,514B計算,則數據包的最大延時(shí)為1514/4=379個(gè)周期,按照10ns一個(gè)周期計算延時(shí)為3.79um。 FPGA芯片的配置模式靈活,包括主串模式、從串模式、并行的SelectMap模式和邊界掃描JTAG模式。經(jīng)過(guò)配置后的FPGA芯片就可以正常工作了。但是基于SRAM的FPGA芯片掉電后,配置文件會(huì )自動(dòng)丟失,因此需要為FPGA芯片配置一塊閃存PROM來(lái)保存FPGA的下載文件,這樣掉電后的FPGA以后也能正常工作。 本文小結 本文講述了一種使用FPGA的CAM資源快速實(shí)現模式字符串的匹配查找方法,使用在線(xiàn)速(OC-48)的網(wǎng)絡(luò )監控系統中,大大減少了后端軟件操作的處理負載。系統設計時(shí),選用的FPGA型號為Virtex2的XC2V2000-5,使用了FPGA中大量的Block RAM存儲單元來(lái)構造CAM,采用了并行的設計思想,OC-48處理了3路模式字符串的模式匹配。經(jīng)過(guò)工程實(shí)際測試,FPGA模塊很好地實(shí)現了3路模式字符串的模式匹配功能,達到了系統的設計要求。 |