僵尸网络的工作原理与防御

一、Botnet的起源与定义
起源及演化过程
Botnet是随着自动智能程序的应用而逐渐发展起来的。在早期的 IRC聊天网络中,有一些服务是重复出现的,如防止频道被滥用、管理权限、记录频道事件等一系列功能都可以由管理者编写的智能程序所完成。于是在1993 年,在IRC 聊天网络中出现了Bot工具——Eggdrop,这是第一个Bot程序,能够帮助用户方便地使用IRC 聊天网络。这种bot的功能是良性的,是出于服务的目的,然而这个设计思路却为黑客所利用,他们编写出了带有恶意的Bot 工具,开始对大量的受害主机进行控制,利用他们的资源以达到恶意目标。


日期

Bot名称

制作者(姓名或绰号)

描述

1993.12

Eggdrop Robey Pointer

Jeff Fisher

第一个非恶意IRC 机器人程序

1999.6

PrettyPark

匿名

第一个恶意的使用IRC 作为控制协议的Bot

2000

GT-Bot

Sony,mSg 和DeadKode

第一个广泛传播的基于mIRC 可执行脚本的IRC Bot,

2002.2

SDbot

SD

第一个基于代码的单独的IRC Bot

2002.9

Slapper

匿名

第一个使用P2P协议通讯的Bot

2002.10

Agobot

Ago

不可思议的强壮、灵活和模块化的设计

2003.9

Sinit

匿名

使用随机扫描发现对端的P2P Bot

2004.3

Phatbot

匿名

基于WASTE 协议的P2P Ago

2004

Rbot/rxbot

NilsRacerX90等

SDbot的后代,

2004

Gaobot

匿名

第一类Bot,使用多种手段传播

2004.5

Bobax

匿名

