初识APT:SideWinder、海莲花、APT36
初识APT
最近拜读了三篇 APT 样本分析报告:一篇是 CYFIRMA 发布的针对印度政府实体的 APT36(Transparent Tribe)多阶段 LNK 恶意活动报告,另外两篇分别是 SideWinder(APT-C-17)木马加载链分析和国内厂商发布的 海莲花新型木马攻击活动分析。
三篇报告的攻击目标、地域、技术栈各不相同,但串起来看恰好覆盖了 APT 攻击中最经典的几类入口技术:LNK 快捷方式伪装、合法数字签名滥用、MSI 安装包 + 变换补丁。声明:本文仅为安全学习与研究目的的技术分析笔记,所有内容基于公开报告整理,请勿用于任何非法用途。 文中第二、三篇报告的细节依据报告截图整理,个别哈希、域名拼写可能存在识别误差,以原文为准。
APT(Advanced Persistent Threat),翻译过来就是高级持续性威胁。在网络安全领域,它特指一类由国家背景或受国家资助的、具有极高技术水平和明确政治/经济目的的黑客组织。
它是网络空间里的“特种部队”,而不是普通的“小偷”。
- A - Advanced(高级)
这意味着他们的技术手段非常高超,通常会使用0-day 漏洞(未公开的漏洞)、社会工程学(如精心伪造的钓鱼邮件)、高级免杀技术以及定制化的恶意软件。
- P - Persistent(持续)
这是 APT 与普通黑客(如勒索软件、黑产)最大的区别。普通黑客追求“快进快出”,拿到钱就走;而 APT 追求的是长期潜伏。
他们可能会在目标网络中隐藏几个月甚至几年。
他们会建立隐蔽的 C2(命令与控制)通道,定期发送“心跳包”(如前面看到的 30 秒一次)。
他们会千方百计地实现持久化驻留(如修改注册表启动项、植入计划任务),确保即使电脑重启,木马也能自动运行。
- T - Threat(威胁)
这里的威胁通常不是针对普通网民,而是带有强烈的政治、军事或经济目的。目标往往是:
政府机构、军队、国防工业。
高科技企业(窃取商业机密)。
能源、金融、通信等关键基础设施。
持不同政见者或特定领域的专家学者。
一、APT36 “LNK 伪装 PDF” 多阶段攻击
1.1 组织与活动背景
APT36,又称 Transparent Tribe(透明部落),是巴基斯坦背景的威胁组织,长期针对印度政府、军事、学术及战略部门进行网络间谍活动。CYFIRMA 于 2025-12-30 发布的这份报告披露了该组织 2025 年 12 月中旬(首次观测 2025-12-15)的一次攻击活动,其诱饵非常有意思:”Online JLPT Exam Dec 2025”(12 月 JLPT 日语能力考试)相关的考试资料,猜测瞄准的是与考试、教育、涉外事务相关的政府人员。
基础信息一览:
| 项目 | 内容 |
|---|---|
| 目标平台 | Windows |
| 威胁类型 | 鱼叉钓鱼活动 |
| 文件类型 | LNK(Windows 快捷方式) |
| 关键标识 | Online JLPT Exam Dec 2025.pdf.lnk |
| 首次观测 | 2025-12-15 |
| 影响 | 数据窃取 |
| 诱饵压缩包 MD5 | 30fda797535a0f367ea2809426760020 |
| LNK MD5 | ceb715db684199958aa5e6c05dc5c7f0 |
| HTA MD5 | 6baf7121594b84177eec4420875908cf |
1.2 攻击全流程
flowchart TD
A["鱼叉钓鱼邮件<br/>投递 ZIP 附件"] --> B["Online JLPT Exam Dec 2025.zip"]
B -->|解压| C["双扩展名 LNK 伪装 PDF<br/>Online JLPT Exam Dec 2025.pdf.lnk<br/>体积 >2MB(正常 LNK 仅 10-12KB)<br/>内嵌完整 PDF 内容与图片"]
C -->|用户双击| D["mshta.exe 执行(LOLBin)<br/>拉取远程 HTA"]
D --> E["jip.hta @ innlive[.]in<br/>图标: drjagrutichavan[.]com/wd.ico"]
E --> F["HTA Loader<br/>窗口缩放为 0 隐藏执行<br/>自定义 Base64 + XOR 解密"]
F --> G["查询注册表 .NET 版本<br/>设置 COMPLUS_Version 环境变量"]
G --> H["Stage-1: ReadOnly<br/>XAML ObjectDataProvider 反序列化<br/>置 disableActivitySurrogateSelectorTypeCheck=true<br/>(关闭 .NET 反序列化安全校验)"]
H --> I["Stage-2: WriteOnly<br/>内存反序列化执行 ki2mtmkl.dll<br/>(全程 Fileless)"]
I --> J["释放诱饵 PDF 打开安抚用户"]
I --> K["WMI root\\SecurityCenter2<br/>枚举已安装杀软"]
K --> L{按杀软类型<br/>差异化持久化}
L -->|Kaspersky| M1["C:\\Users\\Public\\core\\flow.hta<br/>→ 启动文件夹 .lnk → mshta 执行"]
L -->|Quick Heal| M2["生成 bat + .lnk → 启动目录<br/>bat 间接执行 HTA"]
L -->|Avast/AVG/Avira| M3["载荷直接拷贝到启动目录执行"]
L -->|无杀软| M4["bat + 注册表持久化"]
M1 & M2 & M3 & M4 --> N["二次 HTA (flow.hta)<br/>解出 iinneldc.dll(完整 RAT)"]
N --> O["线程1: C2 通信<br/>2.56.10[.]86:8621 (TCP)<br/>AES 加密(硬编码密钥)"]
N --> P["线程2: 监听 USB 插拔事件<br/>感染 U 盘实现离线横向传播"]
O --> Q["命令集: 系统信息/远程Shell/文件管理<br/>截屏/远程桌面/剪贴板窃取与篡改/进程管理/密码窃取"]
Q --> R["外传数据 Base64 + AES 加密"]
下面按环节一一学习。
1.2.1 初始访问:鱼叉钓鱼 + ZIP 附件(T1566.001)
攻击从一封鱼叉钓鱼邮件开始,附件是名为 Online JLPT Exam Dec 2025.zip 的压缩包。考试资料类诱饵的点是:目标人群明确、打开意愿强、文件本身”应该”有内容——这为后面”LNK 里内嵌完整 PDF”的伪装策略做了铺垫。
1.2.2 伪装艺术:双扩展名 LNK + “体积伪造”
解压后是一个 Online JLPT Exam Dec 2025.pdf.lnk。这里有两个精心设计的点:
- 双扩展名(T1036 Masquerading):由于 Windows 默认隐藏已知扩展名,即使开启了”显示扩展名”,
.lnk的显示行为也具有很强的迷惑性,用户看到的是一个”PDF”; - 体积伪造:正常 Windows 快捷方式只有 10~12 KB,而这个 LNK 超过 2 MB。分析师检查文件内容发现了大量
endstream、endobj标记和内嵌图片对象——攻击者把一份完整的 PDF 结构整体塞进了 LNK 文件,让文件体积、图标观感都逼近真实 PDF,从”文件名像 PDF”伪装到”体量和内容都像 PDF”。
这是一个非常值得学习的细节。正常业务场景里几乎不存在几 MB 的快捷方式,”可疑体积”(LNK 过大)就可以成为一条检测规则。
压缩包内还有一个隐藏目录 usb,内含 usbsyn.pim 文件(推测为加密数据/代码,运行时解密使用),与后续 RAT 的 USB 感染模块相呼应。
1.2.3 执行入口:滥用 mshta.exe(T1218.005)
LNK 被点击后,调用系统自带的 mshta.exe 拉取并执行远程 HTA 脚本:
- HTA 地址:
https://innlive[.]in/assets/public/01/jlp/jip.hta - 远程图标:
https://drjagrutichavan[.]com/assetl/hp/pk5//ico/wd.ico
这是典型的 LOLBin(Living-off-the-Land Binary) 用法:不落地任何可执行文件、滥用系统受信任的二进制、直接从远端拉代码——杀软和 EDR 对 mshta.exe 天然宽松。
1.2.4 HTA Loader:混淆、解密与环境操控
HTA 脚本作为隐蔽加载器,做了四件事:
- 窗口隐藏:把窗口尺寸调整为 0,用户全程无感知;
- 自定义解密:定义
USBContents、SyncDataToCD、CDDownload等函数,实现自定义 Base64 解码 + XOR 解密例程;脚本内两个关键变量ReadOnly和WriteOnly分别是两个加密载荷容器; - ActiveX 环境操控:通过
WScript.Shell查询注册表确定系统可用的 .NET 运行时版本,并动态设置COMPLUS_Version环境变量——提高兼容性和可靠性; - 辅助欺骗:下载并打开一份合法 PDF,让用户确信自己打开的就是真文档。
1.2.5 Stage-1(ReadOnly):用 XAML 反序列化”关掉” .NET 的安全开关
这是本篇报告技术含量最高的部分。
ReadOnly 载荷在内存中重建一个 2312 字节的对象,解密后是一个序列化的 .NET 对象,其中包含基于 XAML 的配置数据,通过 BinaryFormatter 在内存中反序列化。该 XAML 内嵌恶意 ResourceDictionary,滥用 ObjectDataProvider 元素:
- 操纵
System.Workflow.ComponentModel.AppSettings; - 把内部字段
disableActivitySurrogateSelectorTypeCheck设为true。
这个开关有什么用呢:.NET 为了防御不安全的反序列化攻击,提供了 ActivitySurrogateSelector 类型校验;把它禁用后,后续阶段就可以执行任意不安全的反序列化。所以 ReadOnly 本质是一个”配置初始化器”——先解除系统防御,再给 Stage-2 (WriteOnly)开路。
ObjectDataProvider+BinaryFormatter是 .NET 反序列化利用的经典组合(最早在 CMS/渗透工具链中常见),APT 把它搬到了载荷加载流程里,用合法的 .NET 机制去关闭 .NET 自己的安全检查,全程无需内核漏洞、无需提权利用,非常”方便安全”。
1.2.6 Stage-2(WriteOnly):Fileless 内存 DLL
WriteOnly 是备用/第二级加密载荷(约 359 KB),同样不落盘,反序列化后在内存中直接执行,即 ki2mtmkl.dll——感染链的核心组件。
1.2.7 ki2mtmkl.dll:诱饵、环境感知与”杀软自适应持久化”
ki2mtmkl.dll 加载后调用 Work() 主例程,编排后续所有活动。三个关键行为:
① 诱饵 PDF 释放:从内嵌编码数据中重建并解压一份合法 PDF 写入临时目录并自动打开。受害者阅读”真文档”的同时,恶意代码在后台继续运行——“用户看到的”和”系统执行的”一明一暗。
② 杀软感知(Security Posture Profiling):通过 WMI root\SecurityCenter2 命名空间枚举已安装杀软及显示名称,然后按杀软类型选择不同的持久化与执行路径:
| 检测到的杀软 | 标志位 | 持久化策略 |
|---|---|---|
| Kaspersky | flag7 | 工作目录 C:\Users\Public\core\,落盘混淆的 flow.hta,启动文件夹放置快捷方式,PowerShell 调 mshta.exe 执行 |
| Quick Heal | flag6 | 生成 bat 批处理 + 恶意快捷方式放入启动目录,通过 bat 间接执行 HTA |
| Avast / AVG / Avira | flag4/3/5 | 简化策略:直接把载荷拷贝到启动目录执行 |
| 未检出已知杀软 | — | 兜底例程:bat 执行 + 注册表持久化 + 载荷部署 |
针对不同杀软的行为审计盲区定制投放路径——对 Kaspersky 用
mshta+lnk组合绕其强项,对弱查杀产品则省事直接落启动目录。这种”防御环境自适应”也是APT高技术的体现,之前遇到的普通样本都没有这样的策略。
③ 二次 HTA 投递:新落地的 flow.hta 重复类似的混淆/解密逻辑,解出:
ReadOnly:序列化 XML 配置数据;WriteOnly:名为iinneldc.dll的恶意 DLL——功能完整的 RAT。
1.2.8 iinneldc.dll:双线程 RAT
iinneldc.dll 启动即创建两个并行线程:
- 线程一:C2 命令与控制(
DoMainWork) - 线程二:USB 插拔事件监听——检测 U 盘插入并实施感染,让木马可以借助移动介质向物理隔离/受限网络扩散。
C2 通信:
- 硬编码 C2:
2.56.10.86:8621(TCP 长连接,非 HTTP,T1095); - 上线即回传用户名、计算机名、操作系统版本;
- 命令接收:先读消息长度再取载荷,使用 AES 解密,硬编码密钥
ZAEDF_98768_@$#%_QCHF; - 解密后交
parse()分发执行。
命令集(解析结果就是一份”间谍功能清单”):
| 命令/功能 | 行为 |
|---|---|
Disconnected |
断开网络流 |
SystemInformation |
getsystem() / GetDeepInfo() 收集主机信息回传 |
pkill <pid> |
杀指定进程并回传最新进程列表 |
RD 前缀 |
远程桌面:CopyFromScreen() 截屏 → 按攻击者指定尺寸缩放 → JPEG 压缩 → Base64 → 以 “RemoteDesktop” 标签回传,近实时窥屏 |
| 剪贴板读写 | getclipboardtext() 窃取复制内容(密码、钱包地址);setclipboardtext() 篡改剪贴板(可实施加密货币地址替换) |
runshell |
隐藏窗口调用 cmd.exe 执行任意命令并回传输出 |
| 文件管理 | 枚举、上传、下载、重命名、删除、移动文件/目录 |
| 其他 | 设置光标、列举进程/软件、窃取已保存密码 |
数据窃取:CopySubfiles 函数递归扫描目录,定向收集 doc/docx/xls/xlsx/ppt/pptx、PDF、TXT、mdb/accdb 数据库文件——典型的办公情报窃取画像。所有外传数据先 Base64 编码再 AES 加密后经 C2 通道发送(T1041)。
二、SideWinder(APT-C-17)木马加载链分析
响尾蛇组织, 又称Sidewinder、APT-C-17、T-APT-04,是一个来自于南亚地区的境外APT组织。该组织主要针对中国、巴基斯坦、尼泊尔、斯里兰卡等亚洲地区国家进行网络间谍活动,主要针对高校,新闻,金融,媒体,政府和电信公司进行攻击,以窃取敏感信息为主要目标。该组织的相关攻击活动最早可以追溯到2012年,至今还非常活跃,大多数行动是对巴基斯坦进行攻击,窃取机密信息。
Step1:样本执行,解密 C2 地址
木马启动,读取内置加密字符串CE 4*k,使用硬编码密钥$*VYGETRMPHG@%9bvdsf984574398546573d6#^%*&异或解密,
得到 C2 域名govmm.org。

