最强iOS和macOS安全宝典pdf下载pdf下载

最强iOS和macOS安全宝典百度网盘pdf下载

作者:
简介:本篇主要提供最强iOS和macOS安全宝典pdf下载
出版社:电子工业出版社
出版时间:2021-08
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

编辑推荐

技术畅销书《zui强Android书:架构大剖析》作者Jonathan Levin老师的又一本力作。本书沿续了他一贯的写作风格:详尽、细致、深入地剖析苹果操作系统的安全防护机制、从正反两面思考防护机制的设计目的,以此为起点,提出系统安全加固的秘诀。

本书适合所有从事移动安全的读者阅读。


内容简介

《zui强iOS和macOS安全宝典》以苹果操作系统的安全为主题,主要面向苹果高级用户、系统管理员、安全研究人员和黑客。

本书主要分三个部分:第一部分重点介绍了苹果公司在macOS和iOS上部署的安全服务和安全防护机制,通过学习这些技术,读者可以更好地了解苹果操作系统;第二部分介绍了如何绕过这些安全机制并最终实现iOS越狱。在某种意义上,可以把第二部分看成是一份迷你的“iOS黑客越狱手册”,里面介绍了历年来非常经典的苹果系统漏洞和越狱程序;第三部分提供了一份macOS安全加固指南,可以帮助系统管理员和用户更好地加固自己的操作系统、从而有效地抵御黑客的攻击。


作者简介

Jonathan Levin

Technologeeks公司的创始人及CTO。该公司致力于解决极困难和极具挑战性的软件安全问题,专注于各大操作系统的内部实现技术,提供对传统平台(Windows、Linux、 mac OS)及移动平台(Android、iOS)的专业解决方案。

除了本书,Jonathan还著有畅销书Android Internals(中文名《zui强Android书》),详细阐述了Android移动操作系统的内部工作原理。

蒸米

蚂蚁集团高级安全专家,博士,毕业于香港中文大学计算机科学与工程专业(移动安全方向),阿里星,目前主要负责反入侵和安全切面相关的业务。曾在阿里、腾讯、百度以及硅谷FireEye工作实习。

发现并命名了影响上亿台设备的iOS病毒XcodeGhost和影响上亿台设备的Android App漏洞WormHole,在安全界产生巨大影响,并被FIT 2016评选为“年度最佳安全研究员”;实现了iOS 11.3.1版本的越狱并帮助Apple公司修复多处iOS和macOS系统安全问题,获得Apple公司的官网致谢;

在学术界顶会(NDSS、CCS等)和工业界顶会(Blackhat US、DEFCON等)上发表过论文和演讲;业余时间多次参加信息安全竞赛 (DEFCON、AliCTF、GeekPwn等),并取得优异成绩。


精彩书评

几年前有幸与Levin先生相识,当时我们团队首次发布了iOS的越狱工具,也与国外一些越狱社区的成员建立了联系。其实在认识Levin先生本人之前,我就拜读过他编写的图书Mac OS X and iOS Internals。越狱用户中除了普通用户,还有Levin先生这样的致力于对操作系统本身的机制做深入研究和分析的极客。安全研究者的工作更多的是找到系统的一个薄弱点,然后突破系统的防护;而Levin先生的工作则是把整个系统的运行机制剖析清楚,从各个方面完整分析系统的实现原理。对这些原理的理解与安全研究工作是互为补充的,从Levin先生的书里我学到了许多有用的知识,帮助我更深入地思考哪些环节可能有弱点。此外,在对系统长期研究的基础上,Levin先生还编写了许多实用的工具,例如jtool、joker、procexp等,这些工具已经成为我们日常进行安全研究的必需品。

值得一提的是,认识Levin先生后我们还发现他对中国文化非常热爱。他发布了名为“麒麟”的工具,用于进行漏洞利用后准备越狱环境,方便了许多越狱开发爱好者。

最后,很高兴Levin先生的作品能有中文版,相信本书能帮助更多中国安全研究人员学习安全知识以及发现苹果操作系统的安全问题。

——盘古团队 王铁磊

一石三鸟:你所不知道的《zui强iOS和macOS安全宝典》


Jonathan Levin的新书来了!这次是《zui强iOS和macOS安全宝典》。

