iOS 应用安全权威指南

更多详情

内容简介: 对于所有希望保护用户免受恶意攻击的开发者来说,消除iOS 应用当中的安全漏洞至关重要。在《iOS 应用安全权威指南》中,移动端安全专家David Thiel 向你揭示了那些会导致严重安全问题的常见iOS 编码漏洞,并阐述了找到并修复这些漏洞的方法。
避免在应用的安全漏洞方面出现重大纰漏很重要。无论是需要加强应用的防御能力,还是要在他人的代码当中寻找安全漏洞,《iOS 应用安全权威指南》都能帮助你很好地完成工作。
《iOS 应用安全权威指南》适合有一定经验、正致力于探究iOS 应用漏洞的开发者,也适合对渗透测试感兴趣的读者。

目录: 推荐序 ......................................................................................................................... V
译者序 ....................................................................................................................... VII
作者简介 ..................................................................................................................... IX
前言 ............................................................................................................................ XI
致谢 ......................................................................................................................... XXI
第一部分 iOS 基础
第1 章 iOS 安全模型 ................................................................................................ 2
安全启动 ........................................................................................................................... 3
沙盒机制 ........................................................................................................................... 3
数据保护和全盘加密 ........................................................................................................ 4
加密密钥的层级........................................................................................................ 5
钥匙串API ................................................................................................................ 7
数据保护API ............................................................................................................ 7
防御代码漏洞:ASLR、XN 和其他机制 ....................................................................... 8
越狱检测 ........................................................................................................................... 9
苹果商店的审查是否有用 .............................................................................................. 10
WebKit 桥接 ............................................................................................................ 11
XXIV iOS应用安全权威指南
动态修复 ................................................................................................................. 11
故意植入不安全的代码 .......................................................................................... 12
内嵌解释器 ............................................................................................................. 12
小结 ................................................................................................................................ 12
第2 章 Objective-C 简明教程.................................................................................. 13
关键的iOS 编程技术 ..................................................................................................... 14
消息传递 ......................................................................................................................... 14
剖析Objective-C 程序 .................................................................................................... 15
声明一个接口 ......................................................................................................... 15
具体实现 ................................................................................................................. 16
使用block 指定回调 ....................................................................................................... 18
Objective-C 如何管理内存 ............................................................................................. 19
自动引用计数 .................................................................................................................. 19
委托和协议...................................................................................................................... 20
should 消息 .............................................................................................................. 20
will 消息 .................................................................................................................. 21
did 消息 ................................................................................................................... 21
声明并遵守协议...................................................................................................... 21
category 的潜在问题 ....................................................................................................... 23
方法swizzling ................................................................................................................. 24
小结 ................................................................................................................................ 26
第3 章 iOS 应用剖析 .............................................................................................. 27
对plist 文件进行处理 ..................................................................................................... 29
设备目录 ......................................................................................................................... 32
Bundle 目录 ..................................................................................................................... 34
Data 目录 ......................................................................................................................... 35
Documents 和Inbox 目录 ....................................................................................... 35
Library 目录 ............................................................................................................ 36
tmp 目录 .................................................................................................................. 38
Shared 目录 ..................................................................................................................... 38
小结 ................................................................................................................................ 39
第二部分 安全性测试
第4 章 构建测试平台 .............................................................................................. 42
拆掉辅助轮...................................................................................................................... 42
推荐几个测试设备 .......................................................................................................... 43
使用设备测试与使用模拟器测试 .................................................................................. 44
网络和代理设置 .............................................................................................................. 45
绕过TLS 验证 ........................................................................................................ 45
用stunnel 绕过SSL ................................................................................................ 47
设备上的证书管理 .................................................................................................. 49
在设备上设置代理 .................................................................................................. 50
Xcode 和构建设置 .......................................................................................................... 53
为生活增加点挑战 .................................................................................................. 53
启用完整的ASLR .................................................................................................. 55
Clang 和静态分析 ................................................................................................... 56
Address Sanitizer 和动态分析 ................................................................................ 57
使用Instruments 监控程序 ............................................................................................. 58
激活工具 ................................................................................................................. 59
用Watchdog 监视系统活动 ................................................................................... 61
小结 ................................................................................................................................ 62
第5 章 使用lldb 和其他工具进行调试 ..................................................................... 63
lldb 中有用的特性 .......................................................................................................... 64
操作断点 ................................................................................................................. 64
查看帧和变量 ......................................................................................................... 66
XXVI iOS应用安全权威指南
可视化查看对象...................................................................................................... 70
操作变量和属性...................................................................................................... 71
断点行为 ................................................................................................................. 73
使用lldb 进行安全分析 ................................................................................................. 75
错误注入 ................................................................................................................. 75
追踪数据 ................................................................................................................. 77
查看核心框架 ......................................................................................................... 77
小结 ................................................................................................................................ 78
第6 章 黑盒测试 ..................................................................................................... 79
安装第三方应用程序 ...................................................................................................... 80
使用.app 目录安装 .................................................................................................. 80
使用.ipa 程序包安装 ............................................................................................... 82
解密二进制文件 .............................................................................................................. 82
启动设备上的debugserver ..................................................................................... 83
定位加密字段 ......................................................................................................... 86
转储应用程序内存 .................................................................................................. 90
逆向解密后的二进制文件 .............................................................................................. 93
使用otool 检查二进制文件 ................................................................................... 93
使用class-dump 获得类信息 ................................................................................. 95
使用Cycript 从运行程序中提取数据 .................................................................... 96
使用Hopper 反汇编 ................................................................................................ 97
绕过证书锁定 .................................................................................................................. 99
使用Cydia Substrate 工具 ............................................................................................ 100
使用Introspy 自动拦截 ................................................................................................ 104
小结 ............................................................................................................................... 107
目录 XXVII
第三部分 Cocoa API 的安全怪癖
第7 章 iOS 网络通信 ............................................................................................ 110
使用iOS 自带的URL 加载系统 ................................................................................. 110
正确使用传输层安全协议 .................................................................................... 111
NSURLConnection 的基本身份验证策略 ........................................................... 113
在NSURLConnection 中实现TLS 认证 ............................................................. 115
修改重定向行为.................................................................................................... 117
TLS 证书锁定 ....................................................................................................... 117
使用NSURLSession ..................................................................................................... 120
NSURLSession 配置 ............................................................................................. 120
执行NSURLSession 任务 .................................................................................... 121
如何绕过NSURLSession 的TLS 验证 ............................................................... 122
NSURLSession 中的基本身份验证 ..................................................................... 123
管理已存储的URL 凭证 ...................................................................................... 125
使用第三方网络API 的风险 ....................................................................................... 126
如何正确使用AFNetworking .............................................................................. 126
ASIHTTPRequest 的错误使用方式 .................................................................... 128
多点连接 ....................................................................................................................... 129
使用NSStream 操作底层网络 ..................................................................................... 131
使用CFStream 操作更加底层的网络 .......................................................................... 133
小结 ............................................................................................................................... 134
第8 章 进程间通信 ............................................................................................... 135
URL scheme 和openURL 方法 .................................................................................... 135
定义URL scheme .................................................................................................. 136
发送和接收URL/IPC 请求 .................................................................................. 137
验证URL 和发送者 .............................................................................................. 138
劫持URL scheme .................................................................................................. 140
XXVIII iOS应用安全权威指南
通用链接 ....................................................................................................................... 141
使用UIActivity 共享数据 ............................................................................................ 143
应用程序扩展 ................................................................................................................ 145
检查应用程序是否实现了扩展 ............................................................................ 146
限制和验证可共享的数据 .................................................................................... 147
禁止应用和扩展交互 ............................................................................................ 148
失败的IPC 技巧:剪贴板 ........................................................................................... 149
小结 ............................................................................................................................... 150
第9 章 适用于iOS 的Web 应用 ........................................................................... 151
使用(并滥用)UIWebView ........................................................................................ 151
UIWebView 的使用方式 ....................................................................................... 152
在UIWebView 中执行JavaScript 代码 ............................................................... 153
桥接JavaScript-Cocoa 的收益和风险 .......................................................................... 154
应用与JavaScriptCore 交互 ................................................................................. 155
使用Cordova 执行JavaScript 代码 ..................................................................... 159
使用WKWebView ........................................................................................................ 163
WKWebView 的使用方式 .................................................................................... 163
WKWebViews 的安全性优势 ............................................................................... 164
小结 ............................................................................................................................... 166
第10 章 数据泄漏 ................................................................................................. 167
揭秘NSLog 和苹果系统日志 ...................................................................................... 167
在发布版本中禁用NSLog ................................................................................... 169
使用断点行为来记录日志 .................................................................................... 170
敏感数据如何通过剪贴板泄漏 .................................................................................... 171
不受限制的系统剪贴板 ........................................................................................ 171
命名剪贴板的风险 ................................................................................................ 172
剪贴板数据保护策略 ............................................................................................ 174
查找并修复HTTP 缓存泄漏 ........................................................................................ 176
缓存管理 ............................................................................................................... 177
如何删除缓存数据 ................................................................................................ 179
HTTP 本地存储和数据库中的数据泄漏 ............................................................. 182
按键记录及自动纠错数据库 ........................................................................................ 183
用户偏好设置的错误用法 ............................................................................................ 185
处理截屏中的敏感数据 ................................................................................................ 186
屏幕遮挡策略 ....................................................................................................... 187
遮挡原理解析 ....................................................................................................... 190
隐藏视图的常见问题 ............................................................................................ 191
阻止应用挂起,从而避免截屏 ............................................................................ 191
状态保存导致的泄漏 .................................................................................................... 192
安全的状态保存 ............................................................................................................ 194
远离iCloud .................................................................................................................... 196
小结 ............................................................................................................................... 197
第11 章 C 语言的遗留问题 ................................................................................... 198
格式化字符串 ................................................................................................................ 199
预防传统的C 格式化字符串攻击 ....................................................................... 200
预防Objective-C 格式化字符串攻击 .................................................................. 201
缓冲区溢出及栈空间 .................................................................................................... 202
strcpy 缓冲区溢出 ................................................................................................. 203
预防缓冲区溢出.................................................................................................... 204
整数溢出和堆 ................................................................................................................ 206
malloc 引发的整数溢出 ........................................................................................ 206
预防整数溢出 ....................................................................................................... 208
小结 ............................................................................................................................... 208
第12 章 注入攻击 ................................................................................................. 209
客户端的跨站脚本攻击 ................................................................................................ 209
输入审查 ............................................................................................................... 210
XXX iOS应用安全权威指南
输出编码 ............................................................................................................... 212
SQL 注入攻击 ............................................................................................................... 213
断言注入攻击 ................................................................................................................ 214
XML 注入攻击 .............................................................................................................. 216
通过XML 外部实体实现注入攻击 ..................................................................... 216
第三方XML 库的问题 ......................................................................................... 217
小结 ............................................................................................................................... 218
第四部分 保证数据安全
第13 章 加密与认证 ............................................................................................. 220
使用钥匙串.................................................................................................................... 220
用户备份中的钥匙串 ............................................................................................ 221
钥匙串保护属性.................................................................................................... 221
钥匙串基础用法.................................................................................................... 223
封装钥匙串 ........................................................................................................... 226
共享钥匙串 ........................................................................................................... 227
iCloud 同步 ............................................................................................................ 228
数据保护API ................................................................................................................ 228
保护等级 ............................................................................................................... 229
DataProtectionClass 权限 ...................................................................................... 232
检查保护数据是否可用 ........................................................................................ 233
使用CommonCrypto 加密 ............................................................................................ 235
避免弱算法 ........................................................................................................... 236
正确使用初始化向量 ............................................................................................ 236
破碎的熵 ............................................................................................................... 237
弱密钥 ................................................................................................................... 237
执行散列操作 ................................................................................................................ 238
使用HMAC 确保消息的可靠性 .................................................................................. 239
使用RNCryptor 封装CommonCrypto ......................................................................... 240
使用TouchID 进行本地验证........................................................................................ 241
指纹是否足够安全 ................................................................................................ 242
小结 ............................................................................................................................... 242
第14 章 移动端隐私问题 ...................................................................................... 243
唯一设备标识符隐患 .................................................................................................... 243
官方解决方案 ....................................................................................................... 244
使用唯一标识符的规则 ........................................................................................ 246
移动端Safari 及请勿追踪header 标签 ........................................................................ 246
Cookie 接受策略 ........................................................................................................... 247
位置和行动监控 ............................................................................................................ 249
地理位置定位的工作原理 .................................................................................... 249
存储位置数据的风险 ............................................................................................ 250
限制定位精度 ....................................................................................................... 250
请求位置数据 ....................................................................................................... 251
健康与运动信息管理 .................................................................................................... 252
通过HealthKit 读写数据 ...................................................................................... 252
M7 协处理器 ......................................................................................................... 254
申请收集数据 ................................................................................................................ 254
使用iBeacon 追踪距离................................................................................................. 255
iBeacon 监测功能 ................................................................................................. 256
将iOS 设备变为iBeacon ..................................................................................... 258
iBeacon 注意事项 ................................................................................................. 259
建立隐私策略 ................................................................................................................ 259
小结 ............................................................................................................................... 260

