-
-
[原创]悄然崛起的挖矿机僵尸网络:打服务器挖价值百万门罗币
-
发表于: 2017-9-4 15:03 7735
-
悄然崛起的挖矿机僵尸网络:打服务器挖价值百万门罗币
第一部分 背景
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 程序版本更替及感染量概览图
从图 1-1 中可以看出, Bot 程序自 4 月底开始传播量开始出现爆发式增长,这正是作者利用“永恒之蓝”漏洞攻击武器进行僵尸网络建立的时间段。此外, Bot 程序有一套完善的更新体系,当 Bot 程序检测到有新版本发布之后,将自动更新至最新版本。从图 1 种也不难看出,新版本传播量增加之后,老版本的传播量也相应地下降。
Bot 程序当前的主要目的是安装门罗币挖矿机,利用服务器资源挖矿。截止目前,作者的门罗币钱包已经有高达 1975 枚门罗币,当前约合人民币 167 万。
图 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 程序所接收的启动参数以及参数对应的功能。
接受的参数
|
执行的功能 |
-syn
|
扫描器 TCP_SYN 模式 |
-log
|
记录执行过程 |
-see
|
显示控制台窗口 |
-srv
|
从远端获取 report ip
|
-cli
|
从本地获取 report ip
|
-start
|
启动 Bot 服务 |
-stop
|
停止 Bot 服务 |
-create
|
创建 Bot 服务 |
-delete
|
删除 Bot 服务 |
-run
|
启动 Bot 服务(配合 -create 使用)
|
-s
|
以服务形式执行 main 模块 |
-d
|
首次运行 |
-t
|
最大扫描线程数 |
表 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 获取系统信息
( 2 )判断系统类型是否为 Server 。
图 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
( 4 )结束并禁用 SharedAccess 和 MpsSvc ( Intemet 连接共享和防火墙服务)以保障 Bot 程序的网络通信能够正常进行,并且删除日志文件。
图 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 模块
图 2-2-2 调用 Sleep 函数以定期执行 update 模块
进行更新检查时, 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 ”)。
图 2-2-3 博客中加密的 ip 地址
http://ip:8888/ver.txt 中存放最新的 Bot 程序版本号, update 模块读取该版本号并与当前 Bot 程序的版本号进行对比。当两者相同时,则认为程序已经更新到最新版本,继续执行后续功能;当两者不同时,则对程序进行更新。
图 2-2-4 对比 Bot 程序版本和最新版本号
图 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 并启动更新
cabs.exe 会判断当前计算机系统是否为 Windows Server ,只有当当前计算机系统为 Windows Server 时才会执行更新。
图 2-2-6 判断当前系统是否为 Windows Server
如果当前计算机系统为 Windows Server ,则访问 http://ip:8888/update.txt 获取最新的下载列表,并将下载列表下载到 c:\\windows\\system 路径下,命名为upslist.txt 。
图 2-2-7 下载下载列表
下载列表中包含两个文件 ps.jpg 和 my1.html 。
图 2-2-8 下载列表内容
ps.jpg 是末尾拼接了一个 PE 文件的图片。该 PE 文件就是最新版本的 Bot 程序。
图 2-2-9 藏有最新版本 Bot 程序的图片
图 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
在 Bot 程序 2017 年四月份编译的 1.0.0.2 版本和五月份编译的 1.0.0.3 版本的其中一个变种中未发现 ip 黑名单,在五月份编译的 1.0.0.3 版本的另一个变种中发现了 ip 黑名单。
图 2-3-2 存放在 Bot 程序资源段中的 ip 黑名单
对于每一个 a 类 ip , scaner 模块排除掉部分 b 段。由于全网扫描容易遭到监控,通过排除部分 ip 地址可以减少被发现的风险。
图 2-3-3 scanner 模块排除部分 ip 地址后扫描全网
scanner 模块能够扫描的端口包括 1433 端口, 3306 端口, 135 端口, 22 端口, 445 端口, 23 端口, 80 端口和 3389 端口。
图 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 模块进行交互完成“端口扫描 + 爆破 + 入侵”一系列工作。
4. ServerAgent 模块分析
ServerAgent 模块由两部分功能组成。一是向 C&C 发送扫描结果;二是对端口扫描和爆破进行相应的配置工作。
ServerAgent 模块在 scanner 模块扫描过程中连接 C&C 。当 scanner 模块扫描到开放的端口之后, ServerAgent 模块将把对应的 ip 地址和端口号发送至 C&C 。
图 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 密码字典的部分内容
wpd.dat 实际上是一个 xml 文件,里面包含 mysql , mssql , telnet , wmi , ssh , rdp 的密码字典以及不同的入侵方式执行的 shell 。此外, wpd.dat 中存在一个名为 ports 的键,当该键的某个子健键值为 1 时, ServerAgent 模块将配置 scanner 模块使其扫描该子键对应的端口。
图 2-4-3 ports 键概览
在默认的 wpd.dat 中,只有 mssql 子键的值设为 1 ,因此 scanner 模块只扫描 mssql 服务对应的端口(端口号 1433 )。黑客可以通过配置 wpd.dat 文件增加、减少、修改扫描端口的数目和类别。
图 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 段
图 2-4-6 测试中生成的随机 ip 段
图 2-4-7 从抓包数据中发现此轮扫描中 Bot 程序扫描其随机生成的 ip 段
5. Cracker 模块分析
Cracker 模块是 Bot 程序中最重要的模块。该模块用于入侵目标计算机并在目标计算机上执行恶意代码。 Cracker 模块分为多个小模块,在分析的样本中包括Cracker:CCTV , Cracker:mssql , Cracker:RDP , Cracker:Telnet 四个小模块。按照入侵的端口的不同, Cracker 模块提供不同的攻击方式。下面将介绍每一种攻击的实现。
5.1Cracker: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
2. 开启被禁止的 xp_cmdshell 。
图 2-5-2 开启 xp_cmdshell
3. xp_cmdshell 被删除后,使用 SP_OACreate 执行 shell 。
图 2-5-3 使用 SP_OACreate 执行 shell
4. 开启 CLR enabled 选项,使用 SQL Server CLR 执行 shel l 。
图 2-5-4 开启 CLR enabled 选项
5. 注册 regsvr32.dll 执行远端代码所需的组件,使用 regsvr32.dll 执行 shell 。
图 2-5-5 注册相关组件
6. 通过沙盒执行 shell 。
图 2-5-6 通过沙盒执行 shell
7. 开启 SQL Agent 服务,使用 SQL Agent 服务执行 shell 。
图 2-5-7 开启 SQL Agent 服务
Cracker:mssql 模块所执行的主要功能主要包括以下几方面:
1. 在 c:\\windows\system32\wbem 下创建批处理文件 123.dat ,并在该文件中写入内容。
图 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
该文件是个组策略模板文件,主要是禁止一些涉及到的文件的访问权限。在创建该模板文件之后调用 secedit.exe 配置组策略。
图 2-5-10 调用 secedit.exe 配置组策略
3. 在 c:\\windows\system 下创建文件 myusa.dvr ,并在文件中写入内容。
图 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 内容
下载的文件中, 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中
5. 以 Job 的形式每 20 分钟运行一次 C : \\Progra~1\mainsoft\install.exe 。该程序是一个挂机赚分软件。
图 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 定时执行 C:\\windows\debug 下的exe
图 2-5-16 定时执行 C:\\Progra~1\\shengda 下的 exe
图 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 内容
图 2-5-19 msinfo.bat 内容
8. 将 item.dat 和 123.bat 加入启动项中。
图 2-5-20 将 item.dat 加入启动项中
图 2-5-21 将 123.bat 加入启动项中
9. 确定权限允许之后,删除 SQL 用户,并设置 SQL SA (超级管理员)帐户及密码,同时添加多个 SQL 帐户。完成这步操作之后,黑客正式接管该计算机的 SQL Server ,管理员无法再通过之前的帐户登录 SQL Server 。
图 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 内容
下载的文件包括更新程序 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 下载挖矿机和更新程序
第二段 shellcode 使用 js 脚本执行恶意代码,脚本功能与第一段 shellcode 中的 jscript 代码相同。
图 2-5-25 第二段 shellcode 内容
第三段 shellcode 同样使用 wmi 脚本执行 jscript 代码,所执行的功能与创建的批处理文件 123.bat 的功能相同,猜测作者此举为了防止文件 123.bat 被杀毒软件清除而执行的备用方案。
图 2-5-26 第三段 shellcode 内容
第四段 shellcode 是第三段 shellcode 的 js 版本。不难发现,作者对于每段 shellcode 都准备了 wmi 和 js 两种版本,以确保脚本执行的稳定性。
图 2-5-27 第四段 shellcode 内容
第五段 shellcode 通过恢复 cmdshell ,恢复 SP_OACreate 等方式保证能通过 SQL Server 执行 shell ,猜测作者通过 Job 定期执行这段 shellcode 以保证 shell能长期存活。
图 2-5-28 第五段 shellcode 内容
第六段 shellcode 删除 C:\\Documents and Settings\Default User\Local Settings\Temporary Internet Files\Content.IE5 路径下的文件。由于下载文件时都会在该目录下留下对应的 tmp 文件,作者此举是为了防止用户通过该目录发现可疑文件,可见作者对痕迹的清理十分细心。
图 2-5-29 第六段 shellcode 内容
第七段 shellcode 使用 js 脚本访问 http://www.cyg2016.xyz:8888/kill.html ,该页面是个文件名列表。脚本搜寻系统中是否存在与该页面返回的文件名相同的文件,若存在则结束对应进程并将文件删除。这些文件大多数是一些其他入侵者释放的挖矿机。
图 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 待删除文件列表
第八段 shellcode 将 123.bat 加入启动项中,此处不再赘述。
第九段 shellcode 从 http://down.mys2016.info:280 下载文件到 C:\\WINDOWS 路径下,并命名为 ps.exe 。 ps.exe 实际上是 PsExec ,一款强大的远程执行工具,黑客在每台入侵的计算中部署该工具,使每台计算机成为一个控制端,方便构建一个庞大的僵尸网络。
图 2-5-32 第九段 shellcode 内容
第十段 shellcode 主要是完成 SQL 提权的一系列操作。
图 2-5-33 第十段 shellcode 内容
第十一段 shellcode 是利用 SQL Server CLR 执行 shell 的 payload ,从 payload 中可以发现其访问 http://www.cyg2016.xyz:8888/clr.txt 并执行该页面中返回的内容。
图 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
在 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 的相关标识
除了 payload 与 mirai 相同之外, Cracker:Telnet 模块也基本修改自 mirai 源码,包含密码爆破功能和入侵功能。
图 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 服务器地址
由于 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 模块扫描端口
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 摄像头
由于在密码字典 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:MySQL 模块
图 2-5-41 Cracker:WMI 模块
图 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 服务
当 Bot 程序的启动参数包含“ -delete ”时, cService 模块删除“ xWinWpdSrv ”服务。
图 2-6-2 删除 Bot 服务
当 Bot 程序的启动参数包含“ -start ”时, cService 模块启动“ xWinWpdSrv ”服务。
图 2-6-3 启动 Bot 服务
当 Bot 程序的启动参数包含“ -stop ”时, cService 模块停止“ xWinWpdSrv ”服务。
图 2-6-4 停止 Bot 服务
Bot 程序模块众多,并且各模块之间关系紧密,相互配合。此外, Bot 程序与其他组件相辅相成,以保证攻击者对计算机的持久控制以及僵尸网络的不断壮大。以下将用一个关系图描述 Bot 程序与其他组件之间的关联。
图 2-6-5 Bot 程序与其他组件关系图
第三部分 防御总结
从僵尸网络当前的攻击重点来看, 防范其通过 1433 端口入侵计算机是非常有必要的。此外, Bot 程序还有多种攻击方式尚未使用,这些攻击方式可能在未来的某一天被开启,因此也需要防范可能发生的攻击。对此,我们总结以下几个防御策略:
1. 对于未遭到入侵的服务器,注意 msSQL , RDP , Telnet 等服务的弱口令问题。如果这些服务设置了弱口令,需要尽快修改;
2. 对于无需使用的服务不要随意开放,开放的服务是黑客入侵的前提。对于必须使用的服务,注意相关服务的弱口令问题;
3. 特别注意 445 端口的开放情况。由于黑客曾经使用永恒之蓝漏洞入侵计算机,不排除黑客故技重施。及时打上补丁更新操作系统是非常有必要的。
4. 关注服务器运行状况,注意 CPU 占用率和进程列表和网络流量情况可以及时发现系统存在的异常。此外,注意系统账户情况,禁用不必要的账户。
5. 对于网络摄像头持有者,建议修改默认密码以防止黑客直接使用默认密码爆破。
该僵尸网络现今主要依靠端口扫描和弱口令爆破进行传播,但其在“永恒之蓝”漏洞攻击武器出现之初就利用该武器入侵了一定数量的计算机,可见其对于最新曝光的漏洞利用以及攻击方法的掌握十分迅速,因此需时刻警惕其可能发起的重大攻击。
附录
1. 相关文件 MD5
MD5
|
042ac6f93597e80112a1c42fdb79e3df
|
42c0b80fe0a28401f2b64a522f1dea84
|
d7378a709dc4deb1a034676c43de503a
|
ad0496f544762a95af11f9314e434e94
|
5707f1e71da33a1ab9fe2796dbe3fc74
|
5af3bab901735575d5d0958921174b17
|
6a936ad69c708f3ac70da2f76b8b619e
|
fe04395c95cdd102aeabbf6b915c1a5e
|
f068b7be8685c91bddbb186f6fad7962
|
10ace2e06cc8b5656d38eb2e6ed4f079
|
a38a1e11f7222f7c48aaf33e20c78f48
|
6b13994f83dad0d45764911a88564a7b
|
f249446c28ab983c395ca4e198db3528
|
7b7b1c2a2201aebf22aaf8fe7901c0e9
|
ca748d5eac754e0b0026474ae7a51f3f
|
e81e96be9d90a1a1a0871196d0374c26
|
75f6543447b4726c56d183951526b379
|
98d615c222293ca937ab4b1b4a7c8118
|
c3a5859a5d438ff3f62d81ec3894d9ca
|
2. 相关 ip 地址和域名
ip 地址、域名
|
67.229.144.218
|
13.59.110.123
|
209.58.186.145
|
www.cyg2016.xyz
|
js.mys2016.info
down.mys2016.info
|
ftp.oo000oo.me
wmi.oo000oo.club
down.oo000oo.club
|
js.f4321y.com
up.f4321y.com
|
wmi.mykings.top
js.mykings.pw
|
xmr.5b6b7b.ru
js.5b6b7b.ru
|
64.myxmr.pw
|
3. 密码字典
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
|
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课