我最初是通过MacOS and iOS Internals, Volume I: User Mode知道Levin的,书中附带的一些工具在分析苹果的*OS系统及其中程序时非常有用,于是就关注了他的newosxbook.com以及后来的newandroidbook.com网站。2015年,电子工业出版社的编辑问我是否愿意翻译他的Android Internals, Volume I: The Power User’s View,其实当时我已经看过这本书了,但架不住编辑的游说:成为译者,就能不停地免费看更新了……就糊里糊涂地答应了。答应之后才发现踩坑了!Jonathan Levin的更新非常频繁,常常几个月就更新一次,于是译稿就得不停地跟着更新……,一直到整本书交稿,送到出版社审校,译者序都写完了,他还改了两次!听说Levin现在还延续着这一风格,估计本书的译者蒸米也一定不堪其扰吧。[坏笑]

不过,好处是,这样整出来的译稿,几乎是同步国外新版内容的。一般的图书,翻译审校怎么也得花上一年多的时间,中文版和原版相比,技术上难免会有些脱节,这本书倒是一定程度避免了这类问题。

本书英文版的原书名是*OS Internals, Volume I: Security and Insecurity,书名明显是致敬大名鼎鼎的Windows Internals系列,中规中矩的译法应该是《深入理解*OS操作系统》,Android Internals, Volume I: User Mode中文版出版时,我给出的译名就是《深入理解Android操作系统·卷一:从极客玩家的视角》。不过在讲述Android系统内核方面的书中,这本书在当时确实是无出其右者,所以也就认可了《zui强Android书——架构大剖析》的书名。显然这次的中文书名,也延续了这一风格。坦诚地说,Levin的Android和*OS这两个系列,内容质量确实好,也担得起“zui强”二字。

尽管都讲内核,与《zui强Android书:架构大剖析》(Android几乎是开源的,书中引用的几乎全是源码)相比,由于苹果公司的*OS操作系统是个闭源系统,所以在讲述相关主题时,是离不开软件逆向工程的。随手翻翻这本书,就能发现其中有大量的IDA截图。在拜读样书的时候,我也发现书中展示了许多逆向工程分析技巧,即便脱离*OS操作系统,仅掌握这些技巧本身也是非常有益的。更何况在本书的官网上还有大量的工具和资源,能帮助我们快速提高对*OS操作系统的认识。

希望本书的出版能使广大网络安全从业人员,更好,更深入地理解*OS操作系统及其中使用的安全机制,推动祖国网络安全事业更上一层楼。

——崔孝晨,Team509


一本书助你从小工到专家

iOS和macOS的系统原理与逆向基础,以及由此展开的漏洞分析挖掘与恶意代码分析检测,一直是安全技术里一个独特有魅力的领域,也是一个值得投入的领域。一方面,从硬件、内核到系统用户态、App生态环境,Apple的系统从设计上展现出许多与Windows和Linux截然不同的哲学,并成为独特的实现。囿于系统的闭源性和逆向分析的高门槛,其中的精妙并不广为人知。另一方面,随着iPhone逐渐成为人们与世界广泛互联的流行终端设备,以及mac设备在IT、金融等行业的办公场景下的日趋流行,其攻击价值也日益凸显。近几年来,针对这两个平台的零日(0day)漏洞利用和APT攻击或企业针对性攻击,已经成为一种新常态。要在这个方向有所建树,无论是从事攻防研究还是产品创新,对系统的理解多少,就决定了威胁分析的深度和防御能力的高低。

几年前,我和同事在构建一款全新的macOS恶意代码分析检测产品时,以及后来尝试进行一些iOS威胁狩猎时,从Jonathan Levin的网站以及他的前一本书Mac OS X and iOS Internals中受益良多——可以说,是他的书籍、博客和工具带我们入了门、对苹果操作系统有了系统的了解。2020年年底,当其他同事需要对该产品进行大的升级改造时,我所提议的技术方案的背景技术也依然来源于此。而《zui强iOS和macOS安全宝典》恰是前一本书的超级扩充、升级版。

更难能可贵的是,多年来,Jonathan Levin始终将逆向和写书作为自己的全职工作,有效确保了内容的硬核、极致和独一无二。本书刚开始写作时,我和他聊起图书出版的事儿,他提到前一本书由于受限于出版社的各类市场策略局限,不得已删除了许多他认为有价值的内容,也无法经常随着Apple更新系统的节奏更新书籍版本。所以从这一本开始,他坚持英文原版的自出版,从而做到了不遗漏、不落伍。这在安全和系统类图书里是非常独树一帜的。

