1.4.1 漏洞分析与补丁审计 #
典型工作流程 #
┌────────────────────────────────────────────────────────────┐
│ 漏洞分析工作流 │
├────────────────────────────────────────────────────────────┤
│ 1. 获取补丁前后版本 │
│ ├─ Windows: 提取KB更新包 │
│ ├─ Linux: git diff 或发行版补丁文件 │
│ └— 厂商安全公告链接 │
│ │
│ 2. 加载到分析平台 │
│ ├— IDA Pro + BinDiff │
│ ├— Ghidra + 相关插件 │
│ └— Binary Ninja + Diaphora │
│ │
│ 3. 执行Diff分析 │
│ ├— 函数级匹配 │
│ ├— 基本块级比较 │
│ └— 指令级差异定位 │
│ │
│ 4. 结果解读 │
│ ├— 识别修改的函数 │
│ ├— 分析修改意图 │
│ └— 推导漏洞根因 │
│ │
│ 5. 漏洞利用开发 │
│ ├— 构造触发条件 │
│ ├— 编写PoC │
│ └— 开发检测规则 │
└────────────────────────────────────────────────────────────┘
案例分析:CVE-2021-34527 (PrintNightmare) #
补丁前代码 补丁后代码
┌─────────────────────────┐ ┌─────────────────────────┐
│ RpcAddPrinterDriverEx() │ │ RpcAddPrinterDriverEx() │
│ { │ │ { │
│ // 无权限检查 │ │ // 新增权限验证 │
│ LoadDriver(path); │ → │ if (!CheckAccess()) │
│ // 直接加载驱动 │ │ return ERROR; │
│ } │ │ LoadDriver(path); │
└─────────────────────────┘ │ } │
└─────────────────────────┘
通过BinDiff快速定位新增的权限检查代码
1.4.2 恶意软件比对与家族分析 #
应用目标 #
- 变种检测
- 识别已知恶意软件的变种
- 绕过简单混淆
- 建立家族特征库
- 演化追踪
- 重构恶意软件发展历史
- 识别作者/组织特征
- 预测未来演化方向
- 威胁情报
- 关联不同攻击事件
- 归因分析
- 共享指标(IoC)
1.4.3 补丁差异分析 #
不同平台的补丁分析挑战 #
| 平台 | 补丁格式 | 分析工具 | 主要挑战 |
| Windows | .msu/.cab | IDA+BinDiff | 闭源、优化复杂 |
| Linux | 源码patch | diff/Ghidra | 编译选项多样 |
| Android | OTA镜像 | jadx/IDA | 逆向复杂 |
| iOS | IPSW | Ghidra | 加密、混淆 |
| IoT固件 | 厂商格式 | 多种工具 | 架构多样 |
1.4.4 逆向工程辅助 #
二进制diff在逆向中的作用 #
逆向工程工作流
│
├── 初步分析
│ └── 识别已知库函数
│ 通过对比标准库二进制
│
├── 理解代码演化
│ └── 比较不同版本理解功能
│
├── 简化分析
│ └── 复用已分析版本的注释
│ 自动迁移函数名、注释
│
└── 协作分析
└── 合并多人分析结果
1.4.5 CTF竞赛应用 #
常见题型 #
题目类型:
├─ 找不同:比较两个程序找出隐藏flag
├─ 补丁分析:理解补丁逻辑获取flag
└─ 版本比较:对比新旧版本找到漏洞点
1.4.6 供应链安全 #
应用场景 #
软件供应链安全分析
│
├── 开源组件识别
│ ├── 检测使用的开源库
│ ├── 判断版本号
│ └── 发现已知漏洞
│
├── 许可证合规
│ ├── 检测GPL等传染性许可证
│ ├── 代码复用检测
│ └── 合规报告生成
│
└── 来源追溯
├── 识别代码来源
├── 建立SBOM(软件物料清单)
└── 风险评估