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

P2PBotnet:Mozi分析报告

 概览2019年09月03日我们捕获到一个可疑的的样本文件,大部分杀毒引擎将其识别为Gafgyt,但该样本和已知Gafgyt相似程度不高,只是复用了部分Gafgyt的代码。经过详细分析,我们确定这是H

 

概览

2019年09月03日我们捕获到一个可疑的的样本文件,大部分杀毒引擎将其识别为Gafgyt,但该样本和已知Gafgyt相似程度不高,只是复用了部分Gafgyt的代码。经过详细分析,我们确定这是Hajime之后,另一个基于DHT协议实现的P2P Botnet。根据其样本传播样本文件名称为Mozi.m、Mozi.a等特征我们将它命名为Mozi Botnet。

Mozi Botnet依赖DHT协议建立一个P2P网络,通过ECDSA384以及xor算法保证自身组件和P2P网络的完整性和安全性。样本通过Telnet弱口令和一些已知的漏洞利用蠕虫式传播。功能方面,Mozi僵尸网络中的各个节点的指令执行由Botnet Master下发的名为Config的Payload驱动,主要指令包括:


  • DDoS攻击

  • 收集Bot信息

  • 执行指定URL的payload

  • 从指定的URL更新样本

  • 执行系统或自定义命令

其整体网络结构如下图所示:

 

样本传播

Mozi通过telnet弱口令和漏洞利用两种方式感染新设备。感染过程如下:


  • 当前Bot节点随机监听本地端口启动http服务提供样本下载或者接收Botnet Master下发的Config文件中的样本下载地址。用于为将来被感染的目标提供样本下载地址。

  • 当前Bot节点利用弱口令登录目标设备,echo方式写入下载器文件并运行,从当前Bot节点提供的样本下载地址下载样本文件。或者通过漏洞利用入侵目标,然后从当前Bot节点提供的样本下载地址取得样本文件。

  • 在被感染目标设备上运行Mozi Bot样本,加入Mozi P2P网络成为新的Mozi Bot节点并继续感染其他新的设备。

Mozi Botnet所利用的漏洞如下表所示:




















































VULNERABILITYAFFECTED AEVICE
Eir D1000 Wireless Router RCIEir D1000 Router
Vacron NVR RCEVacron NVR devices
CVE-2014-8361Devices using the Realtek SDK
Netgear cig-bin Command InjectionNetgear R7000 and R6400
Netgear setup.cgi unauthenticated RCEDGN1000 Netgear routers
JAWS Webserver unauthenticated shell command executionMVPower DVR
CVE-2017-17215Huawei Router HG532
HNAP SoapAction-Header Command ExecutionD-Link Devices
CVE-2018-10561, CVE-2018-10562GPON Routers
UPnP SOAP TelnetD Command ExecutionD-Link Devices
CCTV/DVR Remote Code ExecutionCCTV DVR

当前我们暂时还不清楚该Botnet的规模,但从我们已经有的数据看,该Botnet的感染量一直在持续增长。下图为我们蜜罐收集到的Mozi bot感染日志。

 

样本逆向分析

目前,Mozi Botnet已有3个版本,在telnet传播方面略有不同,其它方面非常接近,

下文将以最新版本v2为主,同时也会穿插早期版本(样本md5: 849b165f28ae8b1cebe0c7430f44aff3),从传播方式,Config结构,DHT网络等方面剖析Mozi的技术细节。

样本信息


MD5:eda730498b3d0a97066807a2d98909f3

ELF 32-bit LSB executable, ARM, version 1 (ARM), statically linked, stripped

Packer: NO

Library:uclibc

Version: v2

值得一提的是,第一个版本中Mozi 采用了upx加壳。相较与常见的更改upx幻数对抗脱壳,Mozi使用了一种新颖的手法,将p_filesize&p_blocksize的值抹成了0。需要对upx源码做相应的patch才能脱壳。

常见功能

Mozi在主机行为层面并没太多特色,复用了Gafgyt的代码,实现了许多常见功能,如单一实例,修改进程名,网络流量放行。


  • 单一实例,通过绑定本地端口实现


  • 修改进程名,换成sshd或dropbear以迷惑受害者


  • 流量阻断&放行,确保所用到的TCP,UDP端口,流量正常通过;
     阻断SSH,TELNET服务,防止Bot被其他人入侵。



