P2P僵尸网络深度追踪——Mozi(三)

2021-07-28 6,142

菜鸟如何一步步成为一位优秀的情报收集者。

Mozi(一)传送带:https://www.secpulse.com/archives/158575.html

Mozi(二)传送带:https://www.secpulse.com/archives/159403.html

炎炎夏日,空调房和冰西瓜是打工人最大的安慰,上一篇的瓜各位吃得开心吗?

1.jpg

再大的瓜田也会有无瓜可吃的一天,Mozi节点数量多、增长快,如果只在一个指定范围内的二叉树中顺藤摸瓜,不免是冰山一角。为了解决这个问题,需要在上篇提到的技术方法的基础上结合本篇文章介绍的探测技术,两种方法相互支持。

本文首先由一个故事趣味引入诱捕探测器的工作流程,然后展开讲解探测器的工作原理,最后利用loT蜜罐测试探测器的覆盖率,并将两种探测技术进行对比。

PS:截止6月30日,我们探测到的历史感染Mozi节点数量为162,其中中国有92,占比约为57%。知微实验室致力于物联网安全研究,希望与各位安全同行一起交流合作,助力物联网安全。

一、墨子任务

作为间谍学院2020届优秀毕业生的你被选拔进入国家情报局,但是整日打杂做琐事,满怀壮志却始终没有机会施展,眼看着同一批加入的同事一个个被外派任务不免有些泄气。某日,局长突然把你叫进办公室,递给你寥寥无几的几页资料,只见第一页上写着——“墨子任务”。

局长:“这是去年底新发现的犯罪组织,目前还处于初期发展同伙阶段,但是他们扩展速度极快,威胁性不可估量,我知道你一直想有个机会证明自己,现在机会来了,但是相关资料很少,需要你自己去收集情报,此次任务代号是‘墨子’。”

你抑制住上扬的嘴角,答道:“收到,保证完成任务!”

回到局里给新人安排的简陋工位,你开始认真研究这几页资料,连呼吸仿佛都变得沉重……

资料显示,这个组织隐匿性极强,仅从表面无法分辨出来,且有一套完整的发展同伙流程:

组织内部没有上下级关系,每个人都做着相同的事

每个成员只对自己附近的特定人士洗脑

新人入伙后会立刻向一个指定的地点汇报新人信息,然后与附近同伙交换信息

新人会等待组织里的其他人暗中传递核心文件,至此完成一次完整的发展同伙流程。

组织里的人口流动性很大,里面的人随时都可以被清除记忆后被组织抛弃,为了隐藏身份,同伙之间都会使用暗号与握手动作掩人耳目完成接头。

1.1 伪造身份

局长提供的资料实在是太少了,怎么获取更多情报?有了!不入虎穴焉得虎子,得想办法混进去。间谍学院最基本的一堂课就是“身份伪造”,在情报局的身份库中选取“打工人”身份,这样的角色在生活中是最常见、最辛苦、精神力量大多脆弱,很容易被感染。

你迅速给自己伪造了几个他们“熟悉”的身份。

1.2 故意试探

既然这个组织发展同伙范围是每个人自己附近的区域,如果提前得知一些他们同伙的具体位置信息,主动出击接近他们,岂不是可以更快接近他们?你突然想到局长资料的最后一页提供了一些当时发现这个犯罪组织时侦察到的一些他们同伙的信息,决定分别使用一个新身份接近其中一个罪犯。

c0rpse?竟然是他!看着这熟悉的名字,你想起几天前小区“八卦的阿姨们”说22楼新搬来了个戴黑框眼镜看起来有些孤僻高冷的住户就叫这个名字,当时你还笑这名字奇怪。看来,从他身上入手是个好方法。

“嗨,你是新搬来的吗,好像以前没见过你?”这搭话实在是太尴尬,但是你辛苦蹲了三天终于蹲到和c0rpse两人单独乘电梯的机会不能错过了。

果然,他看了你一眼,点了下头就当是回答。

“我叫j4m1e,是24楼的……”果然又尬住了,“你最近是在忙什么吗?这么晚才回来,真辛苦啊!呃……挺羡慕你的,你们公司还缺人吗,我也想找些事做……看我种话痨性格估计只能找那种chuan|xiao之类的专门给人洗脑哈哈哈,噢抱歉我不该说这种话,实在是最近犯罪小说看多了暂时还没缓过来。但是这种很有趣啊,不是吗?”

他又看了你一眼,这次是带有些许考究意味的眼神。难道……上钩了?

“你……lWXy4CygN4M/w8sCsNHkXg==?”电梯上升到20楼时他终于开口了。

“123456-01。是的,我和你一样。”试探成功!你收敛笑容,朝他伸出右手,“那现在我们可以握手了吗?”

