悄然崛起的挖矿机僵尸网络:打服务器挖价值百万门罗币

AlexFrankly 2017-9-11 信息安全 0 0

背景

360互联网安全中心监测到一种利用被入侵服务器进行门罗币挖矿的僵尸网络,该僵尸网络控制的服务器数量高峰时单日达到两万多台。僵尸网络建立初期利用“永恒之蓝”漏洞攻击武器入侵一定数量的计算机并以此作为僵尸网络发展的基础,之后这些计算机扫描其他计算机的1433端口(msSQL服务端口),尝试爆破目标计算机的msSQL服务,一旦爆破成功则登陆SQL Server执行恶意代码。目标计算机被僵尸网络控制之后同样会通过1433端口入侵其他计算机,僵尸网络因此不断扩大控制范围,最终形成现在这样的规模。

僵尸网络的蔓延离不开强大的Bot程序,通过代码同源性可以发现该家族的Bot程序的诞生最早可追溯到2014年。在2014年到2017年之间, Bot程序进行多次版本更新,最早的版本只是简单的入侵与远程控制,从2017年4月的版本开始, Bot程序借鉴多款扫描器、爆破工具以及著名僵尸网络mirai的实现,添加了多种针对不同协议的扫描爆破模块,并且实现了一套针对msSQL的“入侵+利用+传播”的攻击模块。Bot程序版本更替及传播量如下图所示。(图示中xx.x.x.x.x(x)表示的是Bot程序的版本,例如17.1.0.0.2(1)表示2017年编译的1.0.0.2版本的Bot程序变种1)

图1-1 Bot程序版本更替及感染量概览图.png

图1-1 Bot程序版本更替及感染量概览图

从图1-1中可以看出,Bot程序自4月底开始传播量开始出现爆发式增长,这正是作者利用“永恒之蓝”漏洞攻击武器进行僵尸网络建立的时间段。此外,Bot程序有一套完善的更新体系,当Bot程序检测到有新版本发布之后,将自动更新至最新版本。从图1种也不难看出,新版本传播量增加之后,老版本的传播量也相应地下降。

Bot程序当前的主要目的是安装门罗币挖矿机,利用服务器资源挖矿。截止目前,作者的门罗币钱包已经有高达1975枚门罗币,当前约合人民币167万。

图1-2 作者门罗币钱包概况.png

图1-2 作者门罗币钱包概况

Bot程序高度模块化,集合了多种不同的功能,并且具有完善的更新和持久驻留机制。

对Bot程序的分析将有助于了解该僵尸网络的传播机制。本文将通过对Bot程序的详细分析,挖掘该僵尸网络的工作原理,并据此讨论服务器在面对该僵尸网络时所需的预防措施以及防御策略。

Bot程序分析

本文选用Bot程序2017年4月份编译的1.0.0.2版本作为分析的样本,样本MD5:10ace2e06cc8b5656d38eb2e6ed4f079。

Bot程序由main模块,update模块,Scanner模块,Cracker模块,ServerAgent模块和cService模块6个模块构成,模块之间互有联系,相互协作。以下将对每个模块执行的功能进行分析。

1.main模块分析

Bot程序是以控制台形式存在的,在介绍main模块之前先介绍Bot程序所接收的启动参数以及参数对应的功能。

表2-1-1 Bot程序所接收的参数及对应的功能.png

表2-1-1 Bot程序所接收的参数及对应的功能

这些启动参数满足以下几条规则:

1.当存在“-start”,“-stop”,“-create”和“-delete”中的多个时,只有第一个参数是有效的,因此作者引入“-run”参数配合“-create”参数以完成创建服务并启动服务的操作。

2.“-delete”参数在删除Bot服务之前会关闭该服务。

3.当未指定“-syn”参数时默认扫描器为TCP_CONNECT模式。

4.当同时存在“-srv”和“-cli”时只有第一个参数是是有效的,两者都不存在时默认为“-srv”。

5.当程序启动参数包含“-s”时,将以服务形式执行main模块,否则以控制台形式执行main模块。

main模块主要是进行一些准备工作以及配置并启用其他模块。在程序准备工作方面,主要包括以下几部分。

(1)获取系统信息。

图2-1-1 获取系统信息.png