执行特定任务

Mozi通过DHT协议建立p2p网络后,同步config文件,根据config文件里的指令,开始相应的任务。在P2P网络中,节点是不可信的,任何人都能够以极低成本的伪造一个Mozi节点。为保证Mozi网络的完全可控,不被他人窃取,Mozi需要对每一个同步到的config做签名验签,只有能够通过了签名验签才能被Mozi节点接受,并执行。

文件&指令验签

Mozi使用ECDSA384算法验证文件及指令的合法性,每个样本都集成了俩个xor加密的的公钥,分别用于验签加密和解密后的config文件。

xor key:4E 66 5A 8F 80 C8 AC 23 8D AC 47 06 D5 4F 6F 7E
------------------------------------------------------------------
xored publickey A
4C B3 8F 68 C1 26 70 EB 9D C1 68 4E D8 4B 7D 5F
69 5F 9D CA 8D E2 7D 63 FF AD 96 8D 18 8B 79 1B
38 31 9B 12 69 73 A9 2E B6 63 29 76 AC 2F 9E 94 A1
after decryption:
02 d5 d5 e7 41 ee dc c8 10 6d 2f 48 0d 04 12 21
27 39 c7 45 0d 2a d1 40 72 01 d1 8b cd c4 16 65
76 57 c1 9d e9 bb 05 0d 3b cf 6e 70 79 60 f1 ea ef
-------------------------------------------------------------------
xored publickey B
4C A6 FB CC F8 9B 12 1F 49 64 4D 2F 3C 17 D0 B8
E9 7D 24 24 F2 DD B1 47 E9 34 D2 C2 BF 07 AC 53
22 5F D8 92 FE ED 5F A3 C9 5B 6A 16 BE 84 40 77 88
after decryption:
02 c0 a1 43 78 53 be 3c c4 c8 0a 29 e9 58 bf c6
a7 1b 7e ab 72 15 1d 64 64 98 95 c4 6a 48 c3 2d
6c 39 82 1d 7e 25 f3 80 44 f7 2d 10 6b cb 2f 09 c6

Config文件

每个样本集成了一个xor加密的初始的config文件,长度为528字节,其结构为data(428 bytes),sign(96 bytes),flag(4 bytes),sign字段为数字签名,flag字段控制config文件更新与否。config文件里有许多控制字段,Mozi节点收到config后,解析字段内容,执行相应的子任务。
原始config文件如下

解密过程如下图所示,其中xor key为

4E 66 5A 8F 80 C8 AC 23 8D AC 47 06 D5 4F 6F 7E

解密后的config如下

支持的关键字如下,可以分成辅助,控制,子任务3大类。

1:辅助字段,用于信息说明
[cpu]  cpu arch or os
[cpux] cpu arch or os
[ss] bot role
[ssx] bot role
[nd] new node info which help to join DHT
2:控制字段,用于更新节点的数据
[ver] verify
[sv] update Config
[hp] DHT id prefix
[dip] URL or ip:port list which can get Mozi sample
3:子任务字段,用于开启相应的子任务
[atk] DDOS attack
[ud] update
[dr] exec payload from specific URL
[rn] exec system or customized cmds
[idp] report bot info

Bot功能



  • DDOS,[atk]字段触发,复用Gafgyt了攻击代码,支持HTTP,TCP,UDP等攻击。

    Command
    -----------------------------------------
    S
    T
    U
    KT
    HTTP


  • 上报Bot信息,[idp]字段触发,上报的内容为Bot的ID,IP,PORT,文件名(全路径),网关,cpu架构。


  • 执行指定URL的payload,[dr]字段触发。


  • 从指定的URL更新,[ud]字段触发。关闭当前节点的网络连接和相关进程,从指定URL下载新版本,保存DHT节点,ID等数据,将它们做为参数提供给新版体使用。


  • 执行系统或Bot自定义命令,[rn]字段触发。

    • 系统命令


    • 自定义GET命令,将Bot ID发送给对端。


    • 自定义run命令,执行对端下发的命令,并将结果回传。





DHT