使用HTTP 协议做命令和控制机制。
20世纪90年代末,随着分布式拒绝服务攻击概念的成熟,出现了大量分布式拒绝服务攻击工具如TFN、TFN2K和Trinoo,攻击者利用这些工具控制大量的被感染主机,发动分布式拒绝服务攻击。而这些被控主机从一定意义上来说已经具有了Botnet的雏形。
1999 年,在第八届DEFCON 年会上发布的SubSeven 2.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.1 Botnet的危害
一般认为Botnet的危害包括5宗罪,从危害大范围和严重程度来看,威胁最大的是DDoS攻击和垃圾邮件。有些DDoS攻击事件,曾经造成某中型城域网的全部宽带用户无法上网长达2个多小时。垃圾邮件也大量的消耗着带宽。 此外,监听网络流量、记录键盘操作、大规模身份窃取通常只是可能给最终用户带来重大经济损失。这些的潜在威胁虽然是针对最终用户的,但是从服务营销的角度来看,也是网络服务提供商的损失。但是如果以积极主动的态度来应对,又可以将这些威胁转化为潜在的商机。
1、发动DDOS攻击
DDoS 攻击已经是司空见惯的事情了,这里想强调的是DDoS 攻击目标并不局限于 Web 服务器,实际上 Internet 上任何可用的服务都可以成为这种攻击的目标。通过功能滥用的攻击,高层协议可用来更有效的提高负载,比如针对电子公告栏运行能耗尽资源的查询或者在受害网站上运行递归 HTTP 洪水攻击。递归 HTTP 洪水指的是僵尸工具从一个给定的 HTTP 链接开始,然后以递归的方式顺着指定网站上所有的链接访问,这也叫蜘蛛爬行。 这种攻击的可以通过一个参数来简单实现,在后面介绍DDoS命令部分时可以看到相关的参数。
僵尸网络也可用于攻击 IRC 网络。流行的攻击方式是所谓的"克隆攻击",在这种攻击中,控制者命令每个僵尸工具连接大量的 IRC 受害终端。被攻击的IRC服务器被来自数千个僵尸工具或者数千个频道的请求所淹没。通过这种方式,受到攻击的IRC 网络可被类似于 DDoS 攻击击垮。
2、发送垃圾邮件
有些僵尸工具可能会在一台已感染的主机上打开 SOCKS v4/v5 代理(基于 TCP/IP 的网络应用(RFC 1928)的一般代理协议)。在打开SOCKS代理后,这台主机可被用于执行很多恶毒任务,例如发送垃圾邮件等。在一个僵尸网络和上千个僵尸工具的帮助下,攻击者可以发送大量的大邮件(垃圾邮件)。有些僵尸工具也执行特殊的功能-收集电子邮件地址。另外,这当然也可被用于发送诈骗(phishing)邮件,诈骗邮件也是一种特殊的垃圾邮件。
3、监听用户敏感信息、记录键盘输入信息
僵尸工具也可用数据包监听器来观察通过一台已被攻陷主机上令人感兴趣的明文数据。监听器大部分被用于提取敏感信息,例如用户名和密码。但监听到的数据也可能包括其他令人感兴趣的信息。如果一台主机不止一次被攻陷并属于多个僵尸网络,包监听允许收集另一个僵尸网络的关键信息。所以偷窃另外一个僵尸网络也是可能的。
如果被攻陷主机使用加密的通讯通道(比如HTTPS或者POP3S),在受害计算机上只监听网络数据包是没用的,因为相关的解密数据包的密钥无法得到。但在这种情况下,大部分的僵尸工具也提供一些特性来帮助攻击者。在键盘记录器的帮助下,对于攻击者来说,提取敏感信息是非常容易的。一个已经实现的过滤机制(例如 "我只对靠近关键词汇'paypal。com'的键盘顺序感兴趣)更好的帮助偷窃加密数据。并行在数千台被攻陷的主机上运行键盘记录器,获取帐户号密码是转瞬之间的事情。
僵尸工具通过发送大量虚假的电子邮件,假装合法(比如虚假的PayPal或者银行电子邮件)的虚假电子邮件("Phishing mails")请求受害者上网提交他们的私人信息。这些僵尸工具也可以安装众多的虚假网站假装成 Ebay,PayPal 或者银行来获取个人信息。即使这些虚假的网站被关闭了,马上也会有另一个虚假的网站跑出来。
4、扩散新的恶意软件
大多数情况下,僵尸网络被用于扩散新的僵尸工具。由于所有的僵尸工具实现机制通过HTTP 或者 FTP 下载并执行文件,这非常的容易。但使用僵尸网络扩散一个电子邮件病毒也是一个非常好的主意。一个拥有一万台用于作为扩散电子邮件病毒基础主机的僵尸网络使得扩散非常的快并且造成更大的危害。攻击 Internet Security Systems公司(ISS)产品中 ICQ 协议解析实现漏洞的Witty蠕虫,由于攻击主机并不运行 ISS 服务,被怀疑开始是由一个僵尸网络发起的。
5、伪造点击量,骗取奖金或操控网上投票和游戏
僵尸网络也可被用于获取金钱上的好处。这可以通过在主机上安装一个有广告的虚假网站:网站的操作员和一些主机公司协商给点击广告付费。在僵尸网络的帮助下,点击可以自动化,让数千僵尸工具点击弹出广告。如果僵尸工具劫持了攻陷主机的起始页面,当受害者使用浏览器的时候点击就被执行。
滥用Google的AdSense程序是一个很典型的骗取奖金的实例。Google AdSense是一个快速简便的网上赚钱方法,可以让具有一定规模访问量的网站发布商为他们的网站展示与网站内容相关的Google广告并将网站流量转化为收入。例如,某个网站是做旅行票务信息发布的网站,且访问量达到了一定规模。如果加入Google AdSense,则可以在该网站上显示一些酒店、旅行社的广告。Google公司会根据这个票务网站的流量付给它一定的费用。例如在一个月内点击数达到1万次。攻击者通过让僵尸网络以自动化的方式点击这些广告和人工提高点击数可以滥用 AdSense 程序。僵尸网络的这种用途相对少见,但从攻击者的角度来说这不失为一个好主意。
在线投票和游戏越来越引起人们的注意,用僵尸网络来操控它们比较简单。由于每个僵尸工具有不同的 IP 地址,每一票与真人投的票有着相同的可信性。在线游戏也可通过同样的方式来操控,目前我们了解到僵尸工具正被用于这些目的,在将来这会变得更主要。
2.2 Botnet的流行趋势
近几年来,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 服务器版本)。②一旦发现有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”僵尸网络群构建方式,即在僵尸网络的传播过程中不断分解以保证对僵尸网络规模的限制,并通过小型僵尸网络间邻居节点关系和基于公钥加密的通信机制构造僵尸网络群。
3.6.1 Slapper
这里以Slapper 为例,讲述一下P2P bot 主机感染的过程。
1、感染主机扫描网络中的主机:用GET请求包扫描有漏洞的主机,希望获得主机的指纹(操作系统版本、web 服务器版本)。
2、对探测到的漏洞主机并发起攻击,使被攻击主机的SSL缓存区溢出。被攻击主机向攻击者泄漏堆指针
3、对有漏洞主机发起二次攻击。有趣的是,这个Bot 程序使用两次缓存溢出而不是一次。
●第一次,定位堆在 Apache 进程地址空间的位置。
●第二次,注入它的攻击缓存和 shell code。
有两个理由可以很好的解释将攻击分为两个阶段的原因:
1、攻击缓存必须包括shell code的绝对地址,这是很难预测的。因为shell code 被放在内存时,是动态分配在堆中,为了解决这个问题,bot 先让服务器泄漏 shell code最终被分配的地址。然后攻击缓存才按照地址去打补丁。
2、攻击要求覆盖密码 SSL_SESSION 数据结构中在key_arg[]缓存后面的密码域,。
下面对这个两个阶段做一个更详细的介绍
第一阶段:在建立SSL v2 连接时,故意放一个过大参数,造成缓冲区溢出。
打开一个连接到这个端口,并发起一个 SSLv2 握手。
●向客户端发送 “hello” 消息,公告8个不同的密码 (虽然,这个bot只支持其中的一个)并接收服务器端的认证消息。
●向客户端发送 master key 和key 参数,特别是有一个关键参数最大只允许8字节。
当包数据在 libssl 库中的get_client_master_key() 函数中被解析时,代码没有对参数做边界检查,并拷贝参数到一个堆定位的 SSL_SESSION 数据结构中的固定长度缓冲区。这样,任意大小的字节可以覆盖 key_arg[]后面的信息,这可以让内存阻断SSL_SESSION 结构。手工制作的字段是缓存溢出的关键。漏洞探测者小心翼翼地覆盖这些数据域,不会严重的影响SSL握手。

