蠕虫攻击遏制方法和系统转让专利

申请号 : CN200510087522.0

文献号 : CN1725759B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : M·科斯塔M·卡斯特罗A·罗斯特隆J·克劳克罗福特

申请人 : 微软公司

摘要 :

一种遏制系统可以包括生成和/或发送一警报,作为安全共享关于已检测到的蠕虫的知识的基础。警报可以含有证明给定程序含有易受攻击性的信息。该警报可以是自证明的,这样其真实性可以由一计算系统独立地验证。

权利要求 :

1.一种蠕虫遏制方法,该方法包括:

a)在一接收计算设备上接收一含有程序标识符和事件列表的自证明警报,所述程序标识符标识了具有所检测到的易受攻击性的程序,所述事件列表包含一个或多个非确定性事件,且所述事件列表能够被重放以示出所检测到的易受攻击性;

b)确定所述接收计算设备是否包括含有所检测到的易受攻击性的程序;以及c)验证所述事件列表示出了所检测到的易受攻击性。

2.如权利要求1所述的方法,其特征在于,验证包括执行所述程序中的事件列表。

3.如权利要求1所述的方法,其特征在于,验证包括从所述程序的指令中生成一逻辑安全条件;定义一定义所述程序在所述事件列表的开始处的状态的前置条件;基于所述事件列表定义一易受攻击谓词;以及基于谓词演算评估所述逻辑安全条件、前置条件和易受攻击谓词。

4.如权利要求1所述的方法,其特征在于,所述自证明警报包括一用于指示所述程序中检测到的易受攻击性的类型的易受攻击性类型标识符,且其中,验证包括引用所述易受攻击性类型标识符。

5.如权利要求1所述的方法,其特征在于,所述自证明警报包括提供所述事件列表如何示出所检测到的易受攻击性的指示的一条或多条验证提示。

6.如权利要求1所述的方法,其特征在于,还包含接收在计算系统的存储器的第一部分中写入或存储接收到的信息的指令;将第一脏指示符与所述存储器的第一部分相关联,如果接收到的信息是从一不可信来源或具有指示‘脏’的脏指示符的存储器部分中接收的,则所述第一脏指示符指示‘脏’;接收将接收到的信息装载至程序计数器或执行接收到信息的指令;以及如果所述第一脏指示符指示‘脏’,则生成指示程序易受攻击性的自证明警报,它含有程序标识符和事件列表,所述事件列表指示在接收写入或存储指令、关联第一脏指示符、以及接收装载接收到的信息的指令的操作期间记入日志的一个或多个事件;其中所述脏指示符用于指示存储在相关联的存储器部分上的信息是否来自不可信的外部来源。

7.如权利要求6所述的方法,其特征在于,还包含将一输入事件标识符与所述存储器的第一部分相关联,所述输入事件标识符标识了接收到信息的来源。

8.如权利要求6所述的方法,其特征在于,还包含从接收到的信息计算一新数据、将所述新数据存储在所述存储器的第二部分中、以及将第二脏指示符与所述存储器的第二部分关联,如果接收到的信息是从一不可信来源或具有指示脏的脏指示符的存储器部分中接收的,则所述第二脏指示符指示‘脏’。

9.如权利要求8所述的方法,其特征在于,所述第二脏指示符包括一数据流图,该数据流图指示从接收到的信息或从中接收该信息的存储器部分的脏指示符中的数据流图中计算新数据的至少一个步骤。

10.如权利要求9所述的方法,其特征在于,所述脏指示符包括一数据流图,该数据流图包括用于计算包含在所述存储器部分中的值的指令序列。

11.如权利要求6所述的方法,其特征在于,接收将接收到的信息装载至程序计数器或执行接收到的信息的指令包括接收执行接收到的信息的指令,如果所述第一脏指示符指示‘干净’,则所述方法还包括检查与存储由接收到的信息引用的指令的存储器的第三部分相关联的第三脏指示符。

12.如权利要求1所述的方法,其特征在于,还包括响应于验证所述事件列表,向网络覆盖图中由节点标识符标识的至少一个相邻节点转发所述自证明警报。

13.如权利要求1所述的方法,其特征在于,还包括基于所述事件列表生成补丁或过滤器的至少一个以解决所述易受攻击性。

14.一种蠕虫遏制系统,该系统包含:

a)用于使用动态数据流分析来检测对蠕虫攻击的易受攻击性的装置;

b)用于响应于一所检测到的蠕虫生成一自证明警报的装置,所述自证明警报包含i)第一数据字段,它包含表示标识含有所检测到对蠕虫攻击的易受攻击性的程序的标识符的数据;

ii)第二数据字段,它包含表示包含一个或多个非确定性事件的事件列表的数据,且所述事件列表能够被重放以示出所述易受攻击性;以及iii)第三数据字段,它包含表示用于指示在所述程序中检测到的易受攻击性的类型的易受攻击性类型标识符的数据。

15.如权利要求14所述的系统,其特征在于,所述自证明警报还包括第四数据字段,它包含表示提供所述事件列表如何示出所述易受攻击性的指示的一条或多条验证提示的数据,所述验证提示指示将被执行的代码的任意地址、将被执行的任意代码或函数的任意自变量的事件列表中的事件和事件中的偏移量,取决于所述易受攻击性类型。

16.如权利要求14所述的系统,其特征在于,所述易受攻击性类型指示将程序执行重定向至任意代码的能力、执行任意代码的能力、或对函数提供任意自变量的能力。

17.如权利要求14所述的系统,其特征在于,还包括用于向网络覆盖图中的至少一个其它节点分发所述自证明警报的装置。

18.如权利要求14所述的系统,其特征在于,用于检测的所述装置创建一含有示出所述易受攻击性的至少一个非确定性事件的事件日志。

19.如权利要求14所述的系统,其特征在于,还包括用于确认接收到的自证明警报的装置,包括使用所提供的提示修改所述事件列表,以触发发信号通知成功验证的、装载至程序的验证函数的执行。

20.一种用于证明自证明警报的方法,包括:

a)从所述自证明警报中检索第一执行路径,所述第一执行路径示出可由蠕虫攻击恶意利用的程序的易受攻击性,并且所述自证明警报包括程序标识符和事件列表,其中所述程序标识符标识了具有所检测到的易受攻击性的程序,所述事件列表包含一个或多个非确定性事件,且所述事件列表能够被重放以示出所检测到的易受攻击性;

b)确定传入消息中确定所述第一执行路径的至少一部分的至少一个字节;

c)确定所确定的字节上可以被测试以验证所述至少一个字节的存在的至少一个条件;

d)使用所述至少一个条件测试一新消息的至少一部分,以检测蠕虫攻击的存在;

e)基于所述测试拒绝处理所述新消息。

21.如权利要求20所述的方法,其特征在于,确定至少一个条件包括当脏存储器部分在控制流决策中使用时,记录在来自该脏存储器部分的数据上计算的逻辑操作,其中所述脏存储器部分指存储有从不可信来源导出的信息的存储器部分。

22.一种响应于程序中的对蠕虫攻击的易受攻击性的方法,所述方法包括:

a)从一自证明警报中接收程序中对所述蠕虫攻击的易受攻击性的指示,其中所述自证明警报包括程序标识符和事件列表,所述程序标识符标识了具有所检测到的易受攻击性的程序,所述事件列表包含一个或多个非确定性事件,且所述事件列表能够被重放以示出所检测到的易受攻击性;

b)将一过滤器条件值初始化为‘真’;

c)确定与含有将被装载至程序计数器或将被执行的数据的存储器部分相关联的脏指示符的值,其中所述脏指示符用于指示所述存储器部分所含有的所述数据是否来自不可信的外部来源;

d)接收执行条件控制转移的指令;

e)基于所述过滤器的前一值和所确定的所述脏指示符的值更新所述过滤器条件;以及f)将所述过滤器条件应用于一传入消息以阻断恶意利用所述易受攻击性的蠕虫攻击。

说明书 :

蠕虫攻击遏制方法和系统

技术领域

[0001] 本发明一般涉及计算机安全,尤其涉及检测、警告和/或减少网络化计算机系统中蠕虫的传播。

发明内容

[0002] 下文为向读者提供基本的理解提出了本发明的简化概述。该概述并非本发明的广泛综述,且没有标识本发明关键或决定性元素,也没有描述本发明的范围。它唯一的目的是以简化的形式提供此处所揭示的某些概念,作为后文提供的更详细描述的序言。
[0003] 自繁殖程序,也被称为蠕虫,威胁连接至因特网的计算机。蠕虫恶意利用了诸如流行的软件包等程序中的易受攻击性来获取对被感染的机器的控制。这样,该问题的一个长期的解决方法是构建没有易受攻击性的软件。然而,直到那时以前,软件会一直含有易受攻击性,并且可以采用蠕虫遏制系统来降低蠕虫的影响。因为蠕虫能够迅速地传播,遏制系统可以被自动化以快速和/或有效地检测和响应,并且可以向网络中的另一个计算机系统节点分发警报。
[0004] 遏制系统的一方面可以包括监测系统,该监测系统能够通过包括动态流分析的多种技术检测一大类攻击。遏制系统的另一方面可以包括生成和/或发送警报,作为安全共享关于已检测到的蠕虫的知识的基础。警报可以包含证明一个给定的程序含有易受攻击性的信息。警报可以是自证明的,这样它的真实性可以由计算机系统独立地验证。遏制系统可以包括能复原的和/或自组织的协议,以用及时的方式向没有被感染的节点传播警报,甚至在蠕虫爆发过程中受到剧烈的攻击时。遏制系统可以包括一系统体系结构,它使得大量互不信任的计算机能够在遏制蠕虫的任务中相互合作,即使在蠕虫正在迅速传播并恶意利用软件包中未知的易受攻击性时。遏制系统可以包括一保护系统,它可以保护计算设备免遭将来的攻击。
[0005] 更具体地,本发明公开了一种蠕虫遏制方法,该方法包括:a)在一接收计算设备上接收一含有程序标识符和事件列表的自证明警报,所述程序标识符标识了具有所检测到的易受攻击性的程序,所述事件列表包含一个或多个非确定性事件,且所述事件列表能够被重放以示出所检测到的易受攻击性;b)确定所述接收计算设备是否包括含有所检测到的易受攻击性的程序;以及c)验证所述事件列表示出了所检测到的易受攻击性。
[0006] 本发明还公开了一种蠕虫遏制系统,该系统包含:a)用于使用动态数据流分析来检测对蠕虫攻击的易受攻击性的装置;b)用于响应于一所检测到的蠕虫生成一自证明警报的装置,所述自证明警报包含:i)第一数据字段,它包含表示标识含有所检测到对蠕虫攻击的易受攻击性的程序的标识符的数据;ii)第二数据字段,它包含表示包含一个或多个非确定性事件的事件列表的数据,且所述事件列表能够被重放以示出所述易受攻击性;以及iii)第三数据字段,它包含表示用于指示在所述程序中检测到的易受攻击性的类型的易受攻击性类型标识符的数据。
[0007] 本发明还公开了一种用于证明自证明警报的方法,包括:a)从所述自证明警报中检索第一执行路径,所述第一执行路径示出可由蠕虫攻击恶意利用的程序的易受攻击性,并且所述自证明警报包括程序标识符和事件列表,其中所述程序标识符标识了具有所检测到的易受攻击性的程序,所述事件列表包含一个或多个非确定性事件,且所述事件列表能够被重放以示出所检测到的易受攻击性;b)确定传入消息中确定所述第一执行路径的至少一部分的至少一个字节;c)确定所确定的字节上可以被测试以验证所述至少一个字节的存在的至少一个条件;d)使用所述至少一个条件测试一新消息的至少一部分,以检测蠕虫攻击的存在;e)基于所述测试拒绝处理所述新消息。
[0008] 本发明还公开了一种响应于程序中的对蠕虫攻击的易受攻击性的方法,所述方法包括:a)从一自证明警报中接收程序中对所述蠕虫攻击的易受攻击性的指示,其中所述自证明警报包括程序标识符和事件列表,所述程序标识符标识了具有所检测到的易受攻击性的程序,所述事件列表包含一个或多个非确定性事件,且所述事件列表能够被重放以示出所检测到的易受攻击性;b)将一过滤器条件值初始化为‘真’;c)确定与含有将被装载至程序计数器或将被执行的数据的存储器部分相关联的脏指示符的值,其中所述脏指示符用于指示所述存储器部分所含有的所述数据是否来自不可信的外部来源;d)接收执行条件控制转移的指令;e)基于所述过滤器的前一值和所确定的所述脏指示符的值更新所述过滤器条件;以及f)将所述过滤器条件应用于一传入消息以阻断恶意利用所述易受攻击性的蠕虫攻击。
[0009] 当结合附图考虑参考下述详细描述时,众多附加特征能够被更容易的理解和更好地理解。

附图说明

[0010] 按照附图阅读下述详细描述,可以更好地理解本发明,附图中:
[0011] 图1是实现网络系统中一节点的示例性计算系统的示意图;
[0012] 图2是一示例性计算网络的示意图;
[0013] 图3是一示例性遏制系统的数据流图;
[0014] 图4是与一示例性存储器位置污染数据存储相关联的示例性页污染数据存储的表;
[0015] 图5是另一示例性页污染数据存储的表;
[0016] 图6是一检测蠕虫攻击和/或程序易受攻击性的示例性方法的流程图;
[0017] 图7是一示例性警报的示意图;
[0018] 图8是一证明自证明警报的示例性方法的流程图;
[0019] 图9是一示例性抽象机器的代码清单;
[0020] 图10是一示例性安全条件的条件清单;
[0021] 图11是易受攻击指令的指令清单;
[0022] 图12是一示例性对等网络的示意图;
[0023] 图13是示出在一示例性对等网络中在给定一小部分检测模块时一小部分存活节点的示例性图表。
[0024] 图14是一示例性寄存器污染数据存储的表;
[0025] 图15是易受攻击指令的指令清单;
[0026] 图16是一生成自证明警报的示例性方法的流程图;
[0027] 图17是对任意跳转至一可执行缓冲区的易受攻击性的示例性源代码清单;以及[0028] 图18是一示例性污染数据存储的表。
[0029] 附图中,相同的参考标号用来指相同的部分。