Mozi Botnet使用自己扩展的DHT协议构建p2p网络,这样做有俩个好处,一来使用标准的DHT能够快速组网,二来使用自己的扩展能够将有效payload的流量隐匿于海量的正常DHT流量中,躲避检测。Mozi使用8组公共节点以及Config文件的[nd]字段指定的节点作为bootstrap nodes。引导新节点加入其DHT网络。


  • 公共节点,样本内嵌

dht.transmissionbt.com:6881
router.bittorrent.com:6881
router.utorrent.com:6881
bttracker.debian.org:6881
212.129.33.59:6881
82.221.103.244:6881
130.239.18.159:6881
87.98.162.88:6881


  • Config文件中[nd]指定



ID生成

ID20字节,由样本内嵌的prefix(888888)或config文件[hp]指定的prefix,加随机生成的字串构成。

结点识别

为了快速区分流量,Mozi使用1:v4:flag(4 bytes)这样的标识来识别流量是否由其结点发出,

flag字节含义如下,

flag(4 bytes)
----------------------------------------------
offset:
0 -----random
1 ----- hard-code(0x42) or from [ver]
2 -----calc by algorithm
3 -----calc by algorithm

第1个字节是随机产生的,第2个字节是硬编码的0x42或由config文件中[ver]字段指定。

第3,4字节由算法得来,

ver algorithm
----------------------------------------------
int first,sec;
string ver="\x31\x3a\x76\x34\x3a\x00\x00"s;
cout <<"Please input the two number: (0x00-0xff)" < cin.unsetf(ios::hex);
cin >> hex >> first >> sec;
ver[5] = char(first);
ver[6] = char(sec);
uint32_t va = 0;
for(int i = 0; i <7; i++)
{
uint32_t tmp = int(ver[i]);
tmp = tmp <<8;
tmp ^= va;
int rnd = 8;
while (rnd--)
{
if ((tmp & 0xffff) > 0x8000)
{
tmp *= 2;
tmp ^= 0xffff8005;
}
else
tmp *= 2;
}
va = tmp&0xffff;
}
cout <

Please input the two number: (0x00-0xff)
0x44 0x42
Final 1f71
输入0x44 0x42,得到0x1f71,和数据包里结果一致。


网络请求

Mozi节点收到的网络请求可以分成2大类,DHT请求和非DHT请求。依据前文所述的节点识别,DHT请求分为Mozi-DHT请求,非Mozi-DHT请求。Mozi支持ping,find_node,get_peers3种。对于非DHT请求,依据网络数据包长度大于99与否分成2种。

Mozi将不同的请求编号如下所示,不同的请求有不同的处理逻辑


  • 编号2: ping ,DHT请求,按标准DHT流程处理直接回复pong。


  • 编号3:find_node,DHT请求。

  • 编号4:get_peers,DHT请求。
    Mozi 将find_node,get_peers合二为一,如果请求来自Mozi节点,有一定的概率把自身的Config内容发送给对方;如果来请求来自非Mozi节点,则按标准DHT的流程处理。


