由于本人权限不够,只能将翻译的文章直接粘贴过来,不方便之处请大家谅解,还有翻译不妥和错误的请大家不吝赐教
利用压缩来分析蠕虫病毒和网络数据
摘要
网络蠕虫已经对系统和网络运作构成分布广泛的威胁。为了更有效与蠕虫对抗,分析最新的发现的蠕虫程序和攻击方式是有必要的。这篇文章说明了如何利用基于Kolmogorov复杂性的技术来对网络蠕虫和传输分析的。利用压缩,不同的种类的蠕虫都能由成群。这样就使得我们能判定一个未知的蠕虫二进制文件事实上是否是现存的极简单、自动运行方式的蠕虫的下一个版本。在对恶意二进制文件的初始分析中,这也许是个有用的工具。进一步,压缩对辨别不同类型的网络传输也是有帮助的,因此有助于探测到传输的异常:通过仅查看一个网络的会话的压缩率也许就可以侦测到特定的异常。我们更进一步的说明如何利用压缩来察觉恶意的网络会话,极类似于大家熟悉的入侵企图。这种技术可能有利于探测一种攻击的不同变异,所以它能有效阻止标示的隐藏。我们提供了两种新的Snort的插件,它对这两种方法都做了详细说明。
1 引言
近些年来,网络蠕虫的大量涌现出来,例如Sasser 和Msblaster,已经对全世界的数百万系统造成了破坏。蠕虫是自动运行的程序,可以发掘联网计算机的漏洞,并控制它们。蠕虫一旦成功地感染了一个系统,它们就会持续不断拓展受害者范围。当一个蠕虫程序发现一台新的脆弱的电脑,它也会使使这台机器受到感染。蠕虫就这样通过网络主动地扩散。
如果蠕虫造成大量的问题,重要的是开发对抗它们的防护体。为了达偿所愿,我们需要详细的分析它们。如果发现系统感染了蠕虫,我们最想知道的就是这是怎样发生的,蠕虫进行的什么可能操作,以及如何阻止以后再次感染。本文倾向于介绍诊断的步骤的第一步的一种如下:我们想确定,我们以前是否见过这种蠕虫或者它是否类似于一种众所周知的蠕虫。我们可以分析蠕虫的二进制可执行文件去获取这方面信息。许多公开的蠕虫,像Sasser,经常有许多变种。这些通常是由同一作者发布的相继版本,用来扩展这个蠕虫的功能。所有这些版本一起可以组成一个相联系的蠕虫类。利用浓缩分析,首先可以将不同版本的蠕虫按类划分。通过归类分析,我们把一个未知的蠕虫程序与大量的已知的蠕虫进行比较,判别出其归属类,这样就简化深层次的分析。这种非常简单的方法不能利用任何手工文本比较或者在传统分析利用的包含在蠕虫中特殊的选定的形式。许多混乱的二进制文件利用UPX来压缩,然后可修改它来阻止解压。这样就使基于反汇编二进制文件和比较两个程序的执行流的方法来分析二进制文件变得相当困难。令人惊奇的是,我们的方法即使利用UPX加壳,仍然发挥作用,尽管有些偏差。因此在对新捕获的蠕虫程序初始分析中,======是一个有用的工具。
受感染的系统和网络攻击通常使网络传输发生变化。为了确认和制止这样的攻击,应当去监视这些变化。最具代表性情况下,利用在网络传输中搜索特定形式方法来探测到反常。例如,当字符串“msblast.exe”在TCP会话中被发现时,Snort[11]就能发出警报。只要知道我们所寻找的形式,这种方法就能很好的发挥作用。这里,我们感兴趣的是即使不知道要搜索的形式,我们也能确认出异常。首先,我们利用压缩来探究不同类型网络传输的复杂性。这些复杂性的差别可以使我们粗略了解何种类型的应用协议能引发特定的网络交互。直观讲,对象的复杂性是由它压缩性能来决定的。如果其能压缩性能优良,我们说它复杂性低。另一方面,如果它几乎不能被压缩,那我们就认为它有高复杂性。例如,SSH协议的复杂性非常高。如果我们观测到TCP协议相同的端口有相当低的复杂性,就能对异常有所察觉。这并不需要异常的额外的知识或者对特定的传输形式进行搜索。对Snor插件的压缩,如果所观察的传输的复杂性没有落在特定范围,Snort就会引发警报。
最后,我们利用压缩比较不同的传输协议。新的攻击程序或者新版本的蠕虫可能产生稍微不同的网络传输,其中不再包含我们搜索特定的形式,以此来躲避查杀。这里我们所感兴趣的是辨别出与现存类似的形式。确且地说,如果两种会话协议的组合复杂性不比它们各自的更复杂,我们就认为它们是紧密联系的。也就是这样一种情况,如果两种通讯非常相似并且能相互能很好的解释对方。我们可以利用这种方法来判定可观测得TCP通讯是否与已记录的相应于已知的攻击通讯相似。NCD Snort 插件在一个可观测的通讯与给定的通讯有一定差异是就Snort发出警报。即使压缩对网络通讯的操作是相当耗时的,我们认为这种方法对探测新的攻击类型仍然是有用的。只要辨识攻击,就可以构建特定形式并将它用在传统的入侵检测中。
1.1 相关工作
Halvar Flake [5] 以及Carrera and Erd¡äelyi [1] 利用基于图形的方法在比较可执行程序中取得了骄人的成绩。最近,Halvar Flake也已经利用这种方法对malware [3]进行了分析。对同一种可执行文件的不同版本进行比较,可能获得蠕虫涉及实际安全问题。这需要对二进制文件反汇编。然而,这种方法对优点在于揭露关于安全隐患的本质实际信息,这里我们注意的焦点是不同的。我们提供了不用反汇编就能判别已知蠕虫的类别的快速方法,这可以用到可执行文件的初步分析。基于这种分析,就能更准确地利用其它方法。
为了确定网路传输的本质,进行了大量的工作。由于我们没有事先选择形式或者特定性质,这就使我们方法根本上不同于其它方法。我们让压缩器来完成指出所有的相似性。
此前Kulkarni and Bush [6]已经考虑过利用基于Kolmogorov复杂性来监视网络传输。然而他们的方法是不同的,因为他们没有利用压缩估计Kolmogorov复杂性。主要是他们认为在网络传输中反常并没有表现出来,因为它们的复杂性要比正常的网络传输还要低。然而,我们发现例如由硬件中继发出假信息就是这样的,我们假设反常通常要比我们认为正常的协议要复杂。例如,如果我们发现HTTP端口80传输正常同时有一部分的复杂性要高的多,这可能就是恶意入侵者造成的,它正在向外传输加密的会话。在这个特定的例子中,由于恶意传输增加了复杂性。
Evans and Barnett [4比较针对FTP服务器攻击于FTP的合法传输的复杂性。他们通过分析合法和非法的FTP传输文件头达,同时收集上百字节的好的坏的信息来压缩到这样的目的。我们的方法不同之处在于我们利用整个包或者整个TCP会话。这样做事因为我们相信在真实世界中,单从单个攻击利用文件的头部分收集上百字节的坏的通信是非常困难的。探测系统的漏洞的攻击通常情况下是非常短的同时不能在同一个端口中产生任何其它的恶意的通讯。这种情况特别出现在非交互式协议中例如HTTP,在HTTP中所有交互仅包含一个请求和回应。
Kulkarni, Evans and Barnett [7]也试图利用Kolmogorov复杂性去跟踪服务拒绝的攻击。现在他们通过计算对包含在数据包中平均信息量估计来确定Kolmogorov复杂性。然后,随着时间的推移,他们利用复杂性差分方法来跟踪复杂性。他们对单个流中的特定的数据包进行采样,然后计算一次复杂的差分。这里,我们总是利用压缩,但目的并不与探测DDOS攻击。
1.2贡献
我们提出利用压缩作为一种新的工具对网络蠕虫的初始分析。
我们证明了网络会话的压缩率差别有助于辨别传输的类型。这样就形成了不需要知道它们的准确本质先验知识,而对对异常的检测一种简单方法。
最后,我们论证压缩对发现与现存的极其类似的攻击是有帮助的。
1.3 概要
在第二部分中,我们简单关注一下规范化压缩过程的概念,在整片文章中都将用到。第三部分展现了利用这个概念来对网络蠕虫的分析。在第四章中我们证明压缩在分析网络传输中有多大用处。最后,4.1.2和4.2小节中我们利用这些观测来构建两个Snort插件来帮助识别网络异常。
2  预备知识
在这章中我们利用基于Kolmogorov复杂性的规范化压缩过程概念。正常情况下,一个有限二进制字符串x的Kolmogorov复杂性C(x)与能输出x最短程序的长度是相等的。事实上,Kolmogorov复杂性于附加的常量机制上是相互独立的。这就是说它与编写程序的利用语言是没有关系的,只要这种语言是固定的。这就是我们将所需要的全部。更多的信息可以在由Li and Vitanyi [8]著的书中找到。
这个概念与压缩有何关系?我们把字符串的压缩版看作在我们的“压缩机”运行的程序。因此,相对机器的Kolmogorov复杂性不比已压缩的字符串的长度还要大。我们通过压缩来估计C(x):取一个标准的压缩器(bzip或者zlib)同时压缩x得到Xcompressed。然后利用Xcompressed的长度length()来代替C(x)。在我们考虑的情况中,字符串x就是蠕虫程序的执行文件或者传输数据。
字符串x和y的NCD可以由下列式给出:
          C(xy) min{C(x),C(y)}
NCD(x,y) =--------------------------- .
            max{C(x),C(y)}
关于NCD的更详细的信息可以在[13]中查到。NCD是一个非常直观的概念:如果字符串A和B非常相似,就是说一个可以描述出另一个许多信息。也是说如果告诉A,如果我们仅需要知道A与B的差别,就能将字符串B压缩的非常好。因此,单独压缩A后结果的长度要比将A和B的一起压缩结果的长度差别很大。然而,如果A和B差别很大,压缩结果的长度要比单独压缩结果要大得多。我们计算集合中所有对象的两两NCD来进行归类。同时得到的所有对象之间的距离矩阵。这样我们利用[13]中介绍的四步来填充矩阵。在树中,对象如果互相接近,在NCD同样接近。
全文中,利用CompLearn 工具包[12]来构建树。在[10]中,我们得到网络协议的信息。我们分析不同的蠕虫的信息,可以在Encyclopedia[12]找到。
3分析蠕虫
我们利用NCD的概念来分析网络蠕虫的二进制可执行文件。只要识别出在机器上的一个恶意程序,我们就确定它与现存的蠕虫的关系。许多蠕虫程序存在很多不同版本。通常蠕虫作者为了改进它的性能而创造出新的版本。最近的Sasser蠕虫就是这样的。我们称这些版本的蠕虫为一类。现在我们就要提出一个问题:给定一个蠕虫,有与他相似的吗和它属于哪个类?
为了测试,我们收集了大约790不同的种类的蠕虫:IRC,vb,linux以及可执行的窗口蠕虫。粗略的计算,这些蠕虫的290多个有至少一个版本 。
3.1 蠕虫分类
首先,我们利用聚类来评估不同类之间的关系。我们的方法是利用计算在实验中用到的蠕虫的NCD进行的。这样就生成了距离矩阵以及可视化的与矩阵相对应的树。在这部分中,我们利用Bzip2作为压缩工具。
3.1.1 蠕虫的不同类
为了获得这些蠕虫类的深层次的关系,我们首先对完全不同的类型的蠕虫进行分类。我们利用基于文本的蠕虫(像IRC,标有mIRC和IRC)以及针对Windows系统名字含有PIF的蠕虫来对完成以上的工作。有Linux前缀的蠕虫则是针对Linux系统。所有其他是针对Window系统的蠕虫同时也是基于二进制的。
从图1我们可以看出基于文本的蠕虫已经被聚类在一起。就像我们期望的一样,在基于文本和基于二进制的蠕虫已分开了。在各类内部分类当然没有太大用处。然而,单利用我们的方法会产生一些惊奇结果,这会使我们重新对我们的蠕虫数据进行估计。什么是在基于文本的LinuxGodog蠕虫?在进一步分析,我们发现不同于其他的Linux蠕虫,它是二进制的可执行的,LinuxGodog是核脚本,因此与基于脚本的蠕虫IRC非常相似。当看到两个Window蠕虫Fozer和Netsp,它们都是Window脚本,就会有相同的发现。我们还发现SpthJsp也标示错了,其实它是一个IRC蠕虫与IRC-Spth系列非常相似。事实上,人工分析可以断定它确实是另一个变种。同样,IRCDreamircVi也与其他的IRC蠕虫归为一类。它看起来是IRCDreamirc系列的非二进制成员。通过聚类Alcaul蠕虫可以揭示另一个有趣的事实。许多不同的Alcaul蠕虫尽可能都是二进制格式的。然而在测试中,我们偶然发现仅有一个是利用多用途的网际邮件扩充协议编码的,因此它与基于文本的和基于二进制相比,与基于文本根相似。我们的测试鉴定也是将二进制Linux蠕虫与其它系统的基于二进制蠕虫归为一类。仅仅LinuxAdm表现不相近。我们把这归结于linux和windows系统的二进制并不相离,即使它们属于不同的执行格式。相同类蠕虫归结在一起。例如,我们可以看到基于文本的IRCSimpsalapim与IRCSpth系列的明显界限。然而,Mimail和Netres的分离说明了这种方法适合于基于二进制蠕虫的分类。MyDoom蠕虫则起始就是一个列外。两个版本的MyDoom,与其它的等价类蠕虫不同。进一步测试,然而,我们发现MyDoom.a事实上是一个删节的二进制版本。通常情况下,我们初始分析,就能将不同蠕虫很好的分类。
3.1.2 Window 蠕虫
基于文本的蠕虫容易手工分析,所以我们主要针对二进制可执行体。首先我们对不同的且不是利用UPX压缩的windows蠕虫进行分类。令人惊奇的是,即使二进制蠕虫也能很好的聚类,那说明它们的确非常相似。压缩器似乎可以找到利用人工分析不能发现的许多相似之处。图2表明两种可能Sasser变种能完美的聚类在一起。对Nimda的两个版本也是一样。这表明了利用压缩进行分类是一个有效的方法。
3.1.3 UPX压缩效果
许多流行的蠕虫 是压缩可执行的,且基本上都是压缩是单向的不可逆。这样就使获得实际的蠕虫二进制文件很难。但是如果没有这个二进制文件,我们就不能比较嵌入在可执行体中的文本字符串或者就不能反汇编并进一步分析程序流。如果一个字符串已经压缩了,那就几乎不可能在一次压缩太多。因此,我们预计利用基于压缩的方法不会取得好的结果。
Figure 1 不同类的蠕虫
令人惊奇的是,然而,我们仍然能对利用UPX压缩的蠕虫进行合理分类。这表明UPX,不能象bzip2获得压缩的长度,但可以允许二进制文件是可执行的。
图3表明了对起始利用UPX压缩的蠕虫的分类实例。这个实验表明即使我们的方法欠准确,但是我们仍然可以看到对Batzback系列的聚类。对其他的蠕虫,例如Alcaul.q,并没有很好的聚类在一起。这也说明了,即使蠕虫是UPX压缩的,我们仍然有机会利用简单的压缩对蠕虫进行分类鉴定。在移出UPX压缩后,图4 说明了聚类过程的结果。我们能观察到更好的结果。
然而,在分析蠕虫前,并不能总是简单移出UPX压缩。可以修改UPX压缩使得蠕虫仍然可执行,但是修改后将不能解压。这就使得对蠕虫的分析变得更加困难。因此,我们将研究UPX压缩如何对归类过程进行不规则的影响。在下一次实验中,我们选择UPX压缩及当前流行的不规则的蠕虫。在Alcaul系列中,只有Alcaul.r是不规则的。我们选择其它的UPX压缩的Alcaul蠕虫,来判定聚类中包含部分UPX压缩及不规则的蠕虫是否造成归类的失败。
正如图5所示的,我们的方法给出蠕虫分类启示,即使没有大量人工不能得到UPX解压。不规则的Alcaul.r蠕虫能与规则的Alcaul蠕虫聚类在一起。对于Lentin系列蠕虫也是一样。
3.1.4 蠕虫和合法的Windows程序
最后,我们检测现存的windows程序以及它们与蠕虫的关系。因此我们从表准的windows安装程序收集许多小的windows可行文件并且将它们和蠕虫混合起来进行聚类。图6 描述了我们测试的结果。在这里所利用的合法的windows程序有:net,netsh,cacls,cmd,netstart,cscript,debug.exe和command.com。令人惊奇的是,我们的实验结果证明大部分windows程序都紧紧集合在一起。直观表现是有相似功能的关系更紧密。只有debug.exe和command.com被置放在树中其它地方,我们把这归咎于这样的事实与其他程序相比它们的功能的确不同。然而,从这个实验断定压缩总是能从合法的windows程序辨别出蠕虫来为时过早。我们测试中仅仅包含非常有限的程序。但是,它也表明了,功能相近的程序关系非常密切。例如CodeGreen和CodeRed就有密切关系,归结于这样的事实它们有相同的弱点。
3.2蠕虫分类
现在我们尝试对一个未知类的蠕虫进行归类。断定一个蠕虫的属类使进一步分析更加容易。再一次,我们不是对特别选定的可执行文件进行搜索或者对实际的问题进行分析。然而,我们仅仅利用NCD。为了判定一个病毒的类属,我们计算这个蠕虫与其它所有可能的二进制蠕虫的NCD。根据NCD来蠕虫w与t距离最近,则t与w最匹配。然后,我们就把w归为t类。简而言之,我们把新蠕虫w划分为F类,使得存在t ∈ F, 对任意k ∈ W,NCD(w,t) ≤ NCD(w,k)其中W是所有测试蠕虫的集合。为了避免错误的划分,如果蠕虫存在一个t使得NCD(w,t)>=0.65,则我们把这个新蠕虫标为未知类。这个数据是由我们的数据的实验得到的,可根据不同的情况进行调整。
在对719不同二进制和非二进制蠕虫进行第一次实验中,其中284个,经过我们的方法判定后,可能属于不仅仅一个类。对每一个蠕虫,我们判定在其余的蠕虫与之最匹配。在284个中179都可能与它的类匹配,这说明我们成功了。我们的到39个错误的匹配。这是与正确的匹配相比,所占的比率很低。然而,值得注意的是我们对所有类型的蠕虫进行匹配同时利用一个非常大的蠕虫集合,这情况仅仅出现在本文中。实际中,你可以限制蠕虫被所属类为一个已选好的数据库,达到获得一个好的结果目的。例如,考虑一个通过email传播的蠕虫。如果将我们注意仅限制在“I-Worm”类的蠕虫,如表1所示就能得到一个好的分类效果。我们对454蠕虫进行分类,其中可能属于两个以上类的蠕虫有184个。现在如果利用上面的改进的方法,仅仅13个分类错误。
我们的实验使我们对将来这种简单的方法可能实用充满信心。
4 分析网络传输
为了检测网络攻击,已投入了大量的精力。尽管有许多的可疑入侵检测系统,但入侵检测仍然是研究的一个热门。入侵检测可以分为两类:检测针对特定机器本身的攻击即基于主机的入侵检测和基于网络的入侵检测即通过观测网络传输来检测攻击。许多入侵检测系统包含了这两个方面。然而,在这章我们仅仅考察基于网络的入侵检测。
在现存的系统中,最常利用的方法就是信号匹配。当确认了一个已知的攻击,就对它进行签名标记。然后,在网络传输中搜索与任意标记匹配的数据。例如,一个流行的开源入侵检测系统(Snort[11])就是提供了这种方法。明显地,这种方法在辨别本质明确的攻击时,非常有效。然而,这种方法首先需要大量的人工劳动:对恶意数据的先期确认和对特定数据进行标记也是有必要的。其次,如果标记的攻击的数目太多,在大容量的连接库中,对它们进行检测就非常困难。在4.1小节中,我们提出了一非常简单的基于压缩的方法,它克服了上述问题。最后,如果一个蠕虫稍微改变它的行为,它将与标记不匹配从而逃过检测。在4.2节中,我们提出一种能认出与现存攻击类型相似的威胁的方法。
有时,标记匹配也被看作一个错用的检测,因为它仅寻找特定泛滥的攻击类型。我们所说的异常检测则是我们所感兴趣的是对所有类型异常进行确认,包括新的和不确定的形式攻击所产生的异常。基于查找表的标记方法可以用对异常的检测。例如,入侵检测系统有每个应用的典型行为轮廓。它将观测到的行为与这个典型行为轮廓比较。如果差别太大,系统就产生警告。在将神经网络应用到异常检测中,人们已投入了大量的精力。神经网络经常用来离线的数据分析,因为它们的计算量非常大。这就是基于神经网络的检测迄今为止没有广泛应用的原因。接下来,我们对作为一个检测网络数据异常的工具(压缩)进行评估。
4.1网络传输的复杂性
4.1.1协议的复杂性
我们对不同类型的传输进行评估,所利用的方法是最简单的方法。我们从这方面对下列问题提出解答:通过对特定端口协议的检测,我们能断定另一种传输是否替代了一种。这种方法对特定的远程开拓的检测的成功起重要作用。例如,我们仅仅观测端口22的SSH传输。在一个威胁成功地攻击SSH服务,它可能在同一个端口包含了一个远程内核。它的协议大大不同于正常的SSH协议。
在这里我们利用的方法又是非常简单的方法。对不同的协议,我们确认数据S的平均压缩率:我们利用数据S的装载量同时利用bzip2压缩S。压缩的数据Scompresssed的长度为我们提供了对S的复杂性估计,C(S)。然后,利用   L(Scompressed)
                                     R = -----------------------                                            L(S)    
来计算压缩率。
R可以直观地告诉我们S压缩的程度。如果R小,说明S压缩程度大且复杂性低。如果R接近于1,说明S几乎不能被压缩且它的复杂性非常高。
为了将这种方法应用到实际中去,特定端口的正常数据的平均压缩率需要来确定。为了在新数据中异常,我们对网络传输进行精简然后对它进行压缩。如果它的压缩率不同于正常传输的数据平均压缩率,我们就断定其中数据有异常。
为了下面比较,在一个联网的小网站收集数据,邮件和对10个用户的内核服务以及ADSL连接。标签“nc”用来表示终端交互。将载入的数据进行精简,利用乱码解码器分为独立分割文件以及利用bzip2来压缩。然后我们计算每个文件的压缩率。从这些数据,我们可以计算平均压缩率,所有文件的压缩率与所属协议的平均压缩率的背离程度。
  正如所期望的基于协议的纯文本,例如IRC和nc压缩程度就非常高。另一方面,加密的协议数据或者二进制数据通常已经是压缩的,所以它们的压缩程度不高。例如,SSH和IMAPS包含被加密的载入数据,压缩后数据大小几乎不变。HTTP和包含压缩文件的连发数据也是这样的。为什么SMTP数据压缩的很差呢?经过详细探究,发现被捕获的SMTP数据包含的北压缩的病毒而不是文本信息。因此,我们应该仅仅检查SMTP数据的非数据部分。我们可以看到SMTP的标准分离时很大的,这主要是由email包含与文本信息压缩程度差次不齐的压缩附件造成的。
初步的试验表明这种方法能用来分离在复杂性存在很大差别的协议。例如,我们能将IRC数据与二进制网页数据分开。再如,我们也能从SSH数据中鉴定出终端交互。然而这种方法并不适用于文件传输协议与包含加密数据的协议的辨别。我们进一步注意到web和SMTP传输的通常最大的不同在于它们所依赖的web服务器。因此我们应当通常对每个网站独立的检测。我们也希望利用这种方法探测新的未知的威胁,只要它的压缩率与我们所期望的平均压缩率不同。
4.1.2利用Snort复杂性的差别
为了测试复杂性的差别,我们为流行开源的入侵检测系统Snort压缩插件。我们可以利用它来对所允许的压缩率的上下限。如果可观测得传输数据显示超过了整个屏幕,就出现警报。下面的情况能激发警报,例如在端口22传输的数据复杂性如果低于0.9,且利用zlib压缩的结果为:alert tcp $HOME NET any -> any 22 (msg:“owcomplexity on port 22”; flow:to client,established; classtype:bad-unknown;sid:2565; rev:5;)
在这个例子中,没有确定明显的上界,所以利用默认的2作为上界。如果输入数据时完全不可压缩的实际上压缩器放大了文件大小时,压缩率就是可以大于1。
压缩插件利用逗号作为判定的分隔符:
 大于<x>:合法的传输数据的压缩率大于x,如果0<x<1.
小于<x>:合法的数据的压缩率小于x.
<压缩工具>:压缩工具的类型.当前值是zlib利用gzip压缩的结果,rle仅仅是简单的运行长度编码估计值。
4.2利用Snort来确定相似的威胁
为了判定观测到的网络数据与现存的威胁是否相似,我们又一次利用第二章的NCD。如果已知的威胁形式与观测到数据之间的距离很小,我们就判定这是在运行中一个相似的攻击。这种方法可以利用NCD插件完成。由于单个NCD插件包是很小的,将NCD插件与STREAM4 TCP流绑定在一起且仅仅检测完全绑定的TCP数据。
在下面简单的例子中,我们记录利用记录了一个利用Apache在FreeBSD利用PHP3.0.15的漏洞进行攻击的病毒的数据。这种方法通常被广泛用于搜索phploit.c。可以对这个搜索不同的选型配置,例如   或者内核是否可以直接执行。在我们记录的数据中,我们利用将内核与另一个端口绑定的配置。然后再Snort配置中添加下面的入口:
alert tcp $HOME NET any -> webserver 80(msg:擟lose to phploit attack.? flow:only stream;ncd:dist 0.8, file recordedSession; classtype:bad-unknown;sid:2566; rev:5;)
这个入口告诉Snort在任意TCP数据段如果与包含在已记录的文件数据的NCD小于0.8时就发出警报。一个新的病毒利用相同选项与被记录的数据的NCD为0.608,则它就会触发警报。如果以这种配置执行病毒来直接执行内核,且有0.638的NCD,就会触犯这个规则。 在测试服务器上的网站的映像并不会导致任何错误的差别。    因此我们能成功确认新的但稍微不同的病毒。尽管上面的变种可以通过选择不同的类型进行初始搜索,然而这也暗含表明了NCD在发现新病毒时是非常有用的。如果被选择的形式精简,这就使得如果病毒仅仅做稍微的变异就能逃脱检测。
插件现在利用zlib库来完成压缩。其他的方法也是可行的。现在还有一个独单附加:距离〈x〉,〈x〉是在触犯规则前的最大安全距离。
5结论和开放的问题
我们分析不同类属的蠕虫的二进制可执行文件并对它们进行聚类。我们分析表明很多蠕虫能很好的聚类。即使这些蠕虫病毒是利用UPX压缩的且压缩的参差不齐,我们的方法仍然能合理的发挥作用,然而利用传统的分析方法是相当困难的。这表明了在分析未来发现新蠕虫病毒时,我们的方法是一个非常有用的工具。而且,我们也可以进行多项改进。不同的压缩方法可能给出更好的结果。其次,可以对蠕虫病毒进行预分类为email病毒,网络病毒,irc蠕虫和VB脚本。在3.2节中,可以看到如果将有的蠕虫标为“I-Worm”,就能得到更好的结果。现在我们的目标是为分析蠕虫病毒提供一个工具。如果这种方法嵌入到一个email病毒自动检测系统中,将是非常有趣的事。
我们也观察到不同的传输数据有不同的复杂性。如果传输的复杂性相差很大,这也许是分辨在同一个端口上合法和非法的传输的简单而有效的工具。它也不需要在特定传输类型中特定病毒形式的先验知识。Snort的压缩的插件也可以用来对潜在的恶意数据包以及复杂性不在特定的范围内的数据。当在大的装载量情况下,就能看到这种方法如何更有效的发挥作用。我们的简单的方法仅仅把传输压缩一次。并且对连续形式的传输数据进行压缩时,还能获得更好的性质。压缩是耗时的操作,但是类型匹配也是一样的。利用效率高的以及仿真压缩也许花费时间要比处理类型匹配清单要快的多。
利用标准的压缩距离NCD,我们就能检测到与现存的类似的异常。当观察到的数据与给定的病毒的NCD很小时,Snort的NCD插件就能发出警报。这种比较花费的时间也很长。然而,我们相信这种方法在对检测病毒新变种初始检测中是一个很有用的方法。只要有一种变异被认定,我们就可以将新形式病毒简化以致可以在传统入侵检测系统中处理。我们的方法不仅充满希望而且为进一步的开发留下了充足的空间:在本文中我们仅仅利用了标准的压缩程序。这就使得我们可以比较超过一定长度的数据包和协议数据,因为我们可以利用这些程序工具把它们压缩的更小。也许压缩程序特定目标是压缩小的数据包以便给出更好的结果。也可以仅仅通过模拟压缩来创作出新的压缩工具版本,因为我们将不再解压数据。
最后应当提出是,我们的方法方法对能旨在改变传输数据的复杂性的病毒则是无能为力的。例如,它可能在实际的数据中插入任意数据,进而人工增加了数据的复杂性。然而,我们仍然相信有许多不是以上情况也有很多使得病毒相当困难的情况。
6致词
A.McIntyre 和Alex Le Heux为本文提供了许多珍贵的意见,在此我们真诚感谢他们。同时感谢Anthony Aykut, LukasHey, Jorrit Kronjee, Laurent Oudot, Steven de Rooij以及 Donnie Werner帮助我们收集蠕虫病毒数据。作者从EU的第五工程RESQ IST-2001-37559和NWO vici工程2004-2009工程中受益匪浅。
参考文献
[1] E. Carrera and G. Erd′elyi. Digital genomemapping - advanced binary malware analysis.In Virus Bulletin Conference September 2004,2004.
[2] R. Cilibrasi, A. Cruz, Julio B.,and S. Wehner. Complearn toolkit.
http://complearn.sourceforge.net/index.html.
[3] T. Dullien. Personal communication.
[4] S. Evans and B. Barnett. Network securitythrough conservation of complexity, 2002. MIL-COM 2002.
[5] H. Flake. Structural comparison of executableobjects. In DIMVA, pages 161–173, 2004.
[6] A. Kulkarni and S. Bush. Active network man-agementand kolmogorovcomplexity, 2001. Ope-nArch 2001, Anchorage Alaska.
[7] A. Kulkarni, S. Bush, and S. Evans. Detectingdistributed denial-of-service attacks using kol-mogorov complexity metrics, 2001. GE CRDTechnical Report 2001CRD176.
[8] M. Li and P. Vitanyi. An Introduction to Kol-mogorov Complexity and Its Applications (2nd
Edition). Springer Verlag, 1997.
[9] Security.is. Apache/php exploit.http://packetstormsecurity.org/0010-exploits/phploit.c.
[10] A. S. Tanenbaum. Computer Networks, 3rd edi-tion. Prentice-Hall, 1996.
[11] Snort Development Team. Snort. the opensource network intrusion detection system.
http://www.snort.org.
[12] Viruslist.com. Virus encyclopedia.http://www.viruslist.com/eng/viruslist.html.
[13] P. Vitanyi and R. Cilibrasi. Clus-tering by compression, 2003.http://arxiv.org/abs/cs.CV/0312044.