郑旻(蒸米)是我所能想到的这本书的最合适的译者,没有之一。其实以郑旻在这个方向多年的技术钻研、一线实战经验的积累、对攻防和安全研究的理解,以及被广泛认可的文笔表达能力,他完全有能力写出来一本毫不逊色于这本书的专著。他作为本书译者,可以有效确保译文在技术上的准确性。这是一大幸事,也堪称业内的一段佳话。

我想你也会喜欢上这本书的,enjoy reading!

——Claud Xiao,安全研究员


目录

1 身份认证 2

密码文件(*OS) 2

setuid 和setgid(macOS) 4

可插拔认证模块(macOS) 5

opendirectoryd(macOS) 9

Apple ID 20

外部账号 22

2 审计(macOS) 24

设计 24

审计会话 28

实现 29

系统调用接口 33

OpenBSM API 36

审计的注意事项 38

3 认证框架(KAuth) 39

设计 39

实现 40

KAuth 身份解析器(macOS) 45

调试KAuth 47

4 强制访问控制框架(MACF) 49

背景 49

MACF 策略 52

设置MACF 57

MACF callout 58

MACF 系统调用 64

小结 65

5 代码签名 66

代码签名的格式 67

代码签名需求 76

Entitlement(授权) 80

强制验证代码签名 82

代码签名API 89

6 软件限制(macOS) 94

认证 94

authd 96

GateKeeper(macOS) 98

目录

XV

libquarantine 101

Quarantinekext 102

执行隔离 103

syspolicyd 105

应用程序转移 109

托管客户端(macOS) 111

7 AppleMobileFilelntegrity 121

AppleMobileFileIntegritykext 121

MACF 策略 123

amfid 136

配置描述文件 144

AMFI 信任缓存 152

AMFI 用户客户端 153

小结 154

8 沙盒 155

沙盒的演变 155

App Sandbox(macOS) 157

移动容器(* OS) 161

沙盒配置文件 163

用户模式API 174

mac_syscall 176

Sandboxkext 177

配置文件评估 185

sandboxd(macOS) 186

9 系统完整性保护(macOS) 189

设计 190

实现 191

API 196

10 隐私 199

透明度、许可和控制 199

唯一设备标识符 207

11 数据保护 211

卷级别加密(macOS) 211

文件级加密(*OS) 218

mobile_obliterator 223

授权 225

密钥包 226

AppleKeyStorekext 230

密钥链(keychain) 232

小结 237

12 macOS 漏洞 240

macOS 10101:ntpd 远程代码执行漏洞(CVE-2014-9295) 241

最强iOS 和macOS 安全宝典

XVI

macOS 10102:rootpipe 权限提升(CVE-2015-1130) 242

macOS 10103:kextd 竞争条件漏洞(CVE-2015-3708) 245

macOS 10104:DYLD_PRINT_TO_FILE 权限提升漏洞(CVE-2015- 3760) 247

macOS 10105:DYLD_ROOT_PATH 权限提升 250

macOS 10110:tpwn 提权和(或)SIP 阉割 252

macOS 10113:“Mach Race”本地提权(CVE-2016-1757) 254

macOS 10114:LokiHardt 的Trifecta(CVE-2016-1796、CVE-2016-1797 和

CVE-2016-1806) 256

小结 261

13 越狱 263

神话揭密 263

越狱过程 265

内核补丁 270

内核补丁保护 278

iOS 越狱软件的进化 286

14 Evasi0n 287

加载器 288

untether 程序 294

内核模式的漏洞利用程序 296

苹果公司的修复方案 306

15 evasi0n 7 309

加载器 310

untether 文件 318

内核模式漏洞利用 320

苹果公司的修复方案 326

16 Pangu 7(盘古斧) 328

加载器 329

证书注入 330

越狱有效载荷 331

untether 文件 332

内核模式的漏洞利用 334

苹果公司的修复方案 342

17 Pangu 8(轩辕剑) 344

加载器 344

用户模式的漏洞利用 345

untether 文件 350

苹果公司的修复方案 351

18 TaiG(太极) 353

加载器 353

untether 文件 360

内核模式的漏洞利用 362

苹果公司的修复方案 373

目录

XVII

19 TaiG 2 376

代码签名绕过 377

untether 文件 384

内核漏洞利用 385

苹果公司的修复方案 388

20 Pangu 9(伏羲琴) 391

加载器 391

Pangu 9 的有效载荷 398

内核模式的漏洞利用 399

