01、概述
很多开源组件封装成容器镜像进行容器化部署在提高应用部署效率和管理便捷性的同时,也带来了一些安全挑战。一旦开源系统出现安全漏洞,基于资产测绘就很容易关联到开源组件,可能导致被批量利用。
在本文中,我们将分享一个真实的Docker容器应急实例,涉及到基于开源组件漏洞披露的前后时间段内,容器遭遇挖矿程序植入的情况。我们将深入分析排查过程,还原入侵的步骤和手段,帮助读者了解应对挖矿程序入侵的实际应急操作。
02、分析排查
(1)使用top命令查看,发现kdevtmpfsi进程异常,CPU占用率199%。
(2)通过进程PID和USER查看进程信息,通过进程链定位到进程所在容器的进程PID。
(3)通过进程PID查找对应容器名称,容器名:metabase。
(4)使用docker top 查看容器中的进程信息,找到到容器内异常进程。如下图:异常进程kdevtmpfsi(PID:5613)对应的父进程为JAVA进程(PID:2301)。据此,可初步判断,java应用被入侵,导致容器被植入挖矿木马。
03、溯源分析
(1)使用docker logs查看容器日志,并通过异常信息定义到漏洞触发的位置。如下图:通过POST提交请求,使用wget和curl命令下载挖矿脚本并执行。
docker logs metabase
(2)查看运行的容器对应的镜像版本,对应的镜像为:metabase:v0.46.4
(3)通过日志信息和镜像版本,可进一步关联近段时间的威胁情报:开源BI分析工具 Metabase 中存在远程代码执行漏洞。
(4)漏洞复现,通过exp成功执行命令,确认当前使用镜像存在远程命令执行漏洞。
综上,攻击者通过利用metabase 远程命令执行漏洞对暴露在外网上的服务进行攻击并下载并执行挖矿程序。
04、解决问题
(1)保留入侵痕迹,使用docker commit保存为镜像,可作为demo,用于检测容器安全产品的能力或其他用途。
docker commit -m "CoinMiner" -a "bypass" b4536a12a341 bypass007/miner:1.0
(2)使用docker diff命令查看容器内文件状态变化,通过容器内文件的变化,可以简单地窥探攻击者入侵容器的蛛丝马迹,做了什么操作,改了哪些系统文件。
docker diff metabase
(3)通过对shell脚本文件和挖矿样本进行分析,可以了解到更详细的行为。部分截图如下:
(4)在容器环境里,容器被入侵的清理比较简单,不用着急去清理容器内的挖矿或是后门,直接删除容器即可。比较重要的是,根据定位的漏洞问题进行修复,重构容器镜像。在这里,我们可以将metabase镜像升级到官方提供的最新修复版本,就可以完成本次容器应用漏洞应急的处置。