互联网世界的毒瘤——僵尸网络
从世界上第一个蠕虫病毒————莫里斯————因其巨大的系统破坏力和传播速度被人们所关注,便意味着在恶意代码斗争的战场上传播速度势必成为新的衍变方式。而互联网自上世纪90年代初期开始迅猛发展更是为这种恶意代码的快速传播提供了新的媒介和渠道,没有人料到另外一种结合病毒、木马、蠕虫技术为一体的新的信息安全威胁方式————僵尸网络————会如此令世界诸多信息安全专家所头疼,以至于直到今天,在针对僵尸网络的行动中,处于正义一方的白帽子们仍然无法信心满满地占得上风。
创造和管理僵尸网络的软件使得僵尸网络的危害程度远远高于以往恶意脚本那一代,它不仅仅是病毒,更是病毒的病毒,它的危害性更集传统的病毒、木马、蠕虫为一体,既可以进行常规的系统驻留、信息窃取、远程操控,也具备蠕虫的网络传播特性。如果将病毒、木马、间谍软件、后门、蠕虫等等形容为《植物大战僵尸》中的各色装备的僵尸,那僵尸网络用“一大波僵尸”来形容再合适不过。
一、僵尸网络的特点
僵尸网络的特点在于:能够在僵尸客户端上执行所设定的操作而无需僵尸牧人(幕后控制者/僵尸网络所有者)直接登陆该客户端;在僵尸牧人很少甚至不插手的情况下,僵尸客户端能够协同合作并针对同一任务或目标行动。事实上,僵尸网络与蠕虫病毒唯一的区别就在于僵尸网络拥有统一的高度可控的系统。
类型 | 传播性 | 可控性 | 窃密性 | 危害级别 |
---|---|---|---|---|
僵尸网络 | 具备 | 高度可控 | 有 | 高 |
木马 | 不具备 | 可控 | 有 | 高 |
蠕虫 | 主动传播 | 一般没有 | 一般没有 | 高 |
病毒 | 用户干预 | 一般没有 | 一般没有 | 中 |
典型的僵尸网络由僵尸服务器(通常是一台IRC服务器)和一个或更多的僵尸客户端组成。有成百上千的僵尸客户端组成的僵尸网络也仅仅可以被称作为小型僵尸网络。由于僵尸客户端的分布不局限于某个国家或地区,因此对于追踪和查找幕后的僵尸牧人会难上加难,很可能在追查过程中会涉及到国际之间的协同调查及合作,相比遭受损失的企业/机构或个人而言,对僵尸网络的调查取证实在过于繁琐,以至于很多情况下不得不终止调查。
二、僵尸网络的构成
僵尸网络的构成是模块化的,大致可分为三个模块:扫描模块、驻留模块、功能模块,其中扫描模块用来扫描和传播僵尸网络病毒,驻留模块的目的在于能够隐匿驻留在目标系统中,功能模块则在驻留模块驻留之后执行僵尸牧人所设定的指令。从模块构成看即是病毒、木马的模块构成结合。
上图是典型的僵尸网络客户端的生命周期(不同僵尸网络可能会有流程上的区别),其始于发现和利用漏洞:或通过社工手段,或通过系统漏洞,或通过残留木马后门,或通过密码猜解/破解。而在与C&C(命令与控制)通信告之新的客户端上线时,如今的僵尸网络已出现各种加密通信信道,以避免IDS、防火墙或其他方式的网络侦听,与C&C通信的目的在于更新可能存在的客户端模块、C&C端的客户端名称列表、IP地址或信道名称,正如木马攻击时服务器端上线时通知客户端一般。C&C是僵尸客户端与僵尸牧人的通信中转:僵尸牧人对C&C发送指令,C&C对僵尸客户端发送指令。
模块化的僵尸病毒使得功能模块可以根据僵尸牧人的需要进行随时变更或定制,比如加入比特币挖矿功能。因此使得僵尸病毒的模块或组件在面对杀毒软件时可能无法完全被查杀,而一旦在查杀后仍然有组件残留,便很有可能再次感染僵尸病毒,所以在企业环境中遇到僵尸病毒感染通常是在断网之后用干净的系统镜像进行还原。
三、僵尸网络的危害
看似如此强大和难缠的僵尸网络有哪些不同于传统病毒、木马、蠕虫的危害呢?根据功能模块的不同,僵尸网络的危害包括但不限于:
1、感染其他系统成为新的僵尸客户端;
2、DDos攻击,利用大量的僵尸客户端对同一系统/设备发起攻击;
3、广告点击欺骗,比如欺骗点Google公司AdSense的广告赚取费用;
4、发送垃圾邮件及网络钓鱼;
5、存储和分配非法(盗版)知识产权资料;
6、利用DDos攻击进行勒索;
7、根据已感染的僵尸客户端进行数据挖掘(或包含键盘记录功能),获取客户端系统有利用价值的资料;
8、利用僵尸客户端进行比特币挖矿。
下图是笔者写作该文之前的24小时里全球的C&C分布图(来自Shadowserver基金会)。
四、僵尸网络C&C的选择
世界上第一个僵尸网络便是利用IRC服务器作为C&C,直至今天依然有大量僵尸网络采用IRC服务器作为C&C,究其原因,在于IRC频道在简易性、稳定性、管理方便的优势,但其缺点亦显而易见,一旦IRC服务器或频道被发现,便意味着僵尸网络的终结————即僵尸牧人无法再与僵尸客户端取得联系,此外IRC信道中的数据很容易遭到窃听(尽管僵尸牧人可以通过TOR作为附加的安全保障手段或对IRC信道命令采取各种加密措施)。但如今的C&C手段绝非仅仅停留在IRC服务器层面,它还包括以下几种手段:
1、利用域名解析方式将域名作为C&C地址;
2、利用基于Web系统的服务器作为C&C地址并作为指令交互的方式;
3、使用P2P网络分散管理僵尸客户端及C&C;
4、基于即时消息工具的僵尸网络;
5、基于FTP的僵尸网络C&C。
以上方法中,基于Web系统的C&C是另外一种典型的替换机制。由于HTTP是无状态协议,所以僵尸牧人无法通过HTTP向僵尸客户端发送指令,但僵尸客户端可以定期访问HTTP地址以检查是否有新的指令,这种方式的优势在于其通信连接不会被防火墙所阻断,且嗅探器也无法在流量监测中发现任何有关于僵尸网络价值的信息。
此外,如今的僵尸网络已经不再是一台C&C控制成千上万台僵尸客户端,而是像企业管理一般进行小规模进行管理,如一个僵尸网络有20台C&C,每台C&C控制数百台僵尸客户端。
五、僵尸网络的检测
对于企业或机构来说,检测僵尸网络是否已感染内网系统可以通过网络和系统两个层面进行检测,网络层面包括流量检测、防火墙/NIDS、日志分析,系统层面包括搭建蜜罐和日志分析。
由于僵尸网络客户端在与C&C进行指令交互或进行功能执行时往往伴随着急剧增大的网络流量,因此通过诸如tcpdump、Wireshark等嗅探器进行针对性的流量监测,通常骤升的网络流量都是不合理的。在遇到过大网络流量所导致的路由器CPU无法承受时,可通过流量采样来进行进一步的分析,当然,如果能够从网络流量中初步分析出有可疑的主机时即可针对性的进行流量分析,以进一步检测可疑主机的流量内容。
以IRC服务器作为C&C为例,常用的IRC协议消息如下:
1、JOINS:IRC客户端用来登陆到IRC服务器信道的消息;
2、PINGS:IRC服务器发送给IRC客户端的信息,以判断客户端是否对该消息还有响应;
3、PONGS:IRC客户端返回给服务器的消息,以说明客户端仍然在线或尚未离线、登出;
4、PRIVMSG:包含信道名字和信道数据的消息。
在网络流量监测中,若存在以IRC协议发送/接收的数据包,且以上四种消息数据比较中,相比JOINS消息,PRIVMSG数据很少或几乎不存在,则说明所监测的流量及其相关的主机是可疑的,很可能是僵尸网络。
对于使用IRC服务器作为C&C的僵尸网络来说,默认的IRC服务器端口6667便成为防火墙/NIDS所重点关注的端口,此外还包括常见的漏洞端口扫描、DDos流量等。但NIDS(如Snort)的缺陷也导致其无法完整和全面的进行检测,因其仅可以对于已知的攻击类型进行检测。
对于系统自身而言,防病毒软件产品是必不可少的,即使在面对部分僵尸病毒的攻击下并不显得那么给力!相比之下,蜜罐的作用则在于探究攻击者的攻击方式和行为方式,与防火墙、IDS、防病毒产品日志相结合进一步探究僵尸病毒的行为特性及攻击痕迹,以便于后续的技术取证。
六、ZeroAccess的检测与预防
ZeroAccess是来自于一个僵尸网络中木马程序,受感染的主机会执行比特币挖矿操作以及点击欺骗,截至本月(12月)月初,受该木马感染的主机大约在一百万到九百万台左右(僵尸网络中的僵尸客户端相当难以统计),该木马每天为僵尸牧人创造的“收益”大约是10万美金。在微软、欧盟网络犯罪中心以及FBI的通力协作下,勉强将该僵尸网络一网打尽(传统的针对僵尸网络的行动被称为“斩首行动”,即侦测、发现和截断C&C。近些年的僵尸网络已具备多C&C协同、P2P网络以及基于DNS解析的C&C,使得“斩首行动”难见成效)。之所以说“勉强”,是因微软对外宣称此次联合行动是(部分)成功的,而实际上是一次完全失败的行动。
ZeroAccess的僵尸网络采用的是基于P2P网络的C&C,不幸的是,微软仅仅侦测和掌控了其中大约40%的C&C。根据此次行动的斩获,所总结出来的检测ZeroAccess的方式如下:
1、僵尸网络的关键之处在于僵尸客户端必须处于联网状态,离网状态下的僵尸客户端是不具有任何威胁的(即便它已有root权限又怎样)。找到内网对外连接的网线与交换机的接口,并确保对外的流量未经任何处理和干扰。
2、在交换机上做镜像端口,将对外的网络流量dump到干净系统上进行流量分析。ZeroAccess使用的端口是16464、16465、16470,可能还有16471,这些端口取决于ZeoAccess是32位还是64位。由于僵尸牧人可以随时更新模块并更换对外连接端口,所以以上端口也仅仅是暂时“见效”。将以上端口的流量做镜像并导入到某一固定端口。
3、使用一台安装有Wireshark的笔记本将上一步的固定端口导入的流量做流量分析,在正常情况下可以通过Wireshark看到未经过滤的流量信息。针对ZeroAccess的连接端口做流量过滤,或者使用Wireshark的命令“dst portrange 16464-16471”,经过滤的流量中可能因包含有多余的端口流量而得到假阳性的结果。
4、如果内网存在已被感染的主机,则耐心的等待可换来“可观”的流量成果:一台内网主机正与外网不同且无重复(或者很少有重复)的IP地址进行连接,这正是ZeroAccess僵尸网络的特征。根据赛门铁克的资料,这些外网IP地址包含:
69.176.14.76 76.28.112.31 24.127.157.117 117.205.13.113 200.59.7.216 113.193.49.54
值得注意的是,ZeroAccess僵尸网络的IP地址在频繁的更换。以上IP列表可以证明内网已受感染,但缺失其中一条IP并不能证明已受攻击。
5、根据以上流量监测结果,对内网中受感染的主机进行网络隔断,并通过好一点的反病毒产品进行病毒检测。
对于预防或阻止ZeroAccess感染的建议如下:
- 遵从标准的安全最佳实践以避免遭受ZeroAccess感染; - 即时升级系统及安全产品补丁; - 安装代理服务器且仅允许特定的端口访问互联网; - 安装IDS/IPS; - 限制对外开发的端口,仅允许必要的服务端口保持开放; - 保存所有经过防火墙的日志记录。
漏网之余
除非僵尸网络的规模相当庞大,在如今的互联网世界很难达到上文中所描述的威胁程度,而僵尸网络的特性注定了它会不断的膨胀和扩张,这是僵尸牧人的基本目的所在。一个拥有6万到8万台僵尸客户端的僵尸网络由于一个私有的城市人口,其能力和威胁是令人叹为观止的。所以应对僵尸网络最好的办法是阻止其规模的扩大,即阻止恶意软件的传播和入侵数量可观系统。