第 1 部分 基础知识
第 1 章 本书适用读者 2
1.1 本书的读者对象 ................................ 3
1.2 先决条件 ...................................... 4
1.3 自主内容选择 .................................... 4
1.4 入门指导 ......................................... 5
1.5 现在正式开始 ..................................... 10
1.5.1 QEMU 基本插桩 ..................................... 11
1.5.2 OpenWrt 全系统仿真 ............................... 11
1.5.3 三星 Exynos 基带 ........................................................... 11
1.5.4 iOS 和 Android 系统 ...................................................... 11
1.6 小结 ............................................ 12
第 2 章 仿真的发展历史 13
2.1 什么是仿真 ...................................... 14
2.2 为何需要仿真 ..................................... 14
2.3 除 QEMU 以外的仿真工具 ................................. 22
2.3.1 MAME ......................................... 23
2.3.2 Bochs ...................................... 24
2.3.3 RetroPie ................................... 24
2.4 仿真与虚拟化在网络安全历史中的作用 ............................. 24
2.4.1 Anubis ..................................... 25
2.4.2 TEMU ..................................... 25
2.4.3 Ether ......................................... 26
2.4.4 Cuckoo 沙箱 ........................... 26
2.4.5 商业化解决方案—VirusTotal 和 Joe Sandbox ..................... 26
2.5 小结 .................................................. 27
第 3 章 深入探究 QEMU 28
3.1 使用仿真方法研究物联网(IoT)设备 .............................. 28
3.2 代码结构 ............................................. 29
3.3 QEMU 仿真 ........................................ 31
3.3.1 QEMU IR ................................ 31
3.3.2 深入了解 QEMU 架构 ................................. 35
3.4 QEMU 的扩展和修改 .............................................. 38
3.4.1 Avatar2简要示例 ......................................... 39
3.4.2 PANDA .................................... 41
3.5 小结 ................................................... 41
第 2 部分 仿真和模糊测试
第 4 章 QEMU 执行模式和模糊测试 44
4.1 QEMU 用户模式 ................................. 44
4.2 QEMU 全系统模式 ........................... 50
4.3 模糊测试和分析技术 ........................................ 52
4.3.1 程序语义的罗塞塔石碑 ........................................ 53
4.3.2 模糊测试技术 ............................................ 63
4.4 American Fuzzy Lop 和 American Fuzzy Lop++ ...................... 65
4.4.1 AFL 和 AFL++相较于自研模糊测试工具的优势 .................... 65
4.4.2 使用 AFL 和 AFL++进行模糊测试 ............................. 66
4.4.3 对 ARM 二进制文件进行模糊测试 .................................. 69
4.5 总结 ..................................................... 72
第 5 章 一个广为人知的组合:AFL + QEMU = CVE 73
5.1 发现漏洞真的那么容易吗 ...................................... 74
5.1.1 下载和安装 AFL++ ............................................. 75
5.1.2 准备一个易受攻击的 VLC 实例 .................................... 75
5.1.3 VLC 漏洞利用 .................................................... 80
5.2 全系统模糊测试—引入 TriforceAFL ....................... 92
5.3 总结 .................................................... 97
5.4 延伸阅读 ........................................... 97
5.5 附录—修改 Triforce 以实现测试用例的隔............................ 98
第 6 章 修改 QEMU 以进行基本的插桩 101
6.1 添加新的 CPU ................................. 102
6.2 仿真嵌入式固件 ............................... 103
6.3 对 DMA 外设进行逆向工程 ............................... 106
6.4 使用 Avatar2仿真 UART 以进行固件调试—可视化输出 ............ 108
6.5 总结 ............................................... 110
第 3 部分 高级概念
第 7 章 真实案例研究—三星 Exynos 基带 112
7.1 手机架构的速成课程 ........................ 112
7.1.1 基带 ....................................... 113
7.1.2 基带 CPU 家族 ...................... 114
7.1.3 应用处理器和基带接口 .................................... 116
7.1.4 深入了解 Shannon 系统 ................................. 116
7.1.5 关于 GSM/3GPP/LTE 协议规范的说明 ............................ 117
7.2 配置 FirmWire 以验证漏洞 ........................................ 118
7.2.1 CVE-2020-25279—仿真器模糊测试 ................................ 120
7.2.2 CVE-2020-25279—OTA 漏洞利用 .......................... 126
7.3 总结 .................................................. 132
第 8 章 案例研究—OpenWrt 全系统模糊测试 133
8.1 OpenWrt ........................................... 133
8.2 构建固件 ........................................... 134
8.2.1 在 QEMU 中测试固件 .................................... 136
8.2.2 提取并准备内核 ........................................... 137
8.3 对内核进行模糊测试 ............................................ 139
8.4 崩溃后的核心转储分析实验 .......................... 141
8.5 总结 ................................................... 142
第 9 章 案例研究—针对 ARM 架构的 OpenWrt 系统模糊测试 144
9.1 仿真 ARM 架构以运行 OpenWrt 系统 ....................... 144
9.2 为 ARM 架构安装 TriforceAFL .................................. 147
9.3 在基于 ARM 架构的 OpenWrt 中运行 TriforceAFL .................. 152
9.4 复现崩溃情况 ................................... 154
9.5 总结 ................................................... 156
第 10 章 终至此处—iOS 全系统模糊测试 158
10.1 iOS 仿真的简要历史 ................................. 159
10.2 iOS 基础 .......................................... 160
10.2.1 启动 iOS 所需的条件 ................................. 161
10.2.2 代码签名 ............................. 161
10.2.3 属性列表文件和权限 .............................. 162
10.2.4 二进制文件编译 ...................................... 162
10.2.5 IPSW 格式和内核用研究 ................................ 163
10.3 设置 iOS 仿真器 ................................ 163
10.3.1 准备环境 ............................ 164
10.3.2 构建仿真器 ........................ 165
10.3.3 启动准备工作 ...................... 165
10.3.4 在 QEMU 中启动 iOS ......................... 168
10.4 准备用于启动模糊测试的测试框架 ............................... 169
10.5 Triforce 针对 iOS 的驱动程序修改 ................................. 173
10.6 总结 ................................................... 179
第 11 章 意外转机—对 Android 库的模糊测试 181
11.1 Android OS 和架构介绍 ....................................... 182
11.2 使用 Sloth 对 Android 库进行模糊测试 .......................... 184
11.2.1 介绍 Sloth 的机制 .......................................... 185
11.2.2 AFL 覆盖能力介绍 ...................................... 186
11.2.3 运行 ELF 链接器 ............................... 188
11.2.4 运行 LibFuzzer .......................................... 190
11.2.5 解决 Sloth 模糊测试方法的问题 ............................... 191
11.2.6 运行 Sloth ........................... 191
11.3 总结 ............................................... 198
第 12 章 总结与结语 199