恶意软件样本分析:RTF 远程模板注入攻击
· 2 分钟阅读 · @admin

概述
本文记录了一次面试过程中进行的恶意软件样本分析,该样本利用 RTF 远程模板注入和 CVE-2017-11882 漏洞进行攻击,展示了从初始投递到持久化执行的完整攻击链。
样本基本信息
| 属性 | 值 |
|---|---|
| 样本名称 | Impact of US and NATO Withdrawal from Afghanistan.doc |
| SHA1 | ccc402845b46285d04d1d45db964f3c1a0df51d5 |
| 文件类型 | RTF 文档 |
| 攻击技术 | 远程模板注入 + CVE-2017-11882 漏洞利用 |
详细分析流程
第一阶段:RTF 远程模板注入
样本初始文档使用了 RTF 远程模板注入技术,将恶意载荷托管在远程服务器上,以规避静态检测。

模板地址解密
通过分析文档结构,发现模板地址经过编码混淆。使用以下 Python 脚本可解密出远程模板地址:
# RTF 远程模板地址解密脚本
s = r"\u-65432?\u-65420?\u-65420?\u-65424?\u-65478?\u-65489?\u-65489?\u-65436?\u-65435?\u-65421?\u-65431?\u-65433?\u-65426?\u-65435?\u-65422?\u-65414?\u-65435?\u-65438?\u-65422?\u-65439?\u-65490?\u-65437?\u-65425?\u-65427?\u-65489?\u-65421?\u-65435?\u-65422?\u-65418?\u-65431?\u-65437?\u-65435?\u-65421?\u-65489?\u-65437?\u-65432?\u-65435?\u-65437?\u-65429?\u-65487?"
l = list(s[3:-1].split(r"?\u-"))
url = ""
for i in l:
url += chr(65536 - int(i))
print(url)
解密结果: hxxp://designerzebra.com/services/check1
该地址托管的是一个利用 CVE-2017-11882 漏洞的 RTF 文档。
第二阶段:CVE-2017-11882 漏洞利用分析
调试环境配置
为了动态分析 shellcode 执行流程,通过镜像劫持技术将 WINWORD.EXE 重定向到 OllyDbg 调试器:
<img src=“https://pic.imgdb.cn/item/61909b682ab3f51d91b08ff8.png” title=“” alt=“” width=“831”>
漏洞触发过程
当打开恶意 RTF 文档时,会自动触发调试器。在漏洞触发点地址 0x411658 处设置断点并运行:
<img src=“https://pic.imgdb.cn/item/61909ca22ab3f51d91b0fa1a.png” title=“” alt=“” width=“826”>
关键发现: 返回地址被覆盖为 0x402114
<img src=“https://pic.imgdb.cn/item/61909e632ab3f51d91b18570.png” title=“” alt=“” width=“822”>
地址 0x402114 处为 retn 指令,此时栈顶返回地址为 0x18f354,恰好指向 shellcode 起始位置,实现了控制流劫持。
<img title=“” src=“https://pic.imgdb.cn/item/6190a12b2ab3f51d91b28354.png” alt=“” width=“830”>
第三阶段:Shellcode 下载器分析
第二阶段 Shellcode 下载
初始 shellcode 会从远程服务器下载第二阶段 payload:
下载地址: hxxp://designerzebra.com/update/sync1
<img src=“https://pic.imgdb.cn/item/6190a7d72ab3f51d91b50239.png” title=“” alt=“” width=“999”>
Shellcode 解密过程
下载的 sync1 文件使用 XOR 加密,解密过程持续进行直到匹配到魔术字节 0x0EE2B4C5:
反沙箱检测:杀毒软件识别
shellcode 通过检测特定驱动文件判断系统中安装的安全软件:
| 检测文件名 | 对应安全软件 |
|---|---|
| klif.sys | Kaspersky |
| aswsp.sys | Avast |
| ehdrv.sys | ESET NOD32 |
| mfehidk.sys | McAfee |
| 360AvFlt.sys | 360 安全卫士 |
恶意载荷释放
从 hxxp://designerzebra.com/confirm/file1 下载主要恶意程序并保存到 %AppData%\wingui.exe。
关键技术点: 为规避检测,PE 文件头被清除,通过 WriteFile API 写入修改后的 DOS 头标识 0x905A4D。
<img src=“https://pic.imgdb.cn/item/6190b2ec2ab3f51d91b8d580.png”>
诱饵文档投递
从 hxxp://designerzebra.com/mscheck/hello.doc1 下载诱饵文档,在后台执行恶意操作的同时向用户展示正常文档内容。
持久化机制
创建计划任务实现持久化,每 3 分钟执行一次 wingui.exe:
schtasks.exe /create /tn MsUpdate /tr "C:\Users\Administrator\AppData\Roaming\wingui.exe" /f /sc minute /mo 3
最后结束 WINWORD.EXE 进程并打开诱饵文档,以降低用户警觉性。
第四阶段:wingui.exe 分析
沙箱检测机制
通过比较不同时间段前台窗口标题是否相同来检测沙箱环境。若窗口标题长时间不变,判断为自动化分析环境:
Avast 沙箱对抗
检测 Avast 沙箱特征文件 snxhk.dll,若存在则设置定时器每 120 秒执行一次,并进入消息循环。仅当接收到 WM_QUIT 或 WM_TIMER 消息时退出循环:
核心载荷下载
从 hxxp://realworld.sytes.net/free/pics/hi-jump.jpg 下载伪装为图片的 shellcode 并创建线程执行:
该 shellcode 的主要功能是解密嵌入的 core.dll 文件并执行其 DllMain 函数。
第五阶段:core.dll 深入分析
多阶段释放机制
如果 core.dll 由 rundll32.exe 启动,会将 .code 区段数据提取并保存为 %AppData%\Driver\opendriver64.dll,然后创建 LNK 快捷方式执行其导出函数 IntRun:
防重复执行
创建互斥量 dacd53bbf745acbefaf254a6dd32aede 防止多实例运行:
信息收集模块
收集系统信息并保存为临时文件 nnp[4位随机数].tmp:
收集的信息内容示例:
数据回传机制
读取临时文件内容后立即删除,在数据头部添加标识信息后准备发送:
C2 通信协议分析
通信格式: 使用 multipart/form-data POST 请求
数据加密: POST 数据使用 Base64 编码
数据字段说明:
| 字段名 | 说明 |
|---|---|
| m | 操作类型:p1 为上传数据,p2 为执行指令 |
| id | 机器标识符:机器名_用户名 的 Base64 编码 |
| data | 实际传输的数据内容 |
C2 指令功能
恶意软件根据接收到的不同指令执行相应操作:
| 指令代码 | 功能描述 |
|---|---|
| 103 | 下载文件保存为 %temp%\jv[4位随机数].tmp 并通过 cmd.exe /q /c start 执行 |
| 105 | 下载 shellcode 映射到内存,使用 CreateThread 执行 |
| 115 | 执行任意 CMD 命令 |
| 117 | 删除持久化文件 OneDriveUpdate.lnk |
| 120 | 下载并执行文件,然后删除 OneDriveUpdate.lnk |
各功能模块实现细节
指令 103 - 文件下载执行:
指令 105 - Shellcode 注入:
指令 117 和 120 - 清理与执行:
指令 115 - 远程命令执行:
总结
该恶意样本展示了一个完整的多阶段攻击链:
- 初始投递: 使用社会工程学主题的 RTF 文档作为诱饵
- 远程加载: 通过远程模板注入技术加载漏洞利用文档
- 漏洞利用: 利用 CVE-2017-11882 执行 shellcode
- 分阶段下载: 逐步下载并解密多层载荷
- 反检测技术: 检测杀软和沙箱环境
- 持久化驻留: 使用计划任务保持长期执行
- C2 通信: 建立远程控制通道接收指令
这种分阶段、模块化的攻击方式有效增加了检测和分析的难度,体现了现代 APT 攻击的典型特征。

