新浪科技

解析:僵尸网络(Botnet)的工作原理

比特网ChinaByte

关注

Botnet 工作原理

Botnet的工作原理是一个很复杂的问题,为了清晰准确的描述这个问题,我们按照Botnet的生命周期的不同阶段,依次加以介绍。我们可以将Botnet的生命周期分为传播过程、感染过程、加入网络、再传播过程、接受控制等阶段。

3.1 传播过程

Bot程序的转播过程主要有五种传播形式:

攻击漏洞:攻击者主动攻击系统漏洞获得访问权,并在Shellcode 执行僵尸程序注入代码。这些漏洞多数都是缓存区溢出漏洞。下面我们以Slapper为例,简单描述一下这种基于P2P协议的Bot的传播过程。① 感染Slapper的主机,用非法的GET请求包扫描相邻网段的主机,希望获得主机的指纹(操作系统版本、web 服务器版本)。②一旦发现有Apache SSL 缓存溢出漏洞的主机,就开始发动攻击。攻击者首先在建立SSL v2 连接时,故意放一个过大参数,代码没有对参数做边界检查,并拷贝该参数到一个堆定位的 SSL_SESSION 数据结构中的固定长度缓冲区,造成缓冲区溢出。手工制作的字段是缓存溢出的关键。漏洞探测者小心翼翼地覆盖这些数据域,不会严重的影响SSL握手。

邮件携带:据有关统计资料显示,7%的垃圾邮件含蠕虫

即时消息通讯:很多bot程序可以通过即时消息进行传播。2005年,性感鸡(Worm。MSNLoveme)爆发就是通过MSN消息传播的。

恶意网站脚本:攻击者对有漏洞的服务器挂马或者是直接建立一个恶意服务器,访问了带有恶意代码网页后,主机则很容易感染上恶意代码。

伪装软件:很多Bot程序被夹杂在P2P共享文件、局域网内共享文件、免费软件、共享软件中,一旦下载并且打开了这些文件,则会立即感染Bot程序。

3.2 感染过程

①攻击程序在攻陷主机后有两种做法,一个是随即将Bot程序植入被攻陷的主机,另一个是让被攻陷的主机自己去指定的地方下载。这种从指定地方下载的过程称为二次注入。二次注入是为了方便攻击者随时更新Bot程序,不断增加新功能。同时不断改变的代码特征也增加了跟踪的难度。

②Bot程序植入被攻陷的主机,会自动脱壳。

③在被感染主机上执行IRC客户端程序

④Bot主机从指定的服务器上读取配置文件并导入恶意代码。

⑤Bot程序隐藏IRC界面,修改Windows注册表的自启动部分

⑥Bot程序关闭某些特定程序(bootstrap process),如防火墙,系统自动更新。

3.3 加入Botnet

不同的类型Bot主机,加入Botnet的方式也不同,下面以基于IRC协议的Bot为例,介绍僵尸主机加入Botnet的过程。

①如果Bot中有域名,先解析域名,通常采用动态域名。

②Bot主机与IRC服务器建立TCP连接。为增强安全性,有的IRC服务器设置了连接密码。连接密码在TCP三次握手后,通过PASS命令发送。

③Bot主机与IRC服务器发送NICK和USER命令,NICK通常有一个固定的前缀,如CHN!2345、[Nt]-15120、ph2-1234,前缀通常为国家简称、操作系统版本等

④加入预定义的频道。频道名一般硬编码在Bot体内,为增强安全性,有的控制者为频道设定了密码。 CNCERT/CC 的监测数据表明,规模较大(控制 1 万台以上计算机)的Botnet通常设置了频道密码,但设置服务器连接密码的Botnet还在少数。

3.4 控制方式

Botnet的主人必须保持对僵尸主机的控制,才能利用它们完成预订的任务目标。下面依然以IRC Bot 为例,简单描述一下控制主机是如何控制Bot主机的。其它类型的Bot受控方式,在后面分别介绍。

①攻击者或者是Botnet的主人建立控制主机。大多数控制主机建立在公共的IRC服务上,这样做是为了将控制频道做的隐蔽一些。也有少数控制主机是攻击者自己单独建立的。

②Bot主机主动连接IRC服务器,加入到某个特定频道。此过程在前面“加入Botnet”一节中已经介绍。

③控制者(黑客)主机也连接到IRC服务器的这个个频道上。

④控制者(黑客)使用。login、!logon、!auth诸如此类的命令认证自己,服务器将该信息转发给频道内所有的Bot主机,Bot将该密码与硬编码在文件体内的密码比较,相同则将该用户的 nick 名称记录下来,以后可以执行该用户发送的命令。控制者具有channel op权限,只有他能发出的命令。