译者序: 随着 2007年第一代 iPhone的诞生,一个崭新的移动互联网时代拉开了序幕。截至 iPhone 7上市,苹果的 Apple Store应用累计下载 1400亿次,巨大的商机令全球的开发者们纷至沓来。截至 2015年,仅中国的开发者人数就突破了 100万,稳居世界第一。
随着硬件机能的日新月异,iOS--这一具有划时代意义的操作系统也迎来了它的 10岁生日。在每年的 WWDC上,苹果总是不遗余力地向全世界的开发者们展示最新的操作系统,介绍新的特性、新的 API,甚至是最佳编程实践。
然而正所谓树大招风,iPhone用户也是黑产们眼中高质量的攻击目标。虽然苹果独特的沙盒机制已经最大限度地保护了用户的隐私安全,但目前针对 iOS的黑色产业链已涉及方方面面。 2015年 9月中国大陆地区出现了 XcodeGhost病毒感染开发工具 Xcode的风波,给所有 iOS开发的从业者敲响了警钟,就连微信这种国民级 App都未能幸免,这进一步说明了提升国内 iOS开发者安全意识的紧迫性。
每次 iOS版本更新时,市面上都会出版大量与 iOS开发相关的书籍,但绝大部分的书都是教你如何使用 iOS SDK提供的 API来开发一个 App。大多数情况下,能熟练运用这些 API就足够了,但如果想立志成为一名进阶的 iOS开发者,使编写出来的代码更加稳定和安全,就要对 iOS系统的底层细节和安全机制有所了解。可惜的是,市面上关于 iOS系统安全机制和底层研究的书凤毛麟角。
Swift.GG作为国内最走心的翻译组之一,通过一次偶然的机会得知电子工业出版社正在寻找《iOS应用安全权威指南》一书的译者。双方一拍即合,决定为中国的开发者们带来一本关于 iOS安全机制与底层细节的书籍,从而补上 iOS开发"安全"这最后一块拼图。
本书的作者 David Thiel,自 2008年初代 iPhone诞生后的第一年起,就开始对 iOS应用进行各种安全检测和渗透实验,时至今日,已经积攒了大量的经验。无论你是刚入门的小菜鸟,还是已经摸爬滚打多年的老司机,本书都会循序渐进地带你重温 iOS最基础的基本结构、安全背景;再更进一步地手把手教你搭建一个安全测试环境,进行代码分析、逆向工程;之后本书将 iOS最薄弱、易受攻击的软肋一一列举,并告诉开发者如何避开这些陷阱;最后一部分,将会为我们演示如何利用加密手段最大限度地保护用户的数据和隐私。
本书在翻译过程中,得到了阿里巴巴安全大神蒸米同学的悉心指导;在本书的校对过程中,SwiftGG的创始人梁杰同学提出了很高的要求,并投入了极大的精力,在此对二位提出特别感谢。参与翻译的李俊阳、马超同学,以及后期参与校对的 SwiftGG小伙伴们,虽然大家身处异地,但从翻译到校对的整个过程都配合得行云流水,体现出了整个团队的高效与专业,无愧于国内"走心翻译组"这一称号,再次感谢大家。最后感谢电子工业出版社给了我们这次机会,感谢编辑们和审稿专家的细心检查。译者水平有限,bug在所难免,还请读者批评指正。
程伟 2016年 12月 5日

