悄然崛起的挖矿机僵尸网络:打服务器挖价值百万门罗币
第一部分 背景
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程序自4月底开始传播量开始出现爆发式增长,这正是作者利用“永恒之蓝”漏洞攻击武器进行僵尸网络建立的时间段。此外,Bot程序有一套完善的更新体系,当Bot程序检测到有新版本发布之后,将自动更新至最新版本。从图1种也不难看出,新版本传播量增加之后,老版本的传播量也相应地下降。
Bot程序当前的主要目的是安装门罗币挖矿机,利用服务器资源挖矿。截止目前,作者的门罗币钱包已经有高达1975枚门罗币,当前约合人民币167万。
Bot程序高度模块化,集合了多种不同的功能,并且具有完善的更新和持久驻留机制。
对Bot程序的分析将有助于了解该僵尸网络的传播机制。本文将通过对Bot程序的详细分析,挖掘该僵尸网络的工作原理,并据此讨论服务器在面对该僵尸网络时所需的预防措施以及防御策略。
第二部分 Bot程序分析
本文选用Bot程序2017年4月份编译的1.0.0.2版本作为分析的样本,样本MD5:10ace2e06cc8b5656d38eb2e6ed4f079。
Bot程序由main模块,update模块,Scanner模块,Cracker模块,ServerAgent模块和cService模块6个模块构成,模块之间互有联系,相互协作。以下将对每个模块执行的功能进行分析。
- main模块分析
Bot程序是以控制台形式存在的,在介绍main模块之前先介绍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)获取系统信息。
(3)结束并禁用Network list Service和Network Location Awareness。Network list Service用于识别计算机已连接的网络,收集和存储这些网络的属性,并在更改这些属性时通知应用程序;Network Location Awareness用于收集并保存网络配置和位置信息,并在信息改动时通知应用程序。Bot程序关闭并禁用这些服务以防止自身的网络通信被记录。
完成初始化工作之后,main模块将创建新线程执行update模块。update模块检查Bot程序版本并根据情况进行更新。同时,main模块还作为Scanner模块,Cracker模块和ServerAgent模块的入口。
- update模块分析
update模块是Bot程序进行自更新的模块。当程序执行main模块时,将创建线程执行update模块进行版本检查及必要的更新。update模块每6小时进行一次更新检查。
进行更新检查时,update模块首先获取程序当前的版本号,之后通过博客地址“http://blog.sina.com.cn/s/blog_16fb721c50102x6hw.html”获得加密后的C&C的ip地址。将加密后的ip地址去除首尾的分隔符(***和@@@),经过base64解密并与0x36异或之后得到真实的ip地址(在本样本中,C&C ip地址为67.229.144.218,以下简称为“ip”)。
ps.jpg是末尾拼接了一个PE文件的图片。该PE文件就是最新版本的Bot程序。
my1.html是一个批处理脚本,功能与Cracker:mssql模块释放的批处理脚本123.dat基本相同,主要是创建一些需要的文件夹并为之后Cracker模块配置环境。
完成下载之后,cabs.exe会结束Bot程序的进程和服务,更新相关文件之后再重启Bot进程和服务。
- 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
在Bot程序2017年四月份编译的1.0.0.2版本和五月份编译的1.0.0.3版本的其中一个变种中未发现ip黑名单,在五月份编译的1.0.0.3版本的另一个变种中发现了ip黑名单。
对于每一个a类ip,scaner模块排除掉部分b段。由于全网扫描容易遭到监控,通过排除部分ip地址可以减少被发现的风险。
图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 两种不同的扫描模式
scanner模块会记录开放特定端口的ip地址,并且与ServerAgent模块和Cracker模块进行交互完成“端口扫描+爆破+入侵”一系列工作。
- ServerAgent模块分析
ServerAgent模块由两部分功能组成。一是向C&C发送扫描结果;二是对端口扫描和爆破进行相应的配置工作。
ServerAgent模块在scanner模块扫描过程中连接C&C。当scanner模块扫描到开放的端口之后,ServerAgent模块将把对应的ip地址和端口号发送至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部分内容如下图所示。
- 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的权限,包括:
- 恢复xp_cmdshell。
下载的文件中,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中,每天执行一次。
- 将Bot程序加入SQL Agent的job中,并附带参数“-syn 1000”。每次SQL Agent启动时Bot程序也将启动。
Cracker:mssql模块还通过SQL Server执行多段shellcode,大部分的shellcode都以SQL Agent的Job形式存在并定期执行。
第一段shellcode使用wmi中的ActiveScriptEventConsumer类执行脚本代码。该脚本读取http://www.cyg2016.xyz:8888/test.html网页内容,并根据网页内容获取第二组网址,下载文件并执行。
下载的文件包括更新程序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分钟执行一次,猜测作者将挖矿机保存到此目录下是为了保证挖矿机能够稳定运行。
第八段shellcode将123.bat加入启动项中,此处不再赘述。
第九段shellcode从http://down.mys2016.info:280下载文件到C:\\WINDOWS路径下,并命名为ps.exe。ps.exe实际上是PsExec,一款强大的远程执行工具,黑客在每台入侵的计算中部署该工具,使每台计算机成为一个控制端,方便构建一个庞大的僵尸网络。
5.2 Cracker:Telnet
Cracker:Telnet模块是除了Cracker:mssql模块之外较为完善的一个模块。作者充分利用mirai僵尸网络的优点构建了一套类似于mirai的Telnet入侵模块。
在执行Cracker:Telnet模块之前,Bot程序在ServerAgent模块中配置Telnet入侵攻击的payload。ServerAgent模块会根据不同的平台架构从资源段中读取payload并将其转化为十六进制字节码的形式。
由于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-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。
不过这几个模块在之后的版本中都被移除了,而原本功能简单的Cracker:mssql模块在之后的版本中得到了完善。
cService模块分析
cService模块用于管理Bot服务,Bot服务是Service形式的Bot程序。
当Bot程序的启动参数中包含“-create”时,cService模块创建名为“xWinWpdSrv”的服务,该服务以“-s –syn 1500”作为启动参数启动Bot程序。
图2-6-5 Bot程序与其他组件关系图
第三部分 防御总结
从僵尸网络当前的攻击重点来看,防范其通过1433端口入侵计算机是非常有必要的。此外,Bot程序还有多种攻击方式尚未使用,这些攻击方式可能在未来的某一天被开启,因此也需要防范可能发生的攻击。对此,我们总结以下几个防御策略:
1.对于未遭到入侵的服务器,注意msSQL,RDP,Telnet等服务的弱口令问题。如果这些服务设置了弱口令,需要尽快修改;
2.对于无需使用的服务不要随意开放,开放的服务是黑客入侵的前提。对于必须使用的服务,注意相关服务的弱口令问题;
3.特别注意445端口的开放情况。由于黑客曾经使用永恒之蓝漏洞入侵计算机,不排除黑客故技重施。及时打上补丁更新操作系统是非常有必要的。
4.关注服务器运行状况,注意CPU占用率和进程列表和网络流量情况可以及时发现系统存在的异常。此外,注意系统账户情况,禁用不必要的账户。
5.对于网络摄像头持有者,建议修改默认密码以防止黑客直接使用默认密码爆破。
该僵尸网络现今主要依靠端口扫描和弱口令爆破进行传播,但其在“永恒之蓝”漏洞攻击武器出现之初就利用该武器入侵了一定数量的计算机,可见其对于最新曝光的漏洞利用以及攻击方法的掌握十分迅速,因此需时刻警惕其可能发起的重大攻击。
附录
- 相关文件MD5
- 相关ip地址和域名
密码字典
| MySQL |
| root |
| root root |
| root 123 |
| root 123456 |
| phpmind phpmind |
| root admin123 |
| root password |
| root root123 |
| root 123456*a |
| mysqld 654321*a |
| msSQL |
| sa |
| sa sa |
| sa 123 |
| sa 123456 |
| sa password |
| sa 525464 |
| sa shabixuege!@# |
| vice vice |
| sa 3xqan7,n`~!@ ~#$%^&*(),.; |
| sa 4xqan7,m`~!@ ~#$%^&*(),.; |
| mssqla 4xqan7,n`~!@ ~#$%^&*(),.; |
| mssqla 4xqan7,m`~!@ ~#$%^&*(),.; |
| mssqla 3xqan7,mm`~!@ ~#$%^&*(),.; |
| mssqla 3xqan7,m`~!@ ~#$%^&*(),.; |
| mssqla 3xqan7,n`~!@ ~#$%^&*(),.; |
| mssqla 4xqan7,mm`~!@ ~#$%^&*(),.; |
| sa 4xqbn7,m`~!@ ~#$%^&*(),.; |
| mssqla 4xqbn7,mm`~!@ ~#$%^&*(),.; |
| sa 4yqbn7,m`~!@ ~#$%^&*(),.; |
| mssqla 4yqbn7,mm`~!@ ~#$%^&*(),.; |
| sa 4yqbm7,m`~!@ ~#$%^&*(),.; |
| mssqla 4yqbm7,mm`~!@ ~#$%^&*(),.; |
| kisadmin ypbwkfyjhyhgzj |
| hbv7 zXJl@mwZ |
| bwsa bw99588399 |
| ps 740316 |
| uep U_tywg_2008 |
| sa sa123 |
| sa sasa |
| sa 12345 |
| sa sunshine |
| sa trustno1 |
| sa 111111 |
| sa iloveyou |
| sa sql2005 |
| sa DiscoJack |
| sa 1 |
| 401hk 401hk!@# |
| sa admin@123 |
| sa sa2008 |
| sa 123123 |
| sa 1111 |
| sa 1234 |
| sa 12345678 |
| sa 1234567890 |
| sa passw0wd |
| sa abc |
| sa abc123 |
| sa abcdefg |
| sysdba masterkey |
| sa bing_1433 xing |
| sa ^_^$$wanniMaBI:: 1433 vl |
| sa sapassword |
| sa linwen5555 |
| su vice_1433 vice |
| sa Aa123456 |
| sa ABCabc123 |
| sa sqlpassword |
| sa 1qaz2wsx |
| sa 1qaz!QAZ |
| sa sql2008 |
| Telnet |
| !!Huawei @HuaweiHgw |
| system ping ;sh |
| root 1001chin |
| root xc3511 |
| root vizxv |
| admin admin |
| 5up 5up |
| root |
| root jvbzd |
| root root |
| root 123 |
| root hg2x0 |
| root 123456 |
| admin admin1234 |
| root admin |
| superadmin Is$uper@dmin |
| admin |
| support support |
| admin 123456 |
| 1234 1234 |
| Admin Admin |
| admin ho4uku6at |
| admin 123 |
| admin 1234567 |
| admin 12345 |
| root 12345 |
| admin root |
| e8telnet e8telnet |
| telecomadmin nE7jA%5m |
| e8ehomeasb e8ehomeasb |
| telnetadmin telnetadmin |
| e8ehome e8ehome |
| Zte521 Zte521 |
| root Zte521 |
| user password |
| admin password |
| root password |
| user user |
| root 888888 |
| root grouter |
| root 666666 |
| guest 12345 |
| admin ZmqVfoSIP |
| admin 888888 |
| admin guest |
| admin 666666 |
| Admin 111111 |
| admin oelinux123 |
| Administrator meinsm |
| adminlvjh adminlvjh123 |
| default antslq |
| root telnet |
| guest admin |
| netgear netgear |
| realtek realtek |
| root 88888888 |
| service service |
| root cat1029 |
| system system |
| root oelinux123 |
| root tl789 |
| telnet telnet |
| root GM8182 |
| user qweasdzx |
| root hunt5759 |
| root rootpassword |
| zte zte |
| root cisco |
| root telecomadmin |
| root 12345678 |
| root default |
| huawei admin@huawei.com |
| root solokey |
| root twe8ehome |
| dvr dvr |
| supervisor supervisor |
| root 1234567890 |
| root 0123456789 |
| root rootroot |
| Manager manager |
| admin admin888 |
| useradmin useradmin |
| ubnt ubnt |
| root dvr |
| cusadmin highspeed |
| cisco cisco |
| admin smcadmin |
| h3c h3c |
| admin benq1234 |
| admin 12345678 |
| root PASSWD |
| root passwd |
| ROOT PASSWD |
| huawei huawei |
| root h3c |
| root nmgx_wapia |
| toor toor |
| Huawei Huawei |
| admin private |
| root private |
| ssh |
| root |
| root root |
| root 123 |
| root 123456 |
| root i826y3tz |
| root password |
| ubnt ubnt |
| ubnt admin |
| root gwevrk7f@qwSX$fd |
| wmi |
| administrator |
| RDP |
| administrator 123 |
| administrator 123456 |
| administrator |
| administrator 1234 |
| administrator 12345 |
| administrator 5201314 |
| administrator 1qaz2wsx |
| administrator Aa123456 |
| administrator qwe123!@# |
| administrator qwe!@# |
| administrator 123qweqwe |
| administrator 654321 |
| administrator admin |
| administrator 0 |
| administrator password |
| administrator 123123 |
| piress adminlv123 |
| administrator p@ssw0rd |
| administrator 112233 |
| administrator !@#123 |
| administrator 1qaz2wsx3edc |
| administrator !@#qwe |
| administrator zxcvbnm |
| administrator login |
| administrator admin123 |
| administrator 3389 |
| administrator pass |
congtou