绕过代码签名 405

untether 文件 408

苹果公司的修复方案 410

21 Pangu 93(女娲石) 412

内核模式的漏洞利用 413

苹果公司的修复方案 417

22 Pegasus(三叉戟) 418

漏洞利用流程 419

读取内核内存和绕过KASLR 422

写任意内核内存 424

持久性 425

苹果公司的修复方案 428

225 Phoenix 430

信息泄露 430

Zone 梳理 433

mach_ports_register 434

把它们放在一起就是Phoenix 435

苹果公司的修复方案 437

23 mach_portal 438

漏洞利用流程 439

Mach 端口名称的urefs 处理 440

将攻击应用于launchd 442

powerd 崩溃 443

XNU 中的set_dp_control_port UaF 漏洞 446

禁用保护机制 448

苹果公司的修复方案 452

24 Yalu(iOS 100~ iOS 102) 453


精彩书摘

译者序

一个周六的早上,编辑突然告诉我,我翻译的*OS Internals, Volumn III这本书马上就要出版了。惊喜之余,我的思绪也回到了6年前(2015年)。6年前的我,刚刚博士毕业,入职阿里巴巴移动安全部门。因为之前主要关注App(应用层)的安全、安全加固和恶意软件分析等,所以来公司后还是继续从事这些方面的业务和研究。比较幸运的是,那时正是Android和iOS系统应用生态的野蛮扩张期,各大互联网厂商纷纷“All in移动端”,为了抢夺用户,不断地推出各种各样的应用和功能。在企业的用户高速增长时期,一切都要为业务让行,安全部门的话语权是非常低的,这也导致各种App漏洞和恶意软件层出不穷。比如,iOS供应链的XcodeGhost后门和Android上的WormHole漏洞都在当时产生了不小的影响。那时的安全社区也非常活跃,谁能够“快、准、狠”地用通俗易懂的语言把一些安全事件讲清楚,还能有一定的技术深度,就会获得不少关注。所以,当时的我也非常热衷于分享技术知识,经常能写出几百万阅读量的技术文章。

但是,写了不少文章后,我发现自己的研究还是太浅了。比如,我只知道App可以调用系统API实现某些功能,但这些API背后所对应的系统服务、驱动程序、内核和硬件究竟是怎么运作的,我并不清楚,更不用说越狱所涉及的那些内核堆风水和漏洞利用相关的技术了。当时在安全圈流行“剑宗”和“气宗”派的说法:研究系统安全、内存破坏和写漏洞利用程序的人属于“气宗”,利用各种API和Web相关的奇技淫巧来实现攻击目的人属于“剑宗”。年轻气盛的我当然选择“气宗”,并且定了一个小目标:实现对最新版iOS的越狱。

然而,想要成为“气宗”弟子并不是那么容易。仅仅是搞清楚内核堆风水,就要花几个月甚至半年的时间搜集相关的资料、研究XNU的源码、分析各种公开的漏洞利用程序,然后编写PoC(概念验证)在不同的iOS/macOS设备上进行调试。更令人沮丧的是,就算搞清楚了堆风水,也仅仅是掌握了越狱所涉及的众多知识点中的一个而已。正如本书关于越狱的那一章所提到的:想越狱,就需要绕过KPP,关闭系统的安全机制;要绕过KPP,还需要找到一个或多个内核0-day漏洞,并配合堆风水来破坏内核对象,从而获得读/写内核内存的能力;要发现一个内核0-day漏洞,你需要学习如何通过fuzz或者审计XNU/驱动程序来发现漏洞;为了能够触发内核0-day漏洞,你还要研究如何进行用户态的沙盒逃逸。

面对众多的知识盲区,我渐渐陷入了迷茫。当时在阿里的同事(龙磊和黑雪)、我的主管潘爱民老师、科恩实验室的陈良、盘古的王铁磊教授、意大利的天才少年Luca,还有本书的作者Jonathan Levin等人都给了我极大的指导和帮助。经过将近三年的学习和研究,我在另一位阿里同事白小龙的帮助下,终于在2018年实现了对当时最新版iOS(版本11.3.1)的越狱。有意思的是,越狱成功的当天,浅黑科技的史中正在对我进行采访,于是我非常开心地把越狱成功的截图和视频发给了他(见文章《黑客蒸米:一个大V的生活意见》)。实现了越狱“小目标”后的我仿佛打通了任督二脉,对系统有了更深层次的理解,有了很多有趣和创新的想法。随后,我在研究方面的成果不断涌现:多次在苹果公司的CVE致谢中被提及,在Black Hat USA大会上演讲,论文被信息安全四大顶会接收等。这些成就与几年来枯燥无味的潜心修炼是分不开的。