1.3 守株待兔

看着锅里开水“咕噜咕噜”煮着泡面,回想起刚才电梯里的场景,你心情大好,从冰箱里拿出两个鸡蛋打进锅里。接下来就等着c0rpse和他同伙通信,把你的位置信息扩散出去,让更多隐藏着的同伙知道你的存在从而主动联系你,这样,获取信息岂不易如反掌?虽然目前不知那传递的核心文件是什么,一切很快会水落石出。

1.4 初见成效

距离那次与c0rpse电梯接头成功已经过去半年,听说之后没过多久他就搬走了。在这半年中,每天都有很多同伙“送上门来”,核心文件也早就备份给局里交给同事研究了,你就专心混迹在组织中,不断套取同伙的信息悉数记录。虽然记录的同伙越多越有利于一网打尽,但这组织影响过的普通百姓数量日益剧增,必须要尽快找到办法控制住它。

根据这段时间的观察,这个犯罪组织好似新冠病毒,易感人群集中在某几类上,感染时可能没有任何征兆,也有很大概率可以恢复正常,但是如果任其肆虐,后果不堪设想。想到这里,你决定立刻回局里找局长……

二、诱捕探测技术(绝密间谍任务)

恭喜你完成本实验设计的“间谍养成游戏1.0”,对第二种探测技术的过程是否大致了解了呢?接下来是该探测技术的原理介绍。

我们提出的是一种类似间谍的诱捕探测技术来对Mozi P2P 型僵尸网络进行分析的方法,批量获取活跃Mozi节点信息、数据库保存所有探测数据等。该方法可极大地提升P2P型僵尸网络的扫描速率,同时结合loT蜜罐技术互相验证扫描结果的准确性。图1为扫描器整体框架示意图,整个Mozi 扫描框架分为诱捕探测器、已知Mozi网络和未知Mozi网络

2.png

图1. 扫描器整体框架图

2.1 路由扩散

已知Mozi网络未知Mozi网络之间是遵循P2P网络的Kademlia协议进行路由扩散。

K-桶(路由表)刷新原理:

  1. 主动收集节点:任何节点都可以主动发起“查询节点”的请求(对应于协议类型 FIND_NODE),从而刷新 K 桶中的节点信息。

  2. 被动收集节点:如果收到其它节点发来的请求(协议类型 FIND_NODE 或 FIND_VALUE),会把对方的 ID 加入自己的某个 K 桶中。

  3. 探测失效节点:

Kademlia协议还支持一种探测机制(协议类型 PING),可以判断某个 ID 的节点是否在线。因此就可以定期探测路由表中的每一个节点,然后把下线的节点从路由表中删除。

find_node(查找节点)被用来查找给定ID的node的联系信息。find_node请求包含2个参数,第一个参数是ID,包含了请求节点的节点ID。第二个参数是目标target,包含了请求者正在查找的目标节点的节点ID。当一个节点接收到了find_node的请求,他应该给出对应的回复,回复中包含2个关键字:ID和nodes,nodes是一个字符串类型,包含了被请求节点的路由表中最接近目标节点的K(8)个最接近的nodes的联系信息。find_node过程距离如图2

3.png

图2. find_node过程举例

2.2 探测原理

探测器的探测原理如下:

随机生成一些ip伪装成Mozi节点隐匿于正常P2P网络中;

这些伪Mozi节点从信息记录表中获取批量真实的Mozi节点信息(由若干IP和Port组成),然后向这些真实Mozi节点发送基于Mozi协议的find_node数据包(添加Mozi认证四字节数据)。即图1中探测器向已知Mozi网络发送Mozi请求。

伪节点向真实节点发送find_node数据包的过程实际上是向网络中任一节点N发起一个find_node请求,请求的ID是自己,N收到该请求之后,会先把伪节点的ID加入自己的某个 K 桶中。然后,根据 FIND_NODE 协议的约定,N会找到K个最接近伪节点的节点返回给该伪节点,伪节点即可填充自己的路由表,然后通过路由扩散原理向整个Mozi僵尸网络扩散自己的节点信息;

由于P2P网络特性,真实节点可能会将伪节点的节点信息发送给其他Mozi节点,使得其他Mozi节点可能存在一定几率向伪节点发送相应的DHT数据包,伪节点再验证这些数据包是否能通过Mozi节点验证算法,如通过,则会记录下Mozi节点ID、IP及其端口信息,并将相应的IP和端口信息添加至Mozi节点信息记录表中。

然后,通过已知Mozi节点的K-桶信息继续发现新的Mozi节点。根据DHT的查找节点原理,每个Mozi节点的K-桶中都包含大量其他邻居Mozi节点信息,因此读取K-桶信息会大大加快未知Mozi节点探测速度,呈倍增趋势。

