專利名稱:用可重新配置硬件進行內容檢測的方法和系統(tǒng)的制作方法
技術領域:
本發(fā)明總體上涉及網絡通信領域,并且尤其涉及用于檢測在經由網絡所轉送的數據中內容的方法和系統(tǒng)。
背景技術:
因特網蠕蟲(worm)通過利用在操作系統(tǒng)以及在系統(tǒng)上所運行的其它軟件中的漏洞來工作。攻擊會損害安全性并使網絡性能降級。它們的影響包括由于系統(tǒng)停機時間和工人無法工作所導致的商業(yè)上的巨大經濟損失。預計在未來用于使網絡免受惡意代碼危害的系統(tǒng)會成為關鍵因特網基礎設施的一部分。當前,被稱作入侵檢測和阻止系統(tǒng)(Intrusion Detection and Prevention Systems IDPS)的這些系統(tǒng)通常只過濾先前標識的蠕蟲,所以這些系統(tǒng)的作用很有限。
發(fā)明內容
根據本發(fā)明的方法和系統(tǒng)檢測網絡通信業(yè)務流量中頻繁出現的內容,諸如蠕蟲特征碼(worm signature)。用硬件來實現內容檢測,這與常規(guī)的基于軟件的方法相比較提供了更高的吞吐量。掃描在網絡中經由數據流所發(fā)送的數據來標識類似內容的模式(pattern)。頻繁出現的數據模式被標識并報告為可能是蠕蟲特征碼或其它類型的特征碼??梢圆⑿袙呙钄祿蕴峁└咄掏铝?。通過把幾個數據字節(jié)窗(window ofbytes)并行散列到芯片內(on-chip)塊存儲器來維持吞吐量,其中可以并行更新每個芯片內塊存儲器??梢园阉鶚俗R的內容與在芯片外(off-chip)存儲器中所存儲的已知特征碼相比較來確定是否存在假肯定(false positive)。由于按照本發(fā)明的方法和系統(tǒng)可標識頻繁出現的模式,所以它們不局限于標識已知的特征碼。
依照根據本發(fā)明的方法,提供了一種在數據處理系統(tǒng)中用于標識數據流中的重復內容的方法。所述方法包括步驟為所述數據流的多個部分中的至少一個部分計算散列函數;響應于所計算的散列函數結果來使多個計數器中的至少一個計數器增加,每個計數器對應于相應計算的散列函數結果;當所述多個計數器中的至少一個超過閾值時標識所述重復內容;并且驗證所標識的重復內容并非是良性串(benignstring)。
依照根據本發(fā)明的系統(tǒng),提供了一種用于標識數據流中的重復內容的系統(tǒng)。所述系統(tǒng)包括散列函數計算電路,用于為所述數據流的多個部分中的至少一個部分計算散列函數;多個計數器,響應于所計算的散列函數結果來使多個計數器中的至少一個計數器增加,每個計數器對應于相應計算的散列函數結果;重復內容標識器,用于當所述多個計數器中的至少一個超過計數值時標識所述重復內容;和驗證器,用于驗證所標識的重復內容并非是良性串。
依照根據本發(fā)明的系統(tǒng),提供了一種用于標識數據流中的重復內容的系統(tǒng)。所述系統(tǒng)包括用于為所述數據流的多個部分中的至少一個部分計算散列函數的裝置;用于響應于所計算的散列函數結果來使多個計數器中的至少一個計數器增加的裝置,每個計數器對應于相應計算的散列函數結果;用于當所述多個計數器中的至少一個超過計數值時標識所述重復內容的裝置;和用于驗證所標識的重復內容并非是良性串的裝置。
本領域技術人員當考察以下附圖和具體實施方式
時,本發(fā)明的其它特征變得更加清楚。意在把所有這種附加系統(tǒng)、方法、特征和優(yōu)點包括在本說明書中、本發(fā)明的范圍內,并且通過權利要求書來保護。
并入并構成此說明書一部分的附示了本發(fā)明的實現方式,并且連同說明書一起用來解釋本發(fā)明的優(yōu)點和原理在附圖中,圖1A是按照本發(fā)明用于執(zhí)行內容檢測的系統(tǒng)的框圖;圖1B是按照本發(fā)明示出特征碼檢測設備怎樣處理數據流的功能框圖;圖2是按照本發(fā)明的特征碼檢測設備的框圖;圖3是按照本發(fā)明的計數處理器的框圖;圖4是按照本發(fā)明的字符過濾器的框圖;圖5是按照本發(fā)明的字節(jié)移位器的框圖;圖6是按照本發(fā)明包含良性字符串的控制分組的框圖;圖7是按照本發(fā)明的大計數向量的框圖;圖8是更詳細的圖7的大計數向量的框圖;圖9是按照本發(fā)明的流水線的框圖;圖10是用于描繪并行處理數據流的字節(jié)的功能框圖;圖11示出了優(yōu)先級編碼器怎樣在沒有沖突的情況下處理數據的例子;圖12示出了優(yōu)先級編碼器怎樣在具有沖突的情況下處理數據的例子;圖13是按照本發(fā)明的分析器的框圖;圖14是按照本發(fā)明的分析器狀態(tài)的狀態(tài)圖;和圖15是從按照本發(fā)明的報警產生器所發(fā)出的控制分組的框圖。
遍及幾個附圖,相應的附圖特征碼指代相應的部分。
具體實施例方式
現在按照如附圖中所圖示的本發(fā)明來詳細地參考依照方法、系統(tǒng)和制造產品的實現方式。
按照本發(fā)明的方法和系統(tǒng)檢測數據流中頻繁出現的內容,諸如蠕蟲特征碼,同時抵抗多態(tài)技術,諸如由蠕蟲作者所使用的那些技術。為了以高速實現內容檢測,用硬件來實現系統(tǒng)。
圖1A是適于與按照本發(fā)明的方法和系統(tǒng)一起使用的說明性數據處理系統(tǒng)100的框圖。如同所示,多個主機被連接到多個子網絡。即,主機102、104和106被連接到子網絡108;主機110和112被連接到子網絡114;并且主機116和118被連接到子網絡120。在各自的子網絡之間以及在所述子網絡和更大網絡128(諸如因特網)之間的通信業(yè)務流量經過路由器126。虛擬局域網(VLAN)集中器122集中進入路由器126的網絡通信業(yè)務流量。通過把特征碼檢測設備124放置在路由器和VLAN集中器122之間,可以為內容掃描在子網絡之間的通信業(yè)務流量。
在圖1A的說明性例子中,特征碼檢測設備124是現場可編程的端口擴展器(field-programmable port extender,FPX)平臺。FPX平臺允許通過使用大現場可編程門陣列(field programmable gate array,FPGA)130(諸如Xilinx XCV2000E FPGA)來處理高速網絡流。下述特征碼檢測電路可以被下載到FPGA 130中以便按高達2.5千兆位每秒的通信業(yè)務量速率來處理網絡流。使用32位寬數據字來把網絡通信業(yè)務計時(clock)到FPGA 130中。本領域技術人員應當理解,可以使用不同于這里所描述的硬件和軟件組件來實現按照本發(fā)明的方法和系統(tǒng)。例如,可以采用不同于FPX平臺的其他設備來實現特征碼檢測設備。
在這里所描述的說明性例子中,參考檢測蠕蟲特征碼來說明,但按照本發(fā)明的方法和系統(tǒng)并不局限于此。按照本發(fā)明的方法和系統(tǒng)可標識數據流中的重復內容。重復內容可以是但不局限于蠕蟲;病毒;大量訪問網址人群的出現;存在被發(fā)送到多個收件人的大量類似的電子郵件,諸如垃圾郵件;經由對等網絡所重復交換的內容,諸如音樂或視頻;及其它模式的重復內容。
圖1B是按照本發(fā)明示出特征碼檢測設備124怎樣處理數據流的功能框圖。在說明性例子中,現場可編程門陣列130包括字符過濾器150、散列處理器152、計數向量(count vector)154、時間平均處理器156、閾值分析器158、芯片外存儲器分析器160和報警產生器162的功能組件。這些功能組件提供了現場可編程門陣列130的說明性的高級功能視圖。下面參考圖3-15更詳細地描述了現場可編程門陣列130及其功能。
如在說明性例子中所示,字符過濾器150從數據流170中采樣數據,并且濾出不太可能是二進制數據一部分的字符,從而提供N字節(jié)的數據串172。如下面將更詳細地描述,蠕蟲典型情況下由二進制數據構成。這樣,字符過濾器150濾出不太可能表現蠕蟲特征碼特性的一些字符。散列處理器152對N字節(jié)串172計算k位散列,并且把所產生的特征碼散列到計數向量154。如下面將更詳細地描述,計數向量154可以包括多個計數向量。當特征碼散列到計數向量154時,由散列所指定的計數器被增加。按周期性間隔,這里被稱作測量間隔,每個計數向量中的計數被減少等于或大于由于正常通信業(yè)務流量所到達平均數的量,如按照時間平均處理器156所確定的。當計數向量154到達預定閾值時,如閾值分析器158所確定的,芯片外存儲器分析器160把有害串(offending string)散列到芯片外存儲器212中的表。下一次出現相同的串時,在芯片外存儲器212中的相同地點進行散列以便比較這兩個串。如果兩個串是相同的,那么產生報警。如果兩個串是不同的,那么利用新的串來重寫芯片外存儲器212中的串。因此,芯片外存儲器分析器160可以通過減少由于半頻繁出現的串所導致的報警來減少報警數目。當接收到報警消息時,報警產生器162向外部機器發(fā)送包括有害特征碼(offending signature)的控制分組以用于進一步分析。
圖2是用于更詳細地示出特征碼檢測設備124的框圖。在說明性的例子中,用于在網絡上檢測信號的電路在現場可編程門陣列130中被實現為被稱作worm_app的應用202。worm_app 202適于在分層協(xié)議包裝(wrapper)204的架構內。如下面將更詳細地描述,計數處理器206從分層協(xié)議包裝204接收包裝信號,把所述包裝信號分析轉換為字節(jié)流,把所述字節(jié)流散列到計數向量,并且使計數器增加。計數處理器206進一步對所檢測的蠕蟲特征碼數目進行計數平均并且處理良性串。計數處理器206輸出信號count_match,對于超過閾值以及相應的10字節(jié)長的蠕蟲offending_signature的特征碼來說該信號被斷言為高。另外,計數處理器206可以向分層協(xié)議包裝204輸出信號。
實現worm_app電路,使得它提供高吞吐量和低延遲。為了達到這一點性能,worm_app電路可以具有流水線。在說明性例子中,流水線長度是27個時鐘周期并且可以如下分解-FIFO延遲3個時鐘周期-計數處理器延遲11個時鐘周期-分析器延遲13個時鐘周期分析器208接收來自計數處理器206的輸入信號并且與在諸如靜態(tài)隨機存取存儲器(static random access memory SRAM)之類的芯片外存儲器212中所存儲的散列表210有接口。如果count_match被斷言為高,那么由分析器208來訪問芯片外存儲器212。如果在芯片外存儲器212的散列表210中標識了offending_signature,那么分析器208輸出被斷言為高的信號analyzer_match。報警產生器214接收來自分析器208的analyzer_match信號并且把它從計數處理器所接收的包裝信號傳遞到分層協(xié)議包裝204。當analyzer_match信號被斷言為高時,報警產生器214發(fā)出包含有offending_signature的控制分組。
在圖3中示出了說明性計數處理器206的組件級視圖。計數處理器206包括分組緩沖器302。如下面將描述,當塊RAM被占用并且所述塊RAM內的計數器無法被增加時,分組緩沖器302在計數平均周期期間緩存分組。在計數平均周期以外,分組緩沖器302經由通信業(yè)務傳遞。字符過濾器304判定哪些字節(jié)要包括在蠕蟲特征碼中。字節(jié)移位器306根據字符過濾器304的輸出來匯編可以計數的輸入串。大計數向量308散列從字節(jié)移位器306所接收的字符串,使相應的計數器增加并且按照需要產生報警。下面將更詳細地描述計數處理器的每個功能組件。
在圖4的框圖中更詳細地示出了字符過濾器304。字符過濾器304可使得所選擇的字符從散列計算中被排除。由于蠕蟲典型情況下由二進制數據構成,所以特征碼檢測設備可以忽略數據流中的一些字符,所述字符非常不可能是二進制數據的一部分。這些字符例如包括數據流中的空白、換行符、換行和空格。文本文檔例如包含用于填充的大量空格和空行。要避免這些字符的另一原因在于空行或空格的字符串不必表現可以用來標識蠕蟲的良好特征碼的特性。優(yōu)選使用不會出現在文檔中的串。按照本發(fā)明的方法和系統(tǒng)不局限于用于避免有害特征碼的啟發(fā)式方式??梢詫崿F的其它方式包括但不局限于標識并忽略電子郵件消息中的文本,預處理整個串,或者流編輯以搜索規(guī)則的表達式并用串來代替它們。
字符過濾器304接收32位數據字data_in以及信號data_en來作為輸入,所述信號data_en用于標識data_in中的數據是否有效。字符過濾器304把32位字拆分為4個單個字節(jié)(byte1到byte4)并且輸出相應的信號以便表明所述字節(jié)是否包含有效數據(byte1 valid到byte4valid)。如果它是字符過濾器304正尋找的字符之一,那么它被認為是無效的。如果例如4字節(jié)字符串a、newline、b、null被字符過濾器304作為輸入來接收,并且假定字符過濾器304被配置為忽略換行符和空字符,那么字符過濾器304的相應輸出信號可能會是Byte1a,Byte1有效高
Byte2newline,Byte2有效低Byte3b,Byte3有效高Byte4null,Byte4有效低圖5是說明性字節(jié)移位器306的框圖。字節(jié)移位器306從字符過濾器304讀入值并且輸出特征碼的字節(jié)移位版本,可能會被大計數向量308散列。字節(jié)移位器306還輸出需要被散列的字節(jié)數目(num_hash)以及用于告訴大計數向量308何時開始計數平均的信號。字節(jié)移位器306接受從字符過濾器304輸出的數據。在說明性例子中,輸出特征碼是13字節(jié)長,并且每個特征碼均包含4個10字節(jié)的重疊字符串。
下面的說明性例子描述字節(jié)移位器的功能。如果輸入是“NIMDAADMIN123”后面跟隨來自先前例子的字符串a,newline,b,null,那么字符串的字節(jié)移位版本可能會是“MDAADMIN123ab”并且num_hash可能會是2。如下所述,num_hash值由大計數向量308來使用。
為了維護所檢測特征碼數目的運行平均,周期性減少所檢測特征碼的計數。在說明性例子中,這在已經處理了固定數目的字節(jié)(諸如2.5兆字節(jié))之后在分組邊界發(fā)生。字節(jié)移位器306跟蹤已經被散列到大計數向量308的字節(jié)數目。當所處理的字節(jié)總數超過閾值時,那么字節(jié)移位器306經歷下列步驟1.字節(jié)移位器308等待要從分組緩沖器302讀取的當前分組的最后字,繼而停止從分組緩沖器302的讀取。從此時起,進入計數處理器206的通信業(yè)務量被暫時緩存在分組緩沖器302中。這樣做是由于當進行計數平均時無法散列并計數這些字節(jié)。
2.當當前分組的最后字已經被大計數向量308處理時,字節(jié)移位器306把subtract_now信號斷言為高。此信號由大計數向量308用來開始計數平均。
當來自包裝的start of payload(有效負載開始)信號被斷言為高時,字節(jié)移位器306把count_now信號斷言為高。當來自包裝的end of frame(幀末尾)信號被斷言為高時,count_now被斷言為低。據此,可以計數僅包括有效負載的字節(jié)。
字節(jié)移位器306還可以確定在數據流中是否存在良性串。諸如來自Microsoft Update的代碼段之類的良性串可以通過作為一組串被編程到字節(jié)移位器306中來識別,這種串盡管通常出現在網絡上,然而并非是蠕蟲。通過經由數據流在字節(jié)移位器306接收良性串分組來把良性串加載到大計數向量308中。例如當分組在端口1200上被發(fā)送到目的地址192.168.200.2時,字節(jié)移位器306假定所述分組包含良性串的13位散列值。使用散列值的高5位來引用32個塊RAM之一并且使用低8位來引用每個塊RAM內256個計數器之一。在圖6中示出了包含良性串的說明性控制分組602的圖。按benign_string輸出有效負載的第一字的低13位并且benign_valid被斷言為高。由于控制分組包含不必計數的良性串,所以count_now被斷言為低。benign_valid和count_string信號由大計數向量308用來避免計數良性串,如下面所解釋。
圖7是說明性大計數向量308的框圖。字節(jié)移位器306的輸出是大計數向量308的輸入。大計數向量308包含邏輯,用于散列輸入的字符串、解決在塊RAM之間的沖突、從塊RAM中進行讀取、使計數器增加并且寫回到塊RAM。在說明性例子中,大計數向量308包括32個塊RAM,每個塊RAM具有256個計數器,每個計數器都是16位寬。利用此大小的說明性計數器,可以支持高達64K的計數。下面參考圖8將更詳細地描述大計數向量308的功能組件。
說明性的大計數向量308每個時鐘周期對四個10字節(jié)字符串計算四個散列值,所述四個10字節(jié)字符串包括在13字節(jié)的信號字符串中。每個時鐘周期計算一個以上散列值以維護吞吐量。由于所跟蹤的特征碼可能出現在有效負載中的任何點,并且它們被散列到相同的地點而不管它們在分組中的偏移如何,所以在所有情況下使用相同的散列函數。每個散列函數產生13位的值。
為了檢測經常出現的內容,大計數向量308對流送數據的10字節(jié)(80位)窗上計算k位散列。為了計算所述散列,在配置計數處理器的時候產生一組k×80個隨機二進制值。所述散列的每個位被計算為對80位輸入串的隨機選擇子集的異或(XOR)。通過使散列函數隨機化,對手無法確定可能會引起過多散列沖突的字節(jié)模式。對每個有效負載的多個散列計算確保簡單的多態(tài)方法難以奏效。
在說明性實施例中,使用稱作H3的通用散列函數。散列函數H3被定義為h(X)=d1·x1d2·x2d3·x3...db·xb在以上公式中,b是按位來計量的字符串長度。在說明性例子中,b=80位。(d1,d2,d3,...db)是k×80個隨機二進制值組。隨機二進制值在
范圍內(其中n是按位計量的單個計數器大小,并且2m是所使用塊RAM的數目)。換句話說,d值具有與要產生的散列值相同的范圍。相對于輸入對該隨機值組所執(zhí)行的XOR功能生成散列值,其對輸入值來說具有一定分布。
為了計算所述散列,對于字符串中的每個位來說,如果該位等于‘1’,那么該位相關聯(lián)的隨機值與當前的結果相XOR,以獲得散列值。例如,給定d=(101;100;110;011)并且輸入串X=1010,那么相應的3位散列函數為101 XOR 110=011。
大計數向量308使用散列值來索引到計數器向量中,所述計數器包含在諸如計數向量802之類的計數向量中。當某個特征碼散列到計數器時,這使得計數器增加一。按周期性間隔,這里可以被稱作測量間隔,每個計數向量中的計數被減少等于或大于由于正常通信業(yè)務流量所到達平均數的量。當計數器到達預定閾值時,分析器208訪問芯片外存儲器212,如下面將描述,并且計數器被復位。對于Xilinx FPGA上的電路的說明性實現方式來說,通過把雙端口的芯片內塊RAM配置為存儲單元陣列來實現計數向量。每個說明性存儲器在每個時鐘周期可以執(zhí)行一個讀取操作和一個寫入操作。如圖9所示,實現三級流水線在每個時鐘周期讀取、增加并寫入存儲器。由于該特征碼在每個時鐘周期都會改變并且由于每個特征碼的每次出現都被計數,所以從存儲器子系統(tǒng)來看需要高性能。雙端口的存儲器允許寫回一個特征碼的出現次數,同時正讀取另一特征碼的出現。
為了標出測量間隔的末尾,大計數向量308可以周期性復位計數器。在經過了固定的字節(jié)窗之后,通過把值寫為零來復位所有計數器。然而,此方法具有缺陷。如果在測量間隔末尾的附近時對應于惡意特征碼的計數器值剛好在閾值以下,那么復位此計數器會使該特征碼不會被檢測出來。因此作為替換方式,說明性大計數向量308周期性從所有計數器減去平均值。平均值被計算為所期望的字節(jié)數目,所述字節(jié)可以在間隔內被散列到每個計數器。如下所述,此方法要求使用比較器和減法器。
為了實現高吞吐量,可以在每個時鐘周期內處理多個串。為了允許并行執(zhí)行多個存儲器操作,如圖10所示在內容檢測系統(tǒng)130中使用多個塊RAM把計數向量分段到多個存儲體(bank)中。使用散列值的較高位來確定要訪問哪個塊RAM。使用較低位來確定在給定塊RAM內哪個計數器要增加。多于一個的字符串可能散列到相同的塊RAM。這種情況這里被稱作“存儲體沖突”??梢允褂脙?yōu)先級編碼器來解決存儲體沖突。由于優(yōu)先級編碼器的操作,對于按OC-48行速率運行的系統(tǒng)來說,每個時鐘周期可能不會計數在1和3個字符串之間。沖突的概率c可以用下式表示c=1-Πi=N-B+1N-1iN]]>在上面的公式中,N是所使用的塊RAM的數目并且B是每個時鐘周期到來的字節(jié)數目。
諸如優(yōu)先級編碼器804之類的優(yōu)先級編碼器解決當四個散列值中的兩個或多個的較高5個位相同時可能發(fā)生的沖突。優(yōu)先級編碼器804輸出需要被增加的塊RAM的地址。如圖8所示,使用散列值的較高5個位來標識要增加的塊RAM。使用較低8個位來索引在要增加的塊RAM內的計數器。bram_num1到bram_num4引用各塊RAM。ctr_addr1到ctr_addr4引用在要增加的每個塊RAM內的計數器號。當相應的塊RAM和計數器地址有效時,num1_valid到num4_valid被斷言為高。由于報警可以由32個塊RAM中的任何一個產生并且所述報警可以對應于四種可能的特征碼,所以大計數向量308跟蹤哪個特征碼觸發(fā)了所述報警。這通過使用對應于bram_num和ctr_addr信號的信號sign1到sign4來實現。在說明性例子中,信號sign1到sign4可以具有以下五個值之一一、二、三和四對應于13字節(jié)信號字符串中的第一、第二、第三和第四特征碼。值八表示良性串。
值num_hash確定了其中需要解決沖突的塊RAM的數目。例如如果此信號值為二,那么這意味著字節(jié)移位器306已經按兩個字節(jié)移位了該特征碼。因此,由于另外兩個特征碼已經被計數,所以只計數兩個特征碼。
在圖11中示出了在沒有沖突的情況下優(yōu)先級編碼器的功能的說明性例子。在說明性例子中,在第一時鐘周期內,所有四個輸入字節(jié)被字符過濾器認為是有效的。因此,所有四個特征碼被散列,并且sign1到sign4具有有效值連同它們相應的bram_num和ctr_addr信號。在第二時鐘周期內,四個輸入字節(jié)中只有兩個被字符過濾器認為是有效的。因此,只有兩個特征碼被散列。因此只有sign1和sign2具有關于特征碼3和4的有效值。
在圖12中示出了在存在沖突的情況下優(yōu)先級編碼器的功能的說明性例子。如說明性例子中所示,被增加的塊RAM在兩種情況下沖突。在這兩種情況中,優(yōu)先一個特征碼來解決沖突。一個特征碼相對于另一個特征碼的優(yōu)先級在大計數向量308中。
在說明性實施例中,由于塊RAM的固有功能并不包括支持復位和計數平均,所以圍繞所述塊RAM提供包裝(wrapper)以實現該功能。所述包裝的功能說明性地由圖8中所示出的說明性計數向量來表示。在大計數向量308中例示了此計數向量組件的三十二個拷貝,對于正使用的每個塊RAM來說對應一個。
如計數向量的說明性例子中所示,所述計數向量具有reset(復位)信號。當reset信號被斷言為低時,每個計數器被初始化為0。由于在說明性例子中并行初始化塊RAM,所以這花費256個時鐘周期(每個塊RAM中的計數器數目)。hash標識了在count_vector中要讀取的地址。dout標識了計數器中對應于hash的數據。addr標識了要寫回增加的計數的地址,這在下面將進行描述。ctr_data標識了要寫回到count_vector的值。set_ctr向count_vector提供了允許寫入。當subtract被斷言為高時,大計數向量通過每個計數器進行迭代并且從中減去平均值。如先前所提及,平均值被計算為所期望的在每個間隔中可能會散列到計數器的字節(jié)數目。如果給定計數器的值小于平均值,那么它被初始化為零。如果給定計數器的值包含與良性串相關聯(lián)的特定字段,那么它不被減除。就像初始化計數向量一樣,并行性確保了在256個時鐘周期內實現減法。
為了支持良性串,利用超出閾值的值來填充對應于良性串的散列的計數器。當計數器具有此值時,電路跳過所述的增加和寫回步驟。
對于有限數目的常見字符串來說,可以不計數散列存儲桶(bucket),并且從而可以避免發(fā)送報警。但是隨著良性串的數目接近可用計數器的數目,因為只有較少的計數器用于檢測特征碼,所以降低了有效性。對于較大數目的不常見字符串,可以在下游軟件中避免假肯定產生。為了減少被發(fā)送到下游軟件的假肯定,可以由控制主機來處理是良性的但是不那么頻繁出現的字符串。
返回參照圖8,讀取級806的輸入是來自優(yōu)先級編碼器804的輸出。來自讀取級806的輸出被連接到32個塊RAM的地址和數據總線(例如,計數向量802)。然而,為簡單起見在圖8中只示出了一個計數向量802。根據讀取級806的bram_num輸入的值來斷言適當的地址和數據信號。進入讀取級806的信號sign1到sign4被分配給sign b1到sign b32中的任何一個(此后被稱作“sign”信號同時指任何一個塊RAM),所述信號除了當處理包含良性串的控制分組時會流出讀取級806。在該情況下,輸出sign信號被指定值8,使得比較組件808和增加組件810可以適當地處理它。
諸如計數向量802之類的計數向量的輸出由其相應的比較組件808來檢查,并且如果它小于閾值,那么所述比較組件的inc信號被斷言為高。如果它等于閾值,那么大計數向量308把count_match信號設置為高以便向分析器208通知潛在頻繁出現的特征碼。count_match信號使芯片外存儲器212被占用長達13個時鐘周期(這是因為它是開始從芯片外存儲器212讀取10字節(jié)字符串、比較字符字符串并且寫回該字符串所花費的時間),count_match抑制信號確保在兩個count_match信號之間存在至少13個時鐘周期的間隔。
在增加和寫回級中,存在四個說明性功能,增加和寫回級可以按流水線執(zhí)行執(zhí)行。在所有情況下,ctr_data是被寫回到計數向量的值。四個說明性功能如下-如果inc信號已經被斷言為高,那么ctr_data的值被設置為比count_vector的輸出多一。
-如果sign值為8,那么與良性串相關聯(lián)的值被指定成ctr_data。在說明性例子中,此值為0xFFFF。
-如果計數向量的輸出為0xFFFF,那么把相同的值指定給ctr_data以便保存良性串。
-ctr_data的缺省值為0。如果計數器已經超過閾值,那么所述0值不會改變。
valid(有效)信號(例如,b1_valid)當被反轉(flop)適當的次數時被用為計數向量的寫使能的輸入(即,set_ctr)。
在放置和路由期間,可以依照承受大傳播延遲的這種方式來放置一些塊RAM。這可能使所述電路不滿足定時約束。在說明性例子中通過把觸發(fā)器包括到塊RAM的輸入和輸出中來彌補此情況。在圖8中沒有示出附加的觸發(fā)器以便保持簡明。
當發(fā)現有害特征碼時,大計數向量308輸出count_match以及相應的特征碼(sign_num)。計數處理器206反轉string適當的次數來反映大計數向量308的延遲。當count_match被斷言為高時,根據sign_num的值來選擇offending_signature。
圖13是說明性分析器208的框圖。分析器208保留可疑的特征碼并且估算確定的特征碼多長時間出現一次。從而,分析器208可以減少由報警產生器214所發(fā)送的報警數目。為了這樣,分析器確信越過閾值的計數器實際上是頻繁出現字符串的結果。當計數器跨過閾值時,有害串被散列到芯片外存儲器212中的表。使用上述方法對有害特征碼計算17位散列值。芯片外存儲器212數據總線是19位寬。散列值映射到地址信號的高17位。地址信號的低兩位被改變以用來表示存儲器中的三個連續(xù)字(所述存儲器用來存儲10字節(jié)字符串)。散列值用來索引到芯片外存儲器的散列表210中。下一次出現相同的串時,分析器散列到芯片外存儲器212中的相同地點并且比較兩個串。如果兩個串是相同的,那么產生報警。如果兩個串是不同的,那么分析器208重寫芯片外存儲器212單元并且存儲另一串。在該情況下,因為散列函數把幾個半頻繁出現的字符串散列到相同的值,所以可能出現計數器溢出。由于半頻繁出現的字符串不是所關注的,因此分析器208可防止出現產生報警分組的開銷。
下面解釋分析器208的說明性信號count_match當被大計數向量308斷言為高時,某個特征碼已經使計數器到達閾值。
offending_signature對應于count_match的特征碼正被斷言為高。
analyzer_match當被斷言為高時,分析器已經驗證到達閾值的計數器不是假肯定的結果。
mod1_req當被斷言為高時,此信號表明請求訪問芯片外存儲器212。在正訪問芯片外存儲器212期間此信號保持為高。
mod1_gr當被斷言為高時,此信號表明許可訪問芯片外存儲器212。
mod1_rw當此信號被斷言為高時分析器208從芯片外存儲器212中進行讀取并且當此信號被斷言為低時分析器208寫入芯片外存儲器212。
mod1_addr表明要從中讀取或寫入的芯片外存儲器地址。
mod1_d_in包括正從芯片外存儲器212中讀取的數據。
mod1_d_out包括正被寫入芯片外存儲器212的數據。
分析器208被配置為包括用于芯片外存儲器212訪問的多個有限狀態(tài)。在圖14中示出了用于分析器208的說明性有限狀態(tài)機。下面解釋在圖14中所描繪的每個說明性狀態(tài)。
idle是分析器208的默認狀態(tài)。當count_match被斷言為高時分析器208從此狀態(tài)中轉換出來。
prep_for_sram在此狀態(tài)中請求許可訪問芯片外存儲器212。當許可被授權時分析器208從此狀態(tài)中轉換出來。
send_read_request如在圖14的說明性例子中所示,實現三種send_read_request狀態(tài)。在發(fā)送讀取請求的所有三種狀態(tài)中,mod1_rw被斷言為高并且mod1_addr被設置為根據offending_signature的散列所導出的值。
wait1等待要從芯片外存儲器212中所讀取的數據。
read_data_from_sram在mod1_d_in上來自芯片外存儲器212的數據被讀入到臨時寄存器中。
check_match臨時寄存器被串接并與offending_signature相比較。如果這兩個相等,那么analyzer_match被斷言為高并且分析器208轉變回到idle。如果這兩個不相等,那么分析器208把新的字符串寫回到存儲器。
send_write_requestmod1_rw被斷言為低,并且如同讀取狀態(tài)一樣,mod1_addr被設置為根據offending_signature的散列所導出的值。
一旦mod1_gr升高,那么分析器208中的每次轉變就在時鐘邊沿發(fā)生。
芯片外存儲器212用來存儲完整的串(未散列版本),在說明性例子中所述串為10字節(jié)(80位)長。分析器208盡管比軟件要快數百倍,然而仍然要求幾個附加時鐘周期來訪問芯片外存儲器212,這可能會使數據處理流水線停滯。在說明性例子中,訪問芯片外存儲器212中的10字節(jié)字符串要求13個時鐘周期。
可以實現每當從芯片外存儲器212執(zhí)行存儲器讀取時就使數據處理流水線停滯的電路。然而,使流水線停滯具有缺點。相對于整個分組有效負載來對字節(jié)窗計算散列值的目的在于處理多態(tài)蠕蟲的情況。但是考慮更普遍的非多態(tài)蠕蟲的情況,其中蠕蟲通信量的分組有效負載近乎是完全相同的。在這種情況下,按照本發(fā)明的方法和系統(tǒng)可以對整個分組有效負載產生一系列連續(xù)匹配。然后為了每個匹配使流水線停滯可能會造成嚴重的吞吐量降級,這是由于每個芯片外存儲器212訪問要花費多個時鐘周期。實際上,這樣做可能對攻擊者有益,這是由于系統(tǒng)管理員可能被迫關掉系統(tǒng)。在說明性例子中,解決方案在于當從芯片外存儲器212進行讀取時并不使流水線停滯,而是跳過進一步的存儲操作直到先前操作已經完成。因此,一旦產生報警,那么在下一13個時鐘周期(在讀取和寫回到芯片外存儲器212中所涉及的等待時間)上的數據不會導致產生進一步的報警。
在測量間隔內,所觀察的特征碼數目可以近似等于所處理的字符數目。因為由于存儲體RAM沖突而跳過一小部分字符,所以所處理的字符數目可能較少。給定測量間隔長度來確定閾值的問題可以被簡化為確定概率的界限,所述概率為當m個元素被散列到具有b個存儲桶的表時被散列到相同存儲桶的元素數目超過i的概率。所述界限由下式給出b(emib)i]]>在說明性例子中,m個特征碼被散列到b個計數器。在以上表示式中,i是閾值。從而,給定測量間隔長度,可以改變閾值,來使計數器超過閾值的概率的上限可接受地小。這隨后減少了不必要的芯片外存儲器212訪問的數目。因此,由于到來的特征碼隨機地散列到計數器,所以對于適當大的閾值來說不規(guī)則的特征碼可能使計數器超過所述閾值。計數器精確地接收i個元素的概率可以由下式給出mi(1b)i(1-1b)(m-i)≤mi(1b)i≤(mei)(1b)i=(mebi)i]]>第二不等式是二項式系數的上限的結果。計數器的值至少為i的概率可以由下式給出
Pr(c≥i)≤Σk=im(embk)k≤(emib)i[1+(emib)+(emib)2+···+(emib)(m-i)]]]>隨著i增加,方括號內的項接近于1。因此,計數器的值至少為i的概率可以由下式限制b(emib)i]]>在說明性實施例中,由于測量間隔m是2.5兆字節(jié),所以計數器的數目b是8192,并且閾值i是850,對于隨機通信業(yè)務流量來說計數器溢出的概率范圍為1.02×10-9。據此,對于在間隔內所處理的通信業(yè)務來說,計數器溢出的概率如期望的那么小。
當從分析器208接收報警消息時,報警產生器214向在已知的UDP/IP端口上監(jiān)聽的外部數據處理系統(tǒng)發(fā)送用戶數據報協(xié)議(userdatagram protocol,UDP)控制分組。該分組可能包含該有害特征碼(對其計算散列的字節(jié)的字符串)。當analyzer_match被斷言為高時,報警產生器214發(fā)出該控制分組。據此,然后可以把最頻繁出現的字符串標示成可疑的。圖15是從報警產生器214所發(fā)出的說明性控制分組1502的框圖。
因此,按照本發(fā)明的方法和系統(tǒng)檢測網絡通信業(yè)務流量中頻繁出現的特征碼。通過用硬件來實現內容檢測,可以實現高吞吐量。此外,通過利用由硬件所提供的并行性,與典型的基于軟件的方法相比較可以掃描更大量的通信業(yè)務流量。通過把幾個字節(jié)窗并行散列到芯片級塊存儲器來維持吞吐量,其中可以并行更新每個芯片級塊存儲器。這不同于傳統(tǒng)的基于軟件的方法,其中跟隨有計數器更新的散列可能需要順序執(zhí)行幾個指令。此外,使用芯片外存儲器分析器提供了低的假肯定率。對每個分組進行多個散列還幫助系統(tǒng)阻礙簡單的多態(tài)測量。
先前的網絡監(jiān)視工具依賴系統(tǒng)管理員的直覺來檢測網絡通信業(yè)務流量中的異常。按照本發(fā)明的方法和系統(tǒng)自動檢測網絡通信業(yè)務流量中對應于頻繁出現內容的峰值。
已經給出了本發(fā)明實現方式的以上描述,用于示出和說明的目的。這并非是窮舉并且不把本發(fā)明限制在所公開的精確形式。按照以上教導可以進行修改和變化,或者通過實施本發(fā)明可得到這些修改和變化。例如,所描述的實現方式包括軟件,但是當前實現方式可以被實現為硬件和軟件的組合或由硬件單獨實現。此外,由程序所執(zhí)行的說明性處理步驟可以依照不同于上述的次序執(zhí)行,并且可以包括附加處理步驟。本發(fā)明的范圍由權利要求書及其等效物來定義。
當介紹本發(fā)明或其優(yōu)選實施例(一個或多個)的元素時,“一”、“一個”、“這個”和“所述”意指存在一個或多個該元素。術語“包括”、“包含”和“具有”意指包括在內的并且意味著可以存在除所列出元素之外的另外元素。
在不脫離本發(fā)明范圍的情況下可以在以上構造中進行各種改變,在以上描述或附圖中示出的所有內容應當被解釋為說明性的而沒有限制性的意義。
權利要求
1.一種在數據處理系統(tǒng)中用于標識數據流中的重復內容的方法,所述方法包括步驟為所述數據流的多個部分中的至少一個部分計算散列函數;響應于所計算的散列函數結果,增加多個計數器中的至少一個計數器,每個計數器對應于相應計算的散列函數結果;當所述多個計數器中的至少一個超過計數值時標識所述重復內容;并且驗證所標識的重復內容不是良性串。
2.如權利要求1所述的方法,其中計算所述散列函數包括為所述數據流的多個部分并行地計算多個散列函數。
3.如權利要求2所述的方法,其中所述多個計數器位于多個存儲體中。
4.如權利要求3所述的方法,還包括步驟當位于相同存儲體中的多個計數器要在相同的時鐘周期內被增加時,確定哪個計數器被增加的優(yōu)先級。
5.如權利要求1所述的方法,還包括步驟過濾所述數據流的多個部分中的至少一個部分以去除預定的數據。
6.如權利要求1所述的方法,還包括步驟使用計數平均來周期性減小所述多個計數器中的每個。
7.如權利要求1所述的方法,還包括步驟確定所標識的重復內容是否為假標識。
8.如權利要求7所述的方法,其中通過把所標識的重復內容與先前標識的重復內容相比較來確定所標識的重復內容是否為假標識。
9.如權利要求8所述的方法,其中先前標識的重復內容被存儲在遠離本地存儲器的存儲器中,該本地存儲器包括所標識的重復內容。
10.如權利要求1所述的方法,其中使用流水線來增加所述多個計數器中的至少一個。
11.如權利要求1所述的方法,其中所述重復內容是蠕蟲特征碼。
12.如權利要求1所述的方法,其中所標識的重復內容具有非預定義的特征碼。
13.如權利要求1所述的方法,其中所述重復內容是病毒特征碼。
14.如權利要求1所述的方法,其中所述重復內容是垃圾郵件特征碼。
15.如權利要求1所述的方法,其中所述重復內容是經由網絡重復交換的內容。
16.如權利要求1所述的方法,其中所述重復內容是多個訪問網站的用戶的出現。
17.一種用于標識數據流中重復內容的系統(tǒng),所述系統(tǒng)包括散列函數計算電路,用于為所述數據流的多個部分中的至少一個部分計算散列函數;多個計數器,響應于所計算的散列函數結果,增加多個計數器中的至少一個計數器,每個計數器對應于相應計算的散列函數結果;重復內容標識器,用于當所述多個計數器中的至少一個超過計數值時標識所述重復內容;和驗證器,用于驗證所標識的重復內容不是良性串。
18.如權利要求17所述的系統(tǒng),其中計算所述散列函數包括為所述數據流的多個部分并行地計算多個散列函數。
19.如權利要求18所述的系統(tǒng),其中所述多個計數器位于多個存儲體中。
20.如權利要求19所述的系統(tǒng),包括優(yōu)先級編碼器,用于當在相同的時鐘周期內使位于相同存儲體中的多個計數器增加時,確定哪個計數器被增加的優(yōu)先級。
21.如權利要求17所述的系統(tǒng),包括過濾器,用于過濾所述數據流的多個部分中的至少一個部分以去除預定的數據。
22.如權利要求17所述的系統(tǒng),其中使用計數平均來周期性減小所述多個計數器中的每個。
23.如權利要求17所述的系統(tǒng),包括分析器,用于確定所標識的重復內容是否為假標識。
24.如權利要求23所述的系統(tǒng),其中通過把所標識的重復內容與先前標識的重復內容相比較來確定所標識的重復內容是否為假標識。
25.如權利要求24所述的系統(tǒng),其中先前標識的重復內容被存儲在遠離本地存儲器的存儲器中,該本地存儲器包括所標識的重復內容。
26.如權利要求17所述的系統(tǒng),其中使用流水線來增加所述多個計數器中的至少一個。
27.如權利要求17所述的系統(tǒng),其中所述重復內容是蠕蟲特征碼。
28.如權利要求17所述的系統(tǒng),其中所標識的重復內容具有非預定義的特征碼。
29.如權利要求17所述的系統(tǒng),其中所述重復內容是病毒特征碼。
30.如權利要求17所述的系統(tǒng),其中所述重復內容是垃圾郵件特征碼。
31.如權利要求17所述的系統(tǒng),其中所述重復內容是經由網絡重復交換的內容。
32.如權利要求17所述的系統(tǒng),其中所述重復內容是多個訪問網站的用戶的出現。
33.一種用于標識數據流中的重復內容的系統(tǒng),所述系統(tǒng)包括用于為所述數據流的多個部分中的至少一個部分計算散列函數的裝置,所述數據流的至少一個部分被從中去除良性字符以防止把良性串標識為重復內容;用于響應于所計算的散列函數結果來增加多個計數器中的至少一個計數器的裝置,每個計數器對應于相應計算的散列函數結果;用于當所述多個計數器中的至少一個超過計數值時標識所述重復內容的裝置;和用于驗證所標識的重復內容不是良性串的裝置。
全文摘要
按照本發(fā)明的方法和系統(tǒng)用于標識數據流中的重復內容。為所述數據流的多個部分中的至少一個部分計算散列函數。所述數據流的至少一個部分被從中去除良性字符以防止把良性串標識為重復內容。響應于所計算的散列函數結果來增加多個計數器中的至少一個計數器。每個計數器對應于相應計算的散列函數結果。當所述多個計數器中的至少一個超過計數值時標識所述重復內容。驗證所標識的重復內容不是良性串。
文檔編號G06F21/56GK101031876SQ200580033049
公開日2007年9月5日 申請日期2005年8月24日 優(yōu)先權日2004年8月24日
發(fā)明者巴拉斯·馬德胡蘇丹, 約翰·W·洛克伍德 申請人:華盛頓大學