前言: 目前市面上有许多与 iOS安全有关的文章,主要涉及 iOS的安全模型、越狱、查找代码执行漏洞以及其他一些安全相关的特性。此外,还有一些文章从取证学角度来介绍,比如在犯罪调查中如何从物理设备或备份中提取数据。这些信息非常有用,但市面上主流的 iOS书籍都在介绍应用开发,而本书的目标是要填补一个更大的空白。
在真实世界中,人们的注意力并没有聚焦在如何开发安全的 iOS应用或对 iOS应用进行安全评估上。由此产生的后果,就是在 iOS应用中存在着一些令人尴尬的安全漏洞,这些漏洞会曝光用户的敏感数据、规避认证机制,甚至滥用用户隐私(无论是有意还是无意的)。随着 iPhone等智能设备的普及,人们越来越多地使用 iOS来处理一些关键任务,并委托这些应用来处理与之相关的大量敏感信息,所以 iOS应用的安全性需要被充分考虑到。
我编写本书的目的,就是尽可能地为读者介绍真实环境中是如何安全地开发 iOS应用程序的。iOS是一个快速更迭的系统,但是我会尽可能讲解一些不变的知识,并教你使用一些工具来剖析 iOS系统,让你能适应未来 API的变化(万变不离其宗)。
不同版本的 iOS存在不同的安全漏洞。虽然苹果已经终结了某些设备的寿命(停产),但是发者仍然希望他们的应用能够运行在这些老旧设备上(比如第一代 iPad)。本书所要展示的漏洞覆盖了(本书完稿之时)从 iOS 5.x到 9.0的系统,针对每一个版本,我都会讨论相应的风险与应对措施。
本书的目标读者
首先,这是一本关于安全的书。如果你是一个开发者或者安全专家,并且正在研究 iOS应用存在的漏洞(以及对应的修复方法),那么恭喜你,看这本书就对了!
如果你有一些 iOS开发经验或者熟悉 iOS应用的底层工作机制,那么你将从本书中学到大量的干货。不过,即使没有这些知识,只要你是一个有经验的程序员或渗透测试人员,必要时有钻研苹果官方文档的勇气,那就完全可以畅读本书。我会在第 2章带你快速预览一遍 Objective-C和一些常用的 API,顺便熟悉一下 Cocoa Touch。如果需要强化一下语言方面的基础知识(或者想复习一下),可以从第 2章开始。
本书的内容
大概从 2008年开始,我就一直在进行各种各样的 iOS应用安全检测和渗透实验,从中收集了大量的陷阱和错误,这些都是开发者在实际开发 iOS应用程序时会碰到的。如果你正在寻求更安全的应用开发最佳实践,又或者是作为一个安全专家想要学习如何定位 iOS的安全问题,那么你一定不能错过本书总结的知识点。
本书的结构
第一部分: iOS基础,你将深入了解 iOS 的背景,熟悉它的安全历史及其应用程序的基本结构。 ?
:iOS安全模型,简要分析 iOS的安全模型,介绍该平台的基础防范措施,展示它能做什么、不能做什么。
第 2章:Objective-C简明教程,解释了 Objective-C与其他编程语言的不同之处,简要介绍了一些专业术语和设计模式。对于经验丰富的 Objective-C程序员来说,这可能并不算什么新的内容,但是对于初学者和初次涉猎 iOS的开发者来说很有价值。
第3章:iOS应用剖析,概述了 iOS应用程序的结构和打包方式,研究了本地的存储机制以及泄露敏感信息的方式。
第二部分:安全性测试,你将学习如何在开发或渗透测试中建立安全的测试环境,我也会分享一些配置 Xcode的小技巧,从而最大化地利用现有的安全机制。 ?
第4章:构建测试平台,工欲善其事必先利其器,本章将介绍所有用到的工具软件,并学习如何配置这些软件,让它们帮助我们来检查和测试 iOS应用。具体来说,本章将会介绍模拟器、配置代理、绕过 TLS 验证以及分析应用的特征行为。 ?
第5章:使用 lldb和其他工具进行调试,你可以使用 lldb和 Xcode 的内建工具来更加深入地监控应用程序的行为,这些工具将帮助你分析代码中的复杂问题,还能帮你实现错误注入这样的功能。 ?
第6章:黑盒测试,深入研究一些工具,学习在没有源代码的情况下对应用程序进行分析。这涉及基本的逆向工程、二进制修改、复制程序以及使用 lldb 的远程实例在设备上进行调试的内容。
第三部分: Cocoa API的安全怪癖,这部分会介绍 Cocoa Touch API中常见的安全隐患。
第7章:iOS网络通信,讨论了网络和安全传输协议(TLS)在 iOS中的工作原理,包括信息认证、证书锁定和 TLS连接中的错误处理。
第8章:进程间通信,介绍进程间的通信机制,包括 URL scheme和最新的通用链接机制。
第9章:适用于 iOS的 Web应用,涉及 Web应用与 iOS原生应用程序的集成,你可以直接使用 Web视图或 JavaScript和 Cocoa的桥接框架 Cordova。
第10章:数据泄漏,讨论了敏感数据泄漏的多种渠道,也许无意中,你的重要数据就会泄漏到本地存储、其他应用或是传播到网络中。 ?
第11章:C语言的遗留问题,介绍 C语言在 iOS应用程序中遗留的漏洞:栈和堆的内存损坏、格式化字符串漏洞、内存释放后又重新使用以及一些 Objective-C变种的经典漏洞
第12章:注入攻击,涉及的攻击主要有 SQL注入、跨站点脚本、 XM注入以及谓词注入,它们都可以用来攻击 iOS应用程序。最后,第四部分:保证数据安全,介绍了数据的隐私和加密问题。 ?
第 13章:加密与认证,本章将介绍加密的最佳实践,包括如何正确地使用钥匙串、数据保护 API以及 CommonCrypto框架提供的其他密码学原语。
第 14章:移动端隐私问题,在本书的最后一章将会讨论用户隐私,以及收集应用不需要的数据对于用户和开发者来说意味着什么。
学完本书之后,你会掌握以下技能:面对一个 iOS应用程序,无论它是否提供源代码,你都能迅速地定位并找出它的安全漏洞。在实际的 iOS开发过程中,你也能写出足够安全可靠的代码。
本书的约定
由于 Objective-C是一门相当啰嗦的语言,有着极端冗长的类名和方法名,所以,为了便于阅读,我在源代码中封装了一下,但是这可能并不是你熟悉的代码格式。有时候代码看起来很别扭 --你可以把它们复制到 Xcode中,让 Xcode来格式化代码。
更多的细节请阅读第 2章,我支持在 Objective-C中使用传统的中缀符而不是点语法。此外,我也习惯将花括号与方法声明放置在同一行,理由很简单:我是一个"老人"了。
书中 Objective-C的类和方法名将使用 monospaced字体,C语言的函数也将同样采用 monospaced字体。为了看上去简单明了,路径 /Users//Library/Developer/CoreSimulator/会用
序言: 在数字浪潮席卷全球之前,人们出门时并不会随身携带装满私人敏感信息的电子设备。而现在,几乎每个人都会随身携带一部手机,里面装满了各种私人信息。
智能手机给我们带来的不只是便利。它包含如此多的信息,对许多美国人来说,它就是"生活隐私"的载体。技术的进步让信息无处不在,但是这并不会降低信息的重要性,我们需要为了保护信息不断奋斗,就像国父们一样。
--首席大法官 John Roberts,出自莱利诉加利福尼亚案(2014)
大多数人都承认,智能手机是 21世纪影响力昀大的发明。自 2007年第一代 iPhone问世以来,智能手机的用户量暴增。到 2015年年末写这本书时,全球已有近 34亿手机用户,大概占世界人口的一半(全世界有超过 73亿人)。在全球范围内,智能手机已经超过了电脑,成为访问互联网的主力。智能手机的普及对人类文明的影响完全能写一本书。手机正在改变世界,无数人通过手机访问互联网上的教育和娱乐资源,到处都是金矿。在某些国家,移动互联网和社交网络甚至能让专制政权垮台,能推动社会变革。
即使是美国昀高法院的七旬老人也已经意识到现代移动设备的威力,并做出了新的判例。就像上面莱利诉加利福尼亚案所提到的,智能手机不仅是一部电子设备--它是人民隐私的入口。
和所有的技术革命一样,移动技术的普及也会产生一些负面影响。我们有能力与世界各地的人建立联系,但这并不能提升面对面的沟通能力,而且移动技术也无法消除世界上长久以来的贫富差距。与此同时,和企业云计算、个人计算机及网络革命一样,智能手机也会引入新的安全漏洞,同时需要面对现有的各种安全问题。
2007年发布的智能手机确实有一些重要的技术创新,但是真正吸引第三方开发者的是之后发布的 SDK和开放应用商店。由此也诞生了一批新时代的开发者,他们需要从过去的安全教训中汲取经验,适应未来全新的、不确定的环境。
我和 David Thiel已经相识 10年之久,他对新技术的热情给我留下了深刻的印象。一旦出现新技术, David就会马上通过检查、反编译、破解来掌握它,并用新知识来增强其他技术的安全性。David很早就意识到 iPhone会出现新的安全问题,因此从 iPhone操作系统 SDK发布的第一天起,他就已经开始研究应用开发者可能会犯的错误,以及如何越过平台限制开发安全的应用。
本书是迄今为止对 iOS安全介绍昀为全面的书籍。每一位心系用户的开发者都应该遵循本书的指导来设计自身的产品、组织结构和技术决策。David把多年来踩过的坑和解决方案都写了下来,希望你能认真学习。
智能手机潜力巨大,但要让它真正发挥作用,我们必须尽昀大努力让设备安全可信,保护用户隐私不被泄露。
Alex Stamos Facebook首席安全官

