用可重新配置硬件进行内容检测的方法和系统的制作方法

文档序号:6656937阅读:212来源:国知局
专利名称:用可重新配置硬件进行内容检测的方法和系统的制作方法
技术领域
本发明总体上涉及网络通信领域,并且尤其涉及用于检测在经由网络所转送的数据中内容的方法和系统。
背景技术
因特网蠕虫(worm)通过利用在操作系统以及在系统上所运行的其它软件中的漏洞来工作。攻击会损害安全性并使网络性能降级。它们的影响包括由于系统停机时间和工人无法工作所导致的商业上的巨大经济损失。预计在未来用于使网络免受恶意代码危害的系统会成为关键因特网基础设施的一部分。当前,被称作入侵检测和阻止系统(Intrusion Detection and Prevention Systems IDPS)的这些系统通常只过滤先前标识的蠕虫,所以这些系统的作用很有限。

发明内容
根据本发明的方法和系统检测网络通信业务流量中频繁出现的内容,诸如蠕虫特征码(worm signature)。用硬件来实现内容检测,这与常规的基于软件的方法相比较提供了更高的吞吐量。扫描在网络中经由数据流所发送的数据来标识类似内容的模式(pattern)。频繁出现的数据模式被标识并报告为可能是蠕虫特征码或其它类型的特征码。可以并行扫描数据以提供高吞吐量。通过把几个数据字节窗(window ofbytes)并行散列到芯片内(on-chip)块存储器来维持吞吐量,其中可以并行更新每个芯片内块存储器。可以把所标识的内容与在芯片外(off-chip)存储器中所存储的已知特征码相比较来确定是否存在假肯定(false positive)。由于按照本发明的方法和系统可标识频繁出现的模式,所以它们不局限于标识已知的特征码。
依照根据本发明的方法,提供了一种在数据处理系统中用于标识数据流中的重复内容的方法。所述方法包括步骤为所述数据流的多个部分中的至少一个部分计算散列函数;响应于所计算的散列函数结果来使多个计数器中的至少一个计数器增加,每个计数器对应于相应计算的散列函数结果;当所述多个计数器中的至少一个超过阈值时标识所述重复内容;并且验证所标识的重复内容并非是良性串(benignstring)。
依照根据本发明的系统,提供了一种用于标识数据流中的重复内容的系统。所述系统包括散列函数计算电路,用于为所述数据流的多个部分中的至少一个部分计算散列函数;多个计数器,响应于所计算的散列函数结果来使多个计数器中的至少一个计数器增加,每个计数器对应于相应计算的散列函数结果;重复内容标识器,用于当所述多个计数器中的至少一个超过计数值时标识所述重复内容;和验证器,用于验证所标识的重复内容并非是良性串。
依照根据本发明的系统,提供了一种用于标识数据流中的重复内容的系统。所述系统包括用于为所述数据流的多个部分中的至少一个部分计算散列函数的装置;用于响应于所计算的散列函数结果来使多个计数器中的至少一个计数器增加的装置,每个计数器对应于相应计算的散列函数结果;用于当所述多个计数器中的至少一个超过计数值时标识所述重复内容的装置;和用于验证所标识的重复内容并非是良性串的装置。
本领域技术人员当考察以下附图和具体实施方式
时,本发明的其它特征变得更加清楚。意在把所有这种附加系统、方法、特征和优点包括在本说明书中、本发明的范围内,并且通过权利要求书来保护。


