一:传统集中式botnet(如IRC)构建容易、能高效的分发控制者命令,但存在单点失效的问题,一旦服务器被关闭,会因失去与控制者的联系而灭亡,防御者也可以通过构建一个欺骗者加入特定的频道而监视整个botnet。P2P僵尸网络没有了这种单点服务器问题P2P botnets are more robust and are more difficult for the security community to defend.
Grizzard et al. [18.4] and Holz et al. [18.5]分别对Trojan.Peacomm进行了详尽剖析,但是有效的抵抗P2P僵尸网络仅仅列举抓到的botnet程序师不够的。我们给予一个系统的比较和分析,主要关注两方面:僵尸网络的构建和CC发布机制。2.提出度量僵尸网络性能的机制3.提出一些对抗方式4.我们获得一个有悖常理的发现:与传统的集中式僵尸网络相比,通过使用“Index poisoning(索引中毒)”技术,one canmore easily shut down or at least effectively mitigate P2P botnets that adopt existing P2P protocols and rely on the file index to disseminate commands.可以更轻易的关闭至少监视使用现有的P2P协议和通过文件索引来分发控制命令的僵尸网络。
18.2 Background on P2P Networks
P2P网络是两个或者更多的电脑通过直接互联共享资源,而不用去管理集中资源的服务器或者权威处下载的网络。目前最大的用处是共享文件,很多应用如eMule, Lime Wire,and BitTorrent.here are two categories of overlay network centralization (有两种在集中式网络上的覆盖P2P网络?):
1.Centralized Architectures有一个集中式服务器来管理元数据的名单和路由信息,处理文件搜索请求协调节点之间的下载。Napster是第一个大范围使用的P2P文件共享应用,使用这种集中式的管理。中心接收节点的搜索、浏览和文件传输请求,给出响应,但不实际的传输文件,很显然这种集中式的站点存在单点失效和限制了网络的扩展规模和韧性。
2Decentralized Architectures
这种结构的P2P应用没有中心服务器,所有的请求都在网络节点之间处理。在纯粹的分布式结构中,所有的节点都是表现的完全一样,节点在处理一个文件搜索请求的时候表现为一个服务器,在请求文件时表现为一个客户端,但在半分布式P2P网络中,拥有更强的计算能力和网络带宽的机器被选举为一个“superpeers,” 在网络中表现出更重要的地位,Gnutella是一个半分布式P2P网络,一个普通节点(叶子节点)至少链接一个超级节点,只能发送请求到这些超级节点。一个超级节点保存一份在自己的叶子节点能够得到的文件的hash值表。只有超级节点转发消息,因此从叶子节点的视角一个超级节点表现为一个本地服务器。
也可以被分为结构化的P2P网络和非结构化的网络。
(另一种分类方法:结构化、非结构化)在无结构的网络中,文件的位置与网络拓扑完全不相联系,一个请求通常传播遍全网,或者以深度优先、广度优先传播,知道一个请求命中,或者请求消亡。Gnutella是非结构化的,超级节点向邻居超级节点传播请求,命中后回按照原路径返回。在结构化的P2P网络中,文件的物理位置和标示符之间会建立一个映像,通常会建立一个路由的分散hash表。CAN, Chord, Pastry, and Tapestry were the first four DHTs introduced in academia. Kademlia [18.9] is another DHT algorithm, and has been used in Overnet, eMule and BitTorrent.
18.3 P2P Botnet Construction
将botnet的创建分两步:第一步需要侵入大量因特网主机以便自己远程控制,可以通过蠕虫、木马、恶意即时信息软件等。第二步通过这些被感染的主机构建botnet。在这种P2P文件交易中,由于缺少一个中心的管理者,很难保证交易的文件不是恶毒的。因此这种网络成为恶意软件传播的理想场地,攻击者很简单就可以攻击P2P网络中的主机构建自己的的恶意僵尸网络大军。
很多类型的P2P恶意软件被曝光,如Gnuman,VBS.Gnutella,andSdDrop。将其分为两类,一类称为主动的、一类是被动的。主动的蠕虫会尝试感染自己的列表中的主机,而不是盲目的随机扫描,列表可以是先前接触过的主机、或者发送一个查询获得的回应的主机。被动的蠕虫复制自己到主机定居在本地文件共享目录中,拥有一个通常的名字,期待别人主动来下载运行它们,以此感染其他主机。一旦一个P2P网络中的主机被感染,不许其他加入步骤即可变为一个bot,这是因为botnet本身就存在与这个P2P网络中,bots之间可以互相发现交流通过当前的P2P协议,到此时为止,botnet的构建已经完成,可以接收控制者的控制。将这种botnet称为“寄生虫 P2P botnet ”。但是这种botnet的规模受限与这个P2P网络中存在的脆弱主机的数量。因此对于P2Pbotnet控制者来说不够灵活,大大减少了潜在的bots主机候选者。因此我们见到的botnet并不把自己局限在已有的P2P网络中。而是通过一切可能的传播媒介在全网中招募新成员,如通过E-Mail、即使信息、文件传输。For this type of P2P botnet, upon infection, the most important thing is to let newly compromised computers join in the network and connect with other bots, regardless of whether the connection is direct or indirect. 对于这类botnet,一旦感染新主机,最重要的事情是使新感染主机加入到网络中与其它bot建立联系,无论链接是直接的还是间接的。否则就构成了一个在网络中无法被控制者使用的孤立点。下面讲述如何将感染主机构建botnet。
18.3.2 Forming a Botnet
对于建立在现有P2P协议上的botnet在感染主机后不需要自主构建网络,但是如果是在全网中随机选择主机,那么该主机需要知道如何找到并加入该botnet。正如我们知道的,目前的P2P文件共享网络提供两种加入网络的常规方法:1。一个初始的节点列表被硬编码在P2P客户端,当一个新的节点登录时,会尝试链接这些初始节点来更新自己的邻居节点信息。2.有一个共享的网络服务缓存,例如gnutella的缓存,存储在互联网上的某处,客户端获知存储位置,如此,新的节点更新自己的邻居信息通过到这些服务器缓存中请求最近的更新。
这种开始的寻找加入p2P网络的步骤通常被称为“bootstrap”(引导接入)它能够被直接应用在P2P僵尸网络中,无论是预先决定的节点列表还是预先决定的缓存服务器都需要事先硬编码在bot客程序中。然后一个新被感染的主机能够知道自己应该联系那个节点或者至少知道从何处获得自己等会要联系的节点的地址信息。
例如:, Trojan.Peacomm和Stormnet 使用初始节点列表引导接入。初始节点列表被存放在本地的配置文件中。(这是一个新鲜点)。但是这种引导接入是一件脆弱的事,容易造成botnet的单点故障,一旦这个初始节点列表或者缓存服务器被捕获,检测者可能通过简单的关闭这个缓存服务器或者这些初始引导节点来抑制botnet的扩散。从这点可以看出虽然一个寄生式botnet对于bots候选者存在限制,但是它没有这种因为引导接入的脆弱性。
为了解决这种脆弱性问题,hybrid P2P文章提出:当主机A感染一个脆弱主机B时,A传递自己的节点列表到B,B将A加入自己的节点列表。互相建立连接的节点交换自己的列表。(此处与我看到不符,文献中实际指出,如果节点之间互相交换列表,监控者可以通过在网络中引入一个蜜罐,主动与其它节点交换信息,以此来发现整个网络,所以作者指出,节点的列表通过一个sensor来进行更新,所有节点向sensor报告自己的列表并从sensor上随机取走部分列表。sensor的选取和控制变得至关重要)如此P2Pbotnet避免了初始引导接入问题。
18.4 P2P Botnet C&CMechanisms
CC(conmand and control)机制是botnet最重要的部分。直接决定了整个botnet的拓扑,从而影响了botnet在对抗网络/主机故障、安全监测时的鲁棒性,传统IRC协议botnet被当做集中式的botnet因为他们有一些服务器,所有bot链接到服务器,并从上获取指令。P2P协议的botnet命令获取的模式是基于P2P的,也就没有中心式的服务器。每个bot节点即表现为一个命令分发服务器,又表现为一个执行命令的客户端。这解释了为什么P2Pbotnet在对抗安全人员时比传统集中式botnet更有弹性。
CC机制可以被分为推式和拉式机制。拉式也被称为“命令推送/订阅”指bots主动从控制者指定的地方获取命令。推式指bots被动的等待控制命令的到来,然后他们会将命令传播给其它bots。
对于集中式botnets,如HTTP使用拉式命令分发,通常一个控制者将命令发布在一个web页面上,bots周期性的访问该页面来检测是否有命令到来。这个web页面的地址在bots程序中编码能够在后续命令中更改。一个IRC协议是另一个采用拉式的例子,bot周期性的链接指定的服务器频道。等待控制者的指令(此处我不认同,大多数文献还是认为IRC协议botnet是属于推式命令分发,因为bot并不是周期行登录服务器,而是登录服务器之后就一直存在其上,静默时采用Ping/Pong命令与服务器保持链接,一旦控制者发布指令,服务器将指令推送给bots,bots执行指令)
正如18.3所示,吸血鬼和寄生式botnet可以通过现有P2P协议进行通信,可以简单依赖这些协议。但是纯粹bots的P2Pbotent不建立在任何现有的P2P协议之上,控制者可以灵活的选择引入现有的P2P协议或者自己定义一个新的交互机制。
18.4.1 Leveraging Existing P2P Protocols
在P2P文件共享系统中 ,一个节点发送查找文件的请求,这个请求会根据网络应用定义的路由策略传遍全网。如果某个节点拥有被查询的文件,接到查询后会给出响应,很容易的可以应用这种思想并将它应用在botnet的cc交流。对于寄生式botnet,控制者可以随机的选择一个或者更多bots发布命令,就像使用一个正常节点宣称自己自已有一个可用的文件,这个所需文件的标题需要事先决定,或者能够根据某种硬编码在bot程序中的机制进行计算,其它bot将知道查询哪个文件以获取命令,一旦一个请求这个特殊文件的请求到达拥有命令的bot节点一个请求命中将会被送回,命令可以直接编码在请求命中消息中,或者请求命中仅仅包含命令被发布的地址。后一种情况,当请求的bot获得请求命中回复后,可以到指定的地点获取命令。这里,需要封装特殊的请求命令而不是简单的文件搜索请求。
像Napster这种集中式的P2P网络中,拥有一个集中服务器,来管理所有的文件目录,提供文件搜索和下载请求的支持。如果P2Pbotnet 的cc命令依赖这种形式,中心服务器就会变成bot请求获取命令的唯一点,显然这种cc模式是集中式的,这种botnet降低为一个集中式botnet。
有两种非集中化的P2P网络,结构化的和非结构化,Gnutella是一个两层的非结构化P2P网络,只有超级节点能够传播请求,管理自己叶子节点的文件目录。当请求到达一个一个超级节点,它会将请求传递给自己所有的邻居超级节点,和自己的叶子节点。覆盖网络是一个基于DHT的结构化的P2P网络,一个关于文件哈希值得请求仅仅被传送到节点ID值与文件哈希值相近的节点。
我们没有见过构建在非结构化的P2Pbonet,但是P2Pbotnets已经有建立在结构化的基于DHT的网络上,如Peacomm和stormnet。
这种网络的CC机制很简单,他们即使用标准的覆盖网络协议来管理自己的成员。每个bot periodically queries a search key ,这个search key是由内置的算法计算出。该算法计算当前的日期和一个随机的0-31的数作为输入,如此,当发布一个命令时,控制者需要在32个不同的keys下发布。这种方式并不够有弹性,一旦bot程序被捕获,很容易计算出查询请求生成的算法,或者观察到之前bot的请求,这种cc控制使防御者能够监控或者扰乱一小部分控制的交流频道。
Push Mechanism – Command Forwarding
推式指控制者发布一个命令给部分bots,这些bots能够主动的将命令传播给其他bot,如此,bots能够避免周期性的查询和检查新命令的到来,减少被监控的可能性。有两个主要问题需要考虑:
bot将命令传递给谁?如何传递?使用一个in-band message(普通的P2P流)或者out of-band message (non-P2P traffic)?
第一个问题最简单的方法是让bot将自己的邻居节点作为目标。但是弱点是信息的交流可能比较慢甚至有时会断掉,因为一个bot拥有很少的邻居。一个解决办法是让节点发布一个文件查询请求,向那些给出响应的节点传播命令。(此处是否可以让每个服务器节点连接多个其它M个服务器节点,并在连接节点断开时向其他服务器节点发起链接,保持M个链接。参考KN近邻问题,保证每个节点都能够被连接到。试验下命令分发的速度,和部分节点断网后的鲁棒性)
在一个吸血鬼或者寄生式botnet,在邻居列表中的节点可能不是bot成员,因此存在可能命令没有被传播给任何bot,为了解决这个问题,控制者需要设计一些策略来增加命令命中一个真实的bot的机会,例如,当一个主机被感染为一个bot后他可以声称自己有些流行的文件。当一个bot试图传播命令时,可以先尝试查询这些常用文件,并将命令传播给那些出现在查询结果中的节点。这些预设的流行文件表现为botnet的口号。这种机制增加了命令传播的机会,但是可能给监控者一个线索来识别bots。
对与第二个问题,使用一个带内还是带外信息来传递命令取决于目标列表的节点是什么。如果一个bot仅仅以自己的邻居节点为目标,带内的消息就可以。bot可以将一条命令仅仅当做一个常规的查询消息,并将它发送给自己所有的邻居节点,依赖于这些邻居节点将消息发送给所有的bots。对于善良的节点可能将这个请求当做常规请求,但是对于bot可能将其翻译为一个控制指令。这种机制很容易实现,而且难于被监控,因为命令传播的流跟普通查询流相互混合,另一方面,如果这种目标列表是通过其他方式生成的,入职前讨论的基于文件请求结果,一个bot必须与使用一个带外的消息与这些节点联系:bot直接联系目标节点,编码命令在一个秘密的频道仅仅能被bot成员解密。显然带外的流很容易被监视,因此会泄露发起这些流的bots的标识。因此,在botnet的设计中,控制者总是面临权衡效率和抗检测。
以上主要集中在非结构化P2P网络,查询消息被以洪泛发往全网,在结构化P2P网络中,查询消息仅仅被被发送到节点ID与文件哈希值相近的节点,意味着一个对于特定哈希值得查询总是被送到相同的节点群。因此对于一个相同命令,bot产生不同的哈希值会更高效,在这种方式中,一个命令会被送往网络中的不同的parts,使得更多的节点接收到命令。
18.4.2 Design of a New Communication Protocol
使用现有的P2P协议构建botnet的cc交互频道简单方便。但是一个人即使可以利用一个协议中的好的方面,继承的缺陷可能会限制botnet的设计和表现。相反,如果botnet使用新的交互协议会变得更加灵活,在这部分给出两个自主设计的P2Pbotnet协议例子:
正如在18.3所说,如果一个botnet依赖于现有的P2P协议进行CC交互,引导接入过程就必不可少, hybrid P2P 有效的避免了引导接入,通过在一个节点感染另一个节点时传递自己的列表给对方,并在相互交互时交换节点列表(前文说了此处错误,节点之间并不交换他们的列表,另一批文献superbot通过A感染B时将自己的列表传递给B,并在C重新感染B时C将自己节点列表传给B,B进行列表随机替换)。此外为了更好的平衡节点之间的链接度,控制者可以要求节点从sensor上更新自己的节点列表。包括拉式和推式的机制被应用,当一个节点接到一个名令,会尝试将其发送给自己的节点列表中的节点(推式),对于那些不能接受链接的节点,如拥有似有IP或者防火墙之后的节点,会周期性的链接其节点列表中的节点来尝试获取命令(拉式)
he army of botnets, i.e. super botnet, (另一篇牛 *文献)指出采用区域自治策略,一个大的botent是有很多小型的集中式的botnets构建,每一个cc服务器拥有到达特定数量的其它cc服务器的路由,当一个cc服务器接收到一个命令时,会将命令发送给自己的路由中的其它服务器,同时,在自己的小botnet中的节点周期性的登录cc服务器获取命令。设计一个新兴的P2P协议botnet缺陷是新的协议没有被测试过,可能会因为出问题而失效。
18.5 Measuring P2P Botnets
除了botnet传播和交互策略,botnet性能是对于控制者和监控者另一个重要的问题。
-成效:当发动一个攻击时能够有多大能力
-效率:一个命令被发布后多久可以传播到botnet的绝大部分。
-健壮性:当部分主机被移除后网络的弹性
此外我们给出跟当前的Gnutella网络可用的统计学的联系。
18.5.1 Efectiveness
bot的攻击能力与其规模相关,因此botnet 的size成为一个重要的度量。My botnet is bigger than yours 文献指出botnet的规模很难定义,有人将其定义为目前在线的bots数量,有人将其定义为全部曾经登录过的主机数量,两者都能显示botnet的能力。The Gnutella crawler Cruiser,能够抓取Gnutella网络中几分钟内的一个短照,包含顶层的超级节点和遗传节点。2008年5月27日的近照显示。爬行的节点总数约为45万,我们可以定义Gnutell的节点总数为45万*n(n代表平均每个超级节点管理多少个叶子节点),这种方法过高的估计了节点数,因为一个叶子节点可能连接到多个超级节点,然而,如果一个寄生式P2Pbotnet是建立在这种Gnutella式的网络之上,这个数量会成为该botnet的上限。关于storm botnet的规模估计变化范围很大,从几百万到1千万(甚至看过文献估计为5千万,恐怖,据传其竟有自主反击能力),研究人员估计现在在线的storm节点数在5000到4万之间。
对于寄生式的botnet,规模受限与存在的P2P网络规模,吸血鬼式和纯bot式取决于何时控制者阻止botnets组建和网络中脆弱主机的数量。
18.5.2 Eiciency
效率指控制者发布指令后经过多少时间网络中大部分主机都可以接收到指令,在集中式botnet,命令的分发由CC服务器保证,但是在P2P网络中,效率有一些因素决定:
如果botnet建立在一个消息和它的目的点之间没有关联的网络中,那么一对节点之间的距离将会是很好的测量标准,非结构化的P2Pbotnet都是这种策略。
考虑Gnutella-based P2P botnets因为只有超级节点传递消息,定义D(x,y)为x,y两个超级节点之间的距离,在Gnutella网络中,每个搜索请求有一个存活时间,定义为它能传播的跳数,因此两个超级节点bots之间的距离决定了是否每一个bot都能接到控制指令,根据Gnutella网络的探测,发现一对超级节点之间的距离大概为5,正好为大部分gnutella客户端设置的消息传播阈值。如Limewire设置为7,意味着控制者发布消息后大部分bots能够迅速得到命令。
betweenness:定义为节点对之间最短路径中穿过I的总数(如果一个成员位于其他成员的多条最短路上,那么该成员就是核心成员,就具有较大的中间度核心性。)如果命令在一个拥有高介数的节点发布,会更快的传遍全网。
18.5.3 Robustness
节点的度分布和聚类系数是很好的度量稳固性的措施。节点度分布为网络中节点的链接平衡性,平衡性越高,稳定性越好,聚类系数指定一个节点的邻居之间互联性。he clustering coefficient of a node ci isdefined as the ratio between the number of edges Ni among the neighbors of a node i of degree ki and the maximum number of possible edges ki (ki + 1)2.
Peer-to-Peer Botnets P2P僵尸网络---Ping Wang, Baber Aslam, and Clif C. Zou
最新推荐文章于 2024-03-04 11:03:09 发布
本文深入探讨了P2P僵尸网络的构建原理、CC机制及其与传统集中式botnet的区别,着重分析了P2P僵尸网络的优势与挑战。文中详细介绍了如何通过‘Indexpoisoning’技术更有效地关闭或减轻使用现有P2P协议的P2P僵尸网络的影响,以及如何设计系统性比较和分析僵尸网络的构建与CC发布机制,提出了度量僵尸网络性能的机制和对抗方式。
摘要由CSDN通过智能技术生成