基于P2P的僵尸网络C&C设计与仿真
2015-02-17芦天亮
高 见, 芦天亮, 王 威
(中国人民公安大学网络安全保卫学院, 北京 100038)
基于P2P的僵尸网络C&C设计与仿真
高见,芦天亮,王威
(中国人民公安大学网络安全保卫学院, 北京100038)
摘要近些年来,基于P2P的僵尸网络凭借其网络通信的隐蔽性和网络连接的健壮性特点,逐渐成为国内外研究的热点。针对两层架构的P2P僵尸网络的命令控制(Command and Control 简称C&C)协议进行了深入探讨与分析,并设计了超级节点更新邻居节点的算法,超级节点分发命令算法,并将公钥加密算法应用到P2P僵尸网络的命令控制协议中,增加了僵尸网络通信的隐蔽性和网络的健壮性。同时,对该类型的僵尸网络中普通节点接收命令时的流量和超级节点转发命令时的流量进行了模拟仿真,仿真结果证明了节点的心跳流量和命令流量与用户的正常上网流量相比较而言微乎其微。最后,对该类型的P2P僵尸网络提出了防御策略的相关建议。
关键词P2P僵尸网络; 控制命令; 模拟仿真; 信息安全
0引言
在当前互联网安全研究中,僵尸网络被公认为最具威胁的攻击之一。攻击者可以利用僵尸网络实施DDos攻击,窃取用户的敏感信息和发送大量的垃圾邮件等活动,给用户带来了不小的经济损失。研究人员从未放弃过对僵尸网络的研究,虽然现在的防御措施从一定程度上缓解了僵尸网络的危害。但是,僵尸网络还在不停地发展和演变,结构从中心式到分布式,控制命令信道从IRC、HTTP到P2P协议,被感染的节点从固定主机到移动终端,僵尸网络已渐渐趋于多样化和复杂化。本文构建了一种新型的僵尸网络的架构,从而为防御者提供有效的数据,为提出有效的防护措施起到关键作用。
不同于传统的基于IRC协议和HTTP协议的中心式结构的僵尸网络,由于P2P僵尸网络分布式结构的特点,使其更难防御和检测。P2P网络模型最初也是为了方便网络自动控制机制而研究实现的[2]。但是,最终P2P协议还是应用在了僵尸网络活动中,表1列出了P2P僵尸网络的发展经历。大量的学者投入到了对P2P僵尸网络的研究中,其中Vogt等[2]将众多的小的僵尸网络组建成一个超级僵尸网络,但是对C&C服务器的选择上存在缺陷。Wang等[3]在此基础上提出了一种高级混合的P2P网络,对通信信道进行了加密,并对节点列表的创建和更新都有详细的介绍,但是没有严格的认证系统。Han等[4]提出了一个高级P2P僵尸网络的模型,并在此基础上提出了5个性能指标来评估僵尸网络,从而优化了P2P僵尸网络。
表1 P2P僵尸网络的发展
综上所述,现有的P2P僵尸网络模型存在以下不足:
(1)控制与命令信道缺少安全性和隐秘性。
(2)节点列表缺少高效的更新机制。
(3)僵尸服务器和僵尸终端的缺少合理的检验机制。
本文提出了一个新型的P2P僵尸网络的模型,属于未来僵尸网络的预测,这种僵尸网络可能带来极大的安全威胁,旨在为防御者提供一种启示,为以后制定防御措施方针指明方向。本文的主要贡献如下:
(1)介绍了僵尸网络中不同节点Super Node和Normal Node的作用和运行机制,以及超级节点类表和邻居节点列表的重要参数。
(2)提出了一种控制与命令信道的通信方式,运用了加密技术对命令进行了保护,增加了信道的隐秘性。
(3)提出了基于Hop的节点距离测量指标,将Trancert应用于普通节点到超级节点和超级节点之间的测量,增加了僵尸网络的鲁棒性。
(4)对该新型的P2P僵尸网络的模型的关键算法进行了设计,同时对僵尸网络中普通节点和超级节点在正常状态下与接收命令状态下的流量进行了模拟。
1P2P僵尸网络的模型的设计
这种新型的僵尸网络模型是基于高级P2P混合结构,包含了多角色和加密的控制与命令机制,独特的节点列表的设计和节点列表更新机制,各节点的遴选算法。有效地屏蔽了防御者的检测,增强了整个僵尸网络的鲁棒性和隐蔽性。
1.1 角色的设计
在僵尸网络的设计上,本设计充分考虑了各种的因素,如:僵尸终端的选择,角色的分工和网络环境的不断的发展和变化。网络框架如图1所示。
图1 P2P僵尸网络的网络架构
本设计共有3个角色:
(1) 攻击者(Botmaster),僵尸网络的拥有者,拥有最高的权限,制定控制与命令信息的规则,能够控制节点发起攻击和收集各个节点的信息。
(2) 超级节点(Super Node),被感染的计算机,一般性能稳定,拥有静态的公网IP地址,本设计选取教育科研机构和企事业单位的服务器作为超级节点。在超级节点这一层采用P2P协议进行通信。
(3) 普通节点(Normal Node),被感染的计算机,一般性能较差,拥有不固定IP或私网地址。本设计选取个人电脑主机作为普通节点。一般的普通节点隶属于一个或者多个超级节点,只连接一个或多个超级节点。
(4) 中转服务器(Transit Server),节点初次连接的服务器,通过中转服务器获得超级节点列表,以及自己的角色,此后节点只与超级节点联系,同时节点在连接中转服务器的时候采用动态域名技术,使其通信更加的隐秘。
(5) 结果服务器(Result Server),回收每个节点收集来的信息进行存储,结果服务器是根据每次制定的任务而临时指派的一个服务器,用来回收本次任务的结果,结果服务器可以是一个临时的邮箱,也可以是临时的FTP服务器。
超级节点是整个僵尸网络的核心层,各节点根据遴选算法选取自己的邻居节点,交换信息,根据攻击者的命令推送(PUSH)信息给各自的邻居节点,并存储普通节点发送过来的敏感信息。而普通节点与超级节点的联系并不紧密,他们只是根据程序定时到超级节点上获取(PULL)命令信息或控制信息,执行命令信息或者及时更新程序。
1.2 节点列表的设计
本节主要讨论超级节点或普通节点的节点列表的设计和更新机制,通过对节点列表的设计来辅助攻击者完成P2P僵尸网络的构建,优化网络结构,抵御防御者的检测。首先定义几个概念。
定义1超级节点个数为SbotNum,普通节点个数为CbotNum,僵尸网络的节点总数为TbotNum,TbotNum = SbotNum + CbotNum。
定义2超级节点中邻居节点的列表中节点的个数为SListNum;普通节点中超级节点的列表中节点的个数为ClistNum。
定义3超级节点的本地节点列表,每个超级节点中都存储着两个列表。列表一是记录其邻居超级节点信息的列表,定义为NeiBorList。列表二是记录曾经连接的普通节点的信息的列表,定义为ClientList。
其中邻居超级节点的信息列表NeiBorList的数据项结构为
普通节点的信息列表ClientList的数据项结构为
其中,NeiborList和SuperList中的节点个数拥有上限M和下限N,来保证节点的连通性和隐蔽性。当超级节点中的NeiborList中可用节点的个数少于N的时候,应当从其可用的邻居节点中请求其他超级节点的信息来更新自己的邻居列表。同样普通节点中的SuperList中的可用节点的个数少于N的时候,也应当从其可用的超级节点列表中的节点请求其它超级节点信息,来更新自己的超级节点的列表。
定义4普通节点的本地节点列表,每个普通节点都存储着一个记录一些超级节点的信息列表,定义为SuperList,数据项结构为:
首先,介绍超级节点的邻居节点列表中的几个参数:
(1) ID为标识节点的编号。根据机器自身的硬件配置,生成唯一标识,可以保证机器在不更换网卡的情况下,每次生成的ID号相同,同时保证两台不同机器生成的ID号不一样。
(2) IP为超级节点自身的IP地址。一般为静态的公网的IP地址。
(3) Port为超级节点用于通信的端口号。超级节点需要监听端口来和普通节点以及其他超级节点通信,本设计中,每个超级节点的Port是随机生成并非固定端口,可以避免一些入侵检测根据端口而阻断僵尸网络的流量。
(4) Pwk为超级节点的公钥,每个超级节点有一个密钥对,公钥Puk和私钥Prk,公钥用于加密,公布给其他超级节点和普通节点,而私钥则用来解密,且每个超级节点的密钥对不同。
(5) Useable当前IP是否可用的标志,表明当前IP的连通性,多次无法通信的IP地址Useable标记为FALSE。
(6) Hop从本机IP到列表中IP用Transrout探测所经过的路由器的个数,在一定程度上,反应了两个IP地域上的差距。每个节点的超级节点列表中的Hop值应当尽量的平均,来保证其邻居列表中的节点不全是本地节点或邻近节点,这样可以增加整个网络的鲁棒性。
(7) LastTime当前IP和本机通信的最新的时间。
其次,介绍超级节点的普通节点列表中的几个参数:
(1) ID为标识节点的编号,如同超级节点的编号,根据机器自身的硬件配置,生成标识该机的编号。
(2) PubIP为曾经连上来的普通节点的公有IP地址。
(3) PriIP为曾经连上来的普通节点的私有IP地址。根据公有IP地址和私有IP地址可以判断僵尸节点是否处在内网环境中,也可以判断几个僵尸节点是否处在同一内网中。
(4) FirstTime为普通节点首次连接上来的时间。
(5) LastTime为超级节点和普通节点最近连接的时间。
(6) HeartBeat为普通节点的心跳信息,记录普通节点连接该超级节点的次数。
最后,介绍普通节点的信息列表中的几个参数:
(1) ID为标识节点的编号。根据机器自身的硬件配置,生成唯一标识该机的编码。
(2) IP为超级节点的IP地址。
(3) Port为超级节点用于通信的端口号。
在技术方面,我们常见的花鸟题材主要有三种画法,“工笔”“写意”还有“兼工带写”。这三种不同的画法是的花鸟题材以不同的表现形式绽放出其独特的美感。粉彩瓷绘画与中国国画有着密不可分的联系。当花鸟画的技术进入到粉彩瓷的领域中时,使得粉彩瓷的表现形式更加多样,再加上花鸟题材的点睛作用,是的粉彩瓷焕发了别样的生机。
(4) Pwk为超级节点的密钥,普通节点用其进行该超级节点解密命令信息。
(5) Useable当前IP是否可用的标志,多次无法通信的IP地址Useable标记为false。
(6) Hop从本机IP到列表中IP用transrout探测所经过的路由器的个数,反应两个IP地域上的差距。
(7) Time普通节点与超级节点连接的次数,从而优先连接次数少的节点,使整个僵尸网络的连接达到一定的平衡。
1.3 节点列表更新机制算法
本节提出了节点列表的更新机制的算法,P2P僵尸网络的构建和运行都是一个动态的过程。需要不断地对各个节点的性能进行检测,调整网络架构,及时加入新的节点和删除失效的节点,从而有效的提高了僵尸网络的鲁棒性。
1.3.1更新邻居节点算法
超级节点在选择邻居节点时要考虑以下几个因素:①邻居节点的IP地址是否可用,如果不可用,则Useable=false,否则为Useable=true。②维持Hop的平均值,使得Hop的值尽量的平均。因此本算法对请求回来的节点重新计算Hop值,并根据Hop值排序,向邻居节点列表中添加新节点是Hop值大的和Hop值小的交替添加。③当超级节点的邻居节点中可用节点的个数大于等于上限M时程序退出。
算法1:超级节点的邻居节点列表的更新机制算法
Output: NeighborList-更新的邻居节点列表
1:T=0; ∥记录可用节点的个数
2:for(i=1;i<=n;i++)
3:{
4:if(Super[i].Useable == TURE)
∥如果超级节点的邻居节点的IP地址可用
5:T++;
6: }
7:if(T 8: { 9:for(i=1;i<=n;i++ ) 10: If(Super[i].Useable == TURE) 11: SuperList.add(RequestSuper(Super[i])); ∥向邻居节点请求新的节点加入 12:} 13:RecomputeHop();∥从新计算跳数 14:OrderByHop(SuperList);∥按照Hop进行排序 15:for(i=1,j=SuperList.Count;T<=M;i++,j-- )∥记录邻居节点列表 16:{ 17:if(i 18:{ 19:NeighborList.add(SuperList[i]); T++; ∥向邻居节点列表增加新节点 20:If(T>=M) break; ∥如果T的值达到列表上限就直接跳出循环 21:NeighborList.add(SuperList[j]); T++; ∥向邻居节点列表增加新节点 22:If(T>=M) break; ∥如果T的值达到列表上限就直接跳出循环 23:} 24: } 1.3.2更新邻居节点算法 超级节点在传播命令时要考虑以下几个因素:①超级节点在收到命令后,用私钥解密命令,如果不能解密则丢弃。②解密命令后,检查命令的执行时间,如果已经过期,则丢弃。③检查自己的命令列表中是否已经包含了该命令ID,如果已有该命令,则丢弃。④向自己邻居列表中的可用节点发送该命令,发送过程用邻居节点的公钥加密,不向发送给自己命令的节点发送命令。 算法2:超级节点的传播命令算法 Input:Order-命令 Output: NULL-无 1:Order=DecodeByPri(OrOrder) ∥获得命令后用私钥解密命令 2:if(Order. Expire == TRUE)∥命令是否过期 3: return; 4:If(OrderList.include(Order.ID)) ∥命令列表中是否已经有该命令的ID号 5:return; 6:for(i=1;i 7:{ 8:if(Neighbor[i].ID == PrevID) ∥排除上一个节点,以避免重复发送指令 9: continue; 10: SendByPwk(Neighbor[i].IP, Neighbor[i].Port, Pwk);∥用公钥加密并发送指令 11:} 12:OrderList.add(Order); ∥将命令加入命令执行列表准备执行 在整个的僵尸网络中使用公钥加密算法对命令控制协议或者文件传输进行加密,每个超级节点要保存其邻居节点的公钥Puk,每个普通节点要保存其超级节点列表中节点的公钥Puk。命令发送过程分为以下几步: (1) 攻击者随机寻找一个超级节点SuperBot[i],用该节点的公钥Puk[i]加密,将命令发送到该节点。 (2) SuperBot[i]收到命令后,用私钥Prk[i]解密,并加入自己的命令执行队列等待执行。 (3) SuperBot[i]向自己的邻居节点列表中的可用节点SuperBot[j]和SuperBot[k]发送命令,命令分别用Puk[i]和Puk[k]加密发送。 (4) SuperBot[j]和SuperBot[k]收到命令后用自己的私钥解密执行,并向自身的超级节点列表中的成员加密发送命令。 (5) 当普通节点连接到超级节点Superbot[k]上获取命令时,Superbot[k]将命令用Prk[k]加密后发送给普通节点。 (6) 普通节点接收到命令后用Puk[k]解密执行命令。 超级节点使用Push的通信方式,普通节点使用Pull的通信方式,如图2所示。 图2 P2P僵尸网络的命令与控制信道的设计 2拓扑关系仿真与分析 本节将针对该P2P僵尸网络的隐秘性进行评估和分析,检测命令发送过程中的心跳包,以及超级节点转发命令时的流量,从而验证控制与命令的信息是否能够成功的隐藏在正常的流量中。 首先检测了这种新型的P2P僵尸网络的超级节点在发送控制与命令信息时网络的流量。在实验环境中模拟了P2P僵尸网络结构,通过抓取网络流量的心跳来进行测试,僵尸节点正常浏览网页。检测结果如图3所示。其中横坐标代表了时间(S),而纵坐标代表了网络的流量。从图中可以看出,在15 s、60 s、110 s和155 s时,超级节点进行正常的存活性探测,而在160 s时,超级节点进行了命令的发送。结果是整个网络的流量非常正常,僵尸网络的控制与命令信息流量和正常的上网流量相比较来说并不显著。 图3 超级节点发送命令过程中P2P僵尸网络的流量图 使用同样的方法对普通节点的流量信息进行了测试。当电脑主机感染了僵尸病毒,就会和其他正常的应用程序一样使用网络资源进行通信,那么普通节点可以利用这一点,将自己的通信流量隐藏,如图4所示,普通节点在5 s、47 s和110 s时有通信的流量,该流量是普通节点的心跳信息(心跳时间间隔可通过僵尸节点的参数设定),但是相对于正常的流量来说,不管从流量的大小和发送的时间来讲都远远的小于正常流量。从结构来看,这种新型的P2P僵尸网络具有良好的隐秘性。 图4 普通节点发送命令过程中P2P僵尸网络的流量图 3防御政策 基于P2P的僵尸网络可以有效地防止传统僵尸网络的单点失效的情况,提高网络的健壮性。对于本文提到的双层架构的僵尸网络,从普通节点来打击僵尸网络,对整个僵尸网络的影响是很小的。因此必须从超级节点层来打击整个僵尸网络,超级节点层使用了P2P的通信结构,同时又具备网络结构的自修复能力。因此摧毁单个或多个超级节点,整个僵尸网络仍可以正常通信。在控制一些超级节点的情况下可以通过逆向分析和流量分析,来分析P2P通信协议,如果能够掌握超级节点向邻居节点请求超级节点列表的命令协议,将对摧毁整个僵尸网络起到至关重要的作用。因为可以通过递归的方法,获取整个僵尸网络中超级节点的信息和其邻居节点列表,相当于掌握了超级节点这一层的拓扑结构。 4结语 基于P2P的僵尸网络的命令控制协议大都局限于理论研究,对于P2P僵尸网络的一些重要参数并未达成一致。比如在一个固定数量的僵尸网络中,超级节点和普通节点的比例是多少为最佳;超级节点数量一定的情况下,每个超级节点的邻居节点数量的个数是多少为最佳;超级节点和普通节点数量一定的情况下,每个普通节点的超级节点数量的个数是多少为最佳;普通节点选取超级节点的重要指标依据,这些问题都是下一步研究的重要内容。 参考文献 [1]冉宏敏,柴胜,冯铁,等.P2P僵尸网络研究[J].计算机应用研究,2010,27(10):3628-3632. [2]Vogt R, Aycock J, Jacobson Jr MJ, editors. Army of Botnets[C]. Proceedings of the 14th Annual Network and Distributed System Security Symposium, 2007. [3]Wang P, Sparks S, Zou CC. An Advanced Hybrid Peer-to-peer Botnet[C]. Dependable and Secure Computing, IEEE Transactions on,2010,7(2): 113-127. [4]Han Q, Yu W, Zhang Y, Zhao Z. Modeling and Evaluating of Typical Advanced Peer-to-peer Botnet[J]. Performance Evaluation, 2014,72:1-15. [5]Napster Website[EB/OL].[2014-10-10].http:∥www.napster.com. [6]Phatbot Trojan Analysis[EB/OL]. [2014-10-6]. http:∥en.wikipedia.org/wiki/Zeus (trojan horse). [7]Zeus Botnet[EB/OL].[2014-9-1]. http:∥en.wikipedia.org/wiki/Zeus (trojan horse). [8]Zero Access[EB/OL].[2014-10-15]. http:∥en.wikipedia.org/wiki/ZeroAccess_botnet. [9]Mayhem-a Hidden Threat for Web Servers Available[EB/OL].(2014-10-20). https:∥www.virusbtn.com/blog/2014/07_17.xml. (责任编辑陈小明) 作者简介高见(1982—),男,山东菏泽人,讲师,博士。主要研究方向为网络安全。 基金项目国家自然科学基金青年科学基金项目(71203229)。 中图分类号D035.3931.4 命令控制信道的设计
2.1 超级节点命令发送的评估
2.2 普通节点命令发送的评估