僵尸网络的工作原理.docx
《僵尸网络的工作原理.docx》由会员分享,可在线阅读,更多相关《僵尸网络的工作原理.docx(20页珍藏版)》请在冰豆网上搜索。
![僵尸网络的工作原理.docx](https://file1.bdocx.com/fileroot1/2022-12/11/3d6d62c3-819d-4075-b2f0-fc0356d188c7/3d6d62c3-819d-4075-b2f0-fc0356d188c71.gif)
僵尸网络的工作原理
【IT专家网独家】一、Botnet的起源与定义
起源及演化过程
Botnet是随着自动智能程序的应用而逐渐发展起来的。
在早期的IRC聊天网络中,有一些服务是重复出现的,如防止频道被滥用、管理权限、记录频道事件等一系列功能都可以由管理者编写的智能程序所完成。
于是在1993年,在IRC聊天网络中出现了Bot工具——Eggdrop,这是第一个Bot程序,能够帮助用户方便地使用IRC聊天网络。
这种bot的功能是良性的,是出于服务的目的,然而这个设计思路却为黑客所利用,他们编写出了带有恶意的Bot工具,开始对大量的受害主机进行控制,利用他们的资源以达到恶意目标。
日期
Bot名称
制作者(姓名或绰号)
描述
1993.12
EggdropRobeyPointer
JeffFisher
第一个非恶意IRC机器人程序
1999.6
PrettyPark
匿名
第一个恶意的使用IRC作为控制协议的Bot
2000
GT-Bot
Sony,mSg和DeadKode
第一个广泛传播的基于mIRC可执行脚本的IRCBot,
2002.2
SDbot
SD
第一个基于代码的单独的IRCBot
2002.9
Slapper
匿名
第一个使用P2P协议通讯的Bot
2002.10
Agobot
Ago
不可思议的强壮、灵活和模块化的设计
2003.9
Sinit
匿名
使用随机扫描发现对端的P2PBot
2004.3
Phatbot
匿名
基于WASTE协议的P2PAgo
2004
Rbot/rxbot
Nils RacerX90等
SDbot的后代,
2004
Gaobot
匿名
第一类Bot,使用多种手段传播
2004.5
Bobax
匿名
使用HTTP协议做命令和控制机制。
20世纪90年代末,随着分布式拒绝服务攻击概念的成熟,出现了大量分布式拒绝服务攻击工具如TFN、TFN2K和Trinoo,攻击者利用这些工具控制大量的被感染主机,发动分布式拒绝服务攻击。
而这些被控主机从一定意义上来说已经具有了Botnet的雏形。
1999年,在第八届DEFCON年会上发布的SubSeven2.1版开始使用IRC协议构建攻击者对僵尸主机的控制信道,也成为第一个真正意义上的bot程序。
随后基于IRC协议的bot程序的大量出现,如GTBot、Sdbot等,使得基于IRC协议的Botnet成为主流。
2003年之后,随着蠕虫技术的不断成熟,bot的传播开始使用蠕虫的主动传播技术,从而能够快速构建大规模的Botnet。
著名的有2004年爆发的Agobot/Gaobot和rBot/Spybot。
同年出现的Phatbot则在Agobot的基础上,开始独立使用P2P结构构建控制信道。
2004年5月出现的基于HTTP协议构建控制信道的Bobax。
从良性Bot的出现到恶意Bot的实现,从被动传播到利用蠕虫技术主动传播,从使用简单的IRC协议构成控制信道到构建复杂多变P2P结构的控制模式,再到基于HTTP及DNS的控制模式,Botnet逐渐发展成规模庞大、功能多样、不易检测的恶意网络,给当前的网络安全带来了不容忽视的威胁。
定义
僵尸网络是在网络蠕虫、特洛伊木马、后门工具等传统恶意代码形态的基础上发展、融合而产生的一种新型攻击方式。
从1999年第一个具有僵尸网络特性的恶意代码PrettyPark现身互联网,到2002年因SDbot和Agobot源码的发布和广泛流传,僵尸网络快速地成为了互联网的严重安全威胁。
第一线的反病毒厂商一直没有给出僵尸程序(bot)和僵尸网络的准确定义,而仍将其归入网络蠕虫或后门工具的范畴。
从2003年前后,学术界开始关注这一新兴的安全威胁,为区分僵尸程序、僵尸网络与传统恶意代码形态,Puri及McCarty均定义“僵尸程序为连接攻击者所控制IRC信道的客户端程序,而僵尸网络是由这些受控僵尸程序通过IRC协议所组成的网络”。
为适应之后出现的使用HTTP或P2P协议构建命令与控制信道的僵尸网络,Bacher等人给出了一个更具通用性的定义:
僵尸网络是可被攻击者远程控制的被攻陷主机所组成的网络。
僵尸网络与其他攻击方式最大的区别特性在于攻击者和僵尸程序之间存在一对多的控制关系。
Rajab等人在文献中也指出,虽然僵尸网络使用了其他形态恶意代码所利用的方法进行传播,如远程攻击软件漏洞、社会工程学方法等,但其定义特性在于对控制与命令通道的使用。
综合上述分析,僵尸网络是控制者(称为Botmaster)出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络。
二、Botnet的危害及流行趋势
2.1Botnet的危害
一般认为Botnet的危害包括5宗罪,从危害大范围和严重程度来看,威胁最大的是DDoS攻击和垃圾邮件。
有些DDoS攻击事件,曾经造成某中型城域网的全部宽带用户无法上网长达2个多小时。
垃圾邮件也大量的消耗着带宽。
此外,监听网络流量、记录键盘操作、大规模身份窃取通常只是可能给最终用户带来重大经济损失。
这些的潜在威胁虽然是针对最终用户的,但是从服务营销的角度来看,也是网络服务提供商的损失。
但是如果以积极主动的态度来应对,又可以将这些威胁转化为潜在的商机。
1、发动DDOS攻击
DDoS攻击已经是司空见惯的事情了,这里想强调的是DDoS攻击目标并不局限于Web服务器,实际上Internet上任何可用的服务都可以成为这种攻击的目标。
通过功能滥用的攻击,高层协议可用来更有效的提高负载,比如针对电子公告栏运行能耗尽资源的查询或者在受害网站上运行递归HTTP洪水攻击。
递归HTTP洪水指的是僵尸工具从一个给定的HTTP链接开始,然后以递归的方式顺着指定网站上所有的链接访问,这也叫蜘蛛爬行。
这种攻击的可以通过一个参数来简单实现,在后面介绍DDoS命令部分时可以看到相关的参数。
僵尸网络也可用于攻击IRC网络。
流行的攻击方式是所谓的"克隆攻击",在这种攻击中,控制者命令每个僵尸工具连接大量的IRC受害终端。
被攻击的IRC服务器被来自数千个僵尸工具或者数千个频道的请求所淹没。
通过这种方式,受到攻击的IRC网络可被类似于DDoS攻击击垮。
2、发送垃圾邮件
有些僵尸工具可能会在一台已感染的主机上打开SOCKSv4/v5代理(基于TCP/IP的网络应用(RFC1928)的一般代理协议)。
在打开SOCKS代理后,这台主机可被用于执行很多恶毒任务,例如发送垃圾邮件等。
在一个僵尸网络和上千个僵尸工具的帮助下,攻击者可以发送大量的大邮件(垃圾邮件)。
有些僵尸工具也执行特殊的功能-收集电子邮件地址。
另外,这当然也可被用于发送诈骗(phishing)邮件,诈骗邮件也是一种特殊的垃圾邮件。
3、监听用户敏感信息、记录键盘输入信息
僵尸工具也可用数据包监听器来观察通过一台已被攻陷主机上令人感兴趣的明文数据。
监听器大部分被用于提取敏感信息,例如用户名和密码。
但监听到的数据也可能包括其他令人感兴趣的信息。
如果一台主机不止一次被攻陷并属于多个僵尸网络,包监听允许收集另一个僵尸网络的关键信息。
所以偷窃另外一个僵尸网络也是可能的。
如果被攻陷主机使用加密的通讯通道(比如HTTPS或者POP3S),在受害计算机上只监听网络数据包是没用的,因为相关的解密数据包的密钥无法得到。
但在这种情况下,大部分的僵尸工具也提供一些特性来帮助攻击者。
在键盘记录器的帮助下,对于攻击者来说,提取敏感信息是非常容易的。
一个已经实现的过滤机制(例如"我只对靠近关键词汇'paypal。
com'的键盘顺序感兴趣)更好的帮助偷窃加密数据。
并行在数千台被攻陷的主机上运行键盘记录器,获取帐户号密码是转瞬之间的事情。
僵尸工具通过发送大量虚假的电子邮件,假装合法(比如虚假的PayPal或者银行电子邮件)的虚假电子邮件("Phishingmails")请求受害者上网提交他们的私人信息。
这些僵尸工具也可以安装众多的虚假网站假装成Ebay,PayPal或者银行来获取个人信息。
即使这些虚假的网站被关闭了,马上也会有另一个虚假的网站跑出来。
4、扩散新的恶意软件
大多数情况下,僵尸网络被用于扩散新的僵尸工具。
由于所有的僵尸工具实现机制通过HTTP或者FTP下载并执行文件,这非常的容易。
但使用僵尸网络扩散一个电子邮件病毒也是一个非常好的主意。
一个拥有一万台用于作为扩散电子邮件病毒基础主机的僵尸网络使得扩散非常的快并且造成更大的危害。
攻击InternetSecuritySystems公司(ISS)产品中ICQ协议解析实现漏洞的Witty蠕虫,由于攻击主机并不运行ISS服务,被怀疑开始是由一个僵尸网络发起的。
5、伪造点击量,骗取奖金或操控网上投票和游戏
僵尸网络也可被用于获取金钱上的好处。
这可以通过在主机上安装一个有广告的虚假网站:
网站的操作员和一些主机公司协商给点击广告付费。
在僵尸网络的帮助下,点击可以自动化,让数千僵尸工具点击弹出广告。
如果僵尸工具劫持了攻陷主机的起始页面,当受害者使用浏览器的时候点击就被执行。
滥用Google的AdSense程序是一个很典型的骗取奖金的实例。
GoogleAdSense是一个快速简便的网上赚钱方法,可以让具有一定规模访问量的网站发布商为他们的网站展示与网站内容相关的Google广告并将网站流量转化为收入。
例如,某个网站是做旅行票务信息发布的网站,且访问量达到了一定规模。
如果加入GoogleAdSense,则可以在该网站上显示一些酒店、旅行社的广告。
Google公司会根据这个票务网站的流量付给它一定的费用。
例如在一个月内点击数达到1万次。
攻击者通过让僵尸网络以自动化的方式点击这些广告和人工提高点击数可以滥用AdSense程序。
僵尸网络的这种用途相对少见,但从攻击者的角度来说这不失为一个好主意。
在线投票和游戏越来越引起人们的注意,用僵尸网络来操控它们比较简单。
由于每个僵尸工具有不同的IP地址,每一票与真人投的票有着相同的可信性。
在线游戏也可通过同样的方式来操控,目前我们了解到僵尸工具正被用于这些目的,在将来这会变得更主要。
2.2Botnet的流行趋势
近几年来,Botnet的流行趋势出现了以下几个明显的特征:
1、基于IRC的Botnet逐渐减少
很多研究者都认为,基于IRC的Botnet正在逐渐减少。
原因是网络安全人员对这类的Botnet越来越了解,检测的手段也越来越多。
2、控制国内Bot的IRC服务器多数在国外
从Symantec的网络安全趋势报告也显示,Botnet主机数量2007年上半年比2006年下半年下降了17%。
统计还显示,中国是拥有Botnet主机最多的国家,占全球总数的29%,但拥有控制主机最多的国家却是美国。
3、基于新型控制协议的Botnet逐渐增加,更加难以发现和控制
基于P2P的Botnet是2005年出现的,伴随着P2P协议的发展,这类Botnet主机也开始增多。
相比之下,基于HTTP和DNS的Botnet就更新颖。
尤其是基于DNS的Botnet是07年11月才首次被报告出来的。
这些新型Botnet的通信机制更加隐蔽,更加难以从正常流量中区分出来。
4、IDC托管服务器成为热门感染目标
服务器主机性能好,可以发出更大的攻击流量。
普通的PC机,最大也就只能打出20Mbps的流量。
而服务器的攻击能力可以数倍于此。
笔者已经几次在IDC里面发现有主机感染Botnet,并参与了攻击。
5、单个Botnet的规模减小,绝大部分都是<1000台主机
Botnet的主机规模减小的原因有两个:
出于自我保护的目的,技术实现的原因。
单个Botnet主机数量太大,造成了很大的自身安全的风险,一旦被网络管理人员发现,整个Botnet会被一网打尽。
此外,由于新型控制协议自身的技术限制,使得新型的Botnet就先天的无法发展成很大的规模。
三、Botnet工作原理
Botnet的工作原理是一个很复杂的问题,为了清晰准确的描述这个问题,我们按照Botnet的生命周期的不同阶段,依次加以介绍。
我们可以将Botnet的生命周期分为传播过程、感染过程、加入网络、再传播过程、接受控制等阶段。
3.1传播过程
Bot程序的转播过程主要有五种传播形式:
攻击漏洞:
攻击者主动攻击系统漏洞获得访问权,并在Shellcode执行僵尸程序注入代码。
这些漏洞多数都是缓存区溢出漏洞。
下面我们以Slapper为例,简单描述一下这种基于P2P协议的Bot的传播过程。
①感染Slapper的主机,用非法的GET请求包扫描相邻网段的主机,希望获得主机的指纹(操作系统版本、web服务器版本)。
②一旦发现有ApacheSSL缓存溢出漏洞的主机,就开始发动攻击。
攻击者首先在建立SSLv2连接时,故意放一个过大参数,代码没有对参数做边界检查,并拷贝该参数到一个堆定位的SSL_SESSION数据结构中的固定长度缓冲区,造成缓冲区溢出。
手工制作的字段是缓存溢出的关键。
漏洞探测者小心翼翼地覆盖这些数据域,不会严重的影响SSL握手。
邮件携带:
据有关统计资料显示,7%的垃圾邮件含蠕虫
即时消息通讯:
很多bot程序可以通过即时消息进行传播。
2005年,性感鸡(Worm。
MSNLoveme)爆发就是通过MSN消息传播的。
恶意网站脚本:
攻击者对有漏洞的服务器挂马或者是直接建立一个恶意服务器,访问了带有恶意代码网页后,主机则很容易感染上恶意代码。
伪装软件:
很多Bot程序被夹杂在P2P共享文件、局域网内共享文件、免费软件、共享软件中,一旦下载并且打开了这些文件,则会立即感染Bot程序。
3.2感染过程
①攻击程序在攻陷主机后有两种做法,一个是随即将Bot程序植入被攻陷的主机,另一个是让被攻陷的主机自己去指定的地方下载。
这种从指定地方下载的过程称为二次注入。
二次注入是为了方便攻击者随时更新Bot程序,不断增加新功能。
同时不断改变的代码特征也增加了跟踪的难度。
②Bot程序植入被攻陷的主机,会自动脱壳。
③在被感染主机上执行IRC客户端程序
④Bot主机从指定的服务器上读取配置文件并导入恶意代码。
⑤Bot程序隐藏IRC界面,修改Windows注册表的自启动部分
⑥Bot程序关闭某些特定程序(bootstrapprocess),如防火墙,系统自动更新。
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的主人必须保持对僵尸主机的控制,才能利用它们完成预订的任务目标。
下面依然以IRCBot为例,简单描述一下控制主机是如何控制Bot主机的。
其它类型的Bot受控方式,在后面分别介绍。
①攻击者或者是Botnet的主人建立控制主机。
大多数控制主机建立在公共的IRC服务上,这样做是为了将控制频道做的隐蔽一些。
也有少数控制主机是攻击者自己单独建立的。
②Bot主机主动连接IRC服务器,加入到某个特定频道。
此过程在前面“加入Botnet”一节中已经介绍。
③控制者(黑客)主机也连接到IRC服务器的这个个频道上。
④控制者(黑客)使用。
login、!
logon、!
auth诸如此类的命令认证自己,服务器将该信息转发给频道内所有的Bot主机,Bot将该密码与硬编码在文件体内的密码比较,相同则将该用户的nick名称记录下来,以后可以执行该用户发送的命令。
控制者具有channelop权限,只有他能发出的命令。
基于IRC协议,主控者向受控僵尸程序发布命令的方法有3种:
设置频道主题(Topic)命令,当僵尸程序登录到频道后立即接收并执行这条频道主题命令;使用频道或单个僵尸程序发送PRIVMSG消息,这种方法最为常用,即通过IRC协议的群聊和私聊方式向频道内所有僵尸程序或指定僵尸程序发布命令;通过NOTICE消息发送命令,这种方法在效果上等同于发送PRIVMSG消息,但在实际情况中并不常见。
IRC僵尸网络中发送的命令可以按照僵尸程序对应实现的功能模块分为僵尸网络控制命令、扩散传播命令、信息窃取命令、主机控制命令和下载与更新命令。
其中,主机控制命令还可以细分为发动DDoS攻击、架设服务、发送垃圾邮件、点击欺诈等。
一条典型的扩散传播命令“.advscanasn1smb20050-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地址并从互联网可以访问的僵尸程序称为ServentBot,这类僵尸程序承担客户端和服务器的双重角色;其他由于IP地址动态分配、私有IP或防火墙过滤等原因无法从互联网访问的僵尸程序称为clientbots,每个节点的邻居节点列表中只包含Serventbots。
僵尸网络控制者通过认证机制后,可从网络中的任意节点注入其控制命令,当一个节点获取新的控制命令后,通过向其邻居节点转发,从而快速传递到每个ServentBot,ClientBot则从其邻居节点列表中的ServentBot获取控制命令。
在此设计框架基础上,Wang等人还进一步提出了通过命令认证、节点对加密机制、个性化服务端口等机制保证僵尸网络的健壮性和韧性。
Vogt等人则提出了一种层叠化的“super-botnets”僵尸网络群构建方式,即在僵尸网络的传播过程中不断分解以保证对僵尸网络规模的限制,并通过小型僵尸网络间邻居节点关系和基于公钥加密的通信机制构造僵尸网络群。
3.6.1Slapper
这里以Slapper为例,讲述一下P2Pbot主机感染的过程。
1、感染主机扫描网络中的主机:
用GET请求包扫描有漏洞的主机,希望获得主机的指纹(操作系统版本、web服务器版本)。
2、对探测到的漏洞主机并发起攻击,使被攻击主机的SSL缓存区溢出。
被攻击主机向攻击者泄漏堆指针
3、对有漏洞主机发起二次攻击。
有趣的是,这个Bot程序使用两次缓存溢出而不是一次。
•第一次,定位堆在Apache进程地址空间的位置。
•第二次,注入它的攻击缓存和shellcode。
有两个理由可以很好的解释将攻击分为两个阶段的原因:
1、攻击缓存必须包括shellcode的绝对地址,这是很难预测的。
因为shellcode被放在内存时,是动态分配在堆中,为了解决这个问题,bot先让服务器泄漏shellcode最终被分配的地址。
然后攻击缓存才按照地址去打补丁。
2、攻击要求覆盖密码SSL_SESSION数据结构中在key_arg[]缓存后面的密码域,。
下面对这个两个阶段做一个更详细的介绍
第一阶段:
在建立SSLv2连接时,故意放一个过大参数,造成缓冲区溢出。
打开一个连接到这个端口,并发起一个SSLv2握手。
•向客户端发送“hello”消息,公告8个不同的密码(虽然,这个bot只支持其中的一个)并接收服务器端的认证消息。
•向客户端发送masterkey和key参数,特别是有一个关键参数最大只允许8字节。
当包数据在libssl库中的get_client_master_key()函数中被解析时,代码没有