回顾一下,我们检测到三种不同类型的异常情况:通讯量分配出现的大量变化引起的突发性异常情况;定期与目标通讯引起的持续性异常情况,即使通讯量很小(如与僵尸网络指挥与控制系统通讯);许多网络用户开始采取相同行动引起的通用性异常情况。这三种异常情况与我们的系统发布的三种类型的报警有关。表2列出了一些知名的恶意软件类型,表明哪一种类型的恶意软件会触发哪一种警报。
表2 知名恶意软件类型及其警报(来源:英特尔公司,2009年)
僵尸网络踪迹
我们从三个独特的僵尸网络家族收集了通讯踪迹。我们在一台主机上执行了僵尸电脑代码并且在一个星期的时间里记录数据包踪迹。我们使用同一台主机在许多星期里运行三种不同的僵尸电脑程序。这台主机在每一次收集数据之前都清理干净原来的数据并且安装原来的Windows XP。此外,我们关闭了自动更新功能,并且设置防火墙丢弃所有入网的数据包。为了跟踪每一个踪迹,我们丢弃没有对应这个主机源地址和目标地址的全部数据包。使用Bro软件可以把这些数据包踪迹转换为通讯流。其余的分析就使用这个通讯流。我们在这个阶段的目标之一是理解不同行为的检测,也就是攻击行为和频道行为(当恶意软件呼叫家里的时候)。在我们收集的踪迹中,这两种行为我们都看到了。因为许多现实中的僵尸网络产生很少的通讯量(设法隐蔽自己),检测控制渠道是非常重要的。我们简单地解释一下这三种僵尸网络和这些通讯流是如何分类的:
SDBot。SDBot是一个经过充分研究的僵尸网络,使用IRC作为沟通渠道,但是利用非标准的端口。然而,IRC服务器很容易从域名中挑出来,如irc.undernet.org。这个踪迹暴露了在控制窗口中的两个独特的原子。其余的通讯流包括在邻近网络前缀上运行的扫描。我们在端口135、139、445和2079(一种知名的商业杀毒软件产品)上发现了大量的扫描。在这些踪迹中,我们看到在众所周知的IRC端口上的连接,并且利用这个知识识别控制通讯(IRC通讯)和攻击通讯流。
Zapchast。这种僵尸网络也使用IRC作为沟通渠道并且使用众所周知的IRC端口(6666和6667)。我们在这个踪迹中一共发现了5个IRC服务原子(大约13个独特的IP地址)。这个攻击通讯流主要是网络输入输出系统通讯。
Storm(风暴)。这个僵尸网络是以P2P网络为基础的,与其它僵尸网络有很大的不同。这些踪迹比其它僵尸网络的踪迹大两倍。缺少单一目的地的服务器或者缺少一个明确的端口要发现这个僵尸网络的控制渠道是很困难的。我们必须采用试探法做这个事。事实是风暴僵尸网络使用UDP协议连接到P2P网络。
我们观察UDP通讯流(双向流动的通讯流)并且注意到大量的数据包的尺寸都很小并且是固定的(这种通讯流在非标准端口流动,不可能是攻击性的)。我们把这些通讯流当作是维护通讯的指示器并且隔离了全部有关的端口。经过这些端口的UDP通讯流被当作这个僵尸网络控制渠道的一部分。我们确实看到了非常少的HTTP和SSH通讯流。这些通讯流也可能与控制有关。这些通讯流的数量不影响我们的检测结果。风暴僵尸网络的攻击主要是阻塞TCP端口25(SMTP)。
评估
在这节的其余部分,我们讨论检测持续性异常状况。
使用p-报警检测隐蔽的行为。要验证对僵尸网络每一个控制渠道的检测,我们首先要找到能够从控制通讯流中提取的独特的原子。对于每一个原子,我们计算这个恶意软件踪迹的生命周期的持续性。回忆一下,我们用5个不同的时间量程计算这个持续性。为了进行检查,我们就考虑把这个原子标记为一个p-报警,如果任何时间量程的值都超过门限值p = 0.6的话。我们发现,这个门限值每天发出的错误报警是最少的,检测率是最好的。对于所有的恶意软件踪迹来说,这个检测率平均超过所有的目标原子。
在图3中,我们描绘了每一个原子的最大持续性值。这个Y轴表示用于p的值。这个分散的点包含每一个僵尸网络的三个独特的作者。每一个点描绘相应的原子的持续性值。我们在p = 0.6的位置画一个垂直的线。这是我们的检测系统使用的持续性门限值。我们的系统把这个垂直线右边出现的原子标记为可能的指挥与控制目标。选择这个特定的门限值(也就是p = 0.6)是为了达到最大限度地实现减少错报数量和提高检测率的平衡。
图3 按照持续性检测三个僵尸网络(来源:英特尔公司,2009年)
SDBot踪迹准确地暴露了一个原子。这个原子出现在这个图的右上方。它是最大的僵尸网络制造者并且显示为一个三角形。Zapchast的踪迹包含9个原子,但是,其中只有一个出现在这个垂直线的右边。最后,风暴僵尸网络的踪迹包含大约8.2万个原子,持续性水平是平均分布的(为了方便起见,我们仅描绘了100个原子的样本)。虽然在这个x轴上反映了持续性,但是,这个垂直的区域显示了不同的时间量程。因此,在下面区域的一个点表示与这个1小时时间量程有关的持续性值。
我们描绘每一个目标原子的最大持续性值。这样,这个区域显示持续性值最大的时间量程。查看这些点,我们看到这个SDBot原子和9个Zapchast原子中的8个原子都轻松地检测到了,并且显示在这个门限值的右边。对于留在门限值左边的剩余的那一个单个的Zapchast原子,我们准确地发现有两个连接在整个踪迹上相互距离很近。我们的结论是这些连接确实是不正常的。我们指出,这些特定的僵尸网络实例是隐蔽的并且产生很少的连接。其中一个原子(在这个线的右边)与整个一个星期的30次连接有关,在一个窗口中连接次数不超过一次。这种行为方式是不容易察觉的。然而,这个原子的持续性值是0.7,并且超过了门限值。这个特殊的例子说明了我们为什么要检测隐蔽的恶意软件的原因。随着恶意软件的隐蔽性越来越强和恶意软件开发人员采取不同寻常的措施防止暴露,采用基于数量的异常检测方式也许不会取得很大的成功。
结论
随着僵尸网络向日益隐蔽的行为的方向快速发展和许多端点主机已经被这种恶意软件感染,迫切需要开发和部署一些技术对抗这些问题。在如何防御僵尸网络全文中,我们评估了最新的僵尸网络行为和趋势,说明了传统的依赖于基于数量和基于规则的检测方法的缺陷。僵尸电脑和僵尸网络能够避开异常检测,部分原因是它们具有多形性的性质,因此可以看作是一种全新的安全漏洞,其通讯行为故意模仿正常的端点主机,从而使它们处在检测器门限值设置的下面。
因此,我们要分析真正的英特尔企业端点主机后台通讯的行为,并且把这个行为与真正的僵尸网络指挥与控制渠道的活动进行比较。这样,我们能够开发和展示这个Canary检测器,通过跟踪与目标主机有关的节点的持续性和多个对象的同样的持续性来根除僵尸网络的指挥与控制渠道。上述两种非僵尸网络的通讯都是非常稳定的。这样做的好处在于,这些方法的实力不需要拥有还没有发现的僵尸网络的知识,也不需要通讯流量负载检测。