并入并构成此说明书一部分的附示了本发明的实现方式,并且连同说明书一起用来解释本发明的优点和原理在附图中,图1A是按照本发明用于执行内容检测的系统的框图;图1B是按照本发明示出特征码检测设备怎样处理数据流的功能框图;图2是按照本发明的特征码检测设备的框图;图3是按照本发明的计数处理器的框图;图4是按照本发明的字符过滤器的框图;图5是按照本发明的字节移位器的框图;图6是按照本发明包含良性字符串的控制分组的框图;图7是按照本发明的大计数向量的框图;图8是更详细的图7的大计数向量的框图;图9是按照本发明的流水线的框图;图10是用于描绘并行处理数据流的字节的功能框图;图11示出了优先级编码器怎样在没有冲突的情况下处理数据的例子;图12示出了优先级编码器怎样在具有冲突的情况下处理数据的例子;图13是按照本发明的分析器的框图;图14是按照本发明的分析器状态的状态图;和图15是从按照本发明的报警产生器所发出的控制分组的框图。
遍及几个附图,相应的附图特征码指代相应的部分。
具体实施例方式
现在按照如附图中所图示的本发明来详细地参考依照方法、系统和制造产品的实现方式。
按照本发明的方法和系统检测数据流中频繁出现的内容,诸如蠕虫特征码,同时抵抗多态技术,诸如由蠕虫作者所使用的那些技术。为了以高速实现内容检测,用硬件来实现系统。
图1A是适于与按照本发明的方法和系统一起使用的说明性数据处理系统100的框图。如同所示,多个主机被连接到多个子网络。即,主机102、104和106被连接到子网络108;主机110和112被连接到子网络114;并且主机116和118被连接到子网络120。在各自的子网络之间以及在所述子网络和更大网络128(诸如因特网)之间的通信业务流量经过路由器126。虚拟局域网(VLAN)集中器122集中进入路由器126的网络通信业务流量。通过把特征码检测设备124放置在路由器和VLAN集中器122之间,可以为内容扫描在子网络之间的通信业务流量。
在图1A的说明性例子中,特征码检测设备124是现场可编程的端口扩展器(field-programmable port extender,FPX)平台。FPX平台允许通过使用大现场可编程门阵列(field programmable gate array,FPGA)130(诸如Xilinx XCV2000E FPGA)来处理高速网络流。下述特征码检测电路可以被下载到FPGA 130中以便按高达2.5千兆位每秒的通信业务量速率来处理网络流。使用32位宽数据字来把网络通信业务计时(clock)到FPGA 130中。本领域技术人员应当理解,可以使用不同于这里所描述的硬件和软件组件来实现按照本发明的方法和系统。例如,可以采用不同于FPX平台的其他设备来实现特征码检测设备。
在这里所描述的说明性例子中,参考检测蠕虫特征码来说明,但按照本发明的方法和系统并不局限于此。按照本发明的方法和系统可标识数据流中的重复内容。重复内容可以是但不局限于蠕虫;病毒;大量访问网址人群的出现;存在被发送到多个收件人的大量类似的电子邮件,诸如垃圾邮件;经由对等网络所重复交换的内容,诸如音乐或视频;及其它模式的重复内容。
图1B是按照本发明示出特征码检测设备124怎样处理数据流的功能框图。在说明性例子中,现场可编程门阵列130包括字符过滤器150、散列处理器152、计数向量(count vector)154、时间平均处理器156、阈值分析器158、芯片外存储器分析器160和报警产生器162的功能组件。这些功能组件提供了现场可编程门阵列130的说明性的高级功能视图。下面参考图3-15更详细地描述了现场可编程门阵列130及其功能。
如在说明性例子中所示,字符过滤器150从数据流170中采样数据,并且滤出不太可能是二进制数据一部分的字符,从而提供N字节的数据串172。如下面将更详细地描述,蠕虫典型情况下由二进制数据构成。这样,字符过滤器150滤出不太可能表现蠕虫特征码特性的一些字符。散列处理器152对N字节串172计算k位散列,并且把所产生的特征码散列到计数向量154。如下面将更详细地描述,计数向量154可以包括多个计数向量。当特征码散列到计数向量154时,由散列所指定的计数器被增加。按周期性间隔,这里被称作测量间隔,每个计数向量中的计数被减少等于或大于由于正常通信业务流量所到达平均数的量,如按照时间平均处理器156所确定的。当计数向量154到达预定阈值时,如阈值分析器158所确定的,芯片外存储器分析器160把有害串(offending string)散列到芯片外存储器212中的表。下一次出现相同的串时,在芯片外存储器212中的相同地点进行散列以便比较这两个串。如果两个串是相同的,那么产生报警。如果两个串是不同的,那么利用新的串来重写芯片外存储器212中的串。因此,芯片外存储器分析器160可以通过减少由于半频繁出现的串所导致的报警来减少报警数目。当接收到报警消息时,报警产生器162向外部机器发送包括有害特征码(offending signature)的控制分组以用于进一步分析。
图2是用于更详细地示出特征码检测设备124的框图。在说明性的例子中,用于在网络上检测信号的电路在现场可编程门阵列130中被实现为被称作worm_app的应用202。worm_app 202适于在分层协议包装(wrapper)204的架构内。如下面将更详细地描述,计数处理器206从分层协议包装204接收包装信号,把所述包装信号分析转换为字节流,把所述字节流散列到计数向量,并且使计数器增加。计数处理器206进一步对所检测的蠕虫特征码数目进行计数平均并且处理良性串。计数处理器206输出信号count_match,对于超过阈值以及相应的10字节长的蠕虫offending_signature的特征码来说该信号被断言为高。另外,计数处理器206可以向分层协议包装204输出信号。
实现worm_app电路,使得它提供高吞吐量和低延迟。为了达到这一点性能,worm_app电路可以具有流水线。在说明性例子中,流水线长度是27个时钟周期并且可以如下分解-FIFO延迟3个时钟周期-计数处理器延迟11个时钟周期-分析器延迟13个时钟周期分析器208接收来自计数处理器206的输入信号并且与在诸如静态随机存取存储器(static random access memory SRAM)之类的芯片外存储器212中所存储的散列表210有接口。如果count_match被断言为高,那么由分析器208来访问芯片外存储器212。如果在芯片外存储器212的散列表210中标识了offending_signature,那么分析器208输出被断言为高的信号analyzer_match。报警产生器214接收来自分析器208的analyzer_match信号并且把它从计数处理器所接收的包装信号传递到分层协议包装204。当analyzer_match信号被断言为高时,报警产生器214发出包含有offending_signature的控制分组。
在图3中示出了说明性计数处理器206的组件级视图。计数处理器206包括分组缓冲器302。如下面将描述,当块RAM被占用并且所述块RAM内的计数器无法被增加时,分组缓冲器302在计数平均周期期间缓存分组。在计数平均周期以外,分组缓冲器302经由通信业务传递。字符过滤器304判定哪些字节要包括在蠕虫特征码中。字节移位器306根据字符过滤器304的输出来汇编可以计数的输入串。大计数向量308散列从字节移位器306所接收的字符串,使相应的计数器增加并且按照需要产生报警。下面将更详细地描述计数处理器的每个功能组件。
在图4的框图中更详细地示出了字符过滤器304。字符过滤器304可使得所选择的字符从散列计算中被排除。由于蠕虫典型情况下由二进制数据构成,所以特征码检测设备可以忽略数据流中的一些字符,所述字符非常不可能是二进制数据的一部分。这些字符例如包括数据流中的空白、换行符、换行和空格。文本文档例如包含用于填充的大量空格和空行。要避免这些字符的另一原因在于空行或空格的字符串不必表现可以用来标识蠕虫的良好特征码的特性。优选使用不会出现在文档中的串。按照本发明的方法和系统不局限于用于避免有害特征码的启发式方式。可以实现的其它方式包括但不局限于标识并忽略电子邮件消息中的文本,预处理整个串,或者流编辑以搜索规则的表达式并用串来代替它们。
字符过滤器304接收32位数据字data_in以及信号data_en来作为输入,所述信号data_en用于标识data_in中的数据是否有效。字符过滤器304把32位字拆分为4个单个字节(byte1到byte4)并且输出相应的信号以便表明所述字节是否包含有效数据(byte1 valid到byte4valid)。如果它是字符过滤器304正寻找的字符之一,那么它被认为是无效的。如果例如4字节字符串a、newline、b、null被字符过滤器304作为输入来接收,并且假定字符过滤器304被配置为忽略换行符和空字符,那么字符过滤器304的相应输出信号可能会是Byte1a,Byte1有效高
Byte2newline,Byte2有效低Byte3b,Byte3有效高Byte4null,Byte4有效低图5是说明性字节移位器306的框图。字节移位器306从字符过滤器304读入值并且输出特征码的字节移位版本,可能会被大计数向量308散列。字节移位器306还输出需要被散列的字节数目(num_hash)以及用于告诉大计数向量308何时开始计数平均的信号。字节移位器306接受从字符过滤器304输出的数据。在说明性例子中,输出特征码是13字节长,并且每个特征码均包含4个10字节的重叠字符串。
下面的说明性例子描述字节移位器的功能。如果输入是“NIMDAADMIN123”后面跟随来自先前例子的字符串a,newline,b,null,那么字符串的字节移位版本可能会是“MDAADMIN123ab”并且num_hash可能会是2。如下所述,num_hash值由大计数向量308来使用。
为了维护所检测特征码数目的运行平均,周期性减少所检测特征码的计数。在说明性例子中,这在已经处理了固定数目的字节(诸如2.5兆字节)之后在分组边界发生。字节移位器306跟踪已经被散列到大计数向量308的字节数目。当所处理的字节总数超过阈值时,那么字节移位器306经历下列步骤1.字节移位器308等待要从分组缓冲器302读取的当前分组的最后字,继而停止从分组缓冲器302的读取。从此时起,进入计数处理器206的通信业务量被暂时缓存在分组缓冲器302中。这样做是由于当进行计数平均时无法散列并计数这些字节。
2.当当前分组的最后字已经被大计数向量308处理时,字节移位器306把subtract_now信号断言为高。此信号由大计数向量308用来开始计数平均。
当来自包装的start of payload(有效负载开始)信号被断言为高时,字节移位器306把count_now信号断言为高。当来自包装的end of frame(帧末尾)信号被断言为高时,count_now被断言为低。据此,可以计数仅包括有效负载的字节。
字节移位器306还可以确定在数据流中是否存在良性串。诸如来自Microsoft Update的代码段之类的良性串可以通过作为一组串被编程到字节移位器306中来识别,这种串尽管通常出现在网络上,然而并非是蠕虫。通过经由数据流在字节移位器306接收良性串分组来把良性串加载到大计数向量308中。例如当分组在端口1200上被发送到目的地址192.168.200.2时,字节移位器306假定所述分组包含良性串的13位散列值。使用散列值的高5位来引用32个块RAM之一并且使用低8位来引用每个块RAM内256个计数器之一。在图6中示出了包含良性串的说明性控制分组602的图。按benign_string输出有效负载的第一字的低13位并且benign_valid被断言为高。由于控制分组包含不必计数的良性串,所以count_now被断言为低。benign_valid和count_string信号由大计数向量308用来避免计数良性串,如下面所解释。
图7是说明性大计数向量308的框图。字节移位器306的输出是大计数向量308的输入。大计数向量308包含逻辑,用于散列输入的字符串、解决在块RAM之间的冲突、从块RAM中进行读取、使计数器增加并且写回到块RAM。在说明性例子中,大计数向量308包括32个块RAM,每个块RAM具有256个计数器,每个计数器都是16位宽。利用此大小的说明性计数器,可以支持高达64K的计数。下面参考图8将更详细地描述大计数向量308的功能组件。
说明性的大计数向量308每个时钟周期对四个10字节字符串计算四个散列值,所述四个10字节字符串包括在13字节的信号字符串中。每个时钟周期计算一个以上散列值以维护吞吐量。由于所跟踪的特征码可能出现在有效负载中的任何点,并且它们被散列到相同的地点而不管它们在分组中的偏移如何,所以在所有情况下使用相同的散列函数。每个散列函数产生13位的值。
为了检测经常出现的内容,大计数向量308对流送数据的10字节(80位)窗上计算k位散列。为了计算所述散列,在配置计数处理器的时候产生一组k×80个随机二进制值。所述散列的每个位被计算为对80位输入串的随机选择子集的异或(XOR)。通过使散列函数随机化,对手无法确定可能会引起过多散列冲突的字节模式。对每个有效负载的多个散列计算确保简单的多态方法难以奏效。
在说明性实施例中,使用称作H3的通用散列函数。散列函数H3被定义为h(X)=d1·x1d2·x2d3·x3...db·xb在以上公式中,b是按位来计量的字符串长度。在说明性例子中,b=80位。(d1,d2,d3,...db)是k×80个随机二进制值组。随机二进制值在
范围内(其中n是按位计量的单个计数器大小,并且2m是所使用块RAM的数目)。换句话说,d值具有与要产生的散列值相同的范围。相对于输入对该随机值组所执行的XOR功能生成散列值,其对输入值来说具有一定分布。
为了计算所述散列,对于字符串中的每个位来说,如果该位等于‘1’,那么该位相关联的随机值与当前的结果相XOR,以获得散列值。例如,给定d=(101;100;110;011)并且输入串X=1010,那么相应的3位散列函数为101 XOR 110=011。
大计数向量308使用散列值来索引到计数器向量中,所述计数器包含在诸如计数向量802之类的计数向量中。当某个特征码散列到计数器时,这使得计数器增加一。按周期性间隔,这里可以被称作测量间隔,每个计数向量中的计数被减少等于或大于由于正常通信业务流量所到达平均数的量。当计数器到达预定阈值时,分析器208访问芯片外存储器212,如下面将描述,并且计数器被复位。对于Xilinx FPGA上的电路的说明性实现方式来说,通过把双端口的芯片内块RAM配置为存储单元阵列来实现计数向量。每个说明性存储器在每个时钟周期可以执行一个读取操作和一个写入操作。如图9所示,实现三级流水线在每个时钟周期读取、增加并写入存储器。由于该特征码在每个时钟周期都会改变并且由于每个特征码的每次出现都被计数,所以从存储器子系统来看需要高性能。双端口的存储器允许写回一个特征码的出现次数,同时正读取另一特征码的出现。
为了标出测量间隔的末尾,大计数向量308可以周期性复位计数器。在经过了固定的字节窗之后,通过把值写为零来复位所有计数器。然而,此方法具有缺陷。如果在测量间隔末尾的附近时对应于恶意特征码的计数器值刚好在阈值以下,那么复位此计数器会使该特征码不会被检测出来。因此作为替换方式,说明性大计数向量308周期性从所有计数器减去平均值。平均值被计算为所期望的字节数目,所述字节可以在间隔内被散列到每个计数器。如下所述,此方法要求使用比较器和减法器。
为了实现高吞吐量,可以在每个时钟周期内处理多个串。为了允许并行执行多个存储器操作,如图10所示在内容检测系统130中使用多个块RAM把计数向量分段到多个存储体(bank)中。使用散列值的较高位来确定要访问哪个块RAM。使用较低位来确定在给定块RAM内哪个计数器要增加。多于一个的字符串可能散列到相同的块RAM。这种情况这里被称作“存储体冲突”。可以使用优先级编码器来解决存储体冲突。由于优先级编码器的操作,对于按OC-48行速率运行的系统来说,每个时钟周期可能不会计数在1和3个字符串之间。冲突的概率c可以用下式表示c=1-Πi=N-B+1N-1iN]]>在上面的公式中,N是所使用的块RAM的数目并且B是每个时钟周期到来的字节数目。
诸如优先级编码器804之类的优先级编码器解决当四个散列值中的两个或多个的较高5个位相同时可能发生的冲突。优先级编码器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跟踪哪个特征码触发了所述报警。这通过使用对应于bram_num和ctr_addr信号的信号sign1到sign4来实现。在说明性例子中,信号sign1到sign4可以具有以下五个值之一一、二、三和四对应于13字节信号字符串中的第一、第二、第三和第四特征码。值八表示良性串。
值num_hash确定了其中需要解决冲突的块RAM的数目。例如如果此信号值为二,那么这意味着字节移位器306已经按两个字节移位了该特征码。因此,由于另外两个特征码已经被计数,所以只计数两个特征码。
在图11中示出了在没有冲突的情况下优先级编码器的功能的说明性例子。在说明性例子中,在第一时钟周期内,所有四个输入字节被字符过滤器认为是有效的。因此,所有四个特征码被散列,并且sign1到sign4具有有效值连同它们相应的bram_num和ctr_addr信号。在第二时钟周期内,四个输入字节中只有两个被字符过滤器认为是有效的。因此,只有两个特征码被散列。因此只有sign1和sign2具有关于特征码3和4的有效值。
在图12中示出了在存在冲突的情况下优先级编码器的功能的说明性例子。如说明性例子中所示,被增加的块RAM在两种情况下冲突。在这两种情况中,优先一个特征码来解决冲突。一个特征码相对于另一个特征码的优先级在大计数向量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被断言为高时,大计数向量通过每个计数器进行迭代并且从中减去平均值。如先前所提及,平均值被计算为所期望的在每个间隔中可能会散列到计数器的字节数目。如果给定计数器的值小于平均值,那么它被初始化为零。如果给定计数器的值包含与良性串相关联的特定字段,那么它不被减除。就像初始化计数向量一样,并行性确保了在256个时钟周期内实现减法。
为了支持良性串,利用超出阈值的值来填充对应于良性串的散列的计数器。当计数器具有此值时,电路跳过所述的增加和写回步骤。
对于有限数目的常见字符串来说,可以不计数散列存储桶(bucket),并且从而可以避免发送报警。但是随着良性串的数目接近可用计数器的数目,因为只有较少的计数器用于检测特征码,所以降低了有效性。对于较大数目的不常见字符串,可以在下游软件中避免假肯定产生。为了减少被发送到下游软件的假肯定,可以由控制主机来处理是良性的但是不那么频繁出现的字符串。
返回参照图8,读取级806的输入是来自优先级编码器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字节字符串、比较字符字符串并且写回该字符串所花费的时间),count_match抑制信号确保在两个count_match信号之间存在至少13个时钟周期的间隔。
在增加和写回级中,存在四个说明性功能,增加和写回级可以按流水线执行执行。在所有情况下,ctr_data是被写回到计数向量的值。四个说明性功能如下-如果inc信号已经被断言为高,那么ctr_data的值被设置为比count_vector的输出多一。
-如果sign值为8,那么与良性串相关联的值被指定成ctr_data。在说明性例子中,此值为0xFFFF。
-如果计数向量的输出为0xFFFF,那么把相同的值指定给ctr_data以便保存良性串。
-ctr_data的缺省值为0。如果计数器已经超过阈值,那么所述0值不会改变。
valid(有效)信号(例如,b1_valid)当被反转(flop)适当的次数时被用为计数向量的写使能的输入(即,set_ctr)。
在放置和路由期间,可以依照承受大传播延迟的这种方式来放置一些块RAM。这可能使所述电路不满足定时约束。在说明性例子中通过把触发器包括到块RAM的输入和输出中来弥补此情况。在图8中没有示出附加的触发器以便保持简明。
当发现有害特征码时,大计数向量308输出count_match以及相应的特征码(sign_num)。计数处理器206反转string适当的次数来反映大计数向量308的延迟。当count_match被断言为高时,根据sign_num的值来选择offending_signature。
图13是说明性分析器208的框图。分析器208保留可疑的特征码并且估算确定的特征码多长时间出现一次。从而,分析器208可以减少由报警产生器214所发送的报警数目。为了这样,分析器确信越过阈值的计数器实际上是频繁出现字符串的结果。当计数器跨过阈值时,有害串被散列到芯片外存储器212中的表。使用上述方法对有害特征码计算17位散列值。芯片外存储器212数据总线是19位宽。散列值映射到地址信号的高17位。地址信号的低两位被改变以用来表示存储器中的三个连续字(所述存储器用来存储10字节字符串)。散列值用来索引到芯片外存储器的散列表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访问的多个有限状态。在图14中示出了用于分析器208的说明性有限状态机。下面解释在图14中所描绘的每个说明性状态。
idle是分析器208的默认状态。当count_match被断言为高时分析器208从此状态中转换出来。
prep_for_sram在此状态中请求许可访问芯片外存储器212。当许可被授权时分析器208从此状态中转换出来。
send_read_request如在图14的说明性例子中所示,实现三种send_read_request状态。在发送读取请求的所有三种状态中,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被断言为低,并且如同读取状态一样,mod1_addr被设置为根据offending_signature的散列所导出的值。
一旦mod1_gr升高,那么分析器208中的每次转变就在时钟边沿发生。
芯片外存储器212用来存储完整的串(未散列版本),在说明性例子中所述串为10字节(80位)长。分析器208尽管比软件要快数百倍,然而仍然要求几个附加时钟周期来访问芯片外存储器212,这可能会使数据处理流水线停滞。在说明性例子中,访问芯片外存储器212中的10字节字符串要求13个时钟周期。
可以实现每当从芯片外存储器212执行存储器读取时就使数据处理流水线停滞的电路。然而,使流水线停滞具有缺点。相对于整个分组有效负载来对字节窗计算散列值的目的在于处理多态蠕虫的情况。但是考虑更普遍的非多态蠕虫的情况,其中蠕虫通信量的分组有效负载近乎是完全相同的。在这种情况下,按照本发明的方法和系统可以对整个分组有效负载产生一系列连续匹配。然后为了每个匹配使流水线停滞可能会造成严重的吞吐量降级,这是由于每个芯片外存储器212访问要花费多个时钟周期。实际上,这样做可能对攻击者有益,这是由于系统管理员可能被迫关掉系统。在说明性例子中,解决方案在于当从芯片外存储器212进行读取时并不使流水线停滞,而是跳过进一步的存储操作直到先前操作已经完成。因此,一旦产生报警,那么在下一13个时钟周期(在读取和写回到芯片外存储器212中所涉及的等待时间)上的数据不会导致产生进一步的报警。
在测量间隔内,所观察的特征码数目可以近似等于所处理的字符数目。因为由于存储体RAM冲突而跳过一小部分字符,所以所处理的字符数目可能较少。给定测量间隔长度来确定阈值的问题可以被简化为确定概率的界限,所述概率为当m个元素被散列到具有b个存储桶的表时被散列到相同存储桶的元素数目超过i的概率。所述界限由下式给出b(emib)i]]>在说明性例子中,m个特征码被散列到b个计数器。在以上表示式中,i是阈值。从而,给定测量间隔长度,可以改变阈值,来使计数器超过阈值的概率的上限可接受地小。这随后减少了不必要的芯片外存储器212访问的数目。因此,由于到来的特征码随机地散列到计数器,所以对于适当大的阈值来说不规则的特征码可能使计数器超过所述阈值。计数器精确地接收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兆字节,所以计数器的数目b是8192,并且阈值i是850,对于随机通信业务流量来说计数器溢出的概率范围为1.02×10-9。据此,对于在间隔内所处理的通信业务来说,计数器溢出的概率如期望的那么小。
当从分析器208接收报警消息时,报警产生器214向在已知的UDP/IP端口上监听的外部数据处理系统发送用户数据报协议(userdatagram protocol,UDP)控制分组。该分组可能包含该有害特征码(对其计算散列的字节的字符串)。当analyzer_match被断言为高时,报警产生器214发出该控制分组。据此,然后可以把最频繁出现的字符串标示成可疑的。图15是从报警产生器214所发出的说明性控制分组1502的框图。
因此,按照本发明的方法和系统检测网络通信业务流量中频繁出现的特征码。通过用硬件来实现内容检测,可以实现高吞吐量。此外,通过利用由硬件所提供的并行性,与典型的基于软件的方法相比较可以扫描更大量的通信业务流量。通过把几个字节窗并行散列到芯片级块存储器来维持吞吐量,其中可以并行更新每个芯片级块存储器。这不同于传统的基于软件的方法,其中跟随有计数器更新的散列可能需要顺序执行几个指令。此外,使用芯片外存储器分析器提供了低的假肯定率。对每个分组进行多个散列还帮助系统阻碍简单的多态测量。
先前的网络监视工具依赖系统管理员的直觉来检测网络通信业务流量中的异常。按照本发明的方法和系统自动检测网络通信业务流量中对应于频繁出现内容的峰值。
已经给出了本发明实现方式的以上描述,用于示出和说明的目的。这并非是穷举并且不把本发明限制在所公开的精确形式。按照以上教导可以进行修改和变化,或者通过实施本发明可得到这些修改和变化。例如,所描述的实现方式包括软件,但是当前实现方式可以被实现为硬件和软件的组合或由硬件单独实现。此外,由程序所执行的说明性处理步骤可以依照不同于上述的次序执行,并且可以包括附加处理步骤。本发明的范围由权利要求书及其等效物来定义。
当介绍本发明或其优选实施例(一个或多个)的元素时,“一”、“一个”、“这个”和“所述”意指存在一个或多个该元素。术语“包括”、“包含”和“具有”意指包括在内的并且意味着可以存在除所列出元素之外的另外元素。
在不脱离本发明范围的情况下可以在以上构造中进行各种改变,在以上描述或附图中示出的所有内容应当被解释为说明性的而没有限制性的意义。
权利要求
1.一种在数据处理系统中用于标识数据流中的重复内容的方法,所述方法包括步骤为所述数据流的多个部分中的至少一个部分计算散列函数;响应于所计算的散列函数结果,增加多个计数器中的至少一个计数器,每个计数器对应于相应计算的散列函数结果;当所述多个计数器中的至少一个超过计数值时标识所述重复内容;并且验证所标识的重复内容不是良性串。
2.如权利要求1所述的方法,其中计算所述散列函数包括为所述数据流的多个部分并行地计算多个散列函数。
3.如权利要求2所述的方法,其中所述多个计数器位于多个存储体中。
4.如权利要求3所述的方法,还包括步骤当位于相同存储体中的多个计数器要在相同的时钟周期内被增加时,确定哪个计数器被增加的优先级。
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.一种用于标识数据流中重复内容的系统,所述系统包括散列函数计算电路,用于为所述数据流的多个部分中的至少一个部分计算散列函数;多个计数器,响应于所计算的散列函数结果,增加多个计数器中的至少一个计数器,每个计数器对应于相应计算的散列函数结果;重复内容标识器,用于当所述多个计数器中的至少一个超过计数值时标识所述重复内容;和验证器,用于验证所标识的重复内容不是良性串。
18.如权利要求17所述的系统,其中计算所述散列函数包括为所述数据流的多个部分并行地计算多个散列函数。
19.如权利要求18所述的系统,其中所述多个计数器位于多个存储体中。
20.如权利要求19所述的系统,包括优先级编码器,用于当在相同的时钟周期内使位于相同存储体中的多个计数器增加时,确定哪个计数器被增加的优先级。
21.如权利要求17所述的系统,包括过滤器,用于过滤所述数据流的多个部分中的至少一个部分以去除预定的数据。
22.如权利要求17所述的系统,其中使用计数平均来周期性减小所述多个计数器中的每个。
23.如权利要求17所述的系统,包括分析器,用于确定所标识的重复内容是否为假标识。
24.如权利要求23所述的系统,其中通过把所标识的重复内容与先前标识的重复内容相比较来确定所标识的重复内容是否为假标识。
25.如权利要求24所述的系统,其中先前标识的重复内容被存储在远离本地存储器的存储器中,该本地存储器包括所标识的重复内容。
26.如权利要求17所述的系统,其中使用流水线来增加所述多个计数器中的至少一个。
27.如权利要求17所述的系统,其中所述重复内容是蠕虫特征码。
28.如权利要求17所述的系统,其中所标识的重复内容具有非预定义的特征码。
29.如权利要求17所述的系统,其中所述重复内容是病毒特征码。
30.如权利要求17所述的系统,其中所述重复内容是垃圾邮件特征码。
31.如权利要求17所述的系统,其中所述重复内容是经由网络重复交换的内容。
32.如权利要求17所述的系统,其中所述重复内容是多个访问网站的用户的出现。
33.一种用于标识数据流中的重复内容的系统,所述系统包括用于为所述数据流的多个部分中的至少一个部分计算散列函数的装置,所述数据流的至少一个部分被从中去除良性字符以防止把良性串标识为重复内容;用于响应于所计算的散列函数结果来增加多个计数器中的至少一个计数器的装置,每个计数器对应于相应计算的散列函数结果;用于当所述多个计数器中的至少一个超过计数值时标识所述重复内容的装置;和用于验证所标识的重复内容不是良性串的装置。
全文摘要
按照本发明的方法和系统用于标识数据流中的重复内容。为所述数据流的多个部分中的至少一个部分计算散列函数。所述数据流的至少一个部分被从中去除良性字符以防止把良性串标识为重复内容。响应于所计算的散列函数结果来增加多个计数器中的至少一个计数器。每个计数器对应于相应计算的散列函数结果。当所述多个计数器中的至少一个超过计数值时标识所述重复内容。验证所标识的重复内容不是良性串。
文档编号G06F21/56GK101031876SQ200580033049
公开日2007年9月5日 申请日期2005年8月24日 优先权日2004年8月24日
发明者巴拉斯·马德胡苏丹, 约翰·W·洛克伍德 申请人:华盛顿大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1