1. 收到警告
8.15 20:41和8.19 06:35收到了阿里云安全中心的警告,表示有挖矿程序:
我上线阿里云,然后top,发现有个docker程序CPU占用100%,发现不对劲,然后查看docker镜像发现这样:
我将镜像和已经运行的容器分别导出,还有Docker引擎日志:
docker export 866f7e02e419 > xmr_running.tar \
docker save fd1815ba61bf > xmr.tar \
docker save 1fbcc6b19220 > cpuinfo.tar \
journalctl -u docker.service > docker2.logs
导出镜像的启动参数:
docker ps -a --no-trunc > start.log
2. 前置因素和简单分析
第一我可以确定没有泄露root的密码,因为给我挂xmr的人并没有通过ssh或者其他方式直连我的服务器,如果我的系统被攻击,这个人首先应该会给我加上linux定时任务之类的并且留下后门,目前我暂时没有发现和收到警告,除非这个人很强(能绕过阿里云盾的监控)。
第二我在被8.15,也就是被挂xmr之前曾经使用过idea的外部插件,这个插件需要开启云服务器的2375端口。我猜测跟这个2375端口和docker漏洞有关,涉及到的运行的程序是dockerd,可以通过netstat -anp | grep 2375
查看,我的天翼云、腾讯云没有对外开启2375,所以至今没有什么问题
第三这个应该是无差别攻击,因为我在发现问题之后立马就stop掉了不对劲的镜像,一天之内就没有发生再度重启等现象。而是等了很久才给我再度拉取镜像并运行
接下来要做的事情就是分析cpuinfo和xmr镜像做了那些事
我是今早6.35收到的警告,所以docker日志可以查看这个点附近的,主要查看pull和run的记录
3. 文件分析
cpuinfo镜像
cpuinfo的运行参数为/start.sh
:
#!/bin/sh
cat /cpuinfo |grep processor |wc -l
这个/cpuinfo暂时不确定作用
xmr镜像
xmr的运行参数为/bin/sh -c /docker-entrypoint.sh
等同于直接执行docker-entrypoint.sh
先查看docker-entrypoint.sh
:
#!/bin/sh
sed -i "s/docker/${NAME}/g" /config.json
/xmrig -c /config.json
简单来说就是先把config.json
复制到/xmrig
下,然后以config.json
作为参数运行xmrig
。
xmrig
是个二进制文件,所以无法看到什么有用的信息:
但我查看了xmrig
的运行日志发现了这个程序的意义:
然后我用C3XMRig/5.11.2-c3
作为关键字Google了一下:
发现这个是挖矿程序,而XMR就是门罗币,这个挖矿程序是xmrig,并且以c3作为矿池(应该)
找到了官方的github,然后查看config.json的配置信息看能否得到一些信息
命令行地址在这里:https://xmrig.com/docs/miner/command-line-options
对比发现比较有用的信息如下:
"url": "118.190.200.162:3333",
"user": "88LWejQex7AQuyyT5DavSmemh3wGCmqWejE9ZPEZ64dm3gJgXgxhrwH6QdA4DACqErfn11ZANjJEdN8LKAUqiZdvNwg4vSa",
"pass": "docker",
url是矿池的地址,通过查看IP发现这个矿池的地址是阿里云的:
估计是当跳板机,现在想到如下的临时解决方案(不确定有效性)
由于是矿池,这个用户名和密码估计只是获取算力任务用的,于我没多大用
4. 临时解决方案
- 不对外开放2375
- 监控cpu,一旦某个程序占用超过50%立马kill
- 定时任务,每隔1小时执行docker stop xmr
- hostsname中设置
118.190.200.162 127.0.0.1
,这个不行就黑名单加入118.190.200.162
5. 结案
看了这篇文章:http://dockone.io/article/1346
然后试了一下,居然还真的可以。。。
远程执行系统命令
然后我通过外网的搜索引擎通过分词 docker port:2375,搜到了很多2375端口的主机
然后我试了下发现也可以:
结论就是docker 2375端口得关掉