第二阶段:狡猾的二次使用缓存溢出,执行shell code 分为三个步骤:
1. 搅乱堆管理数据
2. 滥用free() 库调用以向内存打上任意的代码,作为free()自己的全局偏移表的入口
3. 由于 free()被第二次调用,这次是把控制重定向到shell code 的位置
第二次溢出中使用的攻击缓存包含三个部分:
1)放到SSL_SESSION数据结构的key_arg[]后面的缓存
2)24 字节精心构造的数据
3)124 字节的shell code

当缓存区溢出发生时, key_arg[] 缓存后面的SSL_SESSION 数据结构所有成员都被覆盖。除了密码字段以外,数字的字段被填入 “A” 字节,并且指针字段被置为空。这个字段回复成原来泄漏出来的数值。
当shell code被执行以后,它首先查找与攻击主机的TCP连接的套接字。这个过程是通过遍历全部file descriptor并对每个发起getpeername() 调用,直到成功的找与shell code中匹配的那个TCP 端口。然后shell code向标准输入、输出和错误出口复制socket descriptor。接下去它通过以全部置0的UID调用setresuid()来尝试获取根用户(root)权限。Apache通常用root身份启动,然后使用setuid()函数切换到无权限的“apache”身份。这样的话setresuid()调用将会失败,因为setuid()与seteuid()相反,是不可逆的。shell code的制作者完全了解这个事实,然后蠕虫程序传播并不需要跟权限,因为它只需要写到/tmp文件夹中就可以。最后,一个标准的shell “/bin/sh”与execve()系统调用一起被执行。蠕虫发起一系列shell 命令把自己用UU编码形式上传到服务器上,然后解码、编译、执行自己。这种在不同平台上的源代码再编译使得辨认二进制蠕虫特征更加困难。这些操作是在/tmp文件夹下进行的,蠕虫文件被命名为类似.uubugtraq、 .bugtraq.c 和.bugtraq的样子。注意,文件名前的.是为了隐藏文件而不被简单的ls命令发现。
3.6.2 Sinit
在大部分P2P网络中都有一个中心服务器或可供联络的“种子列表”的概念,对P2P木马网络来说,这仍然是一个单点故障。另一个办法就是想随机的地址发送数据包,直到建立起一个可以通讯的端点清单。Sinit 正是用这种方式工作的。Sinit 发送的探索数据包很容易被IDS(入侵检测系统)发现。这些包使用UDP 53端口 进行发送,但它不是DNS协议包。
Sinit 使用一个基于6种类型协议包的通讯协议。每个前缀为1-6字节,最大包长为512字节。它监听UDP 53端口和UDP 随机大端口号。所有端口都相应下面的协议包:
·0x01 - Discovery 用于建立与其他感染主机的初始的通讯。 如果发送主机知道其他感染主机的信息,它就会发送这种包,同时包含它所接收到的最新的恶意软件时间戳。 当接到这种包,感染主机会响应一个 0x05包,并共享一个主机清单或推送额外的恶意软件到那些还没有更新的系统。
·0x02 - Status 这些包随着一个净荷(payload)发送。净荷表示文件传输的状态。
·0x03 - File Transfer 这些数据包含有表示文件中已经被传输的的部分的数据偏移量的信息。
·0x04 - File Request 这个包被 Sinit用来从一个拥有更新的恶意软件的远程主机上请求一个文件传输。
·0x05 - Discovery Response 这个数据包用来响应 0x01包,并且包含开始发送第一包的主机的IP地址和端口, 当 0x05包返回到达第一个主机,Sinit 试图绑定一个socket 到数据包里面的一个IP地址。这就允许Sinit检测它是否是一个 NAT设备或是在一个多宿主系统。如果绑定成功并且IP地址与Sinit认为是当前系统的IP地址不同的,它将开始向这个“外部”地址发送更多的跟新探索数据包。
·06 - EOF 这种包是在文件传输完毕时代表文件传输结束。
附加功能:
每个传输的可执行文件或DLL文件都有一个412字节的头部,这个头部包含经过字母替换密码转换的文件的时间戳。这些文件以.TMP后缀存储在Windows 系统目录下。头部还包含两个数字签名,一个给嵌入的可执行代码另一个给头部自己用。头部签名在第一个0x03号包被发送时检查,而文件签名当文件传输完毕时检查。如果第一次检查失败,则停止传输。如果第二个检测失败,则文件在被拷贝到文件系统之前从内存中被删除。如果检测通过,文件被拷贝到文件系统中。如果文件是可执行的,它必须以另一进程启动。如果是dll 文件,则在一个内存空间载入文件,并且调用这个DLL文件的”Init”函数。作为一种额外的改进,Sinit开始用数字签名来防止破坏或者被引入“外来”代码。只有掌握正确的私有密钥的人才能传播新文件给感染主机。 这有点像土匪或秘密组织中的暗号,不知道暗号的人,是无法传令的。
Sinit 也监听TCP port 53,并在有限的方式上作为web服务器。它唯一功能是向那些没有感染的主机分发代码,估计是利用浏览器的漏洞。可以发送这个URL请求,来检测主机是否感染
3.6.3 Phatbot
适者生存的法则在木马世界中得到很好的印证,随着时间的推移,更高效的Bot逐渐大量流行,导致那些二次开发者为这些Bot 提供更多的所谓“mod”的模块。一个被称为“Agobot”非常成功的Bot,现在已经被“Phatbot”所取代。Phatbot是Agobot的直系后裔,只是加入了其他来源的附加代码,这些附加代码已经使Phatbot的功能更多样也更危险。
与其祖先最大的区别在于采用了P2P协议进行通信,开发者放弃了Agobot中IRC协议和原始的P2P协议,而用WASTE(一种P2P通讯协议)代码取而代之。有意思的是WASTE中的加密部分被删除了。这也许是因为共享公共密钥成为借用WASTE的一个绊脚石。因为共享公共密钥需要手工来完成。开发者直接去掉所有加密部分而没有自己设计了一个系统用来在已感染的主机之间分发密钥(或者给所有的主机相同的公共/私有密钥对)。由于WASTE协议没有中心服务器,但是感染主机也得通过某种方法彼此发现对方。这个过程是用Gnutella 缓存服务器来实现的。任何人都可以使用这个服务器提供CGI脚本来注册成为一个Gnutella客户端。其它的Phatbot主机则从这些缓存服务器上获取客户端列表。Phatbot 的 WASTE代码将自己伪装成一个Gnutella客户端在一组URL上注册。Phatbot使用TCP 4387端口而不是标准的端口来区别自己。
为了控制整个Phatbot网络,还需要有正确的用户名密码(以MD5SUM的形式保存在Phatbot二进制代码中)。由于采用的通讯协议是WASTE,Phatbot网络最大的问题是可扩展性差,通常为10-50个节点为一组。
3.6.4 Peacomme
Peacomme 的感染方式通常是通过带有木马邮件的方式传播。木马的二进制代码具有足够的功能维持与P2P网络的通讯,以便下载二次注入的代码。感染Peacomme的主机被添加了一个叫做“wincom32。sys”的系统驱动。这个驱动被注入到Windows 进程“Services。exe”中,这个进程则作为P2P客户端下载二次注入代码。此外,Peacomme还会关闭 Windows防火墙进程,以保证与P2P网络的通讯顺利进行。为了将自己送入P2P网络,感染主机首先与联络清单上的主机进行联络。这个清单保存在%windir%\system32\wincom32。ini 中。这个清单是以硬拷贝形式存在于Peacomme代码中。但是可以被更新。为了下载二次注入代码,Peacomme使用基于Kademlia 算法的Overnet网络。加入P2P网络以后,感染主机首先搜索并获取一个用于下载二次注入代码的加密格式的URL,然后解密URL,从该URL下载二次注入的代码执行二次注入的代码,这是一种定期更新的机制。
K初始节点列表是一个弱点,如果恰巧列表上的所有节点都无法联络上,则无法加入P2P网络,而且这些节点是可以被检测到的。
3.6.5 P2P驱动的DDoS攻击
严格的说,本节所要讨论的内容已经超出了本文主题范围,但是因为P2P驱动的DDoS攻击很容易与基于P2P的僵尸网络发起的DDoS攻击混淆,所以在这里简要讨论一下。前者是利用P2P协议本身的漏洞,作为发起攻击的手段,而后者在本质上同其它僵尸网络的DDoS攻击一样,只是僵尸网络的控制使用了P2P协议。P2P驱动的DDoS攻击大致可分为以下四类:
·INDEX 投毒
很多P2P系统(不仅限于P2P文件共享系统)包含INDEX,INDEX是文件ID到文件位置(IP+Port)的映射,文件ID是文件名的hash值。欺骗主机把假冒的INDEX保存到本地的索引中,其中IP地址和端口是攻击目标的地址和端口。indexing 节点被投毒以后,当另一个节点搜索一个特定文件的位置时,它就会接收到一个来自被投毒节点的虚假的记录,进而试图从受害主机下载那个文件。首先它先与受害主机建立一个TCP连接,连接建立后,下载节点会发送一个应用层协议的消息,说明它希望下载的文件。由于无法理解这个消息,受害主机可能会忽略这个消息也许会让TCP连接挂在那里,也许关闭连接,也可能崩溃。如果很多节点试图从受害主机下载那个文件,受害主机就遭受到TCP-connection攻击。如果是每隔几分钟就自动索取文件的话,攻击的影响可能更严重。
·路由表投毒
DHT-based P2P系统,节点具有ID,这些IDs 用来把节点组织到一个覆盖范围内,每个节点都有一组邻居。在许多DHT系统中,节点有一个相对较小的邻居集合。通常是 O(log N ), N 是全部节点的数量。
节点的邻居列表组成了路由表,列表中的每个条目包含邻居的ID, IP地址和端口号。DHT中的查询消息包含一个key。 当一个节点接收(或生成)一个消息,它用这个key从路由表中来选择一个邻居转发这个消息。邻居的选择依赖于DHT。当一个节点加入系统,它建立自己的路由表,并且不断更新。当检测到一个邻居节点离开了系统,就删除路由表该邻居的条目。当发现一个新的节点(例如接收到一个查询消息),它可能增加这个节点到它自己的DHT的最高端并且实现协议的标准。
当路由表被投毒以后,攻击者的目标是欺骗其它的终端添加伪造的邻居IP地址,这个地址是攻击受害者的地址。根据DHT及其实现,可以用简单的发送宣告消息来给路由表投毒。一旦接收到宣告,节点可能会选择把这个伪造的IP地址放入路由表并转发消息到邻居节点。
当这个被投毒的节点需要通过DHT转发消息,会有很多节点被投毒,如果被投毒的节点很多,并且一个或多个伪造的IP地址被加入路由表。受害主机可能会接收到来自DHT的巨大消息洪流,受害主机对这些消息作出响应,也会阻塞它自己的上联通道。
·分隔攻击
在新节点加入系统时, 必须和系统中现有节点进行联系以获得相应的初始路由信息。这时,新节点可能被分隔到一个不正确的P2P网络中。假定一组攻击者节点已经构成了一个虚假网络,他们也运行和真实网络相同的协议,因此这个虚假网络从内部来说也是完全正确的。而且其中某些节点也可能是真实网络中的节点。这时如果新节点把这个虚假网络中的某个节点作为初始化节点,那么他将落入到这个虚假网络中去,与真实网络分隔开来。
·Query Flood
攻击者发送大量的虚假查询请求,这些查询请求会被P2P网络广播变成更多的查询请求,从而造成一定程度的拥塞。但是这种攻击如果不利用僵尸网络协同发起,攻击效果是非常有限的。
3.7 基于HTTP协议的Botnet
HTTP 协议是近年来除IRC 协议外的另一种流行的僵尸网络命令与控制协议,与IRC 协议相比,使用HTTP 协议构建僵尸网络命令与控制机制的优势包括两方面:
·僵尸网络更隐蔽,难以检测
由于IRC 协议已经是僵尸网络主流控制协议,安全业界更加关注监测IRC 通信以检测其中隐藏的僵尸网络活动,使用HTTP 协议构建控制信道则可以让僵尸网络控制流量淹没在大量的互联网Web 通信中,从而使得基于HTTP 协议的僵尸网络活动更难以被检测;
·控制信息可以绕过防火墙
大多数组织机构在网关上部署了防火墙,在很多情况下,防火墙过滤掉了非期望端口上的网络通信,IRC 协议使用的端口通常也会被过滤,而使用HTTP 协议构建控制信道一般都可以绕过防火墙。
·代码个头小,容易隐蔽
这类Bot程序除了用于攻击还用户完成对网站的欺诈点击,如果控制协议采用别协议,势必要用额外的代码实现,而采用HTTP 协议则不需要额外的代码。
目前,已知的采用HTTP 协议构建命令与控制机制的僵尸程序有Bobax、Rustock、Clickbot等。例如,Bobax 僵尸程序,它首先会访问类似“http://hostname/reg?u=ABCDEF01&v=114”的一个URL,向僵尸网络控制器发送注册请求,如果连接成功,则僵尸网络控制器将反馈这一请求,并在返回内容中包含当前攻击者对僵尸网络发出的控制命令,Bobax 僵尸程序则从返回内容中解析出命令并进行执行,Bobax 僵尸程序接受的命令包括:upd(下载并执行更新程序)、exe(执行指定的程序)、scn(使用MS04-011 破解程序扫描并感染主机)、scs(停止扩散扫描)、prj(发送垃圾邮件)、spd(报告网络连接速度)等。
3.7.1 Clickbot.A
与Bobax主要用于攻击不同,Clickbot.A 是一个以欺骗点击为目的的Botnet, 其工作原理就很复杂了,也许我们了解了它的工作原理以后都会发出这样的感叹:“挣点钱真难呀!”因为即使是投机取巧的挣钱方法,也是很不容易的。
为了理解利用欺诈点击获取不义之财的过程,首先要了解网络广告与搜索引擎之间商业模型。也就是这个产业价值链中各个角色的盈利模式。这里面涉及到以下几个概念:搜索引擎、企业联合、次级企业联合、介绍交易、着陆页面。
·搜索引擎
互联网搜索引擎提供一个带有搜索框的页面,允许用户输入查询,并返回查询结果和广告如果用户感觉查询结果或广告也许有助于找到想要的答案,用户也许会在查询结果或广告上点击,广告主按照每次点击或者每个动作付钱给搜索引擎。这里的动作可以被定义为用户访问了广告主的网站上的某个特定的“着陆页面”。“着陆页面”后面还会讲到。
如果点击并不是出于真正的兴趣,是通过开发的软件进行的点击,我们称为这个点击是欺骗的。按点击付费的广告系统可以有多种方式被滥用。我们这里介绍两种:
·一种是一个广告主频繁点击竞争对手的广告
使得竞争对手的广告预算迅速耗尽。这样竞争对手的广告就是消失。这种攻击以耗尽竞争对手的财务资源为结束,并使攻击者获得全部的合法广告点击。
·另一种类型是攻击者作为广告发布商
攻击者作为广告发布商并建立若干个“通道站点”(Doorway Site),这些通道站点包含了最终导向广告的链接,这些链接正是Clickbot.A 要点击的,通过点击广告收取那些点击的分成。
·企业联合组织
在广告企业联合组织中,广告网络(可能是靠一个搜索引擎来运营)提供一个数据反馈,其中包括一个广告的URL。例如,一个假想的搜索引擎()可能运行着一个按点击付费的网络。另外一个搜索引擎 没有自己的广告网络可能会与“假想搜索引擎”建立一种广告联合企业关系。无论什么时候, 接收到一个来自用户的查询,除了要提供搜索结果以外,它还向发送查询并接收与查询相关的广告URL。然后在搜索结果网页中显示这个广告URL,如果用户点击了广告,还可以从获得分成。
在一个次级企业联合交易中,一个联合参与者(syndicator)接受来自次级企业联合者的对广告的请求,并把请求转发到广告网络。当联合参与者接收到来自广告网络的广告URL,就会把广告的URL 提供给次级企业联合者。在效果上,这种交易中,联合参与者作为一个广告网络的代理或接力。次级企业联合从企业联合参与者那里得到广告分成。
·介绍交易
网站A向网站R付费,原因是网站R向网站A发送了流量。网站R把到达网站A的链接放到自己的页面上。在一个介绍交易中,网站A向每个由网站R上面链接引导的对网站A的访问付费。例如一个叫great的网站,每当有用户从搜索结果页面上点击这个杂志网站,杂志网站向付一笔介绍费。
·“着陆页面”
着陆页面是广告主指定的由搜索引擎导引到的一个网页。当一个用户在搜索结果页面上点击了一个广告或者一个链接(这个链接关联着一个推荐者帐号,广告主可以通过这个帐号知道这次点击是谁推荐过来的),这个用户到达了一个着陆页面。
了解了这些基本概念之后,下面看看Clickbot.A的工作流程
一旦运行了以后,首先跟Botmaster取得联系(访问 softadminxy.php? action=register& ver=0.007&id=GUID),注册成功以后,就会出现在控制界面上。注册后,客户端进一步发送get_feed请求,Botmaster 返回参数化的doorway 站点URL(?q=%s. )。


