热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

『P2P僵尸网络深度追踪——Mozi』(一)Winteriscoming!

 Winter Is Coming(凛冬将至) ——《冰与火之歌》你是否曾经疑惑过:Mozi僵尸网络现在的感染规模有多大?全球有多少台设备已经被感染?是否有手段可以完全触摸到Mozi的边界?……自Mo

 

Winter Is Coming(凛冬将至) ——《冰与火之歌》

你是否曾经疑惑过:

Mozi僵尸网络现在的感染规模有多大?

全球有多少台设备已经被感染?

是否有手段可以完全触摸到Mozi的边界?

……

自Mozi僵尸网络(以下简称Mozi)2019年被首次发现以来,它的受关注度日益提升。知微实验室自2020年9月份开始持续追踪Mozi僵尸网络,通过对Mozi通信原理和DHT协议的深度分析,提出了多种主动式探测方法,运用多种探测手段进行数据交叉验证,不断触及Mozi网络边界。我们基于已收集的探测数据,在Mozi的节点规模、全球及国内的地域分布、24小时全球活跃态势等方面给出自己的统计结论。

针对以上疑问,我们即将推出一系列Mozi专题文章详细介绍。作为该专题的首发之作,本文将概述我们目前对Mozi的研究成果。此外,我们还会在后续文章中分享对此类涉及物联网安全的P2P僵尸网络的主动探测技术,希望与各位追踪和研究新型P2P僵尸网络的同行一起交流合作!

 

一、Mozi的前世今生

新冠疫情加速了企业数字化转型趋势,据GSMA预测,2025年全球物联网设备(包括蜂窝及非蜂窝)联网数量将达到约246亿个。庞大的数量、快速的增长趋势必然牵动了巨大的利益链条,也吸引了大量不法分子试图从中谋取暴利——IBM发现,2019年10月至2020年6月间的物联网攻击比前两年增加了400%。

2019年360发布报告命名了新的P2P僵尸网络Mozi,绿盟、知道创宇等公司也随后发布观测结果,IBM更是指出2019年10月至 2020年6月Mozi 僵尸网络占了 IoT 网络流量的 90%,但都还处于初期观测阶段,捕获到的Mozi样本数量远远不够。

360的分析报告根据Mozi传播样本文件名为“Mozi.m”、“Mozi.a”等特征将它命名为“Mozi botnet”,其发音很容易联想到中文的“墨子”,因此也有人称其为“墨子”僵尸网络。截止目前已公布的分析报告,业内部分安全研究团队怀疑此僵尸网络的幕后黑手是国人,推测的蛛丝马迹如下:


  1. “Mozi”一词未发现在西方有实际含义;

  2. 被感染节点基于Mozi.v2版本更新得到的config信息解密后显示免费通信量统计平台由www.51.la变为http://ia.51.la/go1?id=17675125&pu=http%3a%2f%2fv.baidu.com,变化前后皆是国内域名;

  3. 目前已知Mozi节点hash的前缀为88888888,表明Mozi节点具有群聚性,并且IBM 研究人员称Mozi 僵尸网络使用的基础设施主要位于中国(宣称占 84%,我们对数据的精确度存疑,下文会详细阐述)。
    于是我们大开脑洞将“Mozi”与历史上的“墨子”联系起来对比,发现了很有意思的巧合:


言归正传!寄生于正常P2P网络的Mozi僵尸网络已经感染海量物联网节点,对全球网络基础设施而言威胁极高,因此开展对此类新型P2P型僵尸网络的深度追踪迫在眉睫。

 

二、感染节点走势

不同于通过被动式流量特征匹配的僵尸网络节点追踪方法,我们结合Mozi僵尸网络和P2P网络的特点,采用了两种更加激进的主动式探测方法,实现了对整个Mozi僵尸网络的边界探测,并交叉比对2种探测方法的结果验证了边界有效性(后续将有一篇文章对此详细介绍)。

截止4月25日,我们探测到135万个历史感染节点,其中有73万个节点来自中国,占比约为54%,(但是在去年IBM公布的数据中,中国感染节点数量占比84%。是IBM并未精确统计,还是其他国家的被感染节点在这一年中迅猛增长,我们尚对此存疑)。图1和图2展示了我们统计数据中感染排名前十位的国家,可以看到中国受感染的物联网设备数量最多,其次是印度、俄罗斯,这三个国家感染数量占总量的92%。