Step2:生成主机标识(ClientID)
- 通过 GetTempPath2W 获取系统用户 Temp 目录
C:\Users\<username>\AppData\Local\Temp\ - 拼接固定文件名
TMP987979RND得到临时文件路径 - 生成随机数字作为ClientID写入该临时文件,作为被控主机唯一 ID

Step3:构造 C2 请求 URL,上线通信
ClientID 拼接固定路径,生成访问 URL:/softwareapp-updates/{ClientID}/serveupdate.php?updateapps=78778JvGFDTS879843

调用 WinHttp API 发起HTTP POST 请求(Content-Length=0,空包上线,向 C2 报到)。
tep4:接收 C2 下发指令,分支处理
木马读取 C2 服务器返回数据,识别GOTCHAA=指令前缀,分两条分支:
分支 A:文件窃取(download 指令)
解析
download后面的文件路径,下载文件的命令格式如下:GOTCHAA=download

2. 读取本地目标文件内容
3. 文件内容做 Base64 编码
4. 按照分片协议封装为updateoutput参数
5. POST 发包,分片把文件数据传回 C2 服务器,返回包数据格式如下:
updateoutput=totsize=1---chunkno=1---chunkvalue=base64(content)
totsize为数据分片的总个数
chunkno为当前数据分片的序号
chunkvalue为base64编码后的文件内容
分支 B:任意系统命令执行
- 异或解密 C2 下发的命令字符串