毋庸置疑,*OS internals, Volumn III这本书对我研究越狱和苹果系统的安全机制有巨大的帮助。而我又有幸成为它的译者,虽然翻译和出版过程几经周折(都能拍一部血泪史),而且英文版已经出版好几年了,但是书中第一部分所讲的系统安全机制(审计、签名、沙盒、MACF、AMFI、隐私和数据保护等)并没有发生太多的变化,第二部分所讲的漏洞利用也都是最经典的案例(Pangu 9、三叉戟、Yalu等),即使现在来看,也非常值得深入学习和研究。

最后,还要感谢我的父母、妻子、女儿,以及本书的编辑皎子和许艳,多亏了她们的帮助,我在工作之余才有时间翻译这本书,并最终完成这项艰巨的任务。由于精力有限,难免会有翻译错误,还请读者大人们多多体谅。如对本书的内容有任何疑问,可以将问题发送到我的邮箱:zhengmin1989@gmail.com,大家一起探讨和学习。


前言/序言

前 言


这本书是我计划写的Mac OS X and iOS Internals, 2nd Edition的第3卷。然而,它不仅早于第1卷和第2卷出版,而且我原来的计划中根本就没有它。我最初计划的是将第1版的Mac OS X and iOS Internals扩充成2卷,结果变成了3卷。由于涉及watchOS和tvOS,本书就不再只是关于iOS的了。因此,我选择了*OS作为书名的一部分。后来,苹果公司将Mac OS X中的“X”去掉了(但不是10?!)。因此,现在的书名只能变成*OS Internals。


这一次,我尝试采用类似Android Internals(《zui强Android书:架构大剖析》)一书的风格,而那本书旨在模拟Russinovich、Solomon和Ionescu所著的传奇般的Windows Internals一书。与第1版不同——第1版中许多页面被代码所占据(特别是XNU的代码),这一版尽可能回避代码片段,选择用框图来展示通过精心编写的代码搜集到的信息。然而,下列情况则属于例外:

1. 如果它是一个特别相关而且很重要的代码片段:例如该片段含有一个漏洞。这种情况在第二部分相对常见,该部分讨论程序漏洞和对这个漏洞的利用。

2. 如果正在讨论的代码反汇编或反编译自苹果公司操作系统的二进制文件或越狱软件,而该代码并没有开放源码:如果是后者,我会在代码中添加注释,以方便阅读。

3. 如果该代码是“实验”的一部分:该实验为了获得想要的输出结果,要求按照特别的顺序输入指令。


总而言之,我想你会发现这个新版——所有的3卷——是值得从头阅读的,它完全淘汰了前一版。随着macOS和iOS家族不断升级版本,我计划不断更新本书,使它“保持活力”,像我对Android Internals一书所做的一样。尽管本书出版后内容就无法再更改了,但由于每次印数较少,因此我能在随后每个印次的版本中都进行少量的更新和修改。如果iOS 13出现时,我仍在做这些工作(谁知道呢?),就有可能写第3版。


目标读者

尽管本书是*OS Internals三部曲中的一卷,但它几乎是独立且完整的,而且依然以安全为主题。因此,有安全意识的人会最先发现这本书有用。本书的第一部分面向macOS系统管理员、高级用户、安全研究人员和审计员。我已经公开和记录下来的关于内部API的内容可以作为模糊测试的基础,对于希望使用这些子系统接口的程序员,这部分内容也可能是有用的。

第二部分讲了很多底层的内容,有很强的技术性,可能不适合心理脆弱的初学者,或者对英特尔和/或ARM64框架深恶痛绝的人。然而,逆向工程师和黑客可能会喜欢这个部分。它不仅讲述了漏洞形成的原因和越狱的深层细节,而且给出了使用调试器逐步跟踪的步骤,以及大量的反汇编例子。


本书内容概览

本书分为两部分。老实说,其中的内容足够写两本书了,但与《英特尔架构手册》不同,我决定不再进一步划分内容的组织结构。


第一部分

第一部分重点介绍苹果公司为macOS中的安全服务和/或锁定*OS系统而提供的安全机制与技术。大多数的实现在所有平台(特别是从macOS 10.11开始)都是相同的,但*OS仍然是苹果公司投入最大的部分。

