案例研究 · 样本分析
Darkhotel 组织 JPEG 隐写样本分析
你是接到疑似 APT 隐写样本的分析员,约束是全静态分析、样本零执行。照本文做完,你会得到隐写格式的精确判定、约 990KB 寄生载荷的完整行为链还原,以及一份含压缩密码与注入 DLL 的 IOC 清单。
JPEG · 1,321,015 字节· 隐写载荷 ≈ 990KB(Base64 编码)· 寄生宿主:WinRAR 32 位· 全静态 · 零执行· 澜砥 N2.5
概览
- 01
判型破局 — 报错值 0xd8ff 暴露 JPEG 魔数
你把 MD5 命名的样本交给 AVL Code;PE 解析与 imphash 连续报错,但文件头/尾读数把方向扳回"图片藏货"。
- 02
边界定位 — JPEG + CRLF + 两段 Base64 的隐写格式
你看到 FF D9 在偏移 703、首行 24 字符解码出 18 字节、载荷以 "==" 收尾;解码一次失败后靠分行结构自愈,还原出 PE 载荷。
- 03
身份三重验证 — 7-Zip 猜想反转成 WinRAR
你拿到 PE32 指纹、编译时间与熵;sharp.exe 压缩命令一度指向 7-Zip,PDB 路径最终把身份钉在 WinRAR 32 位。
- 04
行为还原与 IOC — 检测与处置当天可用
你得到持久化、WOW64 注入、窃密打包、PowerShell 混淆执行的行为链,以及含压缩密码与注入 DLL 的 IOC 表和结论报告。
向 AVL Code 发布任务
给我分析一下08943bb237926dd1376d799a4afe797d这个样本 前提:工作区中已放有待分析样本(本案例为以 MD5 命名的样本文件,存于隔离网分析环境);无需安装任何分析工具,全程只读、不执行样本
复现材料见文末 亲自检测 ↓
样本判型
样本以 MD5 命名、看不出来路,分析从最基础的建档与判型开始:
给我分析一下08943bb237926dd1376d799a4afe797d这个样本获取样本哈希与基本信息(1,321,015 字节)
→ PE 解析报错、熵 5.349 成分不单一 → 读文件头:FF D8 FF + "JFIF"——是一张 JPEG
→ 文件尾大片 0x41 填充数据
→ sec.strings 在偏移 735 处发现 Base64 形态的 PE 文件头(解码即 MZ)
→ 小结:图片尾部附着一个 Base64 编码的 Windows 可执行文件隐写载荷提取
首行 18 字节的"密钥/标识"与被换行符切碎的 Base64,是这一步的两次转折:
给我分析一下08943bb237926dd1376d799a4afe797d这个样本搜索 JPEG 结束标记与 MZ → 命中:FF D9 之后紧跟 Base64 数据,直至文件尾
→ 写脚本提取并解码:Python/转义一度受阻 → 改写成脚本文件执行
→ 解码结果不以 MZ 开头 → 排查发现 Base64 被换行符切碎:首行 24 字符解码出 18 字节"密钥/标识",第二行起才是 MZ
→ 剔除首行、清理空白后解码成功:还原约 990KB 的 PE 载荷PE 建档
身份认定没有一次到位:一条压缩命令字符串把第一假设带偏了:
给我分析一下08943bb237926dd1376d799a4afe797d这个样本sec.pe_parse 建档:PE32 (x86) · 熵 6.44 未加壳 · imphash 1a94fa4f…
→ 字符串见 sharp.exe 与压缩命令行 → 形似 7-Zip
→ 搜 7-Zip 相关 PDB 路径未命中,反而命中 RAR.pdb → 身份反转:是 WinRAR 32 位归档工具
→ 哈希建档(MD5 / SHA256)行为与 IOC
载荷里寄生的是一条完整的信息窃取流水线,全部证据来自字符串与 PE 结构:
给我分析一下08943bb237926dd1376d799a4afe797d这个样本用 Python 脚本检索关键字符串(grep 不适用于二进制)
→ 持久化:Run 键 + AppInit_Dlls · 注入:CreateRemoteThread / WriteProcessMemory,注入 DLL dpnom.dll
→ 窃密目标:邮件身份数据库、最近文档列表等
→ 打包外发:sharp.exe 加密压缩(密码 PleaseTakeOut!@#)· 脚本执行:释放 winword.ps1,大小写混淆调用 PowerShell
→ 自删除、提权、信息收集 API 齐备
→ 汇总 IOC 表与结论报告亲自检测
下载会话导入工作区回放完整过程,或把你的样本直接交给 AVL Code:
› 给我分析一下 <你的样本文件名>这个样本 - 局限声明:
- ①本会话为隔离网环境,样本只提供 Hash,未做任何执行;
- ②会话导出中工具调用渲染为空,动作序列以助手叙述、compact 摘要与最终报告为准;
- ③既有条目记载的 YARA/SIGMA/网络检测规则与标准化处置流程,在本会话导出中未出现其生成过程,本文未予呈现;④行为链条目(持久化/注入/窃密/脚本执行)在会话中主要出自最终报告一节,除既有成果摘要外未取得第二独立来源;⑤首行 18 字节 Base64 的"密钥/标识"属性为会话中的推测;⑥Darkhotel 归因来自本案例既有条目,会话中未出现归因过程。
下一个问题: 载荷本体是寄生了窃密模块的 WinRAR,但网络侧 IOC 缺位——下一步:追查注入 DLL dpnom.dll 的载荷来源与 winword.ps1 的落地行为,把检测规则补齐到主机侧。
