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