记一次docker容器中被植入kdevtmpfsi挖矿程序

某天,晴,准时下班与朋友小聚,酒足饭饱后正商量着第二场活动,这时手机短信响起,随手拿起一看。卧槽,提示服务器蠕虫病毒。遂与友人say sorry。回家打开电脑开始杀毒并排查原因。

0POxdb

首先打开阿里云看下日志。这里还是要点赞一下阿里云的云盾,服务器防护与预警属实做的很牛逼。日志提示服务器被植入挖矿程序,并且告知所在进程

image-20201029210354849

查看到是在容器内植入,好在没有植入我的宿主机。当前主机挂载了好几个容器服务。并且宿主机有做端口限制,应该是跑不出去。

逐步排查原因:

执行top可看到挖矿程序疯狂占用CPU。

image-20201029211045157

ps查看进程运行目录,发现tmp中不存在这个文件,猜想可能是docker容器中的进程。

PrvH89

执行 docker stats 查看容器运行情况。能够发现cpu占用高的容器。

f74cMY

执行 docker top 容器id 查看容器进程详细信息

PHUCaI

为什么会被植入?

  • 网上说的redis漏洞。

    该镜像没有集成redis。PASS

  • 镜像本身是否存在病毒?

    很多镜像可能会集成第三方的插件,或者jar包。那么排查镜像源问题,可使用命令 docker inspect <镜像id> 查看镜像元数据进行排查。我镜像都是自己打包上传,并且本地重新下载镜像并未发现任何异常。大概率PASS

  • 远程执行漏洞?

    那就很有可能是存在这个问题了。该docker容器开放了9999(用于xxl-job分布式事务),8085用于spring-boot服务(大概率可以排除)。那就应该是XXL-JOB的锅了。搜索得知,XXL-JOB远程执行漏洞导致kdevtmpfsi挖矿病毒:

    https://help.aliyun.com/noticelist/articleid/1060736995.html?spm=5176.2020520154.sas.52.e96d1e430g70fo

最终解决

1、9999端口加上IP限制,只允许xxljob-admin源服务器ip地址调用。

2、xxl-job增加授权验证,配置 xxl.job.accessToken 防止未授权访问漏洞。