第 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 清单产出
□ 行为时间线(事件顺序)
动手练习
- 在隔离环境跑一个标注好的 C2 样本(MalwareBazaar 获取),用 inetsim 模拟 DNS/HTTP,记录它的完整回连行为。
- 分析一个样本的持久化:列出它创建的所有 Run 键/计划任务/服务。
- 对一个窃密样本做数据流追踪:文件读取 → 打包 → 网络发送的完整链路。
- 给一个勒索样本写"加密行为分析":加密函数、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(对抗速查)