第1章讲述身份验证,它基本是macOS的特性,因为*OS(目前)是单用户系统。虽然我们讨论了传统的master.passwd文件,但重点在于macOS可插拔认证模块(PAM)和OpenDirectory的实现,以及与外部域(即NIS)和Microsoft的Active Directory的集成。

第2章讨论审计,即追踪用户或进程的操作(无论是被授权的操作还是试探性的操作),并提供详细的日志跟踪记录。macOS中的审计是借自Solaris的一个功能,实际上是默认开启的——但几乎无人知晓。审计为其客户(通常是管理人员或监控软件)对系统所有方面(无论是大的方面还是小细节,是用户还是内核)进行前所未有的监控。

第3章通过探索身份验证——允许/拒绝用户或进程(第1章中所讲的身份验证)的操作来完成AAA(Authentication、Auditing和Authorization)。有一个KPI(内核编程接口)被称为KAuth[1](由于它是对内核扩展的非官方支持,因此在*OS中不可用)。

第4章进一步深入探讨身份验证和内核,并详细介绍强制性访问控制框架,通常称为MACF。这是另一个借自其他系统的功能(来自TrustedBSD)。MACF比审计的功能更强大,后者在事件发生之后发送通知,而MACF实际上可以拦截操作(允许或拒绝操作,甚至修改它们)。苹果系统所有的安全都建立于MACF提供的基石之上,特别是*OS。迄今为止,它是最强大的授权机制(能力远超KAuth),但不幸的是,它被认为是苹果公司的私有KPI。

第5章讨论代码签名,它是MACF最直接的应用,是苹果公司自iOS以来在*OS中一直执行的安全措施,最近也开始在macOS上实施。虽然苹果公司的操作系统不是唯一使用代码签名的操作系统,但它们的实现迄今为止是最先进的。代码签名与授权配合,成为应用级安全的基础。

第6章是关于macOS的,讨论其软件限制机制:从macOS GateKeeper开始,苹果公司在macOS 10.7.5中引入这个机制,试图打击针对macOS的恶意软件。GateKeeper与诸如authd和syspolicyd等守护进程,以及一个名为Quarantine隔离区的专用内核扩展互通。随后,讨论的话题转到macOS的“托管客户端扩展”,它们被用于企业环境和家长控制。

第7章讨论AppleMobileFilelntegrity(AMFI),一个它的朋友和敌人都知道的名字。虽然名字中有“Mobile”,其实作为iOS代码签名的执行者,AMFI从macOS 10.10开始就出现在macOS中,而且它在macOS 10.11中还有更大的作用,也就是所谓的SIP(系统完整性保护)。本章将通过逆向MACF策略、MIG消息和IOUserClient,深入探索iOS和macOS版本的AMFI实现。

第8章讨论苹果公司的沙盒,这也是一个基于MACF的应用程序,苹果公司早在macOS 10.5中就首次尝试该应用程序,那时将其命名为“SeatBelt”。尽管当初的实现相当幼稚,而且还是选择性实施的,但是现在它已经有相当大的发展,并成为iOS上最强大的监狱。对沙盒的介绍先从其基础开始,到macOS的“AppSandbox”,再到加固的iOS实现。第8章详细介绍沙盒配置文件、容器和其他构建模块,为讨论macOS 10.11的SIP和iOS 10的平台配置文件奠定了基础。

第9章讨论macOS的SIP:一旦建立基础设施(AMFI和沙盒),SIP就只是一种全系统策略的定义而已。虽然iOS 9.x中不存在SIP,但其在*OS上的使用只是时间问题,并且iOS 10的平台策略已经显著加固。

第10章讨论隐私,在所有操作系统中,隐私都是由一个小型的无文档描述的守护进程TCCd处理的。该守护进程驻留在一个数据库中,该数据库定义了哪些应用可以访问哪些存储,并提供一个由私有TCC.framework包装的XPC API。这一章进一步分析唯一标识符(尤其是在iOS上),因为许多软件供应商都要寻找并识别他们的软件安装在什么设备上。

第11章的重点是数据保护。关于这个特性,macOS上的实现与*OS上的实现再次有所不同。macOS的解决方案是FileVault 2,它与CoreStorage一起在macOS 10.7中引入。*OS的解决方案更加深入,通过硬件支持的密钥来增强加密,有时候对每个文件都进行加密。