图2-1-1 获取系统信息

(2)判断系统类型是否为Server。

图2-1-2 判断系统类型.png

图2-1-2 判断系统类型

(3)结束并禁用Network list Service和Network Location Awareness。Network list Service用于识别计算机已连接的网络,收集和存储这些网络的属性,并在更改这些属性时通知应用程序;Network Location Awareness用于收集并保存网络配置和位置信息,并在信息改动时通知应用程序。Bot程序关闭并禁用这些服务以防止自身的网络通信被记录。

图2-1-3 结束并禁用Network list Service和Network Location Awareness.png

图2-1-3 结束并禁用Network list Service和Network Location Awareness

(4)结束并禁用SharedAccess和MpsSvc(Intemet连接共享和防火墙服务)以保障Bot程序的网络通信能够正常进行,并且删除日志文件。

图2-1-4结束并禁用SharedAccess和MpsSvc.png

图2-1-4结束并禁用SharedAccess和MpsSvc

完成初始化工作之后,main模块将创建新线程执行update模块。update模块检查Bot程序版本并根据情况进行更新。同时,main模块还作为Scanner模块,Cracker模块和ServerAgent模块的入口。

2.update模块分析

update模块是Bot程序进行自更新的模块。当程序执行main模块时,将创建线程执行update模块进行版本检查及必要的更新。update模块每6小时进行一次更新检查。

图2-2-1 创建线程执行update模块.png

图2-2-1 创建线程执行update模块

图2-2-2 调用Sleep函数以定期执行update模块.png

图2-2-2 调用Sleep函数以定期执行update模块

进行更新检查时,update模块首先获取程序当前的版本号,之后通过博客地址“http://blog.sina.com.cn/s/blog_16fb721c50102x6hw.html”获得加密后的C&C的ip地址。将加密后的ip地址去除首尾的分隔符(***和@@@),经过base64解密并与0×36异或之后得到真实的ip地址(在本样本中,C&C ip地址为67.229.144.218,以下简称为“ip”)。

图2-2-3 博客中加密的ip地址.png

图2-2-3 博客中加密的ip地址

http://ip:8888/ver.txt中存放最新的Bot程序版本号,update模块读取该版本号并与当前Bot程序的版本号进行对比。当两者相同时,则认为程序已经更新到最新版本,继续执行后续功能;当两者不同时,则对程序进行更新。

图2-2-4 对比Bot程序版本和最新版本号.png

图2-2-4 对比Bot程序版本和最新版本号

图2-2-5 最新的版本号.png

图2-2-5 最新的版本号

若Bot程序未更新到最新版本,则进行更新。最新版本的Bot程序通过路径C://windows/system下的更新程序cabs.exe获取。若cabs.exe不存在,则Bot程序将从http://ip:8888/ups.rar下载cab.exe,并启动该程序进行更新。

图2-2-5 下载更新程序cab.exe并启动更新.png

图2-2-5 下载更新程序cab.exe并启动更新

cabs.exe会判断当前计算机系统是否为Windows Server,只有当当前计算机系统为Windows Server时才会执行更新。

图2-2-6 判断当前系统是否为Windows Server.png

图2-2-6 判断当前系统是否为Windows Server

如果当前计算机系统为Windows Server,则访问http://ip:8888/update.txt获取最新的下载列表,并将下载列表下载到c:\\windows\\system路径下,命名为upslist.txt。

图2-2-7 下载下载列表.png

图2-2-7 下载下载列表

下载列表中包含两个文件ps.jpg和my1.html。

图2-2-8 下载列表内容.png

图2-2-8 下载列表内容

ps.jpg是末尾拼接了一个PE文件的图片。该PE文件就是最新版本的Bot程序。

图2-2-9 藏有最新版本Bot程序的图片.png

图2-2-9 藏有最新版本Bot程序的图片

图2-2-10 图片中监测到的PE文件特征.png

图2-2-10 图片中监测到的PE文件特征

my1.html是一个批处理脚本,功能与Cracker:mssql模块释放的批处理脚本123.dat基本相同,主要是创建一些需要的文件夹并为之后Cracker模块配置环境。

完成下载之后,cabs.exe会结束Bot程序的进程和服务,更新相关文件之后再重启Bot进程和服务。