具体实施方式

[0030] 示例性操作环境
[0031] 图1和下列讨论意在对其中可实现蠕虫遏制系统的所有或一部分部的合适的计算机环境提供一简短的、概括的描述。图1中的操作环境仅仅是合适的操作环境的一个示例,并不意欲对该操作环境的使用范围或功能提出任何限制。其它可适于用作此处所述的蠕虫遏制系统的公知的计算机系统、环境和/或配置包括,但不限于,个人计算机、手持或膝上型设备、多处理器系统、基于微处理器的系统、可编程消费者电子产品、网络个人计算机、服务器计算机、小型机、大型机、包含上述系统或设备中的任一个的分布式计算机环境等。
[0032] 尽管并非必需,蠕虫遏制系统将在诸如由一台或多台计算机或其他设备执行的程序模块等计算机可执行指令的通用语境下描述。一般地,程序模块包括例程、程序、对象、组件、数据结构等,它们执行特定的任务或实现特定的抽象数据类型。通常,程序模块的功能可以按在多种环境下所要求的结合或分布。在分布式环境中,程序模块可以位于包括存储器存储设备在内的本地和远程计算机存储介质中。
[0033] 参考图1,用于实现蠕虫遏制系统的示例性系统包括一计算设备,诸如计算设备100。在其最基本配置中,计算设备100通常包括至少一个处理器单元102和存储器104。
取决于计算设备的确切配置和类型,存储器104可以是易失性的(诸如RAM)、非易失性的(诸如ROM、闪存等)或两者的结合。该最基本配置在图1中由虚线106示出。此外,设备
100还可以包括另外的特征和/或功能。例如,设备100还可包括另外的存储(例如,可移动的和/或不可移动的),包括,但不限于,磁盘、光盘或磁带。这些另外的存储在图1中由可移动存储108和不可移动存储110示出。计算机存储介质包括以任何方法或技术实现的用于诸如计算机可读指令、数据结构、程序模块或其它数据的信息的存储的易失性的和非易失性的、可移动的和不可移动的介质。存储器104、可移动存储108、和不可移动存储110都是计算机存储介质的示例。计算机存储介质包括,但并不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光学存储、磁带盒、磁带、磁盘存储或其它磁性存储设备、或能用于存储所需信息且可以由设备100访问的任何其它介质。任何这样的计算机存储介质可以是设备100的一部分。
[0034] 设备100还可以包含通信连接112,它允许设备100与诸如计算系统网络211中的其它节点等其它计算设备通信。通信连接112是通信介质的一个示例。通信介质通常具体化为诸如载波或其它传输机制等已调制数据信号中的计算机可读指令、数据结构、程序模块或其它数据,且包含任何信息传递介质。术语“已调制数据信号”指的是一种信号,其一个或多个特征以在信号中编码信息的方式被设定或更改。作为示例,而非限制,通信介质包括有线介质,诸如有线网络或直接线连接,和无线介质,诸如声学、射频、红外线和其它无线介质。在这里使用的术语计算机可读介质包括存储介质和通信介质两者。
[0035] 设备100还可以含有输入设备114,诸如键盘、鼠标、笔、语音输入设备、触摸式输入设备、激光距离探测器、红外摄像机、视频输入设备和/或其它输入设备。还可以包括诸如显示器、扬声器、打印机和/或其它输出设备的输出设备116。
[0036] 在下文的描述中,本发明参考由一台或多台计算设备实现的动作和操作的符号表示来描述,除非另有说明。由此,可以理解,这样的动作和操作,有时被称为由计算机执行的,包括由计算设备的处理单元对以结构化格式表示数据的电信号的处理。该处理变换了数据或在计算设备的存储器系统中的位置上维护它们,从而以一种本领域技术人员都理解的方式重新配置或改变了该设备的操作。虽然下列描述已在前文中描述,但它并不意味着限制,如本领域的技术人员可以理解的,在下文中描述的各种动作和操作也可用硬件实现。例如,通过使用本领域技术人员所知的常规技术,软件指令中的全部或一部分可以由诸如DSP、可编程逻辑阵列等专用电路来实现。
[0037] 维护数据的数据结构是存储器的物理位置,它具有由数据格式所定义的特定属性。本领域的技术人员可以认识到,用来存储程序指令的存储设备能够分布在网络上。例如,远程计算机可以存储被描述为软件的进程的一示例。本地或终端计算机可以访问该远程计算机并下载一部分或全部软件来运行程序。作为选择,本地计算机可以下载所需的部分软件,或通过在本地终端上执行一些软件指令且在远程计算机上(或计算机网络中)执行一些软件指令来分布式地处理。
[0038] 其中可使用遏制系统的网络化环境的一个示例参考图2来描述。该示例性网络包括若干计算机或节点210,它们通过由云表示的网络211彼此通信。网络211可以包括众多公知的组件,诸如,路由器、网关、集线器等,且允许节点210通过有线和/无线介质通信。当通过网络211彼此交互时,一个或多个节点可以担当客户机、网络服务器、或关于其他节点的对等体(peer)。从而,遏制系统的各种示例可以被实施为客户机、网络服务器、对等体、或其组合,即使此处所包含的特定示例没有涉及所有这些类型的计算机。
[0039] 蠕虫遏制
[0040] 蠕虫通常通过诸如消息等可以被存储在计算系统中的接收到的数据引入到计算系统中。该接收到的和存储的数据可以恶意利用该计算系统的存储特征来创建允许蠕虫攻击和/或传播的易受攻击性。例如,众多蠕虫将代码注入一易受攻击的程序中并强迫该程序执行该代码。其它蠕虫可以通过远程控制易受攻击的程序的执行来攻击,而不需注入新的代码。
[0041] 参考图3,蠕虫遏制系统300可以包括一个或多个检测模块340、警报模块350、警报验证模块360、分发模块370和响应模块380。检测模块340可以检测在计算系统上的蠕虫攻击。检测前,该蠕虫可以是已知或未知的。可以理解,在适当时可使用任何蠕虫检测系统。蠕虫遏制系统300可以使用不同的技术运行不同的检测模块340,且每个检测模块340可以使用一种或多种技术来检测蠕虫。可使用合适的检测技术的任一组合,包括将收到的信息标识为含有已知蠕虫;将接收到的信息与存储的信息相比较以检测更改的和不必要的文件的存在、检测配置的改变、和/或验证诸如返回地址等参数值;将预期要存储的信息与实际所存储的信息相比较以检测缓冲区盖写;使用保护存储段检测缓冲区溢出;实现数组边界核查以直接检测缓冲区上溢和下溢;监视程序的运行时和/或通信模式并检测与预期行为的任何背离;对传入数据检查已知蠕虫签名,诸如串和/或消息长度;动态数据流分析;等等。动态数据流分析在下文描述。
[0042] 当检测到蠕虫,遏制系统可以采取行动。例如,警报模块350可以生成警报330,并且将警报送至一个或多个计算系统,以共享关于所检测的蠕虫的知识。警报模块可以生成一自证明警报,它可以被发送至一个或多个计算系统,且可以包含证明给定程序含有易受攻击性的信息。警报的分发可以由分发模块370来确定,它可以使得大量互不信任的计算机系统能够在遏制蠕虫上合作。接收到的自证明警报可以由接收该自证明警报的计算系统独立地证明。对自证明警报的验证可以由接收计算系统320的警报验证模块360执行。
[0043] 检测蠕虫和/或接收警报的计算系统可以采取本地行动以净化和/或保护系统、降低蠕虫的有害效果、和/或防止蠕虫经由响应模块380传播。响应模块380所使用的确切保护机制可在各节点间变化,并且可以适当地实现。例如,某些节点可以简单地停止易受攻击的软件包;其它节点可以使用本地修补和/或过滤过程。
[0044] 使用动态流分析的检测
[0045] 动态数据流分析可以检测多种不同的蠕虫或同一蠕虫的变种通过恶意利用易受攻击性来获取对目标程序的控制的方式。从而,动态数据流分析不是以蠕虫为中心的,而是以易受攻击性为中心的。动态数据流分析可以检测未知的蠕虫,因为它不需要关于含有易受攻击性的特定指令集或蠕虫所使用来恶意利用该易受攻击性的特定行动集的先验知识。以这种方式,动态数据流分析可以检测未知的蠕虫。蠕虫使用的多种攻击涉及将代码注入到易受攻击的程序中并强迫它执行该代码。另一种常见的攻击机制是远程地控制该易受攻击的程序的执行,而不注入任何新代码。例如,如果该程序已经装载C运行时环境,则蠕虫可以强迫该易受攻击的程序调用system()函数。动态流分析可以检测这两种感染方法以及其它感染方法。
[0046] 动态流分析跟踪输入操作中接收到的数据(例如,从网络连接处接收到的数据)。动态流分析可以由上文参考图3讨论的检测模块340来实现。更具体地,检测模块340可以将某些信息存储位置标识为“脏”,例如,存储从外部来源接收到的信息的那些存储位置和/或存储从来自外部来源的信息导出的信息的存储位置。检测模块可以选择性地阻断存储在脏位置上的数据的执行,和/或可以选择性地阻断将那些数据装载到指令指针。以这种方式,阻断执行和/或将脏数据装载到指令指针可以防止或减少远程装载的代码的执行和对执行的远程控制。指令指针或程序计数器是包含在程序序列中下一条被执行的指令的地址或位置的寄存器。
[0047] 跟踪所存储的数据是脏还是干净的动态流分析可以使用任一合适的方式来执行。例如,可以探测存储来自外部来源的信息的指令来跟踪哪个存储器位置和/或CPU寄存器含有从输入操作中接收和/或从输入操作中接收到的数据中导出的脏数据。探测的指令的选择可以包括读/或写数据的任何适当的指令,诸如装载或存储操作(例如,x86CPU上的MOVS、PUSH、POP)、算术和逻辑指令(例如,x86CPU上的ADD、MUL、XOR、AND)。所有控制转移指令(例如,x86CPU上的RET、CALL、JMP),或被认为适当的子集,也可以被探测来实现对装载至指令指针的数据的核查。
[0048] 脏存储器位置可以用任何合适的方式来跟踪。例如,脏存储器位置可以在污染数据存储中跟踪,污染数据存储将一脏指示符与计算设备的一部分存储器中的存储位置相关联。存储器的该部分可以是存储器位置、寄存器、偏移量指示等。
[0049] 脏指示符可以是任一合适的指示符,它指示存储在相关联的存储器位置上的信息来自不可信外部来源,在某些示例中,可以认为发送信息的所有其它节点都是不可信的。例如,脏指示符可以是一二进制数,这样,1指示相关联的数据是脏的,而0指示相关联的数据是干净的。在另一个示例中,脏指示符可以是诸如整数或字母数字串等消息标识符,它指示脏信息的消息和/或来源。以这种方式,如果数据是脏的,则脏指示符可以等价于唯一消息指示符,且如果数据是‘干净的’,脏指示符可以等于一默认值,如空值或‘0’。在另一个示例中,脏指示符可以是指示消息和消息中的偏移量两者的标识符。在另一个示例中,脏指示符可以是数据流图的标识符,该数据流图包括用来从脏信息的消息/来源中的值计算脏存储器部分处的值的指令的全部序列或序列的相关部分。
[0050] 由相关联的脏指示符指示的相关联的存储器部分的脏或干净的位置可以用任一适当的方式来指示。在一个示例中,脏指示符可以与指示存储器中的特定位置的存储器位置指示符相关联。在另一个示例中,在脏指示符向量中放置脏指示符可以指示该存储器位置。例如,脏指示符向量或数组中的第一个脏指示符可以指示第一存储器位置(诸如,堆栈的顶端),第二个脏指示符可以指示第二存储器位置(诸如堆栈中自顶向下第二个位置),依此类推。
[0051] 在一个示例中,每个存储器位置可以用污染数据存储中的脏指示符来跟踪。示例污染数据存储390在图3示出。计算设备中的任何类型或部分的存储器可以被跟踪,例如,存储器页、在存储器页中的个别存储器位置、CPU寄存器等。
[0052] 存储器的每一页都可以通过将存储器的每一页和页脏指示符相关联来跟踪。存储器页可以是存储器的任一段,诸如4KB的存储器段。页脏指示符可以指示存储器页中的至少一个存储器位置是否为脏。如果页脏指示符指示页中的至少一个脏存储器位置,那么脏页中的每个存储器位置可以与一存储器位置脏指示符相关联。存储器位置脏指示符可以指示相关联的存储器位置(由向量中的位置,或任何其它合适的方式来指示)是干净的还是脏的,取决于在该存储器位置中所包含的信息。以这种方式,每个存储器页可以与一页脏指示符相关联,且只有包含脏信息的那些页可以被进一步分隔成一个个存储器位置以跟踪脏信息。
[0053] 图4示出允许检测模块跟踪哪些存储器位置为脏(例如,含有从输入操作中接收到的数据)示例数据结构410、420。页污染数据存储410可以包括指示相关联的存储器页是干净还是脏的页脏指示符的向量。例如,如图4所示,第一存储器页可以如页脏指示符412的值所指示的那样是干净的,而第二存储器页可以如页脏指示符414的值所指示的那样是脏的。以这种方式,页污染数据存储410是一向量位图,每4KB存储器页一个比特,如果在该页中的任何位置是脏的,则将该比特置位。
[0054] 对页污染数据存储410中所指示的每一脏页,可将一附加存储器位置污染数据存储420与图4中所示的指示脏页的页污染数据存储的页脏指示符相关联。存储器位置污染数据存储420可以包括指示脏面中相关联的存储器位置是干净还是脏的存储器位置脏指示符的向量。例如,如图4所示,由页脏指示符414的值指示的,第二页包含脏数据。存储器位置污染数据存储420可以与页脏指示符414相关联。存储器位置污染数据存储420可以包括指示该特定页中哪个存储器位置是干净的和/或脏的存储器位置脏指示符422、424的向量。在图4所示的示例存储器位置污染数据存储中,第一存储器位置可以如存储器位置脏指示符422的值所指示的那样是干净的,而第二存储器位置可以如存储器位置脏指示符424的值所指示的那样是脏的。以这种方式,存储器位置污染数据存储420是一个向量位图,每个存储单元一个比特,如果相关联页上的相关联存储器位置是脏的,则将该比特置位。存储器位置污染数据存储可以用任一何合适的粒度来跟踪脏存储器位置,例如,通过以页、字、和/或字节粒度维护脏指示符来跟踪。类似地,其它存储器位置污染数据存储可以与指示脏存储器位置的存储器位置脏指示符相关联。其它存储器位置污染数据存储可以在更精细级别的粒度上,例如,对信息的每个字节,指示脏存储器位置。
[0055] 如图4所示,页脏指示符可以存储在页污染数据存储410上,且存储器位置脏指示符可以存储在存储器位置污染数据存储420上。可选择地,并非对每一级存储器部分粒度有单独数据存储,而是单个数据存储可以与指示脏存储器部分的、包括下一级更精细粒度的脏指示符的脏指示符一同使用。例如,页脏指示符可以作为数组存储在污染数据存储中。指示干净页的页脏指示符可以是任一合适的指示符,诸如0或空值。指示脏值的页脏指示符可以是含有指示该页的哪个存储器位置是脏和干净的指示符值矢量的位图。
[0056] 在图5所示的示例性污染数据存储510中,第一存储器页可以如由页脏指示符512的值所指示的那样是干净的,而第二存储器页可以如由页脏指示符514的值所指示的那样是脏的。指示该页为脏的脏面指示符可以包括指示相关联的存储器位置是干净还是脏的存储器位置脏指示符向量。以这种方式,如果页是干净的,则污染数据存储510是一数组位图,每一存储器页一个比特,如果页是脏的,则污染数据存储510是一存储器位置脏指示符向量。例如,如图5所示,第二页包含了如由页脏指示符514的值所指示的脏数据。页脏指示符514的值可以指示该页中哪些存储器位置是脏的或是干净的。例如,如图5所示,存储器位置脏指示符542的值指示该页中包含的第一存储器位置是干净的,而存储器位置脏指示符544指示相关联的存储器位置是脏的。
[0057] 动态数据流分析可以另外地和/或替换地跟踪存储在CPU寄存器上干净的/脏的数据。例如,存储器的每一寄存器可以用寄存器污染数据存储中的寄存器脏指示符来跟踪。寄存器脏指示符可以依据所存储的信息的来源指示相关联的存储器寄存器是干净的还是脏的。如上文所述,跟踪也可以在比寄存器更小的粒度上另外地或替换地执行,例如,通过为寄存器中每一字节保存一个脏指示符来跟踪。
[0058] 图14示出允许检测模块跟踪哪些寄存器为脏(例如,含有从输入操作中接收到的(或导出的)数据)的示例数据存储1400。寄存器污染数据存储1400可以包括一寄存器脏指示符向量。例如,如图14所示,第一CPU寄存器可以如寄存器脏指示符1422的值所指示的那样是干净的,而第二CPU寄存器可以如寄存器脏指示符1424的值所指示的那样是脏的。以这种方式,寄存器污染数据存储1400是一向量位图,每一CPU寄存器一个比特,如果相关联页上的相关联CPU寄存器是脏的,则将该比特置位。
[0059] 尽管在上文描述了存储器页、存储器位置和寄存器的示例,然而应该理解,任何类型、部分和/或格式的存储器都可以使用上文所述的动态数据流分析来跟踪。
[0060] 如上文所述,脏指示符可以不仅仅指示相关联的存储器部分是干净的/脏的,而且也可以指示存储在该存储器部分中的信息的来源和/或导出路径。存储在脏存储器部分中的信息的来源、计算或导出可以用任一合适的方式来指示,诸如一带有可任选偏移量指示的输入消息标识符、包含用于计算脏存储器位置的值的指令序列的数据流图等。脏指示符还可以指示在指令中处理的值的原始来源。
[0061] 图18示出了允许检测模块跟踪哪些存储器位置和/或寄存器为脏(例如,包含从输入操作中接收到的或导出的数据)以及脏数据的来源的示例污染数据存储1800。如图18所示,脏指示符,诸如脏指示符值1812可以用任一合适的方式指示在该位置上相关联的数据是干净的,诸如空值等。脏指示符值1814可以指示相关位置处的相关联数据是脏的,且可以指示该脏信息的来源。例如,如图18所示,脏指示符值1814可以包含一数据流图,指示存储在相关联存储器位置上的数据是从来自非可信来源的脏输入数据中导出的,且指示了存储在相关联存储器部分的数据是如何从脏输入数据中导出的。数据流图可以指示输入值、输入数据的来源消息、输入数据消息中的偏移量、应用于输入数据以导出目前所存储的数据的指令等。如图18所示,脏指示符值1814可以指示数据流图1816。图18中的数据流图1816指示了输入数据1818在消息标识符为mess_1的消息中的偏移量为0。数据流图可以指示应用于输入数据的操作和/或指令。如图18所示,加法操作1820使用输入值
1818和以值2示出的值1824执行。加法操作的结果可以使用乘法操作符1826与值1828相乘。以这种方式,该数据流图示出了相关联的存储器位置是如何从脏数据,例如输入数据
1818中导出的。
[0062] 存储脏指示符的污染数据存储,诸如图4中的页污染数据存储410和寄存器污染数据存储420、图5中的污染数据存储510、图14中的寄存器污染数据存储1400、以及图18中的污染数据存储1800,可以被存储在计算设备的存储器中的任意一个或多个合适的数据存储中。可以理解,任一合适格式的任一合适数据存储可以用来存储污染数据存储信息和/或将其传递到检测模块,包括关系型数据库、面向对象数据库、非结构化数据库、常驻内存(in-memory)数据库、时序存储器或其它数据存储。存储阵列可以使用平面文件系统,诸如ASCII文本、二进制文件、通信网络上传输的数据、或其他文件系统来构造。尽管对上述数据存储有这些可能的实现,然而此处使用的术语数据存储和存储阵列仍涉及以计算机可访问的任何方式收集和存储的任何数据。
[0063] 寄存器、页、存储器位置等的脏指示符可以在任何合适的时间生成。例如,只要执行了输入操作(例如,从网络连接接收和/或处理数据),写入结果数据的存储器位置和/或寄存器就可以用一脏指示符来指示。参考图3,只要执行了[MoveData目标,源]格式的指令,检测模块340就可以为存储器的相关联部分生成一个或多个脏指示符。更具体地,每当来自脏来源的数据被写到目标中,该目标存储器部分,例如,存储器位置、寄存器等,可以被指示为脏的,否则,目标存储器部分可以被指示为干净的。当指令或系统调用将来自非可信外部来源的数据写入目标时,目标存储器部分可以被指示为脏的。指令MoveData是一不存在于任一特定CPU上的广义指令,且可以包含可以处理计算设备的存储器中的数据的任何数量的指令和/或指令的组合。例如,MoveData指令可包含操作数为寄存器或存储器的x86MOV指令、目标为由ESP寄存器所指向的存储器位置且另一寄存器为操作数的PUSH操作。其他的示例可以包括装载和存储操作,诸如MOV、MOVS、PUSH、POP等。其他的示例可以包括算术和逻辑指令,诸如ADD、MUL、AND、XOR等。只要存储器位置因为算术或逻辑指令被执行而变成脏的,脏指示符就可以包括导致该存储器位置变脏的全部或部分指令序列。尽管上述示例是对x86CPU专用的,然而本领域的技术人员可以认识到,由其他计算设备执行的其他操作和/或指令可以是适合的。
[0064] 为使用动态数据流分析检测蠕虫的存在,数据可以在它被执行和/或被装载至指令指针之前被检查。以这种方式,动态数据流分析可以在蠕虫获得控制之前截取执行。特别地,检测可以在执行控制被重定向到非法位置时发生。例如,在指令被执行前,可检查适当的污染数据存储,以保证存储要执行的数据的存储器部分的相关联脏指示符是干净的。如果该脏指示符指示存储该数据的存储器位置是脏的,则该指令的执行可以被中止,且可检测到蠕虫的存在。类似地,在数据从存储器部分被装载至指令指针之前,可以检查该数据的存储器部分的相关联污染数据存储。如果相关联存储器部分的脏指示符指示该数据来自不可信来源或从其导出的,那么该指针值可以不被装载至该指令指针,且可以检测到蠕虫的存在。为降低最后一项测试可能生成的假肯定,检测模块可以进一步在将被装载至该指令指针的值上没有计算任何范围比较(例如,检查一个值是否比一给定的常数小)或逻辑操作(例如,与一给定的比特模式进行AND操作)。检测模块也可以使用下述的易受攻击性验证过程来保证蠕虫的存在被正确地检测到,而没有假肯定。
[0065] 动态数据流分析检测是非常通用的,因为它可以针对未知的攻击目标进行保护,而大多数目前可用的工具被设计成保护已知目标。实现如上文所述的动态数据流分析的检测模块可以不依赖于检测任一特定数据结构的盖写,而是可以跟踪被执行或被装载至指令指针的数据的来源。例如,多种工具被设计成保护堆栈,然而攻击者可以选择以函数指针或设置跳转(setjump)缓冲区为目标来绕过该类型的保护。在任一情况下,攻击者必须向正在运行的程序输入某些数据,这意味着动态数据流分析可以检测到该攻击。事实上,动态数据流分析可以有能力检测攻击目标十分难以识别的问题。
[0066] 例如,诸如图17所示的源代码清单1700等程序可以从网络连接装载数据,并将该数据复制到第二缓冲区。该程序可以更改包含该缓冲区的页上的页保护许可,以允许执行然后跳转到该缓冲区。那些保护堆栈或任何其他程序数据结构的工具不会检测到该问题,因为没有损坏程序的堆栈且也没有缓冲区过速。如果该程序在页上实施执行许可的CPU上运行,则该问题也不会被检测到,因为该程序明确地更改了页许可。然而,上文所述的动态数据流分析可以检测该问题,因为缓冲区中的数据最初是通过网络连接上的输入操作进入程序的地址空间中的。尽管该示例是稍有创造的,但它显示了程序可能包含的那种任意错误。
[0067] 可以理解,在某些情况下,由检测模块实现的动态流分析可以不需访问源代码,而大多数保护工具需要访问源代码。该检测机制可以用多种其他方式实现。它可以通过在跟踪使用页许可的存储器访问解释的CPU仿真器上运行程序、通过使用二进制探测技术、或通过使用操作系统调试接口控制程序的执行来实现。此外,在某些情况下,只要执行环境有能力保留对每一被执行指令的控制,上文所述的动态数据流分析甚至可以检测自修改代码和动态生成代码(例如,在及时(just-in-time)编译环境中生成的代码等)的安全问题。如果程序运行在解释环境中,对每个指令保持控制是平凡的,但仍存在支持自修改代码的二进制盖写器。
[0068] 因为动态流分析不依赖于系统的已知易受攻击性,和/或定义含有蠕虫的消息的特征,上述的动态流分析可以检测已知和/或未知的蠕虫。另外,实现动态流分析的检测模块可以检测慢速蠕虫和/或伪装成正常话务的蠕虫。即使蠕虫仅将它们自己寄生在正常的应用程序话务中,使用动态流分析的检测模块仍可以检测到该蠕虫。另外,实现动态流分析的检测模块可以检测多形和/或变形的蠕虫。使用包括加密在内的通用迷惑技术的蠕虫变种引擎是广泛可用的。因此,将来的蠕虫可以广泛地使用这些工具,从而提高了不使用动态流分析来检测的难度。
[0069] 实现动态数据流分析的检测模块可以被扩展以检测通过盖写系统调用参数来获取对目标程序的控制的蠕虫。这样的蠕虫可以,例如,盖写创建进程的系统调用的参数并启动接受来自其它蠕虫实例的命令的程序。检测模块可以通过核查系统调用正在使用脏的自变量,例如,存储在脏存储器位置的自变量,以及这些自变量未被系统所核查,即,在脏的自变量上计算的逻辑操作(例如,与特定值或值范围的比较)不足以将它们限制到安全的值,来检测这样的攻击。例如,检测模块可以断定蠕虫可以强迫目标程序启动存储在目标系统上的任何程序。
[0070] 检测模块可以实现一种以上检测机制,且网络中一个或多个不同节点的每个检测模块可以实现不同的检测技术。例如,检测模块可以实现上文结合一种或多种其他检测机制描述的数据流分析检测机制。每种检测机制还可以有多种实现。以这种方式,可以达到检测机制的类型和实现的多样性。示例性附加和/或替换检测机制可以包括不如动态数据流分析通用但仍有能力检测出重大攻击的检测机制。
[0071] 一种这样的简单技术是检测每一RET指令将控制转移至一可执行页。该检测机制可能是有效的,因为多种蠕虫使用简单的盖写堆栈和跳转至盖写该堆栈的数据的技术,该数据通常并不处于含有执行许可的存储器区域内。该技术可以通过使用二进制盖写探测目标可执行码上的每一RET指令来实现。多种其他技术可以用来保护堆栈。
[0072] 另一示例性附加和/或替换检测机制可以通过探测每个CALL和/或RET指令来保持阴影堆栈。阴影堆栈本质上是正常堆栈的副本,但保持在不同的存储器位置,所以该堆栈的完整性可以在每条RET处核查。
[0073] 可以理解,其他附加和/或替换检测机制可以由检测模块实现,以检测蠕虫、病毒等的存在或威胁,包括将接收到的信息标识为包含已知的蠕虫;将接收到的信息和所存储的信息进行比较以检测被更改的和不必要的文件的存在、检测配置改变、和/或验证诸如返回地址等参数值;将预期要存储的信息和实际存储的信息作比较以检测缓冲器盖写;使用保护存储段检测缓冲区溢出;实现数组边界核查以直接检测缓冲区上溢和下溢;监视程序的运行时和/或通信模式并检测与预期行为的任何背离;检查输入数据是否含有已知蠕虫签名,诸如串和/或消息长度;动态数据流分析;等等。
[0074] 在操作中,检测模块,诸如图3所示检测模块340,可以实现一种检测蠕虫的方法。图6示出了检测蠕虫的示例性方法600。可接收(602)处理数据的指令,诸如由参考图1所述的计算设备接收。如上文所述,处理数据的指令可以是移动、组合、转移、装载数据等的指令。数据可以如所指令的来处理(604),诸如由计算设备的适当的本地应用程序、操作系统等来处理。对数据的处理可以包括在存储器位置和/或寄存器中存储(606)至少一部分数据或处理过的部分数据(例如,数据的导出)。存储器可以是堆栈、缓冲区或计算设备的任何其他存储器部分的一部分。存储的数据的位置可以用任一合适的方式来确定(608)。可检查数据的来源以确定(610)存储信息的存储器部分是‘脏的’还是‘干净的’。当所存储的信息是从不可信来源导出时,存储器部分是脏的。同样地,如果数据是来自可信来源和/或从其它干净数据导出的,数据可以被认为是干净的。
[0075] 如果数据是干净的,那么可设置(612)脏指示符值以指示该数据是干净的。如上文所述,指示干净数据的脏指示符可以是任何合适的指示符,包括‘0’值、空值等。
[0076] 所确定的脏指示符值可以与存储数据的存储器部分相关联(614),诸如通过在污染数据存储,如图3所示的污染数据存储390中存储脏指示符值来关联。该污染数据存储可以用默认脏指示符值来初始化和/或填充。更具体地,所有存储器部分可以最初被认为是一指示脏存储器部分的脏指示符和/或与该脏指示符相关联,除非如果肯定地确定了干净数据并且将其存储在相关联的存储器部分中而特意地更改为干净的。在另一示例中,所有的存储器部分最初可以被认为是一指示干净存储器部分的脏指示符和/或该脏指示符相关联,除非如果肯定地确定了脏数据并且将其存储在相关联存储器部分中而特意地更改为脏的。可以理解,污染数据存储可以被初始化为任何适当的值。此外,如上文所述,污染数据存储可以包括一个或多个数据存储,一个或多个脏指示符与每个存储器寄存器、存储器页、存储器位置等相关联。
[0077] 如果数据是脏的,那么可设置(612)脏指示符值以指示在该确定位置的数据是脏的。如上文所述,指示脏数据的脏指示符可以是任一合适的指示符,包括‘1’值或例如消息标识符等与数据来源相关联的唯一起源标识符、向存储的当前数据提供输入的数据的存储器位置、与消息内偏移量组合的消息标识符、包括在计算所存储的数据时所使用的所有或部分指令的数据流图等。如果所存储的数据是从存储在另一脏存储器部分的其它‘父’数据中导出的,则拥有与‘父’数据相同的起源指示符、父数据的存储器位置、通过将所接收到的指令与指令操作数的数据流图相组合所创建的数据流图等。所确定的脏指示符值可以与所存储数据的存储器部分(例如,位置或寄存器)相关联(614),诸如通过在一适当的污染数据存储中存储该脏指示符值来关联。例如,如果一存储器位置被确定为脏的,那么可设置一存储器位置脏指示符以指示脏数据,和/或可设置一页脏指示符以指示存储器的脏页。
[0078] 在某些情况下,为检测恶意利用系统调用自变量的蠕虫的存在,本方法可以确定脏存储器部分何时被用作系统调用的自变量。更具体地,可接收(616)执行系统调用的指令可被接收(616)。可确定(618)作为系统调用自变量传递的数据的存储器部分。可检查(620)与所确定的存储器部分相关联的脏指示符。例如,如上文所述,脏指示符可以与每个存储器部分相关联,以指示所存储的信息是干净的还是脏的。如果该脏指示符指示将被装载的数据是‘干净的’,那么,在某些情况下,可执行(636)接收到的指令,例如,可装载该信息。在某些情况下,为包括各种检测机制,可以使用其他检测技术进一步检查指令和/或数据以检测(634)蠕虫、病毒等的存在。
[0079] 在某些情况下,为检测蠕虫的存在,本方法可确定存储在脏存储器部分的数据何时以指示蠕虫存在的方式来处理。更具体地,可接收(622)更改执行流的指令。可确定(624)存储将被装载至指令指针的值的存储器部分。可检查(620)与所确定的存储器部分相关联的脏指示符。如果该脏指示符指示存储将被装载至指令指针的值的存储器部分是脏的,那么可以按上文所述采取(625)适当的行动。如果该脏指示符指示存储将被装载的值的存储器部分是‘干净的’,那么,在某些情况下,可执行(636)所接收的指令,并且该值被装载。在某些情况下,如果将被装载的值的存储器部分被指示为干净的,则由所装载的值所指示的指令的位置可以被确定(628),并且可以检查(630)该位置以确定存储该指令的存储器部分是干净的还是脏的。如果存储该指令的位置是脏的,则可以采取(626)适当的行动。如果该位置被指示为干净的,则可以使用其他检测技术进一步检查指令和/或数据以检测(634)蠕虫、病毒等的存在。如果脏指示符指示将被装载的值的存储器位置和由该值指示的指令是干净的,那么该指令被执行(636)。
[0080] 如果脏指示符指示将被处理的数据是‘脏的’,那么可以采取(626)适当的行动。如上文所述,响应于蠕虫的检测的适当行动可以包括关闭易受攻击的程序、关闭主机系统、生成并发送警报消息、为易受攻击性生成补丁和/或过滤器等。
[0081] 自证明警报(“SCA”)
[0082] 在某些情况下,单个节点可以包括一检测模块来保护它自己。然而,对蠕虫的检测可能是计算密集型过程。因此,在某些情况下,诸如图2所示的网络等网络的一个或多个节点可以检测蠕虫、易受攻击性和/或攻击,且可以警告网络中的一个或多个节点。如果中心节点代表多个其它节点检测到蠕虫,则该检测系统可以是以服务器为中心的。以这种方式,检测蠕虫的负载可以由一专用系统承担。可选择地,在网络中的所有节点或其子集可以负责检测易受攻击性,则该检测系统可以是以主机为中心的。网络中检测易受攻击性的节点集合可以是固定的,或可以随时间而改变并且可以在任何时间加入或离开该集合。服务器中心和主机中心检测系统的组合可以在网络中的各个节点之间实现各种检测系统,并将检测结果互相传递和/或传递给在网络中的其他节点。
[0083] 只要检测机制检测到蠕虫攻击,可以生成标识软件程序易受攻击性和/或所识别的蠕虫特征(例如,消息来源等)的警报。例如,该警报可以通过其特征作为输入数据(以蠕虫为中心)和/或通过可被蠕虫恶意利用的软件应用程序的易受攻击性(以易受攻击性为中心)来识别蠕虫。警报的生成可以是自动或手动的,且可以响应于被检测到的易受攻击性和/或蠕虫。警报可以用任一合适的方式来生成,诸如如图3所示响应于来自检测模块340的输入通过警报模块350生成。
[0084] 在某些情况下,可生成警报,使得接收系统可以证明警报消息的起源和/或内容的真实性。为证明警报的来源,该警报可以或可以不被数字地签署,以将该警报标识为源自一可信来源。为证明警报中指示的程序的易受攻击性,该警报可以包含描述如何触发该易受攻击性等的事件和/或程序路径的列表。在一示例中,自证明警报可以包含标识和/或描述软件易受攻击性的机器可验证证据。以这种方式,该自证明警报可以包含允许接收者通过再现感染过程来高效和/或有效地核查在警报中的易受攻击性声称的真实性的信息。自证明警报可以用任一合适的方式描述在软件系统中的易受攻击性,诸如通过文本描述、示出易受攻击性的非确定性事件的完整和/或部分日志、携带由Necula等人所著“Safe ndKernel Extensions withoutRuntime Checking”(发表在2 Symp.On Operating System Design andImplementation,1996年十月,第229-243页上,通过引用包含在此)所描述的代码的证明的包括等来描述。例如,非确定性事件的日志可以包括接收到的数据,并且可以示出直到被检测到的攻击瞬间之前的事件,例如,对存储在脏存储器部分的数据的执行和/或使用来自脏存储器部分的数据装载程序计数器。
[0085] 对软件易受攻击性的描述可以用于自证明警报,因为接收计算设备可以验证所识别的软件应用程序以所指示的方式响应,这指示了软件对于蠕虫攻击的易受攻击性。以这种方式,警报可以是自证明的,因为该警报可以基于警报中所包含的信息以及接收节点已知的信息(例如,通过本地应用程序响应的验证)而被证明。以这种方式,自证明警报可以是以易受攻击性为中心的,而不是以蠕虫为中心的。
[0086] 程序的所检测到的易受攻击性可以在自证明警报中被描述为非确定性事件的列表。更具体地,易受攻击的程序的执行可以被建模为分段确定性过程。该执行是间隔的序列,每一间隔以一非确定性事件(例如,消息的接收)开始,且其后跟随一确定性事件的序列。在一间隔内的执行是确定性的,例如,程序的响应完全由当前状态所确定。以这种方式,记录所有非确定性事件可以允许执行的重放,这样可以示出程序的易受攻击性。重放显示所识别程序的易受攻击行为的执行可以允许节点核查该自证明警报的真实性。
[0087] 图7示出了以易受攻击性为中心的示例性自证明警报700。该自证明警报可以是任一合适的格式和/或依照任一合适的消息协议。自证明警报可以包括程序标识符702和事件列表704,且可以可任选地包括易受攻击性类型标识符706、一个或多个验证提示708、和/或响应指示符710。
[0088] 程序标识符702可以标识含有所检测到的易受攻击性的程序或应用程序。程序标识符702可以包括易受攻击程序的任一合适的标识符的任何一个或多个,诸如商业名称、预定名称、版本号、厂商名称等。
[0089] 事件列表704是执行时会导致程序到达禁止状态的一个或多个非确定性事件的序列。重放该事件列表可以示出和/或指示程序的所检测到的易受攻击性。事件列表704中的事件序列可以用任一合适的方式生成。将非确定性事件记入日志的技术在容错文献中有进一步描述,这些文献包括Dunlap等人所著“Revirt:enablingintrusion analysis through virtual-machine logging and replay”,发表在Operating Syst.Design and Implementation,Boston,Massachusetts,2002年12月,和Elnozahy等人所著“A survey of rollback-recovery protocols inmessage passing systems”,发表在ACM Computing Surveys,第32卷,第3号,2002年9月,第375-408页,这两篇文献都通过引用包含在此。
[0090] 事件序列可以包括在检测过程中记入日志的事件或从那些事件中导出,诸如在上文所述动态流检测技术过程中记入日志的事件。事件列表中的事件序列可以与攻击期间实际纪入日志的事件匹配或不匹配,诸如图3所示检测模块340所记入日志的事件。准备自证明警报的节点可以用任一合适的方式修改记入日志的事件,包括去除不必要到达禁止状态的事件、用无害的值替代蠕虫代码部分等。事件列表704中的非确定性事件序列可以采用任何合适的格式和/或包含任何合适的指令或其它数据。例如,事件列表可以包括来自操作系统调用的结果列表和/或接收到的消息列表。因为蠕虫可以恶意利用不需与易受攻击的程序长时间交互的那些易受攻击性,因此非确定性事件的序列可以相当短。更具体地,易受攻击行为可以用少量数据来触发。例如,对先前的多种蠕虫,单个接收事件就足够了。
[0091] 对于使用动态流分析的蠕虫检测,检测模块340在蠕虫获得控制之前截取执行。具体地,对蠕虫攻击的检测可以在执行控制被重定向至一非法位置时发生,例如,来自脏存储器位置的数据将要被执行或装载至指令指针时。为限制在警报中事件列表的大小,如果检测没有被干涉,可以搜索非确定性事件的日志,以找出含有存储在脏存储器部分中、将要被执行或被装载至程序计数器的数据的事件。在多种情况下,易受攻击性可以由单个事件触发,并且自证明警报可以只包含作为该搜索结果的事件。在一示例中,可以在整个日志上执行对脏数据,例如非法地址的搜索。在另一示例中,上文参考检测模块的检测机制所述的数据流分析可以用来避免搜索并减少错误匹配的出现。因为动态流分析可以提供所有输入事件的全数据流跟踪,因此确定将要被执行或装载至程序计数器的脏数据的值的一个或多个确切输入事件可以被确定。例如,数据流跟踪可以标识引入在蠕虫攻击中使用的信息的来自外部来源的特定消息、可恶意利用易受攻击性的输入事件、和/或输入数据内数据和/或指令的偏移量。
[0092] 为确定输入事件,一输入事件标识符可以与存储在脏存储器部分的数据相关联,以指示确定脏数据的当前值的输入事件。输入事件标识符可以在脏指示符之外和/或包括在脏指示符内。输入事件标识符可以是标识从脏存储器部分装载数据的输入事件和/或脏数据来源的任意何时的标识符,诸如整数、文本串等。在一示例中,脏指示符包括标识脏数据来源的输入事件标识符。更具体地,指示干净的脏指示符可以是任何合适的值,诸如空值或0。然而,在某些情况下,并非使用诸如‘1’等整数来指示脏存储器部分,而是指示脏存储器部分的脏指示符可以是输入事件指示符或其它来源指示符。可选择地,脏指示符可以包括诸如图18所示的数据流图,以确定确定存储在脏存储器部分的当前值的输入事件和这些事件中的字节范围。当数据流分析用信号通知易受攻击性时,含有将要被执行或装载至程序计数器的脏数据的数据流图中的标识符的事件和在执行日志中最后一个非确定性事件可以用来形成警报中的事件列表。
[0093] 除减少重放易受攻击执行所需的非确定性事件序列大小以外或作为其替换,执行可以在生成警报事件列表时用越来越大的事件日志后缀(例如,从后向前通过日志)来重放,且可对每次迭代核查错误状态的存在。以这种方式,事件列表可以从导致易受攻击性检测的原始事件中减少。对目前大多数的蠕虫,该策略可能是有效的,因为通过网络连接接收到的最后几个分组可能触发易受攻击性。
[0094] 易受攻击性类型标识符706可以标识和/或描述存在且可能在指示的程序中被恶意利用的程序易受攻击性或错误状态的类型。易受攻击性类型标识符可以是任何合适的标识符,诸如字母数字文本串等,它指示所指出程序的允许不被接受的错误状态的预定易受攻击性。对错误状态的描述和/或可接受性可在警报的生成者和接收者中意见一致且被预先确定。此外,自证明警报的接收节点可以认同执行的哪些状态和结果是易受攻击性的表达。关于易受攻击性类型的一致认定可以是事先的,例如预先确定的,或动态的,例如,在蠕虫检测和/或警报接收时确定。由易受攻击性类型标识符所标识的易受攻击性类型可以是程序或应用程序的任何合适的漏洞。可存在多种不同类型的状态,它们可事先被一致同意为易受攻击性的表达。易受攻击性类型的一示例可以是任意执行控制(“AEC”)。AEC警报标识了允许蠕虫将执行重定向至程序地址空间中的任意代码片段的易受攻击性。它们描述了如何调用其地址在输入中提供给易受攻击程序的代码片段。易受攻击性类型的另一示例可以是任意代码执行(ACE)。ACE警报描述了代码注入易受攻击性。它们描述了如何执行在输入中提供给易受攻击程序的任意代码片段。易受攻击性类型的另一示例可以是任意函数自变量(AFA)。AFA警报标识了数据诸如易受攻击性,它允许蠕虫更改关键函数的自变量值,诸如更改可执行码的名称以在创建进程的系统调用中运行。它们描述了如何调用带有在输入中提供给易受攻击程序的自变量值的指定关键函数。
[0095] 验证提示708可以包括便于在重放所指示的事件列表后核查所指示的状态或易受攻击性是否为真的任何合适的信息。
[0096] 响应指示符710可以包括便于对程序易受攻击性的恰当响应的任何合适的信息。例如,响应指示符可以指示一补丁可以解决易受攻击性、可以生成一过滤器来检测对该易受攻击性的潜在恶意利用、用于检测含有所标识蠕虫的消息的接收的过滤器、实现补丁/过滤器的实际代码等。
[0097] 在一示例中,易受攻击性中心自证明警报可以指示一程序含有任意执行控制(AEC)易受攻击性。因为蠕虫攻击可以是基于任意地更改易受攻击程序的执行流的能力,因此该易受攻击性可以用一AEC易受攻击性类型指示符来指示。因为提供通过向程序发送消息来将程序计数器重定位至任意位置的能力是少见且危险的,因此主机可以认同该状态表达了易受攻击性。对这种类型的易受攻击性,验证提示可以指出程序计数器(例如,x86CPU上的EIP)将用任意值来装载,且可以指出在非确定性事件列表中的哪里是将被装载至程序计数器的值。例如,如果该非确定性事件列表是接收到的消息的列表,则验证提示可以指出在哪条消息中和在哪个偏移量处是将被装载至程序计数器的值。消息和偏移量可以使用上述技术来确定。
[0098] 在另一示例中,易受攻击性中心自证明警报可以指示一程序含有任意代码执行(ACE)易受攻击性。因为蠕虫攻击是基于将代码注入易受攻击程序的能力的,因此该易受攻击性可以用一ACE易受攻击性类型指示符来指示。因为提供通过向程序发送消息来向程序注入新代码的能力是少见且危险的,因此主机可以认同该状态表达了易受攻击性。对这种类型的易受攻击性,验证提示可以指出新代码会被注入且被执行,且可以指出非确定性事件列表中的哪里是将被执行的代码。例如,如果非确定性事件列表是接收到的消息的列表,则验证提示可以指出在哪条消息中和在哪个偏移量处是将被注入和执行的代码。消息和偏移量可以使用上述技术来确定。
[0099] 在另一示例中,易受攻击性中心自证明警报可以指示一程序含有任意函数自变量(AFA)漏洞。因为蠕虫攻击是基于注入要用作函数自变量的值的能力的,因此该易受攻击性可以用一AFA易受攻击性类型指示符来指示。因为提供通过向程序发送消息来向程序所使用的系统调用注入任意新自变量的能力是少见且危险的,因此主机可以认同该状态表达了易受攻击性。对这种类型的易受攻击性,验证提示可以指出一任意函数自变量被注入且被执行,且可以指出在非确定性事件列表中的哪里是将被注入的自变量。例如,如果该非确定性事件列表是接收到的消息的列表,则验证提示可以指出在哪条消息中和在哪个偏移量处是将被注入的自变量。消息和偏移量可以使用上述技术来确定。
[0100] 自证明警报的一个替换形式可以包括该程序是易受攻击的证据,它类似于Necula等人所著的“Safe Kernel Extensions without Runtime Checking”中的带证据的代码,发表在2nd Symp.Operation Systems Design and Implementation,1996年10月,第229-243页。在最简单的形式中,该证据可以包括对导致禁止状态的执行路径的描述,诸如以指令序列的形式。该种形式的警报同先前所述的不同,因为它携带程序指令序列,而非只含有非确定性事件列表,且它也可以带有逻辑公式以促进下述的验证机制。
[0101] 生成警报的节点可以向至少一个其它节点发送警报,以向它通知所检测到的蠕虫或易受攻击性。警报的分发可以通过分发模块370响应于警报模块350来确定,如图3所示。节点可以通过通信介质以任何合适的消息格式或协议发送警报。警报可以分发给与生成警报的节点通信的任何合适的节点。当一节点接收到警报时,该节点也可以将该警报分发给与其通信的任何合适的节点。例如,警报可以依照预先确定的警报地址列表发送给所有节点、发送给近期与生成警报的节点联系的所有节点、或依照任何其他合适的分发方案。一种分发方案将在下文更详细论述。
[0102] 证明自证明警报
[0103] 诸如图7所示的自证明警报700的自证明警报,可以由接收该警报的节点自证明。例如,接收节点320的警报验证模块360,如图3所示,可以证明接收到的警报330。在一示例中,接收节点可以对该警报进行语法分析以检索程序标识符和事件列表以及诸如易受攻击性指示符和一个或多个验证提示等任何其他参数。接收节点可以重放由所指示的程序中的事件列表定义的执行。可以使用任何合适的技术以重放该事件列表,包括在某种类型的沙箱(sandbox)环境中重放程序中的事件。重放事件列表的结果可以由接收节点检查来验证程序易受攻击性,结果可以用所提供的易受攻击性类型标识符和/或验证提示来扩充,以确定指示的错误或易受攻击性状态是否存在。如果否,则该警报没有被证明,且可以采取适当行动,诸如丢弃消息、向其它节点发送标识错误警报的警报等。
[0104] 事件列表可以使用一阶逻辑来证明,而不是逐字逐句地执行事件列表。例如,包含在自证明警报中的证据可以用一种类似于携带证据的代码的方式来验证。然而,不是显示程序的所有执行涉及安全条件,而是证明自证明警报可以显示程序的一特殊执行展示了易受攻击性。不是考虑完整的程序,而是自证明警报的证明可以集中在一条或多条所标识的执行路径上,例如,事件列表中由非确定性事件序列定义的路径。在一种简单的形式中,自证明警报中的证据可以包括在由事件列表定义的路径中执行的指令列表。以这种方式,一逻辑验证可以为易受攻击的程序中所标识的路径生成一安全条件,并且显示当程序接收到由自证明警报提供的事件列表中的事件时该安全条件不成立。
[0105] 例如,在上述AEC自证明警报中,所指示的程序的易受攻击执行路径可以由单个消息的接收触发,且该自证明警报可以包括路径中的指令列表。为证明该警报,可以检查该指令列表,诸如通过使用程序文本来确定安全条件并验证事件列表中的事件违反了该条件。可以从程序指令中生成该执行路径的逻辑安全条件。为获得一执行路径的安全条件,可以定义一模拟安全程序的执行的抽象机器。该抽象机器的指令可以与由易受攻击程序生成的真实CPU指令类似。
[0106] 图9示出了x86CPU指令的一子集的示例抽象机器900。在图9中,∏表示CPU指令的向量(例如,自证明警报中的指令列表);pc表示程序计数器;∏pc表示当前指令;ρ表示机器寄存器和存储器的状态;ρ[ri]是状态ρ中寄存器ri的值(可以被缩写为ri);rm表示指示存储器状态的特殊寄存器;ρ[rd←rs]表示通过用值rs代替rd从ρ获得的新状态;sel(rm,n)表示存储器地址n的内容;upd(rm,rd,rs)表示从将寄存器rs写入寄存器rd得到的新存储器状态;以及ZF表示零标志(例如,存储器中的一个比特)。
[0107] 当执行返回指令(RET)时,示例抽象机器900核查由堆栈指针寄存器(ESP)指向的存储器位置是否含有蠕虫。从诸如图9所示的抽象机器的定义中,可以获得一组规则来为程序机械地生成安全条件。图10示出了对应于图9所示的抽象机器的一组示例规则1000。规则1000根据安全条件参数SCpc+11004指定了安全条件参数SCpc1002。以这种方式,程序的安全条件可以通过从最后一条指令开始,处理每条在前的指令直到开始指令,同时核查指令列表是否代表给定程序文本时的有效执行而获得。更具体地,可以检查最后一条指令、然后可以检查最后两条指令、依此类推。
[0108] 可以定义一前置条件。更具体地,该前置条件可以反映程序在易受攻击执行路径开始时的初始状态,诸如寄存器和/或存储器的状态。可以定义一易受攻击性谓词。例如,易受攻击性谓词可以被定义为: 易受攻击性谓词然后可以根据一阶谓词演算的规则来证明。
[0109] 例如,由一自证明警报的事件列表提供的易受攻击指令序列可以被定义为如图11所示的指令1100。使用图10所示的规则1000,安全条件SafetyCondition可以被定义为:
[0110]
[0111] 以这种方式,在由警报的事件列表1100标识的执行路径的开始处,ECX寄存器的值不等于10,且存储器位置1234刚被一网络输入操作写入(且因此被认为是‘脏的’且可能含有蠕虫)。由上述等式(1)给出的安全条件,前置条件可以被定义为:
[0112] (ECX≠10^Worm(sel(rm,1234)) (2)[0113] 从等式(1)的安全条件和等式(2)的前置条件中,可以生成并证实一易受攻击性谓词。证实该易受攻击性可以验证在事件列表中指示的易受攻击性的存在,这可以证明警报。应该理解,存储器位置1234不必含有蠕虫。例如,外部输入操作可能任意地更改程序执行的实时可以意味着该程序是易受攻击的,即使还没有对该易受攻击性进行恶意利用。
[0114] 图16示出了生成自证明警报的示例性方法1600,图8示出了证明自证明警报的示例性方法800。参考图16,程序易受攻击性可以由诸如检测模块340检测(802)。可以确定(804)该易受攻击程序的程序标识符。可以确定(806)易受攻击性类型,且选择适当的易受攻击性指示符。可以确定(808)提供易受攻击性的机器可验证证据的事件列表808。如上文所述,该事件列表可以从实现动态数据流分析的检测过程中记入日志的事件导出。该事件列表也可以从检测过程中记入日志的事件中消减或减少,以确定示出所指示的易受攻击性、从一数据流图导出、被修改以用无害的值来代替各部分等的最小的或精简的事件集合。一个或多个验证提示可以基于所确定的事件列表和/或易受攻击性指示符来确定(810)。
在某些情况下,可确定(812)一响应指示符,它可以包括关于对蠕虫的潜在解决方法的提示,例如,补丁和/或过滤器、实现补丁和/或过滤器的实际代码、蠕虫签名等。自证明消息可以依照任何合适的协议以任何合适的格式形成(814)。警报可以诸如通过通信介质发送(816)给网络中的另一节点。如上文所述,分发模块370可以用来确定自证明警报的接收节点。
[0115] 参考图8,可由接收节点诸如通过通信介质接收(850)一自证明警报。该警报可以诸如由途3的警报验证模块360进行语法分析(852)以确定程序标识符和事件列表。程序标识符可以与接收节点上存在的程序进行比较(854)。如果程序标识符不存在于接收节点上,那么可以采取(856)恰当的行动。例如,恰当的行动可以包括丢弃该警报和/或将该警报转发至另一节点以进一步在通信网络中分发该警报。
[0116] 如果该程序标识符指示了接收节点的程序或应用程序,那么该接收节点,诸如通过图3所示的警报验证模块360,可以装载(858)所指示的程序。在某些情况下,该程序可以被装载至一被挂起的进程。在某些情况下,该程序可以被装载至一‘沙箱’环境,它可以限制行动、互相联系、和/或所指示的易受攻击性的其它恶意副作用。虚拟机器可提供其中可以发生警报验证的沙箱环境。其他沙箱环境可以沉默地丢弃正在运行的程序的所有输出以限制副作用。在某些情况下,接收节点可以指令另一计算设备,诸如一孤立和/或测试设备,装载所指示的程序和/或证明自证明警报。
[0117] 一验证函数可以被装载(860)至该挂起进程的地址空间。验证函数可以在该验证函数由所指示的程序调用时返回一成功指示符,或该函数可以调用一响应模块。成功指示符可以是指示验证函数的执行的任何合适的指示符,包括视觉或听觉信号、使用指定值退出程序、向网络接口写入值、发信号通知同步对象等。验证函数的结构可以依赖于由事件列表所示的易受攻击性的类型。以这种方式,可从自证明警报中语法分析易受攻击性指示符和/或验证提示,并用来选择和/或生成适当的验证函数。
[0118] 事件序列可以使用所装载的程序来重放(862)。因为事件列表被执行,因此可调用验证函数,它可以指示所指示的程序中的易受攻击性的存在。例如,对于指示AEC的易受攻击性指示符,自证明警报中的提示可以指示将被装载至程序计数器的地址的事件和/或该事件中的偏移量。其中装载了验证函数的地址可以被放置在该事件和/或偏移量处。以这种方式,如果在事件列表的重放过程中执行(864)了验证函数,那么证明了该易受攻击性,且该警报可以被认为是已证明的。以这种方式,接收节点可以响应于已证明的警报采取(866)恰当的行动,诸如终止该易受攻击的程序和/或实现一合适的补丁和/或过滤器以解决该易受攻击性。如果该警报没有被证明,例如,验证函数没有被执行,那么可以采取(856)恰当的行动,诸如丢弃消息和/或向其它节点通知该无效的警报。
[0119] 在另一示例中,对于指示ACE警报的易受攻击性指示符,自证明警报中的提示可以指示将由目标程序注入和执行的代码的事件和/或该事件中的偏移量。指令序列“call verification(调用验证)”,即,指令CPU调用验证函数的目标CPU指令序列,可以被放置在该事件和/或偏移量处。以这种方式,如果在事件列表的重放过程中执行(864)了验证函数,那么证明了该易受攻击性,且该警报可以被认为是已证明的。以这种方式,接收节点可以响应于已证明的警报采取(866)恰当的行动,诸如终止该易受攻击的程序和/或实现一合适的补丁和/或过滤器以解决该易受攻击性。如果该警报没有被证明,例如,验证函数没有被执行,那么可以采取(856)恰当的行动,诸如丢弃消息和/或向其它节点通知该无效警报。
[0120] 在另一示例中,对于指示AFA警报的易受攻击性指示符,自证明警报中的提示可以指示将会被传递给目标程序的函数的任意自变量的事件和/或该事件中的偏移量。任意自变量可以被放置在该事件和/或偏移量处,且验证器可以用一包装器来探测该AFA警报中所标识的关键函数,该包装器在非确定性事件重放过程中对照用于函数调用的实际自变量值核查所提供的任意自变量值。如果它们匹配,则该包装器调用验证函数。以这种方式,如果在事件列表重放过程中执行(864)了验证函数,那么证明了该易受攻击性,且该警报可以被认为是已证明的。以这种方式,接收节点可以响应于已证明警报采取(866)恰当的行动,诸如终止该易受攻击的程序和/或实现一合适的补丁和/或过滤器以解决该易受攻击性。如果该警报没有被证明,例如,验证函数没有被执行,那么可以采取(856)恰当的行动,诸如丢弃消息和/或向其它节点通知该无效警报。
[0121] 不是逐字逐句地执行上文对于事件列表所描述的事件列表,该事件列表可以使用一阶逻辑来证明。参考图8所示的方法,可以从程序指令中对由事件列表所指示的执行路径生成(872)一逻辑安全条件。该安全条件可以用任何合适的方式生成,诸如通过定义一模拟安全程序的执行的抽象机器。可以定义(874)一反映在易受攻击执行路径开始处的程序的初始状态的前置条件。可以定义(876)一易受攻击谓词,它然后可以根据一阶逻辑演算规则来证实(878)。如果该谓词被证实,则可以响应于已证明的警报采取(866)恰当的行动,诸如终止该易受攻击的程序和/或实现一合适的补丁和/或过滤器以解决该易受攻击性。如果该谓词没有被证实,那么可以采取(856)恰当的行动,诸如丢弃消息和/或向其它节点通知该无效的警报。
[0122] 响应
[0123] 如果执行结果确实标识了所指示的易受攻击性,那么可以响应于程序中已证明的易受攻击性采取恰当的行动。计算设备的响应可以用任何合适的方式手动和/或自动地执行,包括由系统管理员、如图3所示的响应模块380等手动指示的响应。例如,程序可以脱机地获得,和/或可以采取其它防范措施。该防范措施可以包括基于事件列表和/或易受攻击性类型指示符和/或验证提示来生成一补丁和/或过滤器。以这种方式,自证明警报内的信息可以用来手动和/或自动地生成补丁和/或过滤器来防止感染,而无需终止应用程序。此外,生成的补丁/过滤器可以包含在该自证明警报中,以供接收节点使用,诸如在图7所示的响应指示符710中。
[0124] 自证明警报的事件列表和/或验证提示可以用来自动地生成对易受攻击的程序的二进制修改(例如,补丁),它可修补该易受攻击性。
[0125] 例如,如果感染涉及对数据结构的盖写,则可以生成执行防止盖写的额外核查的代码。例如,如果盖写是归因于缓冲区上溢或下溢,则可以生成数组边界核查代码来防止盖写。所生成的代码而后可以应用于该易受攻击的程序。在另一示例中,可以通过保持被该写数据结构的一单独副本、使用原始数据结构、以及在对执行前的原始数据结构的每次访问前将该副本与原始数据结构进行比较,来生成一动态补丁。在另一示例中,循环中的边界条件可以用另一条件(例如,用确保循环体的执行次数更低的条件)来替代。
[0126] 可以基于携带蠕虫的源消息中足够独特的字母数字串和/或含有特定长度的消息来生成一蠕虫专用过滤器。
[0127] 可以声称可检测多形蠕虫的易受攻击性专用过滤器。在一示例中,一过滤器可以被安装在网络堆栈之上。易受攻击性专用过滤器可以使用应用程序状态来确定何时丢弃传入的话务。更具体地,可以通过分析自证明警报的事件列表中所列出的执行路径,并核查传入消息中的哪些字节确定了导致感染的执行路径以及在该执行路径上测试了那些字节上的哪些条件,来生成过滤程序的一般条件。这些易受攻击性专用过滤器能够使用一类似于动态流分析的机制来生成,直到写入了将会由蠕虫装载至程序计数器或执行的脏数据。
[0128] 在一示例中,使用动态数据流分析生成易受攻击性中心过滤器的响应模块可以为诸如存储器位置和/或寄存器等每个脏存储器部分维护一数据流图。响应模块还可以为每个CPU标志保持数据流图。每张数据流图可以包括用于从消息或其它外部信息源中的值计算脏存储器位置上的值的指令序列的全部或相关部分。响应模块可以使用控制流分析来跟踪确定执行控制转移指令后的指令指针值的所有条件、以及在执行条件移动和设置指令时使用的条件。这些条件的逻辑与可以被称为过滤器条件。过滤器条件初始为真,且可以在使用脏处理器标志或将控制转移给从脏位置读取的地址的每一指令后被更新。过滤器条件被更新为其旧的值和由该脏标志和地址位置的数据流图计算得到的表达式的适当条件的逻辑与。例如,当JZ EAX(如果零标志被设定设置,则跳转至存储在EAX寄存器中的地址)被执行且发生跳转,如果零标志和EAX寄存器都是干净的,则过滤器条件保持不变。如果零标志是脏的,添加由零标志的数据流图计算的表达式为假的条件。如果EAX也是脏的,也添加由EAX数据流图计算的表达式等于由EAX当前所存储的值的条件。如果跳转没有发生,添加由零标志的数据流图计算的表达式为真的条件,且不添加EAX数据流图的条件。在该过程之后,过滤器条件可以被应用于传入消息,以阻断蠕虫或恶意利用同样的漏洞的蠕虫变种。以这种方式,过滤器条件可以减少假肯定的发生。
[0129] 图15所示的示例性易受攻击代码可以用来阐明过滤器的生成。图15中代码1500通过将网络缓冲区中消息的第一字节与一常数(0x31)进行比较开始。如果匹配,则网络缓冲区中的字节被复制到一基于堆栈的缓冲区,直到发现一零字节。这是可能盖写堆栈上返回地址的潜在缓冲区上溢,且它表示了字符串库中的易受攻击性。用于此易受攻击性的过滤器可以通过运行上述动态数据流分析来生成。例如,在执行了图15所示的示例性指令的前四条指令1502后,实现动态数据流分析的检测模块可以确定消息中第一字节应该等于0x31的条件。类似地,执行循环可以导出网络缓冲区中的字节序列上不同于零的条件。向传入消息应用具有这些条件的过滤器可以不产生假肯定,且可以阻断实质上恶意利用该易受攻击性的所有蠕虫变种。若干附加机制可以用来细化过滤器条件。在一示例中,响应模块去除消息字节上在由SCA中的验证提示标识的偏移量后出现的条件。因为消息中的字节通常按顺序来处理,因此这种试探不太可能造成假肯定。在另一示例中,响应模块在函数返回时去除由该函数执行添加的条件。基本原理是这些条件在函数返回后通常不重要,且该函数的重要效果是在脏数据的数据流图中捕捉的。
[0130] 生成的补丁或过滤器可以由接收并证明警报消息的任何机器独立地生成,诸如通过如图3所示的响应模块380生成。在另一示例中,生成的补丁或过滤器可以包括在警报消息之内,且该补丁或过滤器可以由接收节点用任何合适的方式证明或确认。如图7所示,自证明警报还可以包括响应指示符710,它可以包含对已验证的易受攻击性和/或蠕虫攻击的合适的响应。例如,该响应指示符可以提供对合适的补丁和/或过滤器、实现合适的补丁和/或过滤器的代码等的描述或提示。
[0131] 警报的分发
[0132] 检测易受攻击性的节点可以向网络中与该检测节点通信的一个或多个节点发送警报。例如,通信网络中的一部分节点可以运行易受攻击性和/或蠕虫检测模块,该模块可以帮助分发检测负载和去除蠕虫的中心目标。如上文所述,检测模块可以包含多种检测机制,其中有些是简单的,有些是复杂的。网络的一检测节点可以在空闲时运行检测模块,作为其正常操作的一部分,和/或作为网络中其主要的或唯一的功能。可以理解,通信网络中的任何数量的节点,诸如一个、一部分、或所有节点可以被认为是运行检测模块的检测节点。
[0133] 如上文所述,当检测到易受攻击性和/或蠕虫攻击时,一种响应可以是生成警报,诸如自证明警报,并将其发送至网络中的一个或多个节点。以这种方式,可以向没有检测到该易受攻击性和/或没有被所检测到的蠕虫感染的节点警告关于该蠕虫和/或程序易受攻击性,且可以采取恰当的保护行动。如上文所述,自证明警报可以包括允许接收节点独立地验证该警报的真实性的机器可验证信息。以这种方式,网络中接收警报的任何节点可以证明该警报,而无需与鉴权机构等通信。从而,自证明警报可以是促进互不信任节点之间的合作的体系结构的一部分。
[0134] 覆盖图网络
[0135] 当检测到蠕虫和/或易受攻击性时,一警报可以被迅速和/或能复原地发送到可能运行该易受攻击或易受蠕虫攻击影响的其它程序。该警报可以用任何合适的方式发送到网络中任何数量的可确定和/或预定节点。在一示例中,可以使用一网络覆盖图来发送警报,该网络覆盖图对抗恶意知情者和/或蠕虫的服务拒绝攻击来进行保护。例如,警报可以通过一结构化的对等覆盖图来广播。
[0136] 对等覆盖图可以为自组织应用程序的构造提供一合适的基底,因为对等网络可以缩放至巨大数量的节点,且可以是有复原力的,例如,可以即使在大量节点崩溃或断开连接时也保持连通性。下面的描述提供了结构化对等覆盖图的概述,且示出了保护对等覆盖图以提高向在系统中实质上所有未被感染的节点传递警报的可能性的一示例。尽管在以下讨论中使用了Pastry对等覆盖图作为示例,然而可以理解,可以使用任何其它合适的网络和/或对等网络覆盖图。对等网络覆盖图的网络类型的当前示例包括加州大学伯克利分校开发的Tapestry、麻省理工大学开发的Chord、以及微软和赖斯大学开发的Pastry。Tapestry、Chord和Pastry都是用于构建分布式系统的工具包。CAN、Kademlia、Skipnet和Viceroy是类似的其它系统。经常会出现新的覆盖图设计。
[0137] 诸如Pastry等结构化覆盖图将键映射给覆盖图节点。每个节点被分配一标识符空间选择的节点标识符。键是从同一标识符空间选择的。键被映射给具有最接近和/或最类似于标识符空间中该健的节点标识符的节点。该节点可以被称为该键的根节点。键到节点的映射可以通过允许用户向目标键发送查找消息的原语来展示,例如,使用在Dabek等人所著的“Towards a common API for structuredpeer-to-peer overlays”(发表在nd2 Int’l Workshop on P2P Systems,2003年2月,第33-44页,通过引用包含在此)中有进一步讨论的KBR接口来展示。查找消息可以通过覆盖图路由到目标键的根节点。例如,Pastry从128位无符号整数集合中均匀地随机选择节点标识符和键,然后将一指示的目标键映射至其节点标识符在数字上与该键最接近的活动结点。例如,数字上最接近的节点标
128
识符可以是与目标键以2 为模最接近的节点标识符。
[0138] 节点的路由状态信息可以被存储在一路由表中。该路由表可以用路由表中指示的节点空间逼近存储在路由表中的节点的节点标识符的越来越高的详细等级将节点标识符与地址空间中多个节点的网络地址相关联。节点的叶子集合包含最接近或最类似于主宿在路由表中的节点的节点标识符的那些节点的信息,诸如节点标识符和网络地址。取决于覆盖图协议,叶子集合可以被存储在独立于路由表的数据结构中,和/或可以是路由表的最低层次。
[0139] 一示例性路由表结构将参考Pastry来讨论。Pastry的路由算法将节点标识符和b键解释为以2 为底的无符号整数,其中b是通常值为4的参数。基于该解释,路由表是具有b
128/b行和2 列的矩阵。该路由表的r行c列中的条目包含与本地节点的节点标识符共享前r位数的节点标识符,且第(r+1)位数等于c,假定该路由表中的第一列表示r=0。如果不存在这样的节点标识符,例如,在网络中没有一个活动节点正在使用该节点标识符,那么该条目可以为空值。因为节点标识符可以遍及标识符空间被均匀且随机地分配,因此在b b
该发送表中非空条目的平均数量可以被近似为对等网络中节点的数量的(2-1)*log(以2为底)。一Pastry节点的叶子集合可以包含本地节点的节点标识符左端的//2个最接近节点标识符,以及本地节点的节点标识符右端的//2个最接近节点标识符,其中/是一个通常值为8的参数。对等网络中的每个节点的叶子集合的集合然后以环的形式连接覆盖图节点。以这种方式,消息可以通过转发该消息给具有与目标键相匹配的逐渐更长的前缀的节点而在对等网络中路由。
[0140] 图12示出了b=2以及/=4的一示例性结构化覆盖图网络1200。该结构化覆盖图网络图示出了于节点1202始发的查找消息的路线1210。查找消息含有一与最接近于所指示键值的节点标识符的键,例如,存储与键相关的所需信息的节点是含有最接近于该的键的节点标识符相匹配的健,例如,储存与健相关联的期望信息的节点是具有最接近于该健的节点标识符的节点。例如,节点1202可以含有节点标识符203231,且查找消息的键可以是323310。为发送该查找消息,始发节点1202可以搜索其路由表中的一层,以找出最接近于该查找消息的目标键的已知节点标识符。更具体地,节点1202可以搜索其路由表的第一行,以寻找以数字3开头的节点标识符,3是该键的第一位。该始发节点可以在以3开头的节点标识符的路由表位置处找到节点标识符313221。参考图12,始发节点1202可以而后使用通信介质通过路线1212向处于与其路由表中的节点标识符(313221)相关联的地址处的节点1204转发该查找消息。节点1204而后接收到该查找消息,且可以搜索其路由表(例如,表的第二层),以查找以32开始的节点标识符,例如,匹配查找消息键323310的前两位。节点1204可以在以32开头的节点标识符的位置处找到节点标识符322021。节点1204然后可以使用通信介质通过路线1214向处于与其路由表中的节点标识符(322021)相关联的地址的节点1206转发该查找消息。节点1206然后接收到该查找消息,且可以搜索其路由表,并继续上述步骤直至该查找消息到达该键的根节点1208。在多种情况下,如果节点标识符的分布是足够随机且均匀的,路由平均需要大约 N个中继段(其中参数N是网络中节点的个数,且b是节点标识符空间的底数)。
[0141] 保护网络
[0142] 为提高通过结构化网络覆盖图的警报分发的复原能力,一个或多个安全机制可以用来保护该结构化的对等覆盖图网络。任何安全措施可以被恰当地使用。安全措施可以包括,例如,Castro等人所著的“Secure routing for structured P2Poverlay thnetworks”(发表在5 Usenix Symp.Operat ing System Design andImplementation,
2002年12月,第299-314页,通过引用包含在此)中所述的技术。其他的安全机制可以减少信息泄漏、减少服务拒绝(在覆盖图层产生拥塞)、即使大部分覆盖图节点被感染时也能向未感染的节点发送广播警报等。
[0143] 一种安全措施可以向进入对等网络的节点分配节点标识符。节点标识符可以由任何合适的来源分配,诸如一个或多个可信鉴权机构(CA)。该鉴权机构可以保证节点标识符是从节点标识符空间中充分随机地选取的,和/或可以防止节点伪造节点标识符。鉴权机构可以使用技术以控制认证节点标识符的已签署证书的可用性,例如,通过要求支付、拥有一特定产品的证据、对慈善团体的财政馈赠的证据等来控制。使用鉴权机构分配节点标识符可以减少Sybil攻击。为保护该鉴权机构免遭攻击,该一个或多个鉴权机构可以是脱机的,和/或不被牵涉至该覆盖图网络的正常操作中。
[0144] 一种替换和/或另外的安全措施可以包括启用安全路由表维护,这可以用任一适当的方式来实现。例如,可以对能够填充路由表中每一字段的节点标识符集合施加约束。在标识符为i的节点的Pastry发送表中,在r行和c列的字段可以被约束为含有与该节点标识符i共享前r位数且在第r+1位上的值为c的任何节点标识符。节点标识符条目的剩余数字可以是与路由无关的。然而,路由表中的条目可以被进一步约束为指示或包含在域中最接近点p的节点标识符。点p可以被定义为节点空间中这样的节点标识符位置:它与节点标识符i共享前r位数,在第r+1位的值为c,且含有限制域中一有效点p的节点标识符的某些可确定的数字序列。例如,点p可以被定义为这样的节点标识符:它与节点标识符i共享前r位数,在第r+1位上值为c,且其它数字都与i相同。将路由表条目与标识符空间中的虚拟点绑定可以减少对由恶意节点发送、由诚实节点接收的路由更新的接受(如果该更新不满足虚拟点约束)。以这种方式,能够被恶意节点占据的路由表条目的数目可以被限定。该技术在Castro等人所著的“Secure rout ing for structured peer-to-peeroverlay th
networks”(发表在5 Usenix Symp.Operating System Design andImplementation,Boston,MA,2002年12月,第299-314页,通过引用包含在此)中进一步描述。
[0145] 一种另外的或替换的安全措施可以包括避免信息泄漏。更具体地,网络覆盖图的爬行(crawling)可以被禁止和/或反对。从而,对覆盖图成员信息的访问可以被降低。任何合适的技术可以用来避免泄漏成员信息,诸如约束路由表中的条目。例如,带有节点标识符i的节点可能需要填充其路由表中r行c列的缝隙,因为该缝隙由于节点故障、由于另一节点而离开覆盖图、和/或节点正加入和初始化其路由表而变空。为填充该缝隙,节点可以向定义该空隙的约束的标识符s路由一请求消息,该标识符s是例如除了在r+1位值为c外与节点标识符相等的标识符。当这样一个请求被传送到一节点时,该接收节点可以核查在其路由表中和/或叶子集合中是否存在更接近标识符s的节点。接收节点还可以核查标识符s是否不代表请求者节点标识符的有效点p。如果是,则该接收节点可以丢弃该请求、将该请求转发给更近的节点、和/或采取其他任何合适的行动。以这种方式,恶意节点仅能发现满足路由表项约束的那些节点。在某些情况下,其他应用程序可以被限制不能在支持警报分发的覆盖图之上运行,因为在某些情况下,该应用程序可能会泄漏关于覆盖图成员的信息。
[0146] 另一替换和/或另外的安全措施可以在当一节点被损坏时,减少对覆盖图相邻节点身份的暴露。例如,覆盖图可以运行在操作系统内核中、虚拟机监控程序中、硬件芯片中等。
[0147] 另一替换或另外的安全措施可以减少对等网络中节点之间的消息话务拥塞,这可以减少对网络的服务拒绝攻击的出现和/或其效果。各种合适的机制的任何一种或多种可以用来减少网络中的拥塞。例如,可以防止节点向覆盖图注入极大数量的消息。另外或作为选择,覆盖图消息可以被签署,且每个节点可以对它为覆盖图中由该消息的签名标识的其它节点处理的消息的速率强加限制。例如,鉴权机构可以签署包含每一节点的节点标识符和公钥的证书。当发送节点发送一覆盖图消息时,该节点可以使用其私钥来签署该消息并可以路由该消息。由鉴权机构签署的该节点的证书可以附加给该消息。路由该消息的每一节点可以验证该发送节点是该消息的来源(例如,使用证书来验证消息的签名),且可以记录它为特定节点路由的消息的数目(例如,在消息计数参数中)。消息计数参数可以与一预定阈值进行比较,该阈值可限制从发送节点路由的消息的数目。在另一示例中,任何给定节点可以向网络插入消息的速率可以通过在每一相邻链接(例如,节点标识符与本地节点标识符类似的那些节点)上应用速率限制来界定。如果节点标识符是由鉴权机构分配的,那么可以限制更改节点的相邻节点。
[0148] 有复原力的分发
[0149] 警报的分发,例如,为警报标识接收节点可以用任何合适的方式来确定。例如,如图3所示,分发模块370可以在生成警报时响应于来自警报模块350的输入而被触发,和/或在验证所接收的警报时响应从来自警报验证模块360的输入而被触发。指示蠕虫攻击和/或程序易受攻击性的警报的分发,对阻断该警报的传播的一个或多个路由节点的企图可以是有复原力的。阻断节点可能是有目的地阻断警报传播的恶意节点,或者该节点可能被损害而不能参与消息的路由,例如,该节点可能被蠕虫感染。这样,向对等网络中的节点发送警报的分发方案可以经由多条覆盖图路线向同一节点发送警报。更具体地,一节点可以接收多个警报,其每一个始发于一不同节点,和/或经由不同的路由路径发送。
[0150] 如果使用单条路径,则该路径被阻断的概率可以被近似为:
[0151] P(block)=1-(1-f)pathlength (3)[0152] 其中参数f是网络中阻断路由的节点的比例。从而,如果使用通向每个节点的多条独立路径来发送警报,例如通过构建多个独立的多点传播树,那么至少有一条路径仅含有诚实和/或有能力节点概率可以被近似为:
[0153]
[0154] 其中N是网络中节点的个数, 是树的深度,p是通向每个节点的独立路径数目,binom是p次尝试中,0次成功路由的二项式分布,每次尝试中路由成功的概率是从而,为达到到达一给定节点的90%的概率,b=4且在含有100,000个节点的网络中百分之五十的节点被损坏,大约需要选择40条路经。如果40条路径用来把单个警报转发给网络中的每一节点,那么该消息成本近似为p*N的值。
[0155] 被选择来路由消息的独立路径可以用任何合适的方式来选取。例如,可以选取随机路径。在另一示例中,每一节点可以向其路由表中的所有或部分条目发送警报。在b=1的对等网络中,对所有路由表条目的完整路由表广播可以有大致为 条消息的消息成本。该完整路由表广播可能可以到达对其存在到警报来源的好路径的每一节点。在另一示例中,接收节点可以由路由表中低于一预定层次的条目所标识。作为选择或另外地,发送警报的节点可以向在叶子集合中的每一条目发送警报。
[0156] 接收和证明警报的那些节点可以根据分发技术将警报转发到其它节点,例如,到路由表条目中的条目、到叶子集合中的条目等的多条随机路径。例如,如果一个节点将已证明的警报转发给其路由表中的所有节点,则每个接收节点可以从在其路由表中列出该接收节点的每一节点接收该警报,这样形成了到网络中的每个节点的多条路径。从而,该警报可以分发给在网络中实质上的所有节点,且多个警报可以经由不同的路径路由给每个节点,以减少警报的阻断。
[0157] 另外,一节点可以在转发警报之前验证该警报的来源和/或该警报的内容,例如,程序中易受攻击性的指示。如果警报的来源不能被验证,但是被发现是对一已被验证的易受攻击性的描述,那么该节点可以转发或不转发该警报。如果警报的来源可以被验证,且被发现不是对易受攻击性的描述,那么该节点可以丢弃该警报。
[0158] 节点可以将警报与已经被转发的警报作比较。如果该警报与先前转发的警报描述相同的易受攻击性,则该节点可以不转发该警报。为减少不间断地发送相同的警报消息,警报可以包含一警报标识符,可检查该警报标识符以确定该警报是否为重复、指示转发该警报的特定时间量的超时指示符、限制警报被转发的次数的转发次数计数器、或其它任何合适的指示符。
[0159] 当一节点加入覆盖图,加入的节点可以请求覆盖图中的一个或多个节点,诸如在其叶子集合和/或路由表中存在的节点转发相关警报。该相关警报可以是由覆盖图中的节点存储的任何合适的警报,包括,例如,自从该加入节点最后一次断开与覆盖图的连接后被证明的警报、在一预定时间段中的警报等。接收警报请求的节点可以返回全部或一部分所请求的警报。另外地或作为选择,接收警报请求的节点可以发送它接收到的和/或存储的警报的概述。加入的节点可以选择在该概述中标识的一部分警报并向该接收节点和/或网络覆盖图中的其它节点请求那些特定警报。警报概述可以采用任何合适的形式。
[0160] 参考图12所示的示例性对等网络,节点1202可以含有一包含节点1220、1222、1224、1226的条目的叶子集合1232。节点1202可以向节点1220、1222、1224、1226发送警报,且这些节点的每一个可以向在其叶子集合中包括的节点转发已证明的警报。例如,节点
1222可以含有一包含节点1202、1220、1244、1246的叶子集合1242。以这种方式,节点1220可以接收来自节点1202和节点1222两者的警报。而且,因为向每个后继的叶子集合发送警报,该警报在整个网络上分发。
[0161] 而且,分发系统可以随覆盖图网络的增长收缩而自动缩放。路由表和/或叶子集合分发技术可以允许对等网络中的任何节点独立地加入或离开蠕虫遏制系统。而且,自证明警报的分发可以不要求伙伴间的广泛协定。更具体地,每个节点不依赖于单个点,例如,ISP或其它中央服务器,来通知和/或保护他们免于感染。
[0162] 由于蠕虫遏制系统的检测、警报证明、警报分发、和/或响应模块不依赖于单个中央处理器,因此没有一个中央基础结构可以担当专用攻击的目标和/或成为单个点故障。在某些情况下,为进一步分散蠕虫遏制系统的基础结构,作为遏制系统的一部分(例如,对等网络中节点的叶子集合的一部分)的每个节点可以是可消耗的。以这种方式,遏制系统中的所有或至少一部分节点可以执行相同类型的功能(尽管它们能够,且可以不同地实现)。
[0163] 其它分发或扩散技术可以是适合的,诸如互联网协议多点传送和基于拉的机制。
[0164] 部署情形
[0165] 如上文所述,覆盖图网络的一个或多个节点可以运行检测模块以检测蠕虫攻击和/或软件程序中的易受攻击性。检测模块可以由一个或多个专用计算设备的任一组合(例如,在蜜罐类型的部署中)、一个或多个空闲的计算设备(例如,作为屏幕保护类型的应用程序的一部分)、以及作为正常生产部署的一部分的一个或多个节点来运行。
[0166] 在蠕虫传播时用来广播警报的覆盖图网络可以被部署在整个因特网或其它通信网络上、部署在单个企业局域网的节点上、部署在定义为特定用户类(例如,软件包的注册用户)的节点上等。
[0167] 如上文所述,警报消息可以在检测到易受攻击性或蠕虫攻击时自动生成。此外,警报可以在接收警报消息和/或证明警报消息后根据一预定分发协议来自动转发。在其他情况下,手动或人员交互可以提供监督和/或授权来生成和/或转发警报。
[0168] 如果网络中的每一或至少一部分节点涉及遏制系统中的检测、警报证明、和/或警报分发,那么存在甚至在大规模攻击发生前攻击者渗透系统的可能性。假定系统中的任一节点可以是恶意的,且每个节点由一不同的实体所拥有,则节点之间不存在信任,即使节点具有由一鉴权机构签署的身份。然而,这些节点可以在阻止蠕虫恶意利用未知的易受攻击性的任务中相互合作。识别那些恶意节点可能引入可能被恶意节点所恶意利用的机制。从而,如上所述,遏制系统体系结构可以被开发为容忍和/或设计围绕着网络中存在的恶意但未知的节点。
[0169] 在操作中,一蠕虫遏制体系结构可以提供对蠕虫或程序易受攻击性的检测、警报生成、警报证明、警报分发和/或响应。更具体地,在某些情况下,由遏制系统保护的网络中的每个节点可以参与对攻击或易受攻击性的检测、警报生成、警报证明、警报分发和/或响应中的至少一项。例如,参考图3,对等网络310中的检测节点可以包括检测模块340、警报模块350、分发模块370和响应模块380。如上文所述,检测模块可以诸如通过使用动态数据流分析来检测蠕虫攻击和/或软件易受攻击性。任何合适的运行时分析系统可以用来跟踪事件。
[0170] 当一检测到蠕虫攻击和/或程序易受攻击性后,检测模块340可以与响应模块380通信以触发一项或多项保护措施。为向未感染节点传达所识别的蠕虫和/或程序易受攻击性,检测节点310可以使用警报模块350来生成警报消息330。如上文所述,警报消息可以是自证明的和/或可以包括易受攻击程序指示符、易受攻击性类型指示符、事件列表、一条或多条证实提示和响应指示符中的一个或多个。警报模块350可以与分发模块370通信,以根据分发协议向网络中的一个或多个节点发送警报消息330。对于上文所述的示例,警报消息可以依照网络覆盖图协议被分发给所维护的路由表中所标识的节点。另外地或作为选择,警报消息可以依照对等覆盖图协议被分发给所维护的叶子集合中所标识的所有节点。
[0171] 如图3所示,警报消息330可以被发送给节点310的叶子集合中所标识的接收节点320。该接收节点可以接收警报消息330,并使用警报验证模块360来证明该警报消息。如果该警报被证明,则接收节点320可以使用响应模块380来触发一项或多项保护措施。为通过通信网络分发警报330,接收模块320可以使用分发模块370根据分发协议向网络中的一个或多个节点转发警报消息330。对于上文所述的示例,警报消息可以依照对等覆盖图协议被分发给所维护的路由表和/或叶子集合中所标识的节点。
[0172] 在一实验中,在类似于SQL Slammer的蠕虫攻击下存活的节点的比例可以根据系统中检测器的比率来确定。在一实验中,全体100,000个节点(例如,主机计算设备)是网络的一部分,且10个节点被模拟为被感染的。此外,网络中10%的节点被假定为恶意的,即使在蠕虫攻击之前。感染率β被估算约为0.117,这个数字被认为接近因特网上所观察到的SQL Slammer行为。该实验的示例性结果在图13的图1300中示出,检测器的比例沿轴1302指示,存活节点的比例沿轴1304指示。图13中的图显示,在网络中,很小一部分检测器节点,例如0.001,可以是足够的,以将蠕虫感染限制在10%易受攻击群体以下。
[0173] 参考所示的实施例描述和阐明了本发明的原理之后,可以认识到,所示的实施例能够在安排和细节上加以修改而不背离该原理。
[0174] 例如,一种方法可以包括在一接收计算设备处接收一含有程序标识符和事件列表的自证明警报,该程序标识符标识了含有所检测到的易受攻击性的程序,而该事件列表包含示出所检测到的易受攻击性的一个或多个非确定性事件;确定该接收计算设备是否包括含有所检测到的易受攻击性的程序;以及验证该事件列表示出了所检测到的易受攻击性。验证可以包括执行程序中的事件列表。验证可以包括从程序指令中生成一逻辑安全条件;
定义一定义在事件列表开始处的程序状态的前置条件;定义一基于事件列表的易受攻击谓词;以及基于谓词演算评估该逻辑安全条件、前置条件和易受攻击谓词。在该方法中,自证明警报可以包括一用于指示程序中检测到的易受攻击性的类型的易受攻击性类型标识符,且其中,验证包括引用该易受攻击性类型标识符。在该方法中,自证明警报可以包括提供事件列表如何示出所检测到的易受攻击性的指示的验证提示。验证该事件列表可以包括基于一条或多条验证提示修改事件列表,来触发发信号通知成功验证的、装载至程序的验证函数的执行。在该方法中,事件列表可以用检测感染尝试的软件或硬件探测从程序执行期间记入日志的事件中导出。该方法还可以包括响应于验证事件列表,将自证明警报转发给至少一个其它节点。在转发自证明警报之处,可以从覆盖图网络中的相邻节点集合中检索至少一个其它节点的至少一个节点。在转发自证明警报之处,至少一个其它节点的至少一个节点可以包括覆盖图网络中的所有相邻节点。该方法还可以包括基于事件列表生成补丁或过滤器以解决易受攻击性。
[0175] 在另一示例中,在其上存储有一自证明警报数据结构的计算机可读介质可以包括第一数据字段,它包含表示标识含有检测到的对蠕虫攻击的易受攻击性的程序标识符的数据;第二数据字段,它包含表示包含示出所检测到的易受攻击性的一个或多个非确定性事件的事件列表的数据;以及第三数据字段,它包含表示指示在程序中检测到的易受攻击性的类型的易受攻击性类型标识符的数据。在该计算机可读介质中,易受攻击性类型标识符可以指示将程序的执行重定向至任意代码的能力、执行任意代码的能力、或向函数提供任意自变量的能力。该计算机可读介质还可以包括第四数据字段,它包含表示提供事件列表如何示出所检测到的易受攻击性的指示的一条或多条验证提示的数据。该一条或多条验证提示可以指示要被执行的代码的任意地址,或函数的任意自变量的事件列表中的事件和事件中的偏移量,取决于易受攻击性的类型。该计算机可读介质还可以包括第五数据字段,它包含表示适用于解决所检测到的易受攻击性的补丁或过滤器中的至少一个的数据。
[0176] 在另一示例中,含有计算机可执行组件的一个或多个计算机可读介质可以包括用于检测蠕虫攻击的装置、用于响应于检测到的蠕虫生成自证明警报的装置、用于将自证明警报分发到网络覆盖图中至少一个其它节点的装置。该计算机可读介质还可以包括结构化网络覆盖图的路由表和叶子集合中的至少一个,其中,用于分发自证明警报的装置访问该路由表和叶子集合中的至少一个以确定至少一个其它节点。该计算机可读介质还可以包括用于减少对路由表中的条目的泄漏的装置。用于生成自证明警报的装置可以访问一事件日志以确定示出可被蠕虫攻击恶意利用的程序中的易受攻击性的至少一个非确定性事件。该计算机可读介质还可以包括用于确认接收到的自证明警报的装置,并且用于分发的装置是由指示程序中的易受攻击性和蠕虫攻击中的至少一个的接收到的自证明警报的验证所触发的。
[0177] 在另一示例中,一个或多个计算机可读介质含有计算机可读指令,在这些指令被执行时,可以实现一种方法,该方法包含:接收在计算系统的存储器的第一部分中写入或存储所接收到的信息的指令;将第一脏指示符与该存储器的第一部分相关联,如果接收到的信息是从一不可信来源或具有指示‘脏’脏指示符的存储器部分中接收的,则该第一脏指示符指示‘脏’;接收将接收到的信息装载至程序计数器或执行接收到的信息的指令;以及如果第一脏指示符指示‘脏’,则提供对程序易受攻击性的指示。装载或执行接收到的信息的接收到的指令可以包括移动数据的指令、算术和逻辑指令、以及更改程序控制流的指令。提供对程序易受攻击性的指示可以包括基于接收到的信息生成一补丁或过滤器。提供对程序易受攻击性的指示可以包括向至少一个其它节点发送一自证明警报。该计算机可读介质还可以包含接收标识覆盖图网络中邻近节点集合中的至少一个其它节点的节点标识符。该计算机可读介质还可以包含将一输入事件标识符与存储器的第一部分相关联,该输入事件标识符标识所接收信息的来源。第一脏指示符可以包括该输入事件标识符。该计算机可读介质还可以包含从接收到的信息计算一新数据、将该新数据存储在存储器的第二部分中、以及将第二脏指示符与该存储器的第二部分相关联,如果接收到的信息是从一不可信来源或具有指示脏的脏指示符的存储器部分中接收的,则第二脏指示符指示‘脏’。第二脏指示符可以包括一数据流图,它指示从接收到的信息或从中接收信息的存储器部分的脏指示符中的数据流图中计算新数据的中至一个步骤。存储器的第一部分可以包括由CPU寄存器、存储器页和该页中的存储器位置构成的一组中的至少一个。存储器的第一部分可以包括一存储器位置,该存储器位置是第一存储器页的一部分,该方法还包括基于第一脏指示符将一页脏指示符与存储器页相关联。接收将接收到的信息装载至程序计数器或执行该接收到的信息的指令可以包括接收执行该接收到信息的指令,如果第一脏指示符指示‘干净’,那么检查与存储由接收到的信息引用的指令的存储器的第三部分相关联的第三脏指示符。该计算机可读介质还可以包括如果第三脏指示符指示‘脏’,则提供一程序易受攻击性的指示。
[0178] 在又一示例中,一种方法可以包括维护跟踪存储的值的来源是不可信来源还是可信任来源的至少一个污染数据存储;在将存储的值装载至程序指针之前,检查至少一个污染存储;如果至少一个污染数据存储指示所存储的值是来自一可信来源,则装载所存储的值;如果至少一个污染数据存储指示所存储的值是来自不可信任来源,则拒绝自动装载所存储的值;以及响应于拒绝自动装载所存储的值,确定所存储的值的存储位置,并从至少一个污染数据存储中确定所存储的值的输入源。至少一个污染数据存储可以包括指示用于计算所存储的值的一组步骤的数据流图。确定输入源可以包括确定所存储的值的输入源和该输入源中的偏移量。该方法还可以包括如果至少一个污染数据存储指示所存储的值来自于一可信来源,则确定由所存储的值所指向的指令是否来自于可信来源;以及仅当所存储的值和指令都来自于至少一个可信来源时执行该指令。
[0179] 在又一示例中,含有计算机可执行组件的一个或多个计算机可读介质可以包括用于使用动态数据流分析来检测蠕虫攻击的装置;用于响应于对蠕虫攻击的检测生成警报的装置;用于响应于警报的生成分发警报的装置。该计算机可读介质还可以包括用于基于检测装置的动态数据流分析生成补丁或过滤器的装置。用于生成警报的装置可以包括用于至少分地基于检测装置的动态数据流分析生成自证明警报的装置。
[0180] 在再一示例中,一种方法可以包含检索示出可被蠕虫攻击所恶意利用的程序易受攻击性的第一执行路径;确定传入消息中确定第一执行路径的至少一部分的至少一个字节;确定所确定的字节上可以被测试以验证至少一个字节的存在的至少一个条件;使用至少一个条件来测试新消息的至少一部分以检测蠕虫攻击的存在;基于该测试拒绝处理该新消息。第一执行路径可以从用来检测易受攻击性的事件日志中导出。该方法还可以包含从另一计算设备处接收一自证明警报,且其中,检索第一执行路径可以包括对该自证明警报进行语法分析以检索事件列表。确定至少一个条件可以包括当脏存储器部分用来控制流决策时,记录在来自该脏存储器部分的数据计算的逻辑操作。该方法还可以包括将一过滤器条件初始化为‘真’,且其中,记录包括根据过滤器条件的前一值和至少一个条件的逻辑AND运算更新该过滤器条件。该方法还可以包括记录含有脏存储器部分的数据流图的指令序列。该方法还可以包括将过滤器条件包含在一指示易受攻击性的自证明警报中,并将该自证明警报发送给另一计算设备。第一执行路径可以包括非确定性事件的事件列表。
[0181] 在另一示例中,一个或多个计算机可读介质含有计算机可读指令,当这些指令被执行时,可以实现一种方法,该方法包含:将一过滤器条件初始化为‘真’;确定与含有将被装载至程序计数器或将被执行的数据的存储器部分相关联的脏指示符的值;接收执行条件控制转移的指令;基于过滤器条件前一值和该脏指示符的所确定的值,更新该过滤器条件;以及将该过滤器条件应用于传入消息以阻断恶意利用程序中的易受攻击性的蠕虫攻击。该一个或多个计算机可读介质还可以包括从一检测模块接收对易受攻击性的指示。该一个或多个计算机可读介质还可以包括从一自证明警报接收对易受攻击性的指示。该一个或多个计算机可读介质还可以包括将过滤器条件包含在一指示易受攻击性的自证明警报中,并向另一计算设备发送该自证明警报。脏指示符可以包括包含用于计算包含在存储器部分内值的指令序列的数据流图。
[0182] 在又一示例中,含有计算机可执行组件的一个或多个计算机可读介质可以包括用于自动生成示出程序中可被蠕虫恶意利用的易受攻击性的指令序列的装置;以及用于基于该指令序列自动生成对该易受攻击性的解决方案的装置。用于自动生成指令序列的装置可以包括用于检测蠕虫攻击的装置。用于自动生成指令序列的装置可以包括用于证明一接收到的自证明警报的装置。用于自动生成解决方案的装置可以包括用于为恶意利用易受攻击性的接收到的指令生成一过滤器的装置。用于自动生成解决方案的装置可以包括生成对程序中的易受攻击性的补丁的装置。该一个或多个计算机可读介质还可以包括用于生成含有该指令序列和解决方案的至少一部分的自证明警报的装置。该一个或多个计算机可读介质还可以包括用于向网络覆盖图中的至少一个其它节点分发该自证明警报的装置。
[0183] 鉴于可应用本发明的原理的多种可能的实施例,应该认识到,这些详细实施例仅仅是说明性的,且不应该作为本发明的范围的限制。相反,要求保护落入所附权利要求书及其等效技术方案的范围和精神之内的所有这些实施例作为本发明。