图1. 感染国家排名前十分布

图2. 感染国家排名前十位

我们绘制了感染节点每天的增量统计图(见图3),可以清晰看到每天新增的增量感染节点都是数千的量级(以千为单位,甚至达到万级),这表明Mozi的感染速度和范围扩张极快。

图3. 日感染增量走势

自去年9月份至今,以国家为单位的每日活跃的感染节点的ip分布走势见图4。印度在观测初期数量最多,随后中国跃居第一。

图4. 去年9月份至今以国家为单位的每日活跃的感染IP走势

截止4月25日的前七日中活跃24小时与活跃72小时的Mozi总数走势见图5,可以看到活跃的节点总数大致呈上升趋势,与图3展示的日感染增量增长趋势一致。

图5. 24小时和72小时活跃感染节点走势

如果IBM的数据准确,由此看来,经过不到一年时间,Mozi僵尸网络已在世界飞速蔓延,形势严峻。Winter is coming!

 

三、感染节点分布

截至4月25日,根据我们观测所得的数据绘制深浅图(我们统计了所有被感染Mozi节点所在ip的地理位置并绘制了地图)(见图6),可以看到,除非洲等互联网发展较落后的地区外,其余各洲都或多或少曾感染过Mozi,再一次表明,Mozi已席卷全球。

图6. 存量Mozi节点世界分布

针对被感染数量最多的中国,我们绘制了热力图(见图7)以便于更加直观地展示国内各省市感染设备分布情况。通过对感染数量排序,可以看到前十个省份(见图8)的被感染数量差距明显,排名第一的河南尤为突出,接近全国总量的50%。这引起了我们的注意,后续将会针对此问题的展开详细分析。

图7. 中国存量Mozi节点分布热力图

图8. 国内感染省份排名前十位分布

由于Mozi节点并不是固定不变的,而是不断有新节点加入、旧节点退出的状态,因此我们对最近24小时活跃的Mozi样本进行分析,并绘制世界态势热力图(见图9)及国内省份的分布图(见图10),可以发现与存量(所有被感染过的)Mozi分布类似,这说明Mozi在全球范围内同步扩张,极具威胁。

图9. 24小时活跃感染节点全球态势

图10. 24小时国内感染省份分布

从世界范围看,被感染Mozi的物联网设备主要分布在亚欧,而国内的被感染物联网设备主要分布在经济发达的东部及南部沿海地区。而根据2020年GDP排行,排名前十的广东、江苏、山东、浙江、河南、四川、福建、湖北、湖南、上海等省市,与Mozi感染排行,呈现出惊人的相似 。相关数据显示,广东省5G基站建站需求最多,江苏、山东紧随其后。同时,在绿盟2019年发布的物联网安全年报中对暴露的物联网资产地区分布的分析中,大陆地区排名前三的是河南、山东和江苏,这也具有一定的参考价值。由此推断,越是经济发达、互联网发展迅速的地区,物联网设备越多,使不法分子能够趁虚而入。

 

四、样本统计

在我们抓取的Mozi样本中,Mips架构占比最高,其次是Mipsel,Arm6/Arm7,占比最低的是Arm4/Arm5。具体数据见表1和图11。

表1. Mozi样本各架构数量及占比

图11. Mozi样本架构种类统计

Mozi每感染一个节点会自动下载样本以便自己继续扩张感染更多节点。表2展示了被下载的次数排名前十的样本及下载节点历史总量。图12展示了下载样本种类排名前十的ip及其下载数量。后续会有系列文章对样本进行详细分析。

样本MD5

样本下载节点历史总量

a73ddd6ec22462db955439f665cad4e6

163096

fbe51695e97a45dc61967dc3241a37dc

154958

dbc520ea1518748fec9fcfcf29755c30

92317

eec5c6c219535fba3a0492ea8118b397

67887

4dde761681684d7edad4e5e1ffdb940b

26210

59ce0baba11893f90527fc951ac69912

21388

9a111588a7db15b796421bd13a949cd4

18024

3849f30b51a5c49e8d1546960cc206c7

11839

635d926cace851bef7df910d8cb5f647

8029

3313e9cc72e7cf75851dc62b84ca932c

7418

表2. 被下载样本数量排名前十

图12. 下载样本种类最多的IP排名前十


推荐阅读
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
author-avatar
ythg
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有