3.scanner模块分析

scanner模块修改自masscan(github:https://github.com/robertdavidgraham/masscan)。masscan是一个快速、灵活的端口扫描器,在windows下发包速度可达到每秒30万包。

在调用scanner模块进行扫描之前,Bot程序会配置一个excludefile,该文件指定ip段黑名单,在该范围中的ip地址将不会被扫描。ip黑名单以字符串的形式存放在Bot程序的资源段中,scanner模块在临时文件夹下创建excludefile,读取资源后将ip黑名单写入excludefile。

图2-3-1 读取ip黑名单资源并写入excludefile.png

图2-3-1 读取ip黑名单资源并写入excludefile

在Bot程序2017年四月份编译的1.0.0.2版本和五月份编译的1.0.0.3版本的其中一个变种中未发现ip黑名单,在五月份编译的1.0.0.3版本的另一个变种中发现了ip黑名单。

图2-3-2 存放在Bot程序资源段中的ip黑名单.png

图2-3-2 存放在Bot程序资源段中的ip黑名单

对于每一个a类ip,scaner模块排除掉部分b段。由于全网扫描容易遭到监控,通过排除部分ip地址可以减少被发现的风险。

图2-3-3 scanner模块排除部分ip地址后扫描全网.png

图2-3-3 scanner模块排除部分ip地址后扫描全网

scanner模块能够扫描的端口包括1433端口,3306端口,135端口,22端口,445端口,23端口,80端口和3389端口。

图2-3-4 部分scanner模块扫描的端口.png

图2-3-4 部分scanner模块扫描的端口

scanner模块可通过两种模式进行端口扫描,分别是TCP_SYN扫描和TCP_CONNECT扫描。使用何种扫描模式由参数“-syn”决定,如果启动参数包含“-syn”则选择使用TCP_SYN模式进行端口扫描,否则选择TCP_CONNECT模式进行端口扫描。当选择TCP_SYN模式进行端口扫描时,Bot程序只发送SYN帧,端口开放回应SYN&ACK帧,端口关闭回应RST帧,;当选择TCP_CONNECT模式进行端口扫描时,Bot程序尝试连接目标端口,端口开放则连接成功,否则连接失败。

Scanner模块创建的最大扫描线程数由“-t”参数决定,“-t”的最大值为1800。在scanner模块创建扫描线程的同时会同时创建名为“CrackerWMI”的线程,但是在Bot程序发送的数据包中并未发现目的端口为135(wmi服务使用的端口)的数据包,推测可能是作者预留的尚未完善的功能。

图2-3-5 两种不同的扫描模式.png

图2-3-5 两种不同的扫描模式

scanner模块会记录开放特定端口的ip地址,并且与ServerAgent模块和Cracker模块进行交互完成“端口扫描+爆破+入侵”一系列工作。

4.ServerAgent模块分析

ServerAgent模块由两部分功能组成。一是向C&C发送扫描结果;二是对端口扫描和爆破进行相应的配置工作。

ServerAgent模块在scanner模块扫描过程中连接C&C。当scanner模块扫描到开放的端口之后,ServerAgent模块将把对应的ip地址和端口号发送至C&C。

图2-4-1 ServerAgent模块连接C&C.png

图2-4-1 ServerAgent模块连接C&C

此外,ServerAgent模块下载密码字典并为Cracker模块配置密码字典,当scanner模块扫描到某ip地址的特定端口为开放状态时,将通过该字典进行爆破。字典的下载地址为http://ip:8888/wpd.dat,当下载完成之后,ServerAgent模块将从http://ip:8888/wpdmd5.txt获取正确的密码字典的MD5值并与下载的字典wpd.dat的MD5值进行对比以确定下载文件的正确性。下载的密码字典wpd.dat是经过加密的,ServerAgent模块读取密钥“cm9vdCpwd2Q=”,对密钥进行base64解密后,使用其解密wpt.dat。解密后的wpd.dat部分内容如下图所示。

图2-4-2 密码字典的部分内容.png

图2-4-2 密码字典的部分内容

wpd.dat实际上是一个xml文件,里面包含mysql,mssql,telnet,wmi,ssh,rdp的密码字典以及不同的入侵方式执行的shell。此外,wpd.dat中存在一个名为ports的键,当该键的某个子健键值为1时,ServerAgent模块将配置scanner模块使其扫描该子键对应的端口。

图2-4-3 ports键概览.png

图2-4-3 ports键概览

在默认的wpd.dat中,只有mssql子键的值设为1,因此scanner模块只扫描mssql服务对应的端口(端口号1433)。黑客可以通过配置wpd.dat文件增加、减少、修改扫描端口的数目和类别。

图2-4-4 从抓包数据发现Bot程序只扫描1433端口.png

图2-4-4 从抓包数据发现Bot程序只扫描1433端口

有趣的是,ServerAgent模块选择随机的ip段作为每一轮扫描的ip范围,这和mirai僵尸网络的做法十分相似。如下所示,get_random_ip函数生成的随机ip段为220.176.171.93~220.182.171.87,因此本轮扫描中scanner模块对该ip段进行扫描。

图2-4-5 ServerAgent模块计算并选取随机ip段.png

图2-4-5 ServerAgent模块计算并选取随机ip段

图2-4-6 测试中生成的随机ip段.png

图2-4-6 测试中生成的随机ip段

图2-4-7 从抓包数据中发现此轮扫描中Bot程序扫描其随机生成的ip段.png

图2-4-7 从抓包数据中发现此轮扫描中Bot程序扫描其随机生成的ip段

5.Cracker模块分析

Cracker模块是Bot程序中最重要的模块。该模块用于入侵目标计算机并在目标计算机上执行恶意代码。Cracker模块分为多个小模块,在分析的样本中包括Cracker:CCTV,Cracker:mssql, Cracker:RDP,Cracker:Telnet四个小模块。按照入侵的端口的不同,Cracker模块提供不同的攻击方式。下面将介绍每一种攻击的实现。

5.1  Cracker:mssql

由于Bot程序默认的密码字典wpd.dat中指定扫描的服务为msSQL,因此Cracker:mssql模块是所有Cracker模块中功能最为完善的。在大部分被感染的服务器的msSQL服务中都可以发现该模块所执行的恶意动作。

Cracker:mssql模块首先使用爆破字典爆破目标的msSQL服务。如果成功爆破目标,则登陆SQL Server执行下一步操作。

登陆SQL Server之后,需要在SQL Server中获得执行shell的权限,因此Cracker:mssql模块使用多种方式尝试获得执行shell的权限,包括:

1.恢复xp_cmdshell。

图2-5-1 恢复xp_cmdshell.png

图2-5-1 恢复xp_cmdshell

2.开启被禁止的xp_cmdshell。

图2-5-2 开启xp_cmdshell.png

图2-5-2 开启xp_cmdshell

3.xp_cmdshell被删除后,使用SP_OACreate执行shell。

图2-5-3 使用SP_OACreate执行shell.png

图2-5-3 使用SP_OACreate执行shell

4. 开启CLR enabled选项,使用SQL Server CLR执行shell。

图2-5-4 开启CLR enabled选项.png

图2-5-4 开启CLR enabled选项

5. 注册regsvr32.dll执行远端代码所需的组件,使用regsvr32.dll执行shell。

图2-5-5 注册相关组件.png

图2-5-5 注册相关组件

6. 通过沙盒执行shell。

图2-5-6 通过沙盒执行shell.png

图2-5-6 通过沙盒执行shell

7.开启SQL Agent服务,使用SQL Agent服务执行shell。

图2-5-7 开启SQL Agent服务.png

图2-5-7 开启SQL Agent服务

Cracker:mssql模块所执行的主要功能主要包括以下几方面:

1.在c:\\windows\system32\wbem下创建批处理文件123.dat,并在该文件中写入内容。

图2-5-8 创建123.bat.png

图2-5-8 创建123.bat

该批处理文件执行的功能包括对一些程序运行所涉及到的文件和文件夹进行权限设置;使用regsvr32.dll执行远端代码;判断是否存在item.dat,若存在则调用rundll32执行该程序。item.dat是修改自PCShare(github:https://github.com/isuhao/pcshare)的远程控制程序,C&C通过item.dat控制Bot。

2. 创建文件PerfStringse.ini,并在该文件中写入内容。

图2-5-9 创建PerfStringse.ini.png

图2-5-9 创建PerfStringse.ini

该文件是个组策略模板文件,主要是禁止一些涉及到的文件的访问权限。在创建该模板文件之后调用secedit.exe配置组策略。

图2-5-10 调用secedit.exe配置组策略.png

图2-5-10 调用secedit.exe配置组策略

3. 在c:\\windows\system下创建文件myusa.dvr,并在文件中写入内容。

图2-5-11 创建myusa.dvr.png

图2-5-11 创建myusa.dvr

myusa.dvr是个ftp下载脚本,主要功能是从down.mys2016.info下载文件1.dat到本地c:\\windows\system路径下,命名为myusago.dvr;下载1.bat到本地c:\\windows\system路径下,命名为backs.bat。

myusago.dvr也是个ftp下载脚本,从down.mys2016.info下载多个文件到本地;backs.bat用于记录系统时间并写入1.txt中。

图2-5-12 myusago.dvr内容.png

图2-5-12 myusago.dvr内容

下载的文件中,item.dat是C&C用于控制Bot的远程控制软件;ms.rar实际上就是Bot程序的更新程序cab.exe;ss.bat和Cracker:mssql模块释放的123.bat是同一个文件;未找到op7key.rar文件,猜测与爆破字典类似。

从myusago.dvr下载的文件不难看出,Bot程序除了执行Cracker:mssql模块中硬编码的恶意代码之外,还通过云端下载相应的恶意程序,这保障与Bot程序相关联的恶意代码能够持续驻留。在分析的过程中我们发现,用于进行环境配置和程序运行控制的123.bat批处理脚本是更新最为频繁的,从2017年4月份起更新次数超过了10次。

myusago.dvr和myusa.dvr将作为ftp的参数写入命令行中并加入SQL Agent的Job中,每天执行一次。

4.将Bot程序加入SQL Agent的job中,并附带参数“-syn 1000”。每次SQL Agent启动时Bot程序也将启动。

图2-5-13 将Bot程序加入SQL Agent的Job中.png

图2-5-13 将Bot程序加入SQL Agent的Job中

5.以Job的形式每20分钟运行一次C:\\Progra~1\mainsoft\install.exe。该程序是一个挂机赚分软件。

图2-5-14 以Job形式执行install.exe.png

图2-5-14 以Job形式执行install.exe

6.以Job的形式每20分钟执行C:\\windows\debug,C:\\Progra~1\\shengda和C:\\Progra~1\\kugou2010路径下的所有exe。从我们的监控中发现,Bot程序所释放的挖矿机以及能给黑客带来直接收益的程序都存在于这几个路径中,黑客通过定时启动这些程序保证收益的源源不断。

图2-5-15 定时执行.png

图2-5-15 定时执行C:\\windows\debug下的exe

图2-5-16 定时执行.png

图2-5-16 定时执行C:\\Progra~1\\shengda下的exe

图2-5-17 定时执行.png

图2-5-17 定时执行C:\\Progra~1\\kugou2010下的exe

7.创建ftp下载脚本msinfo.dat,该脚本从down.mys2016.info下载文件到C:\\windows\debug路径下,并命名为bss.exe。之后通过批处理脚本msinfo.bat调用ftp执行下载脚本,下载完成后启动bss.exe,并删除这两个脚本。bss.exe疑似是个远控木马。

图2-5-18 msinfo.dat内容.png

图2-5-18 msinfo.dat内容

图2-5-19 msinfo.bat内容.png

图2-5-19 msinfo.bat内容

8.将item.dat和123.bat加入启动项中。

图2-5-20 将item.dat加入启动项中.png

图2-5-20 将item.dat加入启动项中

图2-5-21 将123.bat加入启动项中.png

图2-5-21 将123.bat加入启动项中

9.确定权限允许之后,删除SQL用户,并设置SQL SA(超级管理员)帐户及密码,同时添加多个SQL帐户。完成这步操作之后,黑客正式接管该计算机的SQL Server,管理员无法再通过之前的帐户登录SQL Server。

图2-5-22 添加SQL SA.png

图2-5-22 添加SQL SA

Cracker:mssql模块还通过SQL Server执行多段shellcode,大部分的shellcode都以SQL Agent的Job形式存在并定期执行。

第一段shellcode使用wmi中的ActiveScriptEventConsumer类执行脚本代码。该脚本读取http://www.cyg2016.xyz:8888/test.html网页内容,并根据网页内容获取第二组网址,下载文件并执行。

图2-5-23 第一段shellcode内容.png

图2-5-23 第一段shellcode内容

下载的文件包括更新程序cabs.exe和挖矿机lsmosee.exe。挖矿机修改自xmr-stak(github:https://github.com/fireice-uk/xmr-stak-cpu),以32位形式编译,作者在此挖矿机中添加了一个模块,当需要64位挖矿机时,该模块将从C&C下载64位的挖矿机lsmose.exe到本地执行。本样本中,32位挖矿机的路径为“C:\\windows\help”,而64位挖矿机的路径修改为“C:\\windows\debug”。由于作者添加了SQL Agent的Job,使“C:\\windows\debug”路径下的exe文件每20分钟执行一次,猜测作者将挖矿机保存到此目录下是为了保证挖矿机能够稳定运行。

图2-5-24 下载挖矿机和更新程序.png

图2-5-24 下载挖矿机和更新程序

第二段shellcode使用js脚本执行恶意代码,脚本功能与第一段shellcode中的jscript代码相同。

图2-5-25 第二段shellcode内容.png

图2-5-25 第二段shellcode内容

第三段shellcode同样使用wmi脚本执行jscript代码,所执行的功能与创建的批处理文件123.bat的功能相同,猜测作者此举为了防止文件123.bat被杀毒软件清除而执行的备用方案。

图2-5-26 第三段shellcode内容.png

图2-5-26 第三段shellcode内容

第四段shellcode是第三段shellcode的js版本。不难发现,作者对于每段shellcode都准备了wmi和js两种版本,以确保脚本执行的稳定性。

图2-5-27 第四段shellcode内容.png

图2-5-27 第四段shellcode内容

第五段shellcode通过恢复cmdshell,恢复SP_OACreate等方式保证能通过SQL Server执行shell,猜测作者通过Job定期执行这段shellcode以保证shell能长期存活。

图2-5-28 第五段shellcode内容.png

图2-5-28 第五段shellcode内容

第六段shellcode删除C:\\Documents and Settings\Default User\Local Settings\Temporary Internet Files\Content.IE5路径下的文件。由于下载文件时都会在该目录下留下对应的tmp文件,作者此举是为了防止用户通过该目录发现可疑文件,可见作者对痕迹的清理十分细心。

图2-5-29 第六段shellcode内容.png

图2-5-29 第六段shellcode内容

第七段shellcode使用js脚本访问http://www.cyg2016.xyz:8888/kill.html,该页面是个文件名列表。脚本搜寻系统中是否存在与该页面返回的文件名相同的文件,若存在则结束对应进程并将文件删除。这些文件大多数是一些其他入侵者释放的挖矿机。

图2-5-30 第七段shellcode内容.png

图2-5-30 第七段shellcode内容

透过这些文件名我们发现了一个有趣的现象,在被删除的文件中包含了一些和Bot程序释放的挖矿机文件名十分相似的文件,例如C:\\windows\debug\lsmosee.exe(Bot程序释放的挖矿机是c:\\windows\help\lsmosee.exe和C:\\windows\debug\lsmose.exe)。是作者通过这样的方式进行更新,淘汰旧的挖矿机,还是其他入侵者利用Bot程序定时执行C:\\windows\debug路径下程序的特性坐收渔翁之利就不得而知了。

图2-5-31 待删除文件列表.png

图2-5-31 待删除文件列表

第八段shellcode将123.bat加入启动项中,此处不再赘述。

第九段shellcode从http://down.mys2016.info:280下载文件到C:\\WINDOWS路径下,并命名为ps.exe。ps.exe实际上是PsExec,一款强大的远程执行工具,黑客在每台入侵的计算中部署该工具,使每台计算机成为一个控制端,方便构建一个庞大的僵尸网络。

图2-5-32 第九段shellcode内容.png

图2-5-32 第九段shellcode内容

第十段shellcode主要是完成SQL提权的一系列操作。

图2-5-33 第十段shellcode内容.png

图2-5-33 第十段shellcode内容

第十一段shellcode是利用SQL Server CLR执行shell的payload,从payload中可以发现其访问http://www.cyg2016.xyz:8888/clr.txt并执行该页面中返回的内容。

图2-5-34 payload的部分内容.png

图2-5-34 payload的部分内容

该页面和http://www.cyg2016.xyz:8888/test.html一致,即下载更新程序和挖矿机到计算机中并运行。

Cracker:mssql模块完成了Bot程序几乎所有要完成的功能,包括更新、挖矿、清除同类程序、定时任务以及SQL Server管理员账户的设置。由于作者目前的密码字典中将mssql作为唯一攻击目标,因此Cracker:mssql模块如此完善也是可以理解的。若之后作者开启了其他攻击方式,其他的Cracker模块也将变得更加完善。

5.2  Cracker:Telnet

Cracker:Telnet模块是除了Cracker:mssql模块之外较为完善的一个模块。作者充分利用mirai僵尸网络的优点构建了一套类似于mirai的Telnet入侵模块。

在执行Cracker:Telnet模块之前,Bot程序在ServerAgent模块中配置Telnet入侵攻击的payload。ServerAgent模块会根据不同的平台架构从资源段中读取payload并将其转化为十六进制字节码的形式。

图2-5-35 从资源段读取payload.png

图2-5-35 从资源段读取payload

在payload中我们发现一些mirai相关的标识,通过对比发现Bot程序所使用的payload就是mirai僵尸网络的payload(github:https://github.com/jgamblin/Mirai-Source-Code/tree/master/loader/bins),这些payload适用于不同的平台架构(arm,arm7,m68k,mips,mpsl,ppc,sh4,spc,x86)。

图2-5-36 payload中mirai的相关标识.png

图2-5-36 payload中mirai的相关标识

除了payload与mirai相同之外,Cracker:Telnet模块也基本修改自mirai源码,包含密码爆破功能和入侵功能。

图2-5-37 Cracker Telnet模块中的mirai特征.png

图2-5-37 Cracker:Telnet模块中的mirai特征

mirai在通过Telnet入侵之前会配置一个ip地址用于作为report服务器地址,用于返回扫描结果,在分析中我们也发现了一个疑似report服务器ip地址。如果Bot程序的启动参数中包含“-srv”,则ServerAgent模块会从密码字典中读取名为telnetip的子键的键值,该键值是个ip地址,之后被传入Cracker:Telnet模块中。如果启动参数中包含“-cli”,Bot程序会从当前目录下的wpdconfig.ini文件中读取ip地址。

图2-5-38 密码字典中的report服务器地址.png

图2-5-38 密码字典中的report服务器地址

由于Cracker:Telnet模块与mirai相差无几,在此不再赘述,感兴趣的读者可以查看mirai源码(github:https://github.com/jgamblin/Mirai-Source-Code)。

5.3  Cracker:RDP

Cracker:RDP模块修改自hydra(github:https://github.com/vanhauser-thc/thc-hydra)的RDP部分。hydra是一款支持多种网络服务的强大的暴力破解工具,Cracker:RDP模块使用了其源码中的rdp.c文件,用于对开放了RDP服务端口的计算机进行爆破。不同于Cracker:mssql模块和Cracker:Telnet模块,Cracker:RDP模块只是进行爆破而未加入任何入侵以及代码执行的功能。

图2-5-39 Cracker RDP模块扫描端口.png

图2-5-39 Cracker:RDP模块扫描端口

5.4  Cracker:CCTV

Cracker:CCTV模块是一个CCTV摄像头入侵模块。该模块会向http://Targetip:port/shell?…(…的内容猜测是用户名&密码)发送GET请求,一旦请求返回的状态值不为400,401,403,404或500,则认为该ip地址和端口号对应的CCTV摄像头可以被入侵。

图2-5-40 Cracker CCTV模块扫描CCTV摄像头.png

图2-5-40 Cracker:CCTV模块扫描CCTV摄像头

由于在密码字典wpd.dat中并没有配置CCTV相关的键值,猜测该模块是和Cracker:Telnet模块结合使用的。由于mirai中含有识别特定IOT设备的代码,而Cracker:Telnet模块又是修改自mirai,猜测当Cracker:Telnet模块发现某台设备为CCTV摄像机时则通过Cracker:CCTV模块进行入侵。

5.5 其他模块

在Bot程序早期的版本中(2016年10月编译的版本)还发现了Cracker:MySQL模块,Cracker:SSH模块和Cracker:WMI模块,这些模块的功能都是在被入侵的计算机中执行shell。

图2-5-41 Cracker WMI模块.png

图2-5-41 Cracker:MySQL模块

图2-5-41 Cracker WMI模块.png

图2-5-41 Cracker:WMI模块

图2-5-41 Cracker WMI模块.png

图2-5-41 Cracker:WMI模块

不过这几个模块在之后的版本中都被移除了,而原本功能简单的Cracker:mssql模块在之后的版本中得到了完善。

6.cService模块分析

cService模块用于管理Bot服务,Bot服务是Service形式的Bot程序。

当Bot程序的启动参数中包含“-create”时,cService模块创建名为“xWinWpdSrv”的服务,该服务以“-s –syn 1500”作为启动参数启动Bot程序。

图2-6-1 创建Bot服务.png

图2-6-1 创建Bot服务

当Bot程序的启动参数包含“-delete”时,cService模块删除“xWinWpdSrv”服务。

图2-6-2 删除Bot服务.png

图2-6-2 删除Bot服务

当Bot程序的启动参数包含“-start”时,cService模块启动“xWinWpdSrv”服务。

图2-6-3 启动Bot服务.png

图2-6-3 启动Bot服务

当Bot程序的启动参数包含“-stop”时,cService模块停止“xWinWpdSrv”服务。

图2-6-4 停止Bot服务.png

图2-6-4 停止Bot服务

Bot程序模块众多,并且各模块之间关系紧密,相互配合。此外,Bot程序与其他组件相辅相成,以保证攻击者对计算机的持久控制以及僵尸网络的不断壮大。以下将用一个关系图描述Bot程序与其他组件之间的关联。

图2-6-5 Bot程序与其他组件关系图.png

图2-6-5 Bot程序与其他组件关系图

防御总结

从僵尸网络当前的攻击重点来看,防范其通过1433端口入侵计算机是非常有必要的。此外,Bot程序还有多种攻击方式尚未使用,这些攻击方式可能在未来的某一天被开启,因此也需要防范可能发生的攻击。对此,我们总结以下几个防御策略:

1.对于未遭到入侵的服务器,注意msSQL,RDP,Telnet等服务的弱口令问题。如果这些服务设置了弱口令,需要尽快修改;

2.对于无需使用的服务不要随意开放,开放的服务是黑客入侵的前提。对于必须使用的服务,注意相关服务的弱口令问题;

3.特别注意445端口的开放情况。由于黑客曾经使用永恒之蓝漏洞入侵计算机,不排除黑客故技重施。及时打上补丁更新操作系统是非常有必要的。

4.关注服务器运行状况,注意CPU占用率和进程列表和网络流量情况可以及时发现系统存在的异常。此外,注意系统账户情况,禁用不必要的账户。

5.对于网络摄像头持有者,建议修改默认密码以防止黑客直接使用默认密码爆破。

该僵尸网络现今主要依靠端口扫描和弱口令爆破进行传播,但其在“永恒之蓝”漏洞攻击武器出现之初就利用该武器入侵了一定数量的计算机,可见其对于最新曝光的漏洞利用以及攻击方法的掌握十分迅速,因此需时刻警惕其可能发起的重大攻击。

附录

1.相关文件MD5

MD5.png

2. 相关ip地址和域名

IP地址 域名.png

3. 密码字典

密码字典.png

密码字典 2.png

密码字典 3.png

密码字典 4.png

密码字典 5.png

密码字典 6.png

密码字典 7.png

密码字典 8.png

密码字典 9.png

密码字典 10.png

密码字典 11.png

*本文作者:360安全卫士,转载请注明来自 FreeBuf.COM

转载请注明来自华盟网,本文标题:《悄然崛起的挖矿机僵尸网络:打服务器挖价值百万门罗币》

喜欢 (0) 发布评论