- 调用
CreateProcess启动cmd.exe /c执行命令 - 通过管道捕获命令标准输出回显
- 回显内容 Base64 编码,同样使用分片协议封装 POST 回传给 C2
三、海莲花(OceanLotus)
海莲花(OceanLotus),又称 APT32,是一个被广泛认为具有东南亚某国背景的国家级 APT 组织,自 2012 年起活跃至今。长期针对中国及部分东南亚国家实施网络攻击,以窃取敏感情报为主要目标,服务于其地缘政治与战略需求。该组织技术能力持续演进,攻击手法已从早期的鱼叉钓鱼发展为具备高级免杀、无文件驻留和跨平台攻击能力的高水平威胁团体。在目标选择上,其攻击重点已从基础情报收集转向战略级涉外情报窃取。
核心攻击手法
- MST(Microsoft Transform)文件滥用,隐蔽植入
MST 是 Windows 安装程序的合法变更文件,攻击者将恶意 DLL(Binary.Transforms.dll)封装在 MST 内部;依托合法 MSI 安装流程执行,规避静态特征查杀;安装结束后 MST 会被系统自动清理,溯源难度高。不需要修改原始 MSI,就可以注入代码、执行命令、篡改配置。 - 注册表持久化驻留
恶意载荷释放PCHealthCheck.exe(合法载体)+tbs.dll到%LOCALAPPDATA%\PCHealthCheck\;在HKCU\Software\Microsoft\Windows\CurrentVersion\Run添加自启动项,开机自动拉起程序,维持长期控制。

