恶意代码检测的制作方法

文档序号:6596646阅读:251来源:国知局
专利名称:恶意代码检测的制作方法
恶意代码检测
背景技术
随着联网技术和互联网的到来,世界范围内的计算设备已经能够与彼此互相联络。虽然这提供了许多好处,但是已经存在某些问题。一个问题是除了其它类型的恶意计算机代码之外,诸如计算机病毒、特洛伊木马、蠕虫以及甚至垃圾邮件之类的恶意计算机代码还能够更容易地并且不合需要地传遍大量的计算设备。恶意计算机代码还能够被以简短的形式称为恶意代码或恶意软件。恶意代码通常可以被认为是被设计成在没有设备的拥有者或管理员的知情同意的情况下渗入计算设备的软件。恶意软件尤其是由计算机专业人员使用来意指各种形式的怀有敌意的、侵入的、恼人的和/或不想要的软件或程序代码的一般术语。


图1是根据本公开的实施例的、在其中执行恶意代码检测的设备的图。图2是根据本公开的实施例的、详细的图1的设备的处理流水线的图。图3是根据本公开的实施例的、详细的图1的设备的恶意代码检测器的图。图4是根据本公开的实施例的、用于恶意代码检测的方法的流程图。
具体实施例方式如在背景技术部分中所指出的那样,随着通过互联网和其它网络的计算设备的不断增加的互联性,恶意代码的传播已经变得有问题。因此,用户和网络管理员常常关心在代码能够被安装在一个给定的计算设备或多个计算设备上或以其他方式感染一个给定的计算设备或多个计算设备之前对这样的恶意代码进行检测。对于大的组织而言,代替或者除了努力在该组织内的每个计算设备处单独地检测恶意代码之外,在它们的网络到外部世界 (例如,互联网)的入口点处尝试恶意代码检测可能是有利的。然而,用来检测恶意代码的现有技术遭受某些缺点。在一种现有技术方法中,诸如交换机或路由器之类的联网设备的现有处理器、像通用计算机的计算设备、或另一类型的设备还承担必须检测恶意代码。同样地,处理器的其它任务可能被更慢地完成。换句话说, 降低了这样的设备的总体性能。在另一现有技术方法中,专用处理器被添加到网络设备、计算设备或另一类型的设备以便即使不是用于检测恶意代码检测的唯一目的也是主要目的。然而,添加专用处理器是昂贵的,并且通常导致由设备进行的更高能耗。此外,添加专用处理器可能仍未减轻在完成其它任务时降低设备性能的忧虑。例如,到设备的传入数据可以被临时地存储在队列内。在能够由该设备依照其现有任务处理这个数据之前,该数据首先被针对恶意代码来进行扫描。不能够依照该设备的现有任务来处理该数据,直到已经发生了这个恶意代码检测为止。因此,即使采用了专用处理器来执行恶意代码检测,该设备的总体性能也可能受损害。图1示出了克服这些缺点的根据本公开的实施例的代表性设备100。该设备100可以是联网设备,诸如交换机、路由器或其它类型的联网设备。设备100可以可替换地或额外地是计算设备,除了其他类型的计算设备之外,还有像通用计算机,诸如服务器计算设备、客户端计算设备、台式计算机和/或膝上型计算机。该设备100包括处理流水线102和恶意代码检测器104。流水线102和检测器104 二者至少以硬件来加以实现。在一个实施例中,流水线102和检测器104 二者单独地以硬件,诸如通过使用适当的专用集成电路(ASIC)、现场可编程门阵列(FPGA)以及其它类型的纯硬件部件来加以实现。在另一实施例中,在它们还是由处理器(其是硬件)运行以执行它们的相应功能的软件的范围内,流水线102和检测器104可以至少以硬件来加以实现。为了在设备100内处理数据,数据被移动通过流水线102,如由箭头106所指示的那样。这个处理与恶意代码的检测不相关。也就是说,移动数据通过流水线102以对该数据执行处理的目的与恶意代码的检测不相关。当数据被移动通过流水线102时对该数据执行处理,在所述流水线102中,数据被流水线102内运行的处理代理改变,该处理代理可以控制数据移动通过流水线102所依照的速率。例如,在设备100是像交换机或路由器的联网设备的情况下,数据可以是从设备 100为到其的网守的网络外部接收的传入数据分组。流水线102可以被用来修改这些数据分组的报头信息,从而使得分组被发送到网络内的合适的设备。例如,与万维网(WWW)请求有关的数据分组可以被发送到网络上的WWW服务器设备,与文件传输协议(FTP)请求有关的数据分组可以被发送到网络上的FTP服务器设备,等等。网络上的外部设备因此能够将该网络视为具有单个网络地址,然而实际上该网络由具有对应的(内部)网络地址的多个设备组成。流水线102因此在这个示例中被用来将传入数据分组的网络地址改变为将处理该数据分组的网络上的设备的内部网络地址。传入数据分组的网络地址到内部网络地址的修改是能够在流水线102内对这些数据分组执行的一种类型的处理。然而,与当数据被移动通过流水线102时该数据的处理并行地,当数据被移动通过流水线102时检测器104检测数据内的任何恶意代码,如由虚线108所指示的那样。当数据被移动通过流水线102时检测器104能够检测数据内的恶意代码,而不延迟数据进入、 通过以及离开流水线102的移动。在流水线102中被执行的数据处理独立于由检测器104 所执行的恶意代码检测。数据进入、移动通过以及退出流水线102而无需等待检测器104 执行其检测。在这方面,图1的实施例能够检测恶意代码而不降低像设备100的设备的总体性能。此外,图1的实施例不需要可能昂贵的和功耗强的专用处理器以用于恶意代码检测。相反地,检测器104能够经由与专用处理器相比消耗少得多的功率的成本低得多的硬件部件以硬件来加以实现。图1的实施例的额外好处是在至少某些情形下,进入设备100的所有数据都被移动通过流水线102以进行处理,从而使得检测器104检测所有这个数据内的恶意代码。在许多类型的常规技术中,相比之下,数据被抽查(即,被随机地或选择性地采样)以得到恶意代码的存在。虽然这样的数据采样能够被充分地改进以很有可能捕捉在数据内存在的所有恶意代码,但是其决不能够保证将检测到所有的恶意代码,因为不是进入设备100的所有数据都被检查。
图2更详细地根据本公开的实施例示出了处理流水线102。流水线102包括多个行202A、202B、202C、…、202N,其统称为行202。行202还可以被称为流水线102的级。行 202A是流水线102的第一行,而行202N是流水线102的最后一行。流水线102的每一行 202存储相同数量的字节。为了示例性目的,每一行202存储八个字节。然而,每一行202 可以存储不同数量的字节,诸如十六个字节、三十二个字节等等。等于每一行202能够存储的字节的数量的数据的多个字节在第一行202A处进入流水线102,并且在逐行基础上继续前进通过流水线102直到该数据离开最后一行202N为止,如由箭头106所指示的那样。例如,数据的第一个八字节在第一行202A处进入流水线 102。数据的这些第一个八字节然后向下级联到第二行202B,并且同时数据的第二个八字节在第一行202A处进入流水线102。接下来,数据的第一个八字节向下移动到第三行202C, 第二个八字节向下移动到第二行202B,并且数据的第三个八字节在第一行202A处进入流水线。这个处理继续,直到数据的第一个八字节进入并且然后离开流水线102的最后一行 202N为止,紧跟着第二个八字节进入并且然后离开最后一行202N,等等。在流水线102的任何给定行202处,数据可以被改变或处理。例如,如上文所指出的那样,可以在处理流水线102是网守联网设备100的一部分的情况下改变数据分组的报头信息。例如,网络地址A. B. C. D可以用网络地址E. F. G. H代替。网络地址A. B. C. D将网络的外部网络地址指定为设备100是其一部分的整体。网络地址E. F. G. H指定将要处理所讨论的数据分组的网络内的设备的内部网络地址。在图2中明确地调出了行202中的两个特定的行204和206,将与其相关地对由检测器104进行的恶意代码的检测进行描述。行204包括以字节208A开始并且以字节208H 结束的字节 208A、208B、208C、208D、208E、208F、208G 以及 208H。行 204 包括以字节 2081 开始并且以字节208P结束的字节208I、208J、208K、208L、208M、208N、2080以及208P。在基本的示例中,数据分组210被说成是由十二个字节208C-208N组成,其在图2中由阴影来指示。要注意的是,实际上,在至少某些情形下数据分组很有可能由更大数量的字节组成。图2中的行204和206以及数据分组210的明确调出示出了关于流水线102的行202的数据分组的两个方面。首先,数据分组能够跨越不止一行。例如,示例性的数据分组210跨越行204和206。其次,数据分组不必在行的第一字节处开始,也不必在行的最后字节处结束。例如,示例性的数据分组210在行204的第三个字节208C处开始,并且在行 206的第六个字节208N处结束。行204的第二个字节208B可以是前一个数据分组的结束字节,而行206的第七个字节2080可以是下一个数据分组的起始字节。图3更详细地根据本公开的实施例示出了恶意代码检测器104。此外,与图2有关地描述了检测器104如何能够典型地检测在跨越处理流水线102的行204和206的数据分组210中的恶意代码。检测器104包括存储器302和相关器304A、304B、304C、304D、304E、 304F、304G以及304H,其被统称为相关器304。存储器302存储具有被统称为字节308的一段字节308A、308B、308C、308D、308E、 308F、308G、308H以及3081的签名306。签名306的字节308的数量与流水线102的每一行202中的字节的数量无关。图3的示例中存在九个字节308,但是实际上能够存在更多或更少的这样的字节308。签名306对应于一个或多个恶意代码部分。恶意代码部分是足以采用预定的置信度来标识这个恶意代码的恶意代码的一部分。例如,在签名306对应于具
6有字节308的一个恶意代码部分的情况下,如果在以相同的次序并且具有相同的值的数据内找到了所有的字节308,则这意味着该数据包含具有有预定的置信度的这个恶意代码部分的恶意代码。相关器304在数量上等于流水线102的每一行202中的字节的数量。因此,在图3 的示例中,存在八个相关器304,因为在流水线102的每一行202中存在八个字节。相关器 304中的每个都检测签名306的恶意代码部分在在行204中开始但是在行204内的不同起始字节位置处的数据内是否存在。也就是说,相关器304A至304H具有与行内的字节208A 至208H的位置相对应的起始字节位置,并且因此分别具有零至七的唯一偏移。例如,相关器304A具有零的偏移以及因此与行204的字节208A相对应的起始字节位置。因此,相关器304A检测签名306的字节308A至3081是否与行204和206的字节 208A至2081匹配,其中字节208A至208H在行204中并且字节2081在行206中。也就是说,相关器304A检测字节308A是否与字节208A匹配、字节308B是否与字节208B匹配,等等,一直到字节3081是否与字节2081匹配。相比之下,相关器304B具有1的偏移以及因此与行204的字节208B相对应的起始字节位置。因此,该相关器检测签名306的字节308A至3081是否与字节208B至208J 匹配。也就是说,相关器304B检测字节308A是否与字节208B匹配、字节308B是否与字节 208C匹配,等等,一直到字节3081是否与字节208J匹配。同样地,而相关器304A确定签名306的字节308是否在以字节208A为开始的行204和206内存在,相关器304B确定字节308是否存在于以字节208B为开始的行204和206内。类似地,相关器304C具有2的偏移并且因此确定字节308是否以字节208C为开始存在,相关器304D具有3的偏移并且确定字节308是否以字节208D为开始存在,等等。因为相关器304的数量等于流水线102的每一行202中的字节的数量,所以相关器304能够检测签名306的字节308是否存在于行204和206中的字节的对应序列中(即, 以相同的顺序并且具有相同的值),而不管该序列在行204内哪里开始。如果字节308的序列在行204中的字节208A处开始,则相关器304A检测签名306,并且如果字节308的序列在行204中的字节208B处开始,则相关器304B检测签名306。类似地,如果字节308的序列在行204中的给定字节208C至208H处开始,则具有与行204中的这个字节相对应的起始字节位置的相关器304C至308H检测签名306。在图3的示例中,当该数据跨越流水线102的行204和206 二者时,每个相关器 304都检测签名306的恶意代码部分是否存在于该数据内。然而,一般而言,取决于签名306 内的字节308的数量和流水线102的每一行202内的字节的数量,可以不存在跨越流水线 102的多于一行202的相关器。可替换地,可以存在跨越流水线102的两行202或多于两行202的一个或多个相关器。每个相关器308提供已经与签名306相匹配的数据的字节的数量,并且检测器104 基于已经与签名306相匹配的数据的字节的这个数量来指示已经在该数据中检测到了恶意代码。例如,在一个实施例中,只有当给定的相关器308将签名306的所有字节与数据的对应字节相匹配时,检测器104才指示已经检测到恶意代码。作为其它的示例,并且在其它的实施例中,可以采用字节的可编程阈值数量、或与签名306内的字节308的总数量有关的匹配的字节数量的阈值百分比来决定是否指示已经检测到恶意代码。
如上文所指出的那样,签名306可以对应于一个或多个恶意代码部分。然而,每个代码部分可以对应于不同类型的恶意代码。例如,字节308A至308D可以对应于第一类型的恶意代码,而字节308E至3081可以对应于第二类型的恶意代码。相关器304因此能够同时地检测任一个类型或两个类型的恶意代码是否存在于数据内。例如,相关器304E可以检测到签名306的字节308A至308D与数据的字节208E至208H匹配,但是字节308E至3081 不与字节2081至208M匹配。在这样的实例中,检测器104断定具有字节308A至308D的恶意代码部分的第一类型的恶意代码存在于数据内,但是具有字节308E至3081的恶意代码部分的第二类型的恶意代码不存在。不同的恶意代码部分还可以在不同时刻被作为签名306存储在存储器302中。同样地,相关器304能够检测在不同时刻移动通过流水线102的数据内的不同的恶意代码部分。在存在针对其对数据进行测试的大量恶意代码部分的情况下,和在如果数据的一个分组感染了给定类型的恶意代码则有可能数据的其它分组感染相同类型的恶意代码的情况下,这可能是有用的。然而,如果先验地已知在任何给定时刻给定类型的恶意代码是更危险的或更流行的,则与这种类型的恶意代码相对应的恶意代码部分可以被保留在签名306 的一部分内,而同时与其它类型的恶意代码相对应的其它恶意代码部分轮流去(rotate through)签名306的其它部分。每个字节308可以对应于两种不同类型的字节中的一种。第一类型的字节是与其它字节308有关的、具有将由相关器304在数据内检测的特定值的实际恶意代码字节。然而,第二类型的字节是不用理会的(do-not-care)字节。数据内的对应字节的身份对于不用理会的字节而言无关紧要,并且对于数据内的恶意代码的检测是不重要的。例如,可能已知给定类型的恶意代码具有恶意代码部分,其包括特定值A的字节, 跟随下面两个字节的特定值B的字节。然而,在具有值A与B的字节之间内的字节是无足轻重的,并且对这种类型的恶意代码的检测是不重要的。因此,签名306的对应字节308被设置为不用理会的字节,以向相关器304指示这个字节并不实际用来检测数据内的恶意代码。换句话说,不用理会的字节是用以指定在检测数据内的恶意代码过程中是重要的其它字节的分隔的占位符字节。在一个实施例中,用于签名306内的每个恶意代码部分的字节308可能必须存在于处理流水线102中的数据的相同数据分组内。在图3的示例中,如果字节308A至308D 对应于给定的恶意代码部分,则仅相关器304C至304H能够在这样的情形下检测到这个恶意代码部分,而不是相关器304A和304B。这是因为关于四个字节308A至308D的相关器 304A和304D跨越两个数据分组,而不仅仅是数据分组210。相比之下,相关器304C至304H 仅跨越数据分组210。流水线102的特定行202 (相关器304与其有关地检测恶意代码)(诸如图3的示例中的行204)是相对不重要的,具有至少一个警告(caveat)。这个警告是相关器304与其有关的行202必须是充分地沿着(down)流水线102,从而使得在该行内以及在任何在前的行内存在等于或大于签名306内的字节308的数量的对应数量的字节。例如,在图3的示例中本来不能够选择第一行202A代替行204,因为在签名306内存在九个字节308,而在第一行202A中存在仅八个字节,并且不存在所述第一 202A的在前行。由相关器304所执行的比较是相对快的,因为每个相关器304仅必须将行204内的在对应的起始字节位置处开始的数据与签名306的字节308相比较。例如,相关器304的一个实施方式可以是等于签名306的比特(与字节对照)的总数量的多个比较器。因此, 尽管检测器104不具有延迟沿着(down)行202通过流水线102的数据的移动的能力,但是这对实施方式而言不是障碍,因为能够快速地进行比较。特别是与专用处理器相比,比较器也是对于实现而言相对便宜的硬件部件。最后,图4示出了根据本公开的实施例的、用于执行符合与图1-3有关地提供的描述的恶意代码检测的方法400。数据被移动通过处理流水线102以执行数据的处理002), 其中这样的处理与恶意代码的检测不相关。然而,当数据正在移动通过流水线102时,作为设备100的硬件部件的恶意代码检测器104检测数据内的恶意代码(404)。如上文所指出的那样,这样的检测与数据的处理并行地执行,并且不延迟数据进入、通过以及离开流水线 102的移动。恶意代码检测被按如下方式执行。方法400同时地将对应于一个或多个恶意代码部分的签名306与以在流水线102的给定行202内的起始字节位置处的数据的字节开始的数据的多个重叠部分中的每一个进行比较(406)。在图2和3的示例中,例如,给定行202 是行204,并且起始字节位置对应于行204的字节208A至208H。因为在这个示例中在签名 306内存在九个字节,所以数据的重叠部分是数据的字节208A至2081、字节208B至208J、 字节208C至208K,等等,其中数据的最后重叠部分包括字节208H至208P。接下来,方法400基于已经与签名相匹配的数据的每个重叠部分的字节的数量指示已经在数据内检测到恶意代码008)。例如,在基本的示例中,如果签名306完全地与在行204内的起始字节位置处开始的流水线102内的数据的重叠部分中的任何一个匹配 (即,所有字节308与具有与字节308相同的顺序的数据内的对应字节匹配),则方法400 指示已经检测到恶意代码。然而,如果签名306不完全地与在行204内的起始字节位置处开始的流水线102内的数据的重叠部分中的任何一个匹配,则在这个示例中方法400不指示已经检测到恶意代码。
权利要求
1.一种设备,包括至少以硬件实现的流水线,数据被移动通过该流水线以执行与恶意代码的检测不相关的数据的处理;和至少以所述硬件实现的检测器,用以与当所述数据被移动通过所述流水线时的所述数据的处理并行地,当所述数据被移动通过所述流水线时检测所述数据内的所述恶意代码,其中,当所述数据被移动通过所述流水线时,所述检测器将检测所述数据内的所述恶意代码而不延迟所述数据进入、通过以及离开所述流水线的移动。
2.根据权利要求1所述的设备,其中所述流水线包括多个行,所述多个行包括第一行和最后一行,所述流水线的每一行存储相同数量的字节,其中等于每一行的相同数量的字节的所述数据的多个字节将进入所述流水线的所述第一行,并且在逐行的基础上继续前进通过所述流水线直到所述数据离开所述流水线的所述最后一行为止,并且其中所述检测器包括用来存储具有一段预定数量的字节的签名的存储器,所述签名对应于一个或多个恶意代码部分;和,在数量上等于每一行的字节的相同数量的多个相关器,每个相关器具有唯一的偏移以检测在所述流水线的给定行内的不同起始字节位置处开始的所述恶意代码部分。
3.根据权利要求2所述的设备,其中,在给定的时刻所述相关器中的至少一个将检测跨越所述流水线的多于一行的所述数据内的所述恶意代码部分。
4.根据权利要求2所述的设备,其中,所述签名对应于多个恶意代码部分,从而使得所述检测器将同时地检测所述数据内的所述恶意代码部分。
5.根据权利要求2所述的设备,其中,不同的恶意代码部分在不同时刻被作为所述签名存储在所述存储器内,从而使得所述检测器将在所述不同时刻检测所述数据内的所述不同的恶意代码部分。
6.根据权利要求2所述的设备,其中,所述签名的每个字节包括以下中的一个所述数据内待检测的恶意代码字节;不用理会的字节,所述数据内的所述不用理会的字节的身份无关紧要,并且对于所述数据内的所述恶意代码的所述检测是不重要的。
7.根据权利要求2所述的设备,其中,每个相关器将提供已经与所述签名相匹配的所述数据的字节的数量,从而使得所述检测器将基于已经与所述签名相匹配的所述数据的字节的所述数量来指示已经在所述数据内检测到所述恶意代码。
8.根据权利要求1所述的设备,其中,进入所述设备的所有数据被移动通过所述流水线以进行处理,从而使得所述检测器将检测进入所述设备的所有所述数据内的所述恶意代码。
9.一种方法,包括将数据移动通过设备的流水线,以执行与恶意代码的检测不相关的所述数据的处理; 以及,与所述数据的处理并行地,并且在不延迟所述数据进入、通过以及离开所述流水线的移动的情况下,当所述数据正在移动通过所述流水线时,由所述设备的硬件部件来检测所述数据内的恶意代码。
10.根据权利要求9所述的方法,其中,当所述数据正在移动通过所述流水线时检测所述数据内的所述恶意代码包括同时地将与一个或多个恶意代码部分相对应的签名与所述数据的多个重叠部分中的每一个相比较,每个重叠部分开始于在所述流水线的给定行内的起始字节位置处的所述数据的字节。
11.根据权利要求10所述的方法,其中,当所述数据正在移动通过所述流水线时检测所述数据内的所述恶意代码还包括基于已经与所述签名相匹配的所述数据的每个重叠部分的字节的数量,指示已经在所述数据内检测到所述恶意代码。
12.—种恶意代码检测器,包括以硬件实现的存储器,用以存储具有一段预定数量的字节的签名,所述签名对应于一个或多个恶意代码部分;和,多个相关器,其以所述硬件来实现,并且在数量上等于流水线的多个行中的每一行的字节的数量,每个相关器用以提供已经与所述签名相匹配的所述数据的字节的数量,每个相关器具有唯一的偏移以检测在所述流水线的给定行内的数据的不同起始字节位置处开始的所述恶意代码部分,以及每个相关器用以提供已经与所述签名相匹配的所述数据的字节的数量,其中,恶意代码被基于已经被每个相关器与所述签名相匹配的所述数据的字节的数量而指示为已经在所述数据内被检测到。
13.根据权利要求12所述的恶意代码检测器,其中,所述签名对应于多个恶意代码部分,从而使得所述相关器将同时地检测所述数据内的所述恶意代码部分。
14.根据权利要求12所述的恶意代码检测器,其中,不同的恶意代码部分在不同时刻被作为所述签名存储在所述存储器内,从而使得所述相关器在所述不同时刻检测所述数据内的所述不同的恶意代码部分。
15.根据权利要求12所述的恶意代码检测器,其中,所述签名的每个字节包括以下中的一个所述数据内待检测的恶意代码字节;不用理会的字节,所述数据内的所述不用理会的字节的身份无关紧要,并且对于所述数据内的所述恶意代码的所述检测是不重要的。
全文摘要
一种设备包括流水线和检测器,其二者都至少以硬件来加以实现。数据被移动通过所述流水线以执行与恶意代码的检测不相关的数据的处理。与当所述数据被移动通过所述流水线时的所述数据的处理并行地,当所述数据被移动通过所述流水线时,所述检测器检测所述数据内的所述恶意代码。当所述数据被移动通过所述流水线时,所述检测器检测所述数据内的所述恶意代码而不延迟所述数据进入、通过以及离开所述流水线的移动。
文档编号G06F9/38GK102576392SQ200980162264
公开日2012年7月11日 申请日期2009年10月31日 优先权日2009年10月31日
发明者D.A.沃伦 申请人:惠普发展公司,有限责任合伙企业
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1