首先,我在前一篇文章中已经拙陋的分析了下我方服务器中毒的大概经过和我的查处方式,这篇文章呢,继续送上处理病毒篇
上篇文章---记录一次服务器被挖矿的经历
一、观察病毒归属,分析并结合以往前辈的经历,总结杀毒方式
获取busybox
为什么要获取busybox?这就是此次事件的特别之处,如果你使用top、ps等系统命令是看不到挖矿进程的,因为挖矿病毒修改了系统的动态链接库配置文件 /etc/ld.so.preload 内容并引用了 /usr/local/lib/libioset.so ,所以有些运维人员开始top、ps等未查找到异常进程是由于该病毒涉及到 Linux动态链接库预加载机制,是一种常用的进程隐藏方法,而系统的ls,ps等命令已被通过so库的preload机制被病毒劫持, ls会导致/etc/cron.d/root文件被刷写为病毒定时执行命令。
而busybox是静态编译的,不依赖于系统的动态链接库,从而不受 ld.so.preload 的劫持,能够正常操作文件。
cd /bin/
wget https://busybox.net/downloads/binaries/1.30.0-i686/busybox
chmod 755 busybox
然后使用命令 busybox top 可以查看到 到底是谁在吃服务器资源
使用静态链接库加top
根据这个我们可以很清楚的看到有两个用户kxadmin和root创建的两个进程 这两个进程一个是临时文件夹下的
一个看似是个系统进程
总之经过一两分钟的观察我们可以确定的是 他们两个都不是啥 正常进程了 已经被感染了
然后,我就不信邪 天真的跑去 kill 进程 可是并没有卵用 一会儿他又会拉起来了,感觉病毒当时就是这个表情
感觉被无情嘲讽(想kill我? 没用的)
那怎么办呢?幸好发现了前辈们已经有过讲解了,赶紧再去翻阅前辈们的文章,今天推荐的是这位的,分析很到位
点我去见大佬的精准分析
大佬再文章中从专业角度出发,分析解剖了Watchdogs变种的kthrotlds病毒,总之呢就是有办法了,我就跟着大佬的脚步去试探,发现大佬说的那个病毒和我的中的不一样,但是可以得出结论他们的形式是一样的,下面我就着重分析一下
虽然我们不知道我们感染的病毒名字叫什么 但是可以去找,
大佬文章里面有一段是描述这个病毒的特征把自己注册进开机启动服务的,所以我们也去找找
来到etc/init.d目录下面我确实是看到了一个netdns的文件就直接vi开了,下面是具体内容
#! /bin/bash
#chkconfig: - 99 01
#description: kpsmouseds daemon
#processname: /usr/sbin/kpsmouseds
### BEGIN INIT INFO
# Provides: /user/sbin/kpsmouseds
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: kpsmouseds deamon
# Description: kpsmouseds deamon
### END INIT INFO
LocalPath="/usr/sbin/kpsmouseds"
name='kpsmouseds'
pid_file="/tmp/.iCEunix"
stdout_log="/var/log/$name.log"
stderr_log="/var/log/$name.err"
get_pid(){
cat "$pid_file"
}
is_running(){
[ -f "$pid_file" ] &&/usr/sbin/kpsmouseds -Pid $(get_pid) > /dev/null 2>&1
}
case "$1" in
start)
if is_running; then
echo "Already started"
else
echo "Starting $name"
$LocalPath >>"$stdout_log" 2>> "$stderr_log" &
echo $! > "$pid_file"
if ! is_running; then
echo "Unable to start, see$stdout_log and $stderr_log"
exit 1
fi
fi
;;
stop)
if is_running; then
echo -n "Stopping$name.."
kill $(get_pid)
for i in {1..10}
do
if ! is_running; then
break
fi
echo -n "."
sleep 1
done
echo
if is_running; then
echo "Not stopped; maystill be shutting down or shutdown may have failed"
exit 1
else
echo "Stopped"
if [ -f "$pid_file"]; then
rm "$pid_file"
fi
fi
else
echo "Not running"
fi
;;
restart)
$0 stop
if is_running; then
echo "Unable to stop, will notattempt to start"
exit 1
fi
$0 start
;;
status)
if is_running; then
echo "Running"
else
echo "Stopped"
exit 1
fi
;;
*)
echo "Usage: $0{start|stop|restart|status}"
exit 1
;;
esac
exit 0
这个脚本 我和大佬分析出来的kthrotlds病毒的脚本对比了一下 就是名字不一样,他叫kthrotlds,我这里叫
kpsmouseds
那么问题来了
到底还有什么是一样的什么是不一样的呢,关于这个问题,我们可以从前代的病毒清理脚本分析出来,
我们先看看前辈们给的处理方式:
默安科技的清理脚本
我们看一下这个脚本大概都是怎么做的呢
对于杀毒啊,我总结了一个小道理,一般病毒都更新的比较快,所以我们要参考去处理的时候,一定要选取时间最近的处理方式去着重参考,这样有利于我们快速解决问题
下面是我的小结论
根据3月1号的变种处理分析,恶意进程、感染命令库、注册守护进程 。这三项是我们的重点,
1、恶意进程我们已经通过刚刚的netdns找到了名字,他就叫做kpsmouseds
2、上面引用的大佬们在文章中已经指出,要去查看/usr/local/lib/libcset.so 所以我们也去这个目录找,发现,并没有这个文件,但是有且仅有一个libcmoused.so,我们一看这个文件的后半部分不就和我们1步找到变种文件的后半部分一样么,所以宁静而错杀也不放过,他就是嫌疑人了,
3、netdns文件我们已经找到过了,所以先列出这三项。
二、编辑杀毒脚本
我们先列出默安科技的kthrotlds清理脚本,在此基础上进行更改;
service crond stop
busybox rm -f /etc/ld.so.preload
busybox rm -f /usr/local/lib/libcset.so
chattr -i /etc/ld.so.preload
busybox rm -f /etc/ld.so.preload
busybox rm -f /usr/local/lib/libcset.so
# 清理异常进程
busybox ps -ef | busybox grep -v grep | busybox egrep 'ksoftirqds' | busybox awk '{print $1}' | busybox xargs kill -9
busybox ps -ef | busybox grep -v grep | busybox egrep 'kthrotlds' | busybox awk '{print $1}' | busybox xargs kill -9
busybox rm -f /tmp/kthrotlds
busybox rm -f /etc/cron.d/tomcat
busybox rm -f /etc/cron.d/root
busybox rm -f /var/spool/cron/root
busybox rm -f /var/spool/cron/crontabs/root
busybox rm -f /etc/rc.d/init.d/kthrotlds
busybox rm -f /usr/sbin/kthrotlds
busybox rm -f /etc/init.d/netdns
ldconfig
# 再次清理异常进程
busybox ps -ef | busybox grep -v grep | busybox egrep 'ksoftirqds' | busybox awk '{print $1}' | busybox xargs kill -9
busybox ps -ef | busybox grep -v grep | busybox egrep 'kthrotlds' | busybox awk '{print $1}' | busybox xargs kill -9
# 清理开机启动项
chkconfig netdns off
chkconfig –del netdns
service crond start
echo "Done, Please reboot!"
下面是我更改完成后的脚本
#! /bin/bash
service crond stop
busybox rm -f /etc/ld.so.preload
busybox rm -f /usr/local/lib/libcmoused.so
chattr -i /etc/ld.so.preload
busybox rm -f /etc/ld.so.preload
busybox rm -f /usr/local/lib/libcmoused.so
# 清理异常进程
busybox ps -ef | busybox grep -v grep | busybox egrep 'ksoftirqds' | busybox awk '{print $1}' | busybox xargs kill -9
busybox ps -ef | busybox grep -v grep | busybox egrep 'kpsmouseds' | busybox awk '{print $1}' | busybox xargs kill -9
busybox ps -ef | busybox grep -v grep | busybox egrep 'kpsmouseds' | busybox awk '{print $1}' | busybox xargs kill -9
busybox rm -f /tmp/kpsmouseds
busybox rm -f /etc/cron.d/tomcat
busybox rm -f /etc/cron.d/root
busybox rm -f /var/spool/cron/root
busybox rm -f /var/spool/cron/crontabs/root
busybox rm -f /etc/rc.d/init.d/kpsmouseds
busybox rm -f /usr/sbin/kpsmouseds
busybox rm -f /etc/init.d/netdns
ldconfig
# 再次清理异常进程
busybox ps -ef | busybox grep -v grep | busybox egrep 'ksoftirqds' | busybox awk '{print $1}' | busybox xargs kill -9
busybox ps -ef | busybox grep -v grep | busybox egrep 'kpsmouseds' | busybox awk '{print $1}' | busybox xargs kill -9
# 清理开机启动项
chkconfig netdns off
chkconfig –del netdns
service crond start
echo "Done, Please reboot!"
# sidie@moresec
# lishaolong edit 2019.3.20
在服务器上执行之后 立马就OK了 至今五六个小时过去也没反弹
额,误打误撞处理完了
三、关闭可能存在的后门
网上对于这个病毒的大部分论调是说基于redis的设置漏洞
那么我联想到2月份有段时间 我服务器上的redis确实是有问题过,也是大概从那时候起 我们的服务器开始高负荷运转,所以只设置让其监听127.0.0.1就行。
先这样吧 如果有类似的问题 刚好你遇到,可以在底下评论 我可以给点小小的建议。
网友评论