- Process Hollowing 进程镂空内存执行(无文件落地对抗)
tbs.dll内置 AES 加密的 shellcode;先 AES 解密、解压得到 shellcode- 加载系统自带
xpsservices.dll,掏空该进程内存,替换代码区块为解密后的 shellcode,修改内存权限后执行恶意代码
- 恶意代码不落地,直接在内存运行,绕过常规文件查杀
- Rust 编写远控,加密心跳 C2 通信
- 底层远控主体使用 Rust 开发,HTTP 协议和 C2 交互
- 心跳包自定义结构:2 字节密钥长度 + 可变长异或密钥 + 4 字节数据长度 + 异或加密数据
- 定期心跳上报,C2 下发指令经过 AES 解密后执行
- 支持能力:主机信息收集、枚举进程、文件上传、文件下载
四. 三篇报告横向对比:攻击流程与攻击手法
| 对比维度 | SideWinder | 海莲花 (OceanLotus) | APT36 |
|---|---|---|---|
| 初始载体 | 伪装成更新程序的 PE 文件 | manarupdate.exe MST (Microsoft Transform) 文件,寄生合法 MSI 安装流程 | ZIP 内的超大 LNK,双扩展名 .pdf.lnk,内嵌完整 PDF 结构 |
| 执行链路 | 单阶段:进程直接运行,调 WinHttp API 上线 | MST → Binary.Transforms.dll → 释放 PCHealthCheck.exe + tbs.dll → 解密 shellcode | LNK → mshta 拉远程 HTA → Base64+XOR → .NET 反序列化 → ki2mtmk1.dll → flow.hta → tinneldc.dll |
| 内存对抗 | 弱:载荷全落地,仅加密配置串 | 强:Process Hollowing 掏空 xpsservices.dll 写 shellcode,白程序侧载 | 强:关 disableActivitySurrogateSelectorTypeCheck 绕 .NET 防护,DLL 全程内存加载 |
| 持久化 | 无自启动机制,仅靠 ClientID 临时文件维持身份 | HKCU Run 注册表添加PCHealthCheck 自启动项 | WMI 查 SecurityCenter2 探测杀软,按结果分支:Startup LNK / bat / Run 注册表 / 备选多重组合 |
| C2 通道 | HTTP POST,伪装浏览器 UA;路径 /softwareapp-updates/(ClientID)/serveupdate.php;域名 govmm.org 异或解密 | HTTP + 自定义二进制心跳:2 字节密钥长 + 变长异或密钥 + 4 字节数据长 + 异或数据;远控体 Rust 编写 | 原始 TCP 2.56.10.86:8621 + TLS;指令用硬编码 AES 密钥解密 |
| 指令与外传 | GOTCHAA= 前缀;download 读文件、cmd 执行命令,回显 Base64 后按 updateoutput=tosize–chunkno–chunkvalue 分片回传 | AES 解密指令;支持信息收集、进程枚举、文件上传下载 | Base64 + AES 外传;扩展截屏、剪贴板窃取与篡改、凭据抓取、USB 事件监听横向 |
| 加密手法 | 单一硬编码密钥异或 (C2 地址、命令串) | AES 加密 shellcode + 自定义异或心跳包 (双层) | Base64 + XOR 混淆载荷 + AES 加密指令 (多层混合) |
| 迷惑受害者 | 靠“更新程序”文件名伪装,无诱饵文档展示 | 释放并打开诱饵文档,热点议题标题降低戒心 | LNK 体积与真实 PDF 相当 + 运行时释放打开诱饵 PDF,双重可信度 |
原文:APT | SideWinder组织远控木马加密通信分析 —— TahirSec, 2025.12.31
网络安全联创中心:APT组织海莲花新型样本风险提示 —— 信息通信行业联创中心, 2025.10.30
APT36 : Multi-Stage LNK Malware Campaign Targeting Indian Government Entities —— CYFIRMA, 2025.12.30