第二部分

第二部分审视了第一部分介绍的所有精巧构造——苹果工程师最好的设计,讨论它们是如何出其不意被利用的。这部分中的每一章都会剖析以前出现过的(不同类型的)漏洞(现在均已被修补),并且这些漏洞可能被macOS中的恶意软件或iOS越狱软件利用。

对于macOS漏洞,我会强调那些主要困扰macOS 10.10(在其每个小版本中都有重要意义)的漏洞,以及几个macOS 10.11的漏洞。对于iOS漏洞,我决定按照越狱软件的时间表进行跟踪:没有什么例子能比越狱更好地展示这些漏洞以及其利用方法了。每个越狱软件都是在用多个漏洞构建巧妙的拼贴组合,以正确的方式利用它们,就能解除iOS(及其衍生系统)的束缚。

在某种意义上,可以把第二部分看成是一份迷你的“黑客手册”,我认为我所提供的细节有足够的深度,知识覆盖面也很广,相对很多逆向工程或安全类图书来说算是前所未有的。虽然我认识不少越狱天才,但是我仍然抵制了“作弊”的冲动,从研究人员的角度逆向了越狱软件的二进制文件。在这个过程中,我用的是自己的工具,并且在本书的配套网站提供了这些工具。

最后,本书附录包含一个macOS安全加固指南。最初我认为不会写这么多,但是Sebastien Volpe提的一个问题让我觉得这是个好主意——在详细介绍许多安全功能并分析漏洞后,用这个内容作为本书的非正式“总结”是有道理的。


阅读建议

如果第一部分各章所讲的内容是专门针对mac OS或*OS主题的,则会在标题中指出;否则,这些内容可能适用于所有操作系统。在某些情况下,某一章中特定的小节也会有类似的标注。仅对某个操作系统感兴趣的读者可以轻松选择阅读哪些章节。

如果你只重点关注*OS,可以跳过专门讲述macOS的章节(第1~3章、第6章和第9章),但绝对应该阅读其余章节。关注macOS的读者应该阅读第一部分的所有内容,也许可以跳过特定于*OS的那些章节(当然,章名中也有标记)。虽然第二部分主要讲的是越狱,但我确实希望关注macOS的读者能稍微提起一点兴趣看一眼这部分,因为在越狱软件中利用的许多XNU漏洞也是macOS中的常见代码。

第二部分的大部分内容涉及越狱,主要是由逆向工程驱动的。越狱软件(除了一些已经开源的老项目)仍然是闭源的,其中一些(特别是Pangu)甚至对代码做了混淆。这可能是为了阻止他人窃取代码或将他们的产品作为武器,以及阻止苹果公司立即修复和更新系统。

对于越狱软件,我“专门”在配套网站上提供了逆向时所使用的确切版本的二进制文件,因此你可以按照示例进行操作——主要是使用jtool进行反编译和逆向。为了让你操作起来更简单,我还提供了jtool的配套文件,所以如果你用-d进行反汇编,jtool会自动标注符号并插入注释。

不幸的是,对于动态分析(即使用调试器),你的选择可能会很有限,因为苹果公司对iOS的严格升级政策使其(在很大程度上)是不可逆向的。我自己不得不通过eBay才找到足够的“样本”设备(从iOS 6.0到iOS 9.x的不同版本),分别进行越狱和调试。不管怎样,如果你手头有指定iOS版本的越狱设备,而我在书中展示的特定二进制文件足够详细,并且与你使用的越狱二进制文件足够相似(越狱软件的内部版本可能有细微差异),这样你就可以(仔细地)在设备上跟随书中的步骤进行操作。

注意事项:如果你想实时调试越狱二进制文件,记得提前设置断点,并记住可能要重新启动越狱软件(特别是在苹果设备上的untether组件)。大多数越狱软件如果检测到设备已经越狱,就不会重新越狱,但是如果你使用调试器更改越狱流程,则有可能再次启动越狱。


本书不可避免地引用了第1卷和第2卷中的内容。这不是说让你阅读前两卷,而是一些主题,主要是dyld、XPC和iCloud(在第1卷中讲述),以及内核原理、扩展、网络连接和引导(在第2卷中讲述)涉及的内容太深了,无法在本书中重新介绍一遍。第2卷还讨论了应用程序防火墙,无疑这是一个以安全为中心的主题,但由于该主题与网络堆栈的关系太过错综复杂,难以在本书中解释。