XMRig门罗币挖矿木马
XMRig https://github.com/xmrig/xmrig是一款开源高性能的矿工(门罗币挖矿)程序.这篇文章不是教你如何使用这个软件挖矿, 而是教你如何辨别服务器是不是被植入挖矿木马, 当了别人的免费矿工, 运气好还能坐收渔翁之利.
事件开头
博主正在写代码突然收到了阿里云服务器的短信警告, 大意就是服务器已经被植入了"挖矿程序". 马上SSH到服务器, 发现服务器CPU 100%, 卡的要命并且多了一个名为"xmrig"的进程. 百度了一番了解到这是个挖矿程序. 以为我的SSH帐号密码泄漏了, 由于时间比较晚了简单起见就恢复了服务器快照, 然后修改了SSH密码. 没想到的是第二天凌晨1点左右又收到阿里云短信警告说被植入了"挖矿程序".
月黑风高夜, 杀人放火天. 凌晨一点半, 放马害人间.
这么晚出来搞事情, 一看干的就是偷鸡摸狗的勾当.
怎么判断服务器是不是被植入了挖矿程序
典型的症状就是CPU占用率飙升几乎持续100%, 导致服务器卡顿. 如果你自己没有主动的开启一些耗用CPU的任务或程序, CPU却莫名的长时间维持100%的占用率, 你就要怀疑了. 在命令终端输入
top
命令查看进程, 默认是cpu使用率最高的进程排在第一.
如上图这个名称为xmrig
的进程占用了大量的CPU很可疑. 不认识没关系, 度娘!
干掉它
我已经知道那个PID 2992 名称为xmrig
的进程就是挖矿程序了. 尝试kill 9 29982
命令发现进程杀不掉, 马上又以一个新的PID继续运行了. 不过我发现这个xmrig
是以docker container的形式运行的(代表了是通过docker入侵的我的服务器). 输入命令
docker container ps
查看正在运行的容器
root@ssyycc:~# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1fbb8548f524 lore-blog:latest "sh -c 'java -XX:+Un…" 2 days ago Up 2 days 8080/tcp lore-blog
e1acf8b43b83 nginx:1.17.3 "/bin/bash -c 'envsu…" 11 days ago Up 11 days 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp nginx
3a00f9d9531d mysql:8.0.17 "docker-entrypoint.s…" 11 days ago Up 11 days 33060/tcp, 0.0.0.0:6612->3306/tcp mysql
276246382d1a tanchao2014/mytest "/xmrig -a cryptonig…" 2 weeks ago Up 4 seconds dazzling_shannon
前3个是我自己运行的容器, 很容易区分出最后一个就是挖矿程序了, 用命令
docker container stop 276246382d1a
停止该容器. 然后可以将该container和对应的image删除了.
docker container rm 276246382d1a
docker image rm [image id]
不过我还要扒一扒这个入侵者的信息, 所以暂时先不删除了. 但是最重要的还是封堵入侵的入口. 这个在之后的文章在提(一般都是用默认的端口2375开启了没有TLS的远程链接).
扒一扒入侵者
查了服务器的log, 登陆日志中并没有什么异样(并不是被入侵者清除了, 他也就是会用些工具的小白). docker的链接日志, 有个国外的IP. 看来是挂了代理或者是也是个被入侵的肉鸡服务器. 因为我服务器除了被安装了一个挖矿程序, 还被安装了一个扫描其它可入侵机器的程序.
只好看看这个xmrig
的docker image 有没有什么有用的信息了. 我的服务器是ubuntu 18系统, 使用的docker官方脚本安装的docker应用. image在/var/lib/docker/image/
目录下. 以下是部分image的配置信息.
"{
ID": "276246382d1ab5f9c4d9b9d92c3a0b6e9256902984d7c6f10e87ee40ad2c0a6d",
"Created": "2019-09-03T17:14:55.145078254Z",
"Managed": false,
"Path": "/xmrig",
"Args": ["-a", "cryptonight", "-o", "stratum+tcp://pool.supportxmr.com:5555", "-p", "0904_1_47.52.92.236_2376", "-k", "-t", "1", "--donate-level=1", "--cpu-priority", "0", "-u", "45TwKEr1LjoEPuxnbfuPhaXCf138AoQvtSJ3jdqg1gPxNjkSNbQpzZrGDaFHGLrVT7AzM7tU9QY8NVdr4H1C3r2d3XN9Cty"],
"Config": {
"Hostname": "276246382d1a",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],
"Cmd": ["-a", "cryptonight", "-o", "stratum+tcp://pool.supportxmr.com:5555", "-p", "0904_1_47.52.92.236_2376", "-k", "-t", "1", "--donate-level=1", "--cpu-priority", "0", "-u", "45TwKEr1LjoEPuxnbfuPhaXCf138AoQvtSJ3jdqg1gPxNjkSNbQpzZrGDaFHGLrVT7AzM7tU9QY8NVdr4H1C3r2d3XN9Cty"],
"Image": "docker.io/tanchao2014/mytest",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": ["/xmrig"],
"OnBuild": null,
"Labels": {}
}
挖矿程序运行时在后台输出的一些数据
* ABOUT XMRig/2.14.1 gcc/8.3.0
* LIBS libuv/1.23.2 OpenSSL/1.1.1b
* CPU Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz (1) x64 AES AVX2
* CPU L2/L3 0.2 MB/40.0 MB
* THREADS 1, cryptonight, av=0, donate=1%
* ASSEMBLY auto:intel
* POOL #1 stratum+tcp://pool.supportxmr.com:5555 variant auto
* COMMANDS hashrate, pause, resume
[2019-09-20 13:41:40] use pool pool.supportxmr.com:5555 139.99.125.38
[2019-09-20 13:41:40] new job from pool.supportxmr.com:5555 diff 20000 algo cn/r height 1927257
[2019-09-20 13:41:41] READY (CPU) threads 1(1) huge pages 0/1 0% memory 2048 KB
[2019-09-20 13:41:44] accepted (1/0) diff 20000 (63 ms)
[2019-09-20 13:41:58] new job from pool.supportxmr.com:5555 diff 35280 algo cn/r height 1927257
[2019-09-20 13:42:44] speed 10s/60s/15m 34.7 33.5 n/a H/s max 34.4 H/s
[2019-09-20 13:42:58] new job from pool.supportxmr.com:5555 diff 10000 algo cn/r height 1927257
[2019-09-20 13:43:44] speed 10s/60s/15m 34.4 34.6 n/a H/s max 34.8 H/s
[2019-09-20 13:43:58] new job from pool.supportxmr.com:5555 diff 10000 algo cn/r height 1927257
[2019-09-20 13:44:09] SIGTERM received, exiting
[2019-09-20 13:44:09] no active pools, stop mining
经过一翻查找扒出了入侵者的docker私有创库tanchao2014 截止至2019-09-21 00:23:14 该挖矿镜像下载量已经达到了7k多, 意味着最多可能已经有7k数量的主机被入侵并植入了挖矿程序.
上面还记录了这个入侵者的门罗币
的钱包地址
45TwKEr1LjoEPuxnbfuPhaXCf138AoQvtSJ3jdqg1gPxNjkSNbQpzZrGDaFHGLrVT7AzM7tU9QY8NVdr4H1C3r2d3XN9Cty
还有挖矿的矿池矿池supportxmr.com
看我黄雀在后
进入矿池输入入侵者的钱包地址
这个页面最多时有170多个被入侵的主机同时在默默无闻的帮助这个混蛋挖矿. 注意看列表中的worker
列的内容, 例如0830_188.131.149.3_2375
这个表示什么呢?
0830 // 08月30日侵入
188.131.149.3 // 被入侵的主机的IP地址
2375 // docker 远程链接的端口
2376 // 开启了TLS的 docker 远程链接的端口
0910_1_112.74.34.51_2375
这种中间多个1的, 我没有猜到这个1表示什么.
其中有些服务器都被别人挖矿1个月了竟然还不知道...
用IDEA带的docker插件随便连接了几个地址, 发现都可以连接上. 那么我们完全可以让这个人当螳螂, 我们在后面当黄雀, 把它(就是这个它, 畜生)入侵好的主机中全都替换成自己的钱包地址. 想想还有点小激动, 要走上人生巅峰发笔横财啊(不知道它看到我这边文章会不会改命名规则).
不过我这么善良做不来啊, 干脆做个雷锋一口气连了10多个IP把挖矿的容器全都删了. 不过我删了后过不了多久它应该又会继续重新安装. 盼着那些肉鸡的主人赶紧发现吧. 毕竟我花时间帮你们删除你也不给我发工资啊^-^
钱包地址和矿池地我都完整的放出来, 你们可以帮忙关一关, 别真的做黄雀...
本文采用 知识共享署名4.0国际许可协议进行许可. 本站文章除注明转载/出处外, 均为本站原创或翻译,转载前请务必署名!
233