书摘: 推荐序
在数字浪潮席卷全球之前,人们出门时并不会随身携带装满私人敏感信息的电子设备。而现在,几乎每个人都会随身携带一部手机,里面装满了各种私人信息。
智能手机给我们带来的不只是便利。它包含如此多的信息,对许多美国人来说,它就是“生活隐私”的载体。技术的进步让信息无处不在,但是这并不会降低信息的重要性,我们需要为了保护信息不断奋斗,就像国父们一样。
——首席大法官 John Roberts,出自莱利诉加利福尼亚案(2014)
大多数人都承认,智能手机是 21世纪影响力昀大的发明。自 2007年第一代 iPhone问世以来,智能手机的用户量暴增。到 2015年年末写这本书时,全球已有近 34亿手机用户,大概占世界人口的一半(全世界有超过 73亿人)。在全球范围内,智能手机已经超过了电脑,成为访问互联网的主力。智能手机的普及对人类文明的影响完全能写一本书。手机正在改变世界,无数人通过手机访问互联网上的教育和娱乐资源,到处都是金矿。在某些国家,移动互联网和社交网络甚至能让专制政权垮台,能推动社会变革。
即使是美国昀高法院的七旬老人也已经意识到现代移动设备的威力,并做出了新的判例。就像上面莱利诉加利福尼亚案所提到的,智能手机不仅是一部电子设备——它是人民隐私的入口。
和所有的技术革命一样,移动技术的普及也会产生一些负面影响。我们有能力与世界各地的人建立联系,但这并不能提升面对面的沟通能力,而且移动技术也无法消除世界上长久以来的贫富差距。与此同时,和企业云计算、个人计算机及网络革命一样,智能手机也会引入新的安全漏洞,同时需要面对现有的各种安全问题。
2007年发布的智能手机确实有一些重要的技术创新,但是真正吸引第三方开发者的是之后发布的 SDK和开放应用商店。由此也诞生了一批新时代的开发者,他们需要从过去的安全教训中汲取经验,适应未来全新的、不确定的环境。
我和 David Thiel已经相识 10年之久,他对新技术的热情给我留下了深刻的印象。一旦出现新技术, David就会马上通过检查、反编译、破解来掌握它,并用新知识来增强其他技术的安全性。David很早就意识到 iPhone会出现新的安全问题,因此从 iPhone操作系统 SDK发布的第一天起,他就已经开始研究应用开发者可能会犯的错误,以及如何越过平台限制开发安全的应用。
本书是迄今为止对 iOS安全介绍昀为全面的书籍。每一位心系用户的开发者都应该遵循本书的指导来设计自身的产品、组织结构和技术决策。David把多年来踩过的坑和解决方案都写了下来,希望你能认真学习。
智能手机潜力巨大,但要让它真正发挥作用,我们必须尽昀大努力让设备安全可信,保护用户隐私不被泄露。
Alex Stamos Facebook首席安全官
译者序
随着 2007年第一代 iPhone的诞生,一个崭新的移动互联网时代拉开了序幕。截至 iPhone 7上市,苹果的 Apple Store应用累计下载 1400亿次,巨大的商机令全球的开发者们纷至沓来。截至 2015年,仅中国的开发者人数就突破了 100万,稳居世界第一。
随着硬件机能的日新月异,iOS——这一具有划时代意义的操作系统也迎来了它的 10岁生日。在每年的 WWDC上,苹果总是不遗余力地向全世界的开发者们展示最新的操作系统,介绍新的特性、新的 API,甚至是最佳编程实践。
然而正所谓树大招风,iPhone用户也是黑产们眼中高质量的攻击目标。虽然苹果独特的沙盒机制已经最大限度地保护了用户的隐私安全,但目前针对 iOS的黑色产业链已涉及方方面面。 2015年 9月中国大陆地区出现了 XcodeGhost病毒感染开发工具 Xcode的风波,给所有 iOS开发的从业者敲响了警钟,就连微信这种国民级 App都未能幸免,这进一步说明了提升国内 iOS开发者安全意识的紧迫性。
每次 iOS版本更新时,市面上都会出版大量与 iOS开发相关的书籍,但绝大部分的书都是教你如何使用 iOS SDK提供的 API来开发一个 App。大多数情况下,能熟练运用这些 API就足够了,但如果想立志成为一名进阶的 iOS开发者,使编写出来的代码更加稳定和安全,就要对 iOS系统的底层细节和安全机制有所了解。可惜的是,市面上关于 iOS系统安全机制和底层研究的书凤毛麟角。
Swift.GG作为国内最走心的翻译组之一,通过一次偶然的机会得知电子工业出版社正在寻找《iOS应用安全权威指南》一书的译者。双方一拍即合,决定为中国的开发者们带来一本关于 iOS安全机制与底层细节的书籍,从而补上 iOS开发“安全”这最后一块拼图。
本书的作者 David Thiel,自 2008年初代 iPhone诞生后的第一年起,就开始对 iOS应用进行各种安全检测和渗透实验,时至今日,已经积攒了大量的经验。无论你是刚入门的小菜鸟,还是已经摸爬滚打多年的老司机,本书都会循序渐进地带你重温 iOS最基础的基本结构、安全背景;再更进一步地手把手教你搭建一个安全测试环境,进行代码分析、逆向工程;之后本书将 iOS最薄弱、易受攻击的软肋一一列举,并告诉开发者如何避开这些陷阱;最后一部分,将会为我们演示如何利用加密手段最大限度地保护用户的数据和隐私。
本书在翻译过程中,得到了阿里巴巴安全大神蒸米同学的悉心指导;在本书的校对过程中,SwiftGG的创始人梁杰同学提出了很高的要求,并投入了极大的精力,在此对二位提出特别感谢。参与翻译的李俊阳、马超同学,以及后期参与校对的 SwiftGG小伙伴们,虽然大家身处异地,但从翻译到校对的整个过程都配合得行云流水,体现出了整个团队的高效与专业,无愧于国内“走心翻译组”这一称号,再次感谢大家。最后感谢电子工业出版社给了我们这次机会,感谢编辑们和审稿专家的细心检查。译者水平有限,bug在所难免,还请读者批评指正。
程伟 2016年 12月 5日