基于IRC协议,主控者向受控僵尸程序发布命令的方法有3 种:设置频道主题(Topic)命令,当僵尸程序登录到频道后立即接收并执行这条频道主题命令;使用频道或单个僵尸程序发送PRIVMSG 消息,这种方法最为常用,即通过IRC 协议的群聊和私聊方式向频道内所有僵尸程序或指定僵尸程序发布命令;通过NOTICE 消息发送命令,这种方法在效果上等同于发送PRIVMSG 消息,但在实际情况中并不常见。IRC 僵尸网络中发送的命令可以按照僵尸程序对应实现的功能模块分为僵尸网络控制命令、扩散传播命令、信息窃取命令、主机控制命令和下载与更新命令。其中,主机控制命令还可以细分为发动DDoS 攻击、架设服务、发送垃圾邮件、点击欺诈等。一条典型的扩散传播命令“.advscan asn1smb 200 5 0 -r -a -s”,其中,最先出现的点号称为命令前缀,advscan 则为命令字,扩散传播命令的参数一般包括远程攻击的漏洞名、使用的线程数量、攻击持续时间、是否报告结果等

3.5 基于IRC协议的Botnet

IRC 协议是互联网早期就广泛使用的实时网络聊天协议,它使得世界各地的互联网使用者能够加入到聊天频道中进行基于文本的实时讨论。IRC 协议基于客户端-服务器模型,用户运行IRC 客户端软件连接到IRC 服务器上,IRC 服务器可以通过互相连接构成庞大的IRC 聊天网络,并将用户的消息通过聊天网络发送到目标用户或用户群。IRC 网络中最普遍使用的一种通信方式是群聊方式,即多个IRC 客户端连接到IRC 网络并创建一个聊天信道,每个客户端发送到IRC 服务器的消息将被转发给连接这个信道的全部客户端。此外,IRC 协议也支持两个客户端之间的私聊方式。

由于IRC 协议提供了一种简单、低延迟、匿名的实时通信方式,而且也被黑客普遍使用于相互间的远程交流,因此在僵尸网络发展初期,IRC 协议自然成为了构建一对多命令与控制信道的主流协议。

3.6 基于P2P协议的Botnet

基于IRC 协议和HTTP 协议的命令与控制机制均具有集中控制点,这使得这种基于客户端-服务器架构的僵尸网络容易被跟踪、检测和反制,一旦防御者获得僵尸程序,他们就能很容易地发现僵尸网络控制器的位置,并使用监测和跟踪手段掌握僵尸网络的全局信息,通过关闭这些集中的僵尸网络控制器也能够比较容易地消除僵尸网络所带来的威胁。为了让僵尸网络更具韧性和隐蔽性,一些新出现的僵尸程序开始使用P2P 协议构建其命令与控制机制。

Slapper,Sinit,Phatbot,SpamThru, Nugache 和Peacomm 等僵尸网络实现了各种不同的P2P 控制机制,并体现出一些先进的设计思想。为了消除容易被防御者用于摧毁僵尸网络的bootstrap 过程,Slapper 在网络传播过程中对每个受感染主机都建立了一个完整的已感染节点列表;Sinit 同样也消除了这一过程并使用了公钥加密进行更新过程的验证;Nugache 则试图通过实现一个加密混淆的控制信道来躲避检测。但这些已有的P2P 僵尸网络控制协议的设计并不成熟:Sinit 僵尸程序使用了随机扫描的方法寻找可交互的其他Sinit 僵尸程序,这导致构造的P2P 僵尸网络连接度非常弱,并且由于大量的扫描流量而容易被检测;Phatbot 在其bootstrap 过程中利用了Gnutella 的缓冲服务器,这也使得构建的僵尸网络容易被关闭。此外,Phatbot 所基于的WASTE 协议在大规模网络中的扩展性并不好;Nugache 的弱点在于其bootstrap 过程中对一个包含22 个IP 地址的种子主机列表的依赖;Slapper 并没有实现加密和通信认证机制,使僵尸网络很容易被他人所劫持。另外,Slapper 的已感染节点列表中包含了组成僵尸网络所有僵尸程序的信息,这使得防御者从一个捕获的程序中即可获得僵尸网络的全部信息。最后Slapper 复杂的通信机制产生了大量网络流量,使其很容易引起网络流分析工具的警觉。

Wang 等人提出了一种更加先进的混合型P2P 僵尸网络命令与控制机制的设计框架,在此框架中,僵尸程序被分为两类:拥有静态IP 地址并从互联网可以访问的僵尸程序称为Servent Bot,这类僵尸程序承担客户端和服务器的双重角色;其他由于IP 地址动态分配、私有IP 或防火墙过滤等原因无法从互联网访问的僵尸程序称为client bots,每个节点的邻居节点列表中只包含Servent bots。僵尸网络控制者通过认证机制后,可从网络中的任意节点注入其控制命令,当一个节点获取新的控制命令后,通过向其邻居节点转发,从而快速传递到每个Servent Bot,Client Bot 则从其邻居节点列表中的Servent Bot 获取控制命令。在此设计框架基础上,Wang等人还进一步提出了通过命令认证、节点对加密机制、个性化服务端口等机制保证僵尸网络的健壮性和韧性。Vogt 等人则提出了一种层叠化的“super-botnets”僵尸网络群构建方式,即在僵尸网络的传播过程中不断分解以保证对僵尸网络规模的限制,并通过小型僵尸网络间邻居节点关系和基于公钥加密的通信机制构造僵尸网络群。

加载中...