Doorway.php 脚本实现一个小型的搜索引擎,很可能是由botmaster创建的。因为脚本的名字就是doorway, 所以没有比这更好地理由把这个站点命名为Doorway。
在客户端发出搜索请求之前,它需要知道用什么词语替换%S, 为此,它首先向botmaster 发送 get_keyword请求。Botmaster 打开一个keyword.dat文件,从中随机挑选一个关键词返回给客户端。这些用来攻击的关键词大部分跟色情相关。因为很多用来doorway 的网站域名都和色情相关。
为了获得提成,Bot 运行者需要假装成次级联合搜索引擎。这样doorway 可以使Bot 运行者在申请成为次级联合者的时候看上去更像合法的搜索引擎。从攻击的另一个目的来看,Bot 运行者希望获得向色情网站推荐流量的收入提成。Doorway站点就是bot 运行者做这件事的前端。
每个搜索结果包含一个可以被点击的链接,从逆向工程的结果来看,Bot随机选择一个链接。但是在点击链接之前,会先询问Botmaster,如果成功点击,会向Botmaster 发送一个“Clicked!”(“已经点击!”)消息
重定向站点把接收到的URL作为或部分作为输入,重定向站点包含很多应用,各种记账、推荐者帐户信息剥离和其它恶意应用,通常会重定向到次级联合搜索引擎或直接重定向到色情站点。重定向到色情网站是为了直接收取流量介绍费
3.8 基于DNS协议的Botnet
基于DNS协议的Botnet,使用DNS协议传递控制命令,大致的工作流程是这样的:
1 攻击者首先建立一个恶意的DNS服务器发送和接收命令和数据
2 攻击者然后就等着计算机感染Bot程序,感染的计算机试图与连接者建立连接
3 感染计算机通过向本地DNS服务器发送DNS查询包,查找某一个地址。这个地址以服务器名的形式编码来命令,只有攻击者拥有的DNS服务器知道是什么意思。
4 本地的服务器肯定不知道这个地址,因此就会转发查询请求给其它的DNS服务器。经过一系列转发,最终会查询到那个恶意的DNS。
5 恶意服务器将相应一个消息,这个消息的格式限定在DNS协议的范围内。
6 这个消息可能含有命令也可能含有让Bot去处理的数据。
四、Botnet 的检测
从检测原理上来说,大致可以分为三类方法:
·行为特征统计分析
·bot行为仿真以监控
·流量数据特征匹配
4.1 行为特征统计分析
Botnet是一种恶意行为,拥有这些Botnet的人极不愿意让其他人登录到他的服务器中去,同时也为了防止其他黑客夺取其Botnet,他会有意地隐藏服务器的基本信息,如连入的用户数、可见的用户数、服务器内所建立的频道等,这些信息本来是需要公布给聊天者的,现在却被攻击者有意隐藏了。由于加入到Botnet服务器中的所谓用户nickname是由bot程序生成,所以这些bot的nickname 应符合一定的生成算法,也就带有了某些规律,如IP地址表示法(就是将被感染了bot程序的主机的IP地址所在国的三位缩写放在开头,然后在后面加入指定长度的随机数字,如USA|8028032,CHA|8920340)和系统表示法(将被感染bot程序的主机的系统作为开始的字母如xp、2000等,然后再在后面加上指定长度的随机数字,如xp|8034,2000|80956)。这些命名的特征可以从得到的bot源码中发现并总结出来。这些用户的 nickname的规律性和正常的IRC Server中的用户nickname的随意性是不相同的。由于Botnet中的感染bot程序的主机是在不知情的情况下被控制的,所以在没有Botnet控制者指令的条件下是不会有所行为的,所以他们的行为也会不同于正常的IRC Server中的聊天者的行为,更形象地讲他们的行为更像一个个僵尸。
僵尸网络在传播和准备发起攻击之前,都会有一些异常的行为,如发送大量的DNS查询(Botnet倾向于使用动态DNS定位C&C服务器,提高系统的健壮性和可用性)、发送大量的连接请求等等。
综上所述,可供统计的一些异常行为包括:IRC服务器隐藏信息、长时间发呆(平均回话时长3.5小时)、昵称的规律性、扫描、频繁发送大量数据包(每个客户端每秒至少发生 5~10个包)、大量陌生的DNS查询、发送攻击流量、发送垃圾邮件、同时打开大量端口、传输层流特征(flows-per-address(fpa), packets-per-flow(ppf) and bytes-per-packet(bpp) )、包大小(包大小的中值≤100Bytes)、特定的端口号(6667, 6668, 6669, 7000, 7514)
Anestis Karasaridis 等人的一篇论文[5] 描述了一种在 ISP 骨干网层面上检测和刻画僵尸网络行为的方法,由如下步骤组成:
步骤1 对 AT&T Internet Protect 底层传感器触发的事件进行聚合,识别出具有可疑行为的主机。触发事件包括以下信息:疑似活动类型、持续时间、发生在哪个个链路上。根据疑似的主机地址,分离出与疑似主机相关的流记录。
步骤2 基于缺省 IRC 服务端口、识别到集中服务器的连接以及 IRC 流量模型特征这 3 个启发式规则,识别出可能的僵尸网络命令与控制连接;
第一规则:IRC默认端口:6667,6668,7000/TCP
第二规则(对于不使用默认端口的应用):定时计算一些测度的百分比,将这些百分比值与典型的IRC通信参考模型的百分比值相比较,来确定哪些是CCC。
注:原文中这里描述的比较模糊:1 哪些测度没有说明,2 典型的IRC通信参考模型(统计特征)是什么样,也没有说明。3 检测周期是多长。
第三规则(对于不使用默认端口的应用):捕获与可以bot主机相关的流记录,用(lport,lip,rip,rport).四元组的形式将数据存贮在内存里 。数据包括流数、包数、字节数以及最后一个包的时间戳在内存中解析这些数据,并查找与IP+Port 对相关的多个 rips 或 rports生成这种相关性分析报告并保存在硬盘上来关联后面的事件
至此,我们得到了一堆CCC记录,下面对CCC记录进行分析。对CCC记录的分析分为三个部分
A) 计算一个给定的远程服务器地址/端口所拥有的疑似bot的数量,B) 计算到达远程服务器端口的流量与参考模型流量的欧氏距离,C)计算A\B两个计算过程的结果,给出一个综合评分。
步骤3 分析可能的命令与控制连接,计算出连接同一服务器的可疑僵尸主机数量、计算出可疑连接与 IRC 流量模型的相似性距离,并结合两者计算该可疑连接为僵尸网络命令与控制信道的得分;
步骤4 通过与其他数据源(如基于蜜罐技术发现的僵尸网络数据)的关联、DNS 域名验证和人工验证确认检测到的僵尸网络。
与之前工作相比,Karasaridis 等人的方法具有如下优势:
① 分析方法完全在传输层以下进行,没有涉及应用层信息,因此检测效率将更高,可在骨干网上实施; ② 基于网络流数据被动监听与分析,不涉及到隐私问题,数据也明显减少,并可以检测加密通讯的 IRC僵尸网络; ③ 误报率低,在实验中达到了2%的较好水平,同时可以量化僵尸网络的规模等信息。
Binkley等人提出了一个基于TCP扫描权重(TCP work weight)的启发式异常检测算法以检测IRC僵尸网络控制通信, w=(Ss+Fs+Rr)/Tsr
其中,Ss为发送的SYN包和SYN|ACK包数量,Fs为发送的FIN包数量,Rr为接收的RESET包数量,Tsr为全部TCP数据包数量,TCP扫描权重w为TCP控制报文数与总TCP报文数的比重。
该算法基于IRC僵尸网络中大量僵尸主机连接到同一IRC频道,并接受网络传播命令进行大量的TCP SYN扫描这一观察,按照公式(4)定义TCP扫描权重这一评价指标,并通过识别TCP扫描权重超出正常阈值的被感染IP地址及其连接的IRC频道对僵尸网络进行检测。 引起主机的高工作比重值的可能性有三个:1)扫描者; 2)某种原因造成的失去服务器连接的客户端; 3)P2P主机(通常是GUNTELLA客户端)。同时通过观察发现,比重值聚合成高端值和低端值(约为0.3%),攻击者通常落在较高的范围,P2P客户端通常落在较低的范围。
4.2 bot行为仿真及监控
利用主动式和被动式蜜罐系统获取Bot程序样本,监控Bot主机的传播方式和通讯方式,从而得到botnet的行为特征,包括感染行为:驻留系统的模式(用户模式、内核模式)安装文件、修改文件、修改注册表、对系统进程和函数的调用、键盘操作记录、对系统服务和网络服务的控制。传播行为:扫描、漏洞的利用。通信行为:IP地址、端口号、协议特征、命令。对代码特征的分析分析包括:加壳与脱壳、Shellcode、特征指令序列、文件片段。对日志的关联分析:系统日志、IPS攻击日志、流量信息记录。常用的分析方法包括:沙箱法(一种按照安全策略限制程序行为的执行环境)和蜜网在线信息收集法(常见的系统监控程序包括SEBEK、入侵检测系统)
4.3 流量数据特征匹配
采用流量数据特征匹配方法,必须充分了解僵尸程序,提取指纹信息作为IDS检测的特征。传统的IDS系统无论是基于特征还是基于异常的,都是关注入流量,并查找点对点的入侵企图的恶意特征。NIDS系统具有检测初始的入方向入侵企图。但是从这些海量的入侵告警记录中找到被感染的主机是非常艰巨和具有挑战性的任务。为了解决这个问题,入侵告警关联可以使分析人员获得对告警事件流的更概括的解释,因此可以减少噪音的问题。
这方面的研究有很多,其中一个主要的理论分支称为 “告警焊接”, 例如把类似的告警事件放在同一个标签下。最基本的目标就是减少日志,在大多数系统中,要么是基于多事件归因于一个单一的威胁,要么是提供一个针对一个单一的目标的经过整理的通用事件集的视图,我们引入了“证据追踪”的方法通过分析感染过程的通信序列来识别成功的Bot 感染,称为会话关联策略。在这个策略中, Bot 感染过程可以建模成感染主机与外部实体间一个松散顺序的通讯流。特别是所有Bot都共享同样的发生在感染周期的活动集:目标扫描、感染漏洞、二进制文件下载并执行、C&C频道建立、向外地扫描。不必假设所有这些事件都是必须的,也没有要求这些每个事件都被检测到。系统收集每个内部主机的事件踪迹找到一个满足我们对bot 检测要求的合并序列的门限。
BotHunter [7]管理器是一个基于IDS驱动的会话管理技术的具体实现。它是由Snort驱动的,它利用了Snort’s 特征引擎的全部优势,合并了一个恶意软件特征的大的集合。这些特征引擎使得系统可以产生由探索漏洞活动所引起的对话告警,代码下载、以及C&C 的服务模式。BotHunter 管理器还包括了两个Bot特征异常检测插件:SLADE 和SCADE。SLADE 实现了一个松散的N-gram 入流量净荷分析,对某种协议的字节分布差异进行分析,这种差异代表通常的入侵行为。SCADE 对流入和流出流量执行并行且互补的端口扫描分析。
BotHunter 关联器将入方向的扫描和入侵告警与出方向高度怀疑已感染主机的通讯模式关联。如果发现足够的告警序列与BotHunter 模型匹配,则生成一个完整报告,涵盖所有相关的事件和参与会话的感染主机。
参考文献
[1] honeynet project ,”Know your enemy – Tracking Botnet”
[2] Joe Stewart , “Emerging Threats : From Discovery to Protection”
[3] Lurhq Threat Intelligence Group,”Phatbot Trojan Analysis”,
[4] Lurhq Threat Intelligence Group,” Sinit P2P Trojan Analysis
[5] Anestis Karasaridis, Brian Rexroad, David Hoeflin,《Wide-scale Botnet Detection and Characterization》
[6] Binkley ,An Algorithm for Anomaly-based Botnet Detection
[7] Guofei Gu, BotHunter: Detecting Malware Infection Through IDS-Driven Dialog Correlation


【僵尸网络的工作原理与防御】转自:http://www.educity.cn/labs/477886.html

    推荐阅读