记一次`kdevtmpfsi`挖矿病毒的处理

《记一次`kdevtmpfsi`挖矿病毒的处理》
《记一次`kdevtmpfsi`挖矿病毒的处理》

无意间突然发现服务器很卡,不知道是什么原因,然后登录服务器一见,发现了一个很陌生的进程kdevtmpfsi,而且CPU占用还高达200%,惊😨! 百度了一下,原来这个就是大名鼎鼎的挖矿病毒!!😲,千思万想,这是….怎么入侵到我的服务器的? 。。。 应该是我的技术还是太菜了😭😭😭 ,没有办法,先解决病毒问题,再考虑加强安全的问题!

解决办法:

//病毒主进程
# find / -name kdevtmpfsi*
# rm -rf ....

//病毒守护进程
# find / -name kinsing
# rm -rf ....

//查找并杀死进程pid
# ps -aux | grep kdevtmpfsi
# kill -9 xxx

# ps -aux | grep kinsing
# kill -9 xxx

//查看cornd , 位于/var/spool/cron(最重要!)
//网上很多都说病毒自唤醒在crontab -e
//但博主发现是在/var/spool/cron/nginx , 而不是root
//清空nginx文件并设置chmod 0111,禁止写入 

暂停php-fpm,nginx,开始修补漏洞!

病毒文件位置分布:(本机)

[root@localhost ~]# find / -name kdevtmpfsi*
/dev/shm/kdevtmpfsi
/var/tmp/kdevtmpfsi
/tmp/kdevtmpfsi
/tmp/systemd-private-1a3bc4576d084e47ab37fb3136f43ef7-php-fpm.service-sODEEW/tmp/kdevtmpfsi

后续分析:

感觉病毒是通过nginx植入进来的 ,因为病毒的执行用户就是nginx,说明病毒只有nginx的执行权限,但nginx是主要服务,不能关闭….. 病毒是利用nginx的漏洞爬进来的吗?那应该怎么应对呢?

《记一次`kdevtmpfsi`挖矿病毒的处理》

由上图可以得出,病毒是通过注入shell来入侵的

看着病毒发作也是一件很有趣的事🤣🤣

查看系统日志:“/var/log ” 下的 cron文件和secure文件和messages文件 ,cron用于查看病毒在执行什么唤醒命令, secure用于查看病毒执行过哪些命令

经过翻阅大量的资料,可以有90%的确定性是由: php-fpm(CVE-2019-11043)这个漏洞引起的 , Nginx配置fastcgi_split_path_info并且以^开始以$结束,只有在这种条件下才可以通过换行符来打断正则表达式判断。 ps: 则允许index.php/321 -> index.php

可以查看这篇详细介绍这个漏洞的文章 php-fpm(CVE-2019-11043):https://github.com/neex/phuip-fpizdam#the-full-list-of-preconditions

fastcgi_split_path_info ^(.+?\.php)(/.*)$;

//临时解决:修改nginx相应的配置,并在php相关的配置中加入
try_files $uri =404

//受影响的版本及正式修复:
将PHP 7.1.X更新至7.1.33
将PHP 7.2.X更新至7.2.24 
将PHP 7.3.X更新至7.3.11  //博主的刚好是7.3.10 😭😭
或更新至php8.0以上

在nginx层面没有定义对文件的检查比如try_files $uri =404,如果nginx层面做了文件检查,则请求不会被转发给php-fpm

这个漏洞在实际研究过程中对真实世界危害有限,其主要原因都在于大部分的nginx配置中都携带了对文件的检查,且默认的nginx配置不包含这个问题。

但也正是由于这个原因,在许多网上的范例代码或者部分没有考虑到这个问题的环境,例如Nginx官方文档中的范例配置、NextCloud默认环境,都出现了这个问题,该漏洞也正真实的威胁着许多服务器的安全。

在这种情况下,这个漏洞也切切实实的陷入了黑暗森林法则,一旦有某个带有问题的配置被传播,其导致的可能就是大批量的服务受到牵连,确保及时的更新永远是对保护最好的手段

将php升级至最新版(php8.0)

//卸载旧版本的php: 
# yum -y remove php php-* 

//安装新版本:
CentOS 8:
sudo dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
sudo dnf -y install yum-utils
sudo dnf module reset php
sudo dnf module install php:remi-8.0 -y
sudo dnf install php -y

CentOS 7:
sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum -y install yum-utils
sudo yum-config-manager --enable remi-php80
//如果出现报错:File "/bin/yum-config-manager", line 135....
vi /usr/bin/yum-config-manager
#!/usr/bin/python2 -tt
遇到这个错误是因为我升级了Python到3,但是yum-config-manager这个文件头的Python没有改成Python2,只能用2

//下面选择自己需要安装的模块来安装
sudo yum -y install php php-{cli,fpm,mysqlnd,zip,devel,gd,mbstring,curl,xml,pear,bcmath,json}

后记,因为此事,所有的程序都被我怀疑了一遍🤣🤣

点赞

发表评论

邮箱地址不会被公开。 必填项已用*标注