4.png

2.3 探测器具体实现步骤

1、构建多个扫描节点(可在本地或者vps上);

2、在vps上运行一个扫描任务分发程序(这里我们直接使用redis构建了一个扫描任务分发队列),扫描节点直接从redis中拉取扫描任务;

3、扫描任务实际上就是由若干IP:Port组成的数据集,该数据集实际上是Mozi节点的IP地址和P2P服务开放的端口;

4、获得扫描结果后,将结果暂存到中间服务器中,最后由相应的程序写入到Mongo DB数据库中。

注意: 网络带宽会影响到扫描结果,因此尽可能选择带宽大的地方。

三、loT蜜罐测试

我们借助loT蜜罐测试诱捕探测器结果的覆盖率。loT蜜罐是通过模拟Mozi网络中常用到的漏洞来吸引Mozi的攻击,从而获取相应的Mozi传播的URL地址。同时,该蜜罐可给诱捕探测提供初始Mozi节点。

3.1 验证原理

由于loT蜜罐是纯粹的被动探测,与我们的诱捕探测技术是完全相互独立的两种探测方式,因此可以将蜜罐获取的Mozi节点看作整个Mozi网络的随机取样,即缩小样本规模。然后在采用诱捕探测技术获取的节点库中寻找重复节点,将重复节点的出现概率记作“重合度”:

重合度=(诱捕探测和蜜罐收集结果数量的交集)/蜜罐收集数量

重复度可以作为衡量我们探测技术准确度的指标。

3.2 结果分析

我们选取了时间2021年3月28日至4月9日共13日扫描节点数据(每日Mozi网络活跃的IP数量)进行分析,数据如表1所示:

表1. 9日扫描节点数据

4.5.png

5.png

图3.扫描结果9日走势

6.png

图4.重合度9日走势

根据上表绘制图3图4走势图。数据显示,我们的诱捕探测结果与loT蜜罐结果的重复节点数量极多,重合度极高。

但是,诱捕探测得到的Mozi网络IP数量远大于蜜罐所得IP数量,是因为蜜罐所得数据是开放了HTTP服务下载的Mozi节点,而诱捕探测是针对能够进行P2P网络通信的Mozi节点,事实上开放HTTP 服务的Mozi节点很容易被安全专家发现并阻断通信,因此诱捕探测所得到的Mozi节点数量远大于蜜罐收集的数量。

四、两种探测技术对比

我们称上一篇文章Mozi(二)所介绍的渐进式节点主动追踪装置为“探测技术1”,称本文介绍的方法为“探测技术2”。两种探测技术原理不同,因此探测结果可看成是相互独立的。

我们取探测技术1所得三日活跃Mozi节点所在IP作为整个Mozi网络的随机样本,取探测技术2所得历史存量节点所在IP(即曾被感染过的节点总量)为参照样本,将两个样本内容做比对,计算重合度,具体数据见表2

表2.两种探测技术数据对比


2021/6/21

2021/6/22

2021/6/23

2021/6/24

2021/6/25

探测技术1(三日活跃IP)

43,483

43,355

43,643

43,812

42,856

探测技术2(历史存量IP)

1,583,768

1,587,200

1,592,032

1,596,239

1,610,720

重复IP

43,483

43,327

43,588

43,545

42,613

重合度

100%

99.94%

99.87%

99.39%

99.43%

两种探测技术的优缺点对比于表3,我们通过技术2发现新前缀,再利用技术1快速挖掘感染节点,两种探测技术配合,为发现Mozi节点提供有力的技术保障。

表3.两种探测技术优缺点对比


探测技术1

探测技术2

优点

直接聚焦于特定子树下节点的挖掘,收敛速度快,能在短时间内挖掘到大量的存活节点

查找速度较快,可以发现新的前缀

缺点

只能输入id前缀(88888888)发现节点

需要提前知道一些Mozi节点

同时,我们对比两种技术探测到的节点数量,发现数据重合度极高,这表明两种探测方法发现的节点绝大部分是一致的。由于两种扫描器的探测速度依赖于已知节点数量,是呈倍数(1:N)增长的,但Mozi感染新节点的速度理论上小于倍速,两条非平行的增长曲线在某个时刻一定会交叉,而这个交叉点所在的时刻就是探测触到Mozi网络边界的时刻。

PS:关注了微信公众号“知微攻防实验室”的小伙伴们,仔细观察公众号版文章会发现隐藏彩蛋哦!


本文作者:知微攻防实验室

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/163402.html

Tags:
评论  (0)
快来写下你的想法吧!

知微攻防实验室

文章数:17 积分: 70

专注物联网安全研究,于细微处下功夫,构筑物联网安全防御体系

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号