原始数据内容(节选前128字节):
00000000 64 31 3a 72 64 32 3a 69 64 32 30 3a 38 38 38 38 |d1:rd2:id20:8888|
00000010 38 38 38 38 b7 96 a0 9e 66 e1 71 98 e5 4d 3e 69 |8888·. .fáq.åM>i|
00000020 35 3a 6e 6f 64 65 73 36 32 34 3a 15 15 29 d2 f3 |5:nodes624:..)Òó|
00000030 a3 f7 0c fe df 1a 5d bd 3f 32 46 76 5e 62 b7 b8 |£÷.þß.]½?2Fv^b·¸|
00000040 f0 94 78 a2 c4 37 5b 8e 2c 00 0b 20 12 07 e7 f4 |ð.x¢Ä7[.,.. ..çô|
00000050 bc dc 19 a2 83 2e 67 fb 7a 5e 50 22 07 75 e8 ef |¼Ü.¢..gûz^P".uèï|
00000060 f9 93 4a e9 91 75 36 e4 76 57 4b 7c 51 7c ff f5 |ù.Jé.u6ävWK|Q|ÿõ|
00000070 f5 c4 57 f9 dc 62 35 b4 6a 5d 18 6b 54 3c ed e1 |õÄWùÜb5´j].kT<íá|
00000080 a1 c8 56 a3 cf 28 6b fa 14 06 1a 3e 3b 01 a0 e3 |¡ÈV£Ï(kú...>;. ã|
加密的Config位于"5:nodes624:"之后,使用xor key(4E 66 5A 8F 80 C8 AC 23 8D AC 47 06 D5 4F 6F 7E) 解密后:
原始数据部分:
00000000 64 31 3a 72 64 32 3a 69 64 32 30 3a 38 38 38 38 |d1:rd2:id20:8888|
00000010 38 38 38 38 b7 96 a0 9e 66 e1 71 98 e5 4d 3e 69 |8888·. .fáq.åM>i|
00000020 35 3a 6e 6f 64 65 73 36 32 34 3a |5:nodes624:
Config部分:
00000000 5b 73 73 5d 73 6b 5b 2f 73 73 5d 5b 68 70 5d 38 |[ss]sk[/ss][hp]8|
00000010 38 38 38 38 38 38 38 5b 2f 68 70 5d 5b 63 6f 75 |8888888[/hp][cou|
00000020 6e 74 5d 68 74 74 70 3a 2f 2f 69 61 2e 35 31 2e |nt]http://ia.51.|
00000030 6c 61 2f 67 6f 31 3f 69 64 3d 32 30 31 39 38 35 |la/go1?id=201985|
00000040 32 37 26 70 75 3d 68 74 74 70 25 33 61 25 32 66 |27&pu=http%3a%2f|


  • 编号5:announce_peer,不支持


  • 编号6:非DHT请求,数据包长<99字节,当节点收到此请求,会将自身的config内容发送给请求方。


  • 编号7:非DHT请求,数据包长>99字节,当节点收到此请求,说明收到的数据为加密的Config文件,执行流程参照前文。


 

处置建议

我们建议用户及时更新补丁,并根据Mozi Botnet创建的进程,文件名以及HTTP,DHT网络连接特征,判断是否被感染,然后清理它的相关进程和文件。

相关安全和执法机构,可以邮件联系netlab[at]360.cn交流更多信息。

 

联系我们

感兴趣的读者,可以在 twitter 或者在微信公众号 360Netlab 上联系我们。

 

IoC list

样本MD5:

eda730498b3d0a97066807a2d98909f3
849b165f28ae8b1cebe0c7430f44aff3


推荐阅读
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 腾讯安全平台部招聘安全工程师和数据分析工程师
    腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 安装oracle软件1创建用户组、用户和目录bjdb节点下:[rootnode1]#groupadd-g200oinstall[rootnode1]#groupad ... [详细]
  • LINUX学习之centos7营救模式
    今天卸载软件的时候,不小心把GNOME的一些组件给卸了,导致桌面无法正常开启,会卡在启动过程中,而我的开机启动模式又是设置为图形界面,所以一开LINUX就卡住了,进入不了命令行界面 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • Linux系统高级网络配置:链路聚合
    链路聚合网卡的链路聚合就是将多块网卡连接起来,当一块网卡损坏,网络依旧可以正常运行,可以有效的防止因为网卡损坏带来的损失,同 ... [详细]
  • 玩转直播系列之消息模块演进(3)
    一、背景即时消息(IM)系统是直播系统重要的组成部分,一个稳定的,有容错的,灵活的,支持高并发的消息模块是影响直播系统用户体验的重要因素。IM长连接服务在直播系统有发挥着举足轻重的 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了VoLTE端到端业务详解|VoLTE用户注册流程相关的知识,希望对你有一定的参考价值。书籍来源:艾怀丽 ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • FIN7后门工具伪装成白帽工具进行传播
    fin7,后门,工具,伪装,成,白, ... [详细]
  • 渗透测试基础bypass绕过阻挡我们的WAF(下)
    渗透测试基础-bypass ... [详细]
  • 移动传感器扫描覆盖摘要:关于传感器网络中的地址覆盖问题,已经做过很多尝试。他们通常归为两类,全覆盖和栅栏覆盖,统称为静态覆盖 ... [详细]
author-avatar
巧干篆书_618
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有