逆向工程实战手册 第 42 章

第 42 章 恶意软件行为分析深度(C2 / 驻留 / 数据流)

第 17 章是恶意软件分析的完整框架;本章深入三个最常卡的环节:C2 通信与协议、持久化机制、以及从行为到 IOC 的数据流追踪。看懂恶意软件"怎么活",比看懂"代码长什么样"更接近实战。

📍 知识点地图 | 主题:恶意行为深度 | 前置:第17章 | 后续:— | 核心概念:C2分类、持久化、数据流、勒索

42.1 恶意软件的"生命周期"模型

感染(投递/执行)
  → 驻留(持久化: 下次开机还在)
  → 通信(C2: 拿指令/外带数据)
  → 活动(勒索/挖矿/窃密/横向)
  → 对抗(反分析/反沙箱/自毁)

分析时逐环节提问:
  怎么进来的?怎么活下来?怎么说话?干什么?怎么防分析?

42.2 C2 通信分析(最常见的分析终点)

C2 协议分类

类型 特征 分析要点
HTTP(S) C2 明显 URL/域名/UA 特征 抓包还原请求格式
DNS 隧道 DNS 查询携带数据 分析查询名编码
HTTPS 自定义 加密流量+固定头 Hook SSL/找 key(24 章)
邮件 C2 SMTP 收发指令 分析邮件头/附件
社交平台 C2 GitHub/博客/Twitter 做指令源 分析内容解析逻辑
P2P C2 节点互相通信 分析节点发现机制
隐蔽通道 ICMP/时间/随机性 行为模式分析

C2 分析工作流

1. 静态: 找 C2 域名/IP(字符串/配置提取)
2. 动态: 沙箱跑 → 捕获回连流量
3. 协议还原: 请求结构 → 编码/加密 → 指令解析
4. 建立"模拟 C2"(inetsim/自写响应)→ 观察样本对指令的响应
5. 产出: C2 服务器模拟器 + 通信报告

关键产出:C2 配置(IOC)

典型配置字段:
  C2 域名/IP/端口
  通信路径/URI
  加密 key/密码
  User-Agent/请求头
  心跳间隔
  上线标识(bot ID/分组)

提取工具: 配置提取脚本(per-family)/ FLOSS / 手工逆向

42.3 持久化机制大全(驻留分析)

Windows 持久化

机制 位置 检测
注册表 Run 键 HKCU/HKLM...\Run 注册表监控
启动文件夹 Startup 目录 文件监控
服务 自启动服务(可伪装成驱动) 服务枚举
计划任务 schtasks 任务列表
WMI 订阅 __EventFilter/Consumer WMI 审计
DLL 劫持 应用同目录恶意 DLL 加载链分析
COM Hijacking CLSID → 恶意 DLL COM 枚举
注入浏览器/白进程 进程持久化 进程监控
注册表其他 Winlogon/Shell/AppInit_DLLs 深度审计

Linux 持久化

□ cron 任务(/etc/cron*、用户 crontab)
□ systemd service/timer
□ .bashrc/.profile/.ssh/authorized_keys
□ /etc/ld.so.preload(LD_PRELOAD 全局劫持!)
□ 内核模块(/etc/modules-load.d)
□ 初始化脚本(init.d/rc.local)

42.4 数据流追踪(从入口到出口)

恶意软件的核心问题: 数据从哪来、到哪去

数据流模型:
  输入: 文件/网络/键盘/摄像头/系统状态
  处理: 加密/收集/筛选
  输出: 网络外带/文件落地/覆盖数据

追踪方法:
  静态: 逆向函数调用链(谁读数据 → 谁处理 → 谁发送)
  动态: API 监控(文件读 API → 网络发送 API 之间发生了什么)
  结合: 内存观察(加密前/后的数据形态)

窃密类样本的分析要点

□ 定位"收集"函数(浏览器 cookie/密码文件枚举)
□ 定位"打包"逻辑(压缩/拼接 → 单包外带)
□ 定位"发送"点(HTTP POST/DNS/邮件)
□ 中间变换: 加密/编码 → 还原出外带数据的真实内容

42.5 勒索软件专项(分析重点不同)

行为特征:
  1. 文件枚举(盘符/共享/用户目录)
  2. 权限提升(结合漏洞)
  3. 文件加密(快速模式: 只加密头部)
  4. 阴影卷删除(vssadmin delete shadows)
  5. 勒索信(HTML/TXT)
  6. 自删除/混淆

分析要点:
  □ 加密算法与 key 管理(对称 key 是否可恢复)
  □ 能否解密(研究价值)
  □ 传播方式(横向移动特征)
  □ 受害者 ID 生成(用于追踪)

42.6 沙箱对抗与逃逸(分析时的陷阱)

常见逃逸: 检测沙箱特征 → 表现正常行为
  □ 资源检查(CPU/内存/磁盘小 → 判定沙箱)
  □ 交互检测(等待鼠标/键盘输入)
  □ 时间检测(sleep 很久/检测时钟跳变)
  □ 网络检测(无网 → 不执行恶意行为)
  □ 进程/文件特征(沙箱监控工具存在 → 不执行)

对策:
  □ 动态延迟执行规避: 冻结时间(faketime/LD_PRELOAD)
  □ 提供交互: 虚拟输入
  □ 配置合理资源(多核/大内存)
  □ 伪造网络环境(inetsim 完整协议模拟)

42.7 行为分析检查清单

□ 样本启动了什么进程/子进程
□ 修改/创建了哪些文件(持久化痕迹)
□ 修改了哪些注册表/配置
□ 建立了哪些网络连接(C2)
□ 与什么服务交互(服务枚举/提权)
□ 收集了什么数据(窃密路径)
□ 有哪些对抗行为(反沙箱/反调试)
□ 完整的 IOC 清单产出
□ 行为时间线(事件顺序)

动手练习

  1. 在隔离环境跑一个标注好的 C2 样本(MalwareBazaar 获取),用 inetsim 模拟 DNS/HTTP,记录它的完整回连行为。
  2. 分析一个样本的持久化:列出它创建的所有 Run 键/计划任务/服务。
  3. 对一个窃密样本做数据流追踪:文件读取 → 打包 → 网络发送的完整链路。
  4. 给一个勒索样本写"加密行为分析":加密函数、key 管理、加密文件格式。

深入阅读

  • 仓库:skills/malware-analysis/SKILL.md(六阶段框架)
  • 仓库:skills/malware-analysis/references/sandbox-orchestration.md(沙箱编排与逃逸)
  • 仓库:skills/malware-analysis/references/anti-analysis-techniques.md(94 种对抗)
  • 仓库:skills/malware-analysis/references/yara-sigma-rules.md(行为检测规则)
  • 仓库:skills/attack-chain/SKILL.md(C2/持久化攻击视角)
  • 仓库:skills/attack-chain/references/evasion-cheatsheet.md(对抗速查)