第1章 iOS安全基础知识 1
1.1 iOS硬件/设备的类型 1
1.2苹果公司如何保护App Store 2
1.3理解安全威胁 3
1.4理解iOS的安全架构 5
1.4.1更小的受攻击面 5
1.4.2精简过的iOS 5
1.4.3权限分离 5
1.4.4代码签名 5
1.4.5数据执行保护 6
1.4.6地址空间布局随机化 6
1.4.7沙盒 6
1.5 iOS攻击简史 7
1.5.1Libtiff 7
1.5.2短信攻击 8
1.5.3 Ikee蠕虫 8
1.5.4 Storm8 9
1.5.5 SpyPhone 10
1.5.6 Pwn2Own 2010 10
1.5.7 Jailbreakme.com 2 (“Star”) 10
1.5.8 Jailbreakme.com 3 (“Saffron”) 11
1.6小结 11
第2章 企业中的iOS 12
2.1 iOS配置管理 12
2.1.1移动配置描述文件 13
2.1.2 iPhone配置实用工具 14
2.2移动设备管理 21
2.2.1 MDM网络通信 21
2.2.2 Lion Server描述文件管理器 22
2.3小结 36
第3章 加密 37
3.1数据保护 37
3.2对数据保护的攻击 40
3.2.1对用户密码的攻击 40
3.2.2 iPhone Data Protection Tools 43
3.3小结 54
第4章 代码签名和内存保护 55
4.1强制访问控制 56
4.1.1 AMFI钩子 56
4.1.2 AMFI和execv 57
4.2授权的工作原理 59
4.2.1理解授权描述文件 59
4.2.2如何验证授权文件的有效性 62
4.3理解应用签名 62
4.4深入了解特权 64
4.5代码签名的实施方法 65
4.5.1收集和验证签名信息 65
4.5.2如何在进程上实施签名 68
4.5.3 iOS如何确保已签名页不发生改变 72
4.6探索动态代码签名 73
4.6.1 MobileSafari的特殊性 73
4.6.2内核如何处理即时编译 75
4.6.3 MobileSafari内部的攻击 77
4.7破坏代码签名机制 78
4.7.1修改iOS shellcode 79
4.7.2在iOS上使用Meterpreter 83
4.7.3取得App Store的批准 85
4.8 小结 86
第5章 沙盒 87
5.1理解沙盒 87
5.2在应用开发中使用沙盒 89
5.3理解沙盒的实现 95
5.3.1理解用户空间库的实现 95
5.3.2深入内核 98
5.3.3沙盒机制对App Store应用和平台应用的影响 109
5.4小结 113
第6章 对iOS应用进行模糊测试 114
6.1模糊测试的原理 114
6.2如何进行模糊测试 115
6.2.1基于变异的模糊测试 116
6.2.2基于生成的模糊测试 116
6.2.3提交和监测测试用例 117
6.3对Safari进行模糊测试 118
6.3.1选择接口 118
6.3.2生成测试用例 118
6.3.3测试和监测应用 119
6.4 PDF模糊测试中的冒险 122
6.5 对快速查看(Quick Look)的模糊测试 126
6.6用模拟器进行模糊测试 127
6.7对MobileSafari进行模糊测试 130
6.7.1选择进行模糊测试的接口 130
6.7.2生成测试用例 130
6.7.3 MobileSafari的模糊测试与监测 131
6.8 PPT模糊测试 133
6.9对SMS的模糊测试 134
6.9.1 SMS基础知识 135
6.9.2聚焦协议数据单元模式 136
6.9.3 PDUspy的使用 138
6.9.4用户数据头信息的使用 139
6.9.5拼接消息的处理 139
6.9.6其他类型UDH数据的使用 139
6.9.7用Sulley进行基于生成的模糊测试 141
6.9.8 SMS iOS注入 145
6.9.9 SMS的监测 146
6.9.10 SMS bug 151
6.10小结 153
第7章 漏洞攻击 154
7.1针对bug类的漏洞攻击 154
7.2理解iOS系统自带的分配程序 156
7.2.1区域 156
7.2.2内存分配 157
7.2.3内存释放 157
7.3驯服iOS的分配程序 158
7.3.1所需工具 158
7.3.2与分配/释放有关的基础知识 159
7.4理解TCMalloc 167
7.4.1大对象的分配和释放 167
7.4.2小对象的分配 168
7.4.3小对象的释放 168
7.5驯服TCMalloc 168
7.5.1获得可预知的堆布局 168
7.5.2用于调试堆操作代码的工具 170
7.5.3堆风水:以TCMalloc对算术漏洞进行攻击 172
7.5.4以TCMalloc就对象生存期问题进行漏洞攻击 175
7.6对ASLR的挑战 176
7.7案例研究:Pwn2Own 2010. 177
7.8测试基础设施 181
7.9小结 181
第8章 面向返回的程序设计 182
8.1 ARM基础知识 182
8.1.1 iOS的调用约定 183
8.1.2系统调用的调用约定 183
8.2 ROP简介 185
8.2.1 ROP与堆bug 186
8.2.2手工构造ROP有效载荷 187
8.2.3 ROP有效载荷构造过程的自动化 191
8.3在iOS中使用ROP 193
8.4 iOS中ROP shellcode的示例 195
8.4.1用于盗取文件内容的有效载荷 196
8.4.2利用ROP结合两种漏洞攻击程序(JailBreakMe v3) 202
8.5小结 206
第9章 内核的调试与漏洞攻击 207
9.1内核的结构 207
9.2内核的调试 208
9.3内核扩展与IOKit驱动程序 213
9.3.1对IOKit驱动程序对象树的逆向处理 213
9.3.2在内核扩展中寻找漏洞 216
9.3.3在IOKit驱动程序中寻找漏洞 219
9.4内核漏洞攻击 222
9.4.1任意内存的重写 223
9.4.2未初始化的内核变量 227
9.4.3内核栈缓冲区溢出 231
9.4.4内核堆缓冲区溢出 236
9.5小结 245
第10章 越狱 246
10.1为何越狱 246
10.2越狱的类型 247
10.2.1越狱的持久性 247
10.2.2漏洞攻击程序的类型 248
10.3理解越狱过程 249
10.3.1对bootrom进行漏洞攻击 250
10.3.2引导ramdisk 250
10.3.3为文件系统越狱 250
10.3.4安装完美越狱漏洞攻击程序 251
10.3.5安装AFC2服务 251
10.3.6安装基本实用工具 252
10.3.7应用转存 253
10.3.8应用包安装 254
10.3.9安装后的过程 255
10.4执行内核有效载荷和补丁 255
10.4.1内核状态修复 255
10.4.2权限提升 256
10.4.3为内核打补丁 257
10.4.4安全返回 267
10.5小结 268
第11章 基带攻击 269
11.1 GSM基础知识 270
11.2建立OpenBTS 272
11.2.1硬件要求 272
11.2.2 OpenBTS的安装和配置 273
11.3协议栈之下的RTOS 276
11.3.1 Nucleus PLUS 276
11.3.2 ThreadX 277
11.3.3 REX/OKL4/Iguana 277
11.3.4堆的实现 278
11.4漏洞分析 281
11.4.1获得并提取基带固件 281
11.4.2将固件镜像载入IDA Pro 283
11.4.3应用/基带处理器接口 283
11.4.4栈跟踪与基带核心转储 283
11.4.5受攻击面 284
11.4.6二进制代码的静态分析 285
11.4.7由规范引路的模糊测试 285
11.5对基带的漏洞攻击 286
11.5.1本地栈缓冲区溢出:AT+XAPP 286
11.5.2 ultrasnow解锁工具 287
11.5.3空中接口可利用的溢出 293
11.6小结 299
附录 参考资料 300