具体描述
《Android 安全架构深究》自底向上描述了Android 的安全架构,深入探究与安全相关的Android 子系统、设备和数据组件的内部实现。其中包括包和用户管理,权限和设备策略,以及一些特殊机制——密码服务、凭据存储和安全元件的支持等。
《Android 安全架构深究》面向所有对Android 安全体系架构感兴趣的读者,希望对Android 整体或子系统进行评估的安全研究员,以及致力于定制和扩展Android 的开发人员。读者最好具有Linux 系统和安卓开发的相关知识。
作者简介
Nikolay Elenkov 过去十年一直致力于企业安全的项目,开发过从智能卡、HSM 到Windows 平台、Linux 服务器等各种平台下的安全软件。Android 面世之后,他便很快对Android 产生了浓厚的兴趣,并且在Android 1.5 版本发布之后一直在开发Android 应用。Android 4.0 发布之后,Nikolay 更加关注Android 系统内部实现细节,并且在过去的三年中,他一直在其博客(http://nelenkov.blogspot.com/)上整理发布他的发现并撰写与Android 安全相关的文章。
目录信息
第1 章 Android 安全模型 ........ 1
Android 体系结构 1
Linux 内核层 2
原生用户空间层 ............. 3
Dalvik 虚拟机.................. 3
Java 运行时库 ................. 4
系统服务 ...... 4
进程间通信 .. 4
Binder ........... 5
Android 框架库 ............... 9
应用程序 .... 10
Android 的安全模型介绍 ..... 11
应用程序沙箱 ............... 12
权限 ............ 14
IPC ............. 14
代码签名和平台密钥 ... 15
多用户支持 15
SELinux ...... 16
系统更新 .... 16
验证启动模式 ............... 17
总结 18
第2 章 权限 ........ 19
权限的本质 ........ 19
权限申请 ............ 20
权限管理 ............ 21
权限的保护级别 22
权限的赋予 ........ 24
权限执行 ............ 29
内核层的权限执行 ....... 29
原生守护进程级别的权限执行 ....... 30
框架层的权限执行 ....... 32
系统权限 ............ 36
signature 权限 ................ 37
development 权限 .......... 38
共享用户ID ....... 38
自定义权限 ........ 41
公开和私有组件 42
activity 和service 权限 ......... 43
广播权限 ............ 44
content provider 权限 ............ 45
静态provider 权限 ........ 46
动态provider 权限 ........ 47
pending intent ..... 48
总结 50
第3 章 包管理机制 ................ 51
Android 应用程序包文件的格式 ............ 51
代码签名 ............ 53
Java 代码签名 ............... 53
Android 代码签名 ......... 59
APK 的安装过程 .................. 61
应用程序包和数据的位置 ............... 62
活动组件 .... 63
安装一个本地包 ........... 66
更新包 ........ 72
安装加密的APK .......... 76
转发锁定 .... 79
Android 4.1 转发锁定实现 .............. 80
加密的App 和Google Play ............. 82
包验证 ............... 83
Android 对包验证的支持 ................ 84
Google Play 实现 ........... 85
总结 85
第4 章 用户管理 . 87
多用户支持概述 87
用户类型 ............ 89
主用户(持有者) ....... 89
次要用户 .... 90
受限用户 .... 91
访客用户 .... 93
用户管理 ............ 93
命令行工具 94
用户状态和相关广播 ... 94
用户元数据 ........ 95
用户清单文件 ............... 95
用户元数据文件 ........... 96
用户系统目录 ............... 97
每个用户的应用程序管理 ... 98
应用程序数据目录 ....... 98
应用共享 .. 100
外存 ................. 102
外存实现 .. 103
多用户外存 ................. 103
外存权限 .. 109
其他多用户特性 ................. 111
总结 ................. 111
第5 章 加密服务 .................. 112
JCA Provider 结构 ............... 112
加密服务Provider ....... 113
JCA 引擎类 ...... 115
获得引擎类实例 ......... 115
算法名称 .. 116
SecureRandom ............. 117
MessageDigest ............. 118
Signature ... 118
Cipher ....... 119
Mac ........... 123
Key ............ 124
SecretKey 和PBEKey . 124
PublicKey、PrivateKey 和KeyPair .................. 125
KeySpec .... 125
KeyFactory .................. 125
SecretKeyFactory ......... 126
KeyPairGenerator ........ 127
KeyGenerator ............... 127
KeyAgreement ............. 128
KeyStore ... 129
CertificateFactory 和CertPath........ 131
CertPathValidator 和CertPathBuilder ............... 132
Android 的JCA Provider .... 133
Harmony 加密Provider .................. 133
Android 的Bouncy Castle Provider .................. 133
AndroidOpenSSL Provider ............. 137
OpenSSL ... 139
使用定制的Provider ........... 140
Spongy Castle .............. 140
总结 ................. 141
第6 章 网络安全与PKI ....... 142
PKI 与SSL 概述 ................ 143
公钥证书 .. 143
直接信任和Private CA .................. 145
公钥基础设施 ............. 145
证书撤销 .. 147
JSSE 介绍 ........ 148
安全套接字 ................. 148
对等认证 .. 149
主机名认证 ................. 151
Android JSSE 的实现 .......... 152
证书管理与认证 ......... 152
证书黑名单 ................. 158
重新审视PKI 信任模型 ................ 161
总结 ................. 165
第7 章 凭据存储 .................. 166
VPN 和Wi-Fi EAP 凭据..... 167
认证密钥和证书 ......... 167
系统凭据库 ................. 168
凭据存储的具体实现 ......... 169
密钥库(keystore)服务 ............... 169
密钥blob 的版本和类型 ............... 171
访问限制 .. 171
keymaster 模块和密钥库服务的实现 .............. 172
Nexus 4 的基于硬件的实现 .......... 173
框架集成 .. 175
公开API ........... 175
密钥链(KeyChain)API .............. 176
密钥链API 的实现 ..... 180
控制对密钥库的访问 . 181
Android 密钥库Provider ............... 183
总结 ................. 184
第8 章 在线账户管理 ........... 186
Android 账户管理概述 ....... 186
账户管理在Android 中的具体实现 ..... 187
AccountManagerService 与AccountManager .. 188
认证模块 .. 189
认证模块缓存 ............. 189
账户管理服务的操作和权限 ......... 190
账户数据库 ................. 193
多用户支持 ................. 196
增加一个认证器模块 . 197
Google 账户支持 ................. 200
Google 登录服务 ......... 201
Google 服务认证和授权 ................ 203
Google Play 服务 ......... 206
总结 ................. 208
第9 章 企业安全 .................. 209
设备管理 .......... 209
实现方法 .. 211
添加设备管理员 ......... 217
企业账户集成 ............. 220
VPN 支持 ......... 223
PPTP ......... 223
L2TP/IPSec .................. 223
IPSec Xauth ................. 224
基于SSL 的VPN ........ 224
legacy VPN .................. 225
基于应用的VPN ........ 230
多用户支持 ................. 233
Wi-Fi EAP ........ 236
EAP 认证方法 ............. 237
Android Wi-Fi 架构 ..... 238
EAP 凭据管理 ............. 239
使用WifiManager 添加EAP 网络 242
总结 ................. 244
第10 章 设备安全 ................ 245
控制系统的启动和安装 ... 246
引导加载程序 .......... 246
恢复系统 .................. 247
验证启动 ........ 247
dm-verity 简介 ......... 248
Android 实现 ........... 249
打开验证启动 .......... 249
磁盘加密 ........ 251
密码模式 .................. 252
密钥生成 .................. 253
磁盘加密密码 .......... 254
修改磁盘加密密码 .. 255
启用磁盘加密 .......... 256
启动加密设备 .......... 259
屏幕安全 ........ 261
锁屏实现 .................. 261
KeyGuard 解锁方法 263
暴力破解保护 .......... 270
安全USB 调试 ................. 270
xxii Android 安全架构深究
ADB 简介 ................ 271
对安全ADB 的需求 .................. 273
安全ADB ................ 273
安全ADB 实现 ....... 274
ADB 认证密钥 ........ 275
验证宿主密钥指纹 .. 276
Android 备份 .. 277
Android 备份简介 ... 277
备份文件格式 .......... 278
备份加密 .................. 279
控制备份范围 .......... 281
总结 ............... 281
第11 章 NFC 和安全元件 .... 283
NFC 简介 ....... 283
Android 对NFC 的支持 ... 284
读/写模式 ................. 284
端对端模式 .............. 289
卡模拟模式 .............. 289
安全元件 ........ 290
移动设备中的SE 组件 .............. 290
访问内嵌SE ............ 293
Android SE 执行环境 ................. 296
使用UICC 作为安全元件 ......... 299
软件卡模拟 .... 303
Android 4.4 的HCE 架构 ........... 304
APDU 路由 .............. 304
编写HCE 服务 ........ 309
HCE 应用的安全 ..... 311
总结 ............... 312
第12 章 SELinux ................. 313
SELinux 介绍 . 313
SELinux 架构........... 314
强制访问控制 .......... 315
SELinux 模式........... 315
安全上下文 .............. 316
安全上下文的设定和保存 ......... 317
安全规则 .................. 318
策略声明 .................. 318
类型转换规则 .......... 321
域转换规则 .............. 322
访问向量规则 .......... 323
Android 实现 .. 324
内核修改 .................. 325
用户空间修改 .......... 326
设备规则文件 .......... 334
策略事件日志 .......... 334
Android 4.4 的SELinux 策略 .............. 335
策略概述 .................. 335
强制域 ... 337
无限制域 .................. 338
应用域 ... 340
总结 ............... 341
第13 章 系统更新和root 访问 ................ 342
引导加载程序 343
解锁引导加载程序 .. 343
快速启动模式 .......... 344
recovery .......... 347
原生恢复系统 .......... 347
定制恢复系统 .......... 357
root 权限 ........ 359
工程机上的root 访问 ................ 359
正式版本中的root 访问 ... 363
通过修改boot 和system 镜像获取root ...... 364
通过刷入一个OTA 更新包来获取root ....... 364
通过漏洞来获取root ................. 371
总结 ............... 372
· · · · · · (收起)
读后感
安全是一个非常立体而丰富得概念。在不同的场景下,安全有着不同的含义。 比如对于网络传输,安全指的是传输的数据不会被其他人看到、篡改、伪造及仿冒,传输的数据不会遭到破坏,数据从发送端发送出来到接收端接收到,可以保持完整准确。 再比如在操作系统层面,可以从用户...
安全是一个非常立体而丰富得概念。在不同的场景下,安全有着不同的含义。 比如对于网络传输,安全指的是传输的数据不会被其他人看到、篡改、伪造及仿冒,传输的数据不会遭到破坏,数据从发送端发送出来到接收端接收到,可以保持完整准确。 再比如在操作系统层面,可以从用户...
安全是一个非常立体而丰富得概念。在不同的场景下,安全有着不同的含义。 比如对于网络传输,安全指的是传输的数据不会被其他人看到、篡改、伪造及仿冒,传输的数据不会遭到破坏,数据从发送端发送出来到接收端接收到,可以保持完整准确。 再比如在操作系统层面,可以从用户...
安全是一个非常立体而丰富得概念。在不同的场景下,安全有着不同的含义。 比如对于网络传输,安全指的是传输的数据不会被其他人看到、篡改、伪造及仿冒,传输的数据不会遭到破坏,数据从发送端发送出来到接收端接收到,可以保持完整准确。 再比如在操作系统层面,可以从用户...
安全是一个非常立体而丰富得概念。在不同的场景下,安全有着不同的含义。 比如对于网络传输,安全指的是传输的数据不会被其他人看到、篡改、伪造及仿冒,传输的数据不会遭到破坏,数据从发送端发送出来到接收端接收到,可以保持完整准确。 再比如在操作系统层面,可以从用户...
用户评价
坦率地说,这本书的门槛不低,初学者可能会感到有些吃力,但对于那些渴望在移动安全领域深耕的工程师来说,这简直是如获至宝。我尤其赞赏作者在架构设计层面的洞察力。它没有过多纠缠于具体的“花招”或“技巧”,而是着眼于如何从宏观上构建一个健壮的防御体系。书中对系统组件间交互安全的探讨,体现了作者深厚的工程经验。那种对潜在风险的预判能力,以及提出系统级解决方案的思路,是很多入门书籍所缺乏的。阅读体验上,虽然技术性极强,但行文风格却保持了一种冷静、客观的叙事基调,没有过度渲染或夸大其词,使得内容的说服力大大增强。每次读完一个章节,我都会有一种“原来如此”的豁然开朗感,这正是优秀技术著作的魅力所在。
读罢此书,我最大的收获在于思维模式的转变。在此之前,我可能更倾向于关注应用层的漏洞修补,但这本书彻底颠覆了我的这种认知。它像一把锋利的解剖刀,将Android系统的安全骨架清晰地展示出来,让我明白真正的安全来自于架构本身的健壮性。书中关于系统服务安全性和组件隔离性的论述,简直是教科书级别的范本。作者在描述复杂抽象概念时,擅长使用精妙的比喻和图示来辅助理解,使得那些看似深不可测的IPC安全模型也变得平易近人。这本书的价值不仅在于传授知识,更在于培养读者对安全问题的系统性思考能力,它教会我们如何从设计之初就将安全内建于系统之中,而不是事后补救。这是一本值得反复研读的案头常备书。
这本《Android 安全架构深究》的阅读体验,对我来说简直是一场意外的惊喜。我原本只是想找一本能快速入门的安卓安全书籍,没想到它却带我深入到了一个全新的层次。作者的功力深厚,对Android系统的理解不仅仅停留在表层的应用层面,而是直达内核。书中对Binder机制、权限管理、SELinux等核心安全组件的剖析,细致入微,简直让人拍案叫绝。我尤其欣赏它在描述复杂技术细节时的清晰度,那些原本让我望而生畏的底层原理,通过作者的笔触,变得条理分明,逻辑严密。它不是那种堆砌概念的书,而是真正做到了“知其所以然”。比如,在讲解内存保护机制时,书中不仅列举了各种技术,还结合了实际的攻击案例来阐释其工作原理,这种理论与实践紧密结合的方式,极大地提升了学习的效率和兴趣。读完后,我对Android安全领域的宏观图景有了更清晰的认识,不再是零散的知识点堆砌,而是形成了一个完整的知识体系。
这本书的深度和广度,远远超出了我对一本技术专著的预期。我花了相当长的时间来消化其中的内容,特别是关于系统级安全加固和漏洞挖掘的部分。作者在处理这些前沿技术时,展现了极高的专业素养和严谨的治学态度。例如,书中对应用沙箱机制的演变和限制进行了详尽的分析,这种对历史脉络的梳理,让读者能更好地理解当前安全架构的合理性与局限性。它不是一本能让你一蹴而就学会“黑掉”什么东西的书,而是一本教你如何从根本上理解和构建安全体系的宝典。我最欣赏的一点是,书中并没有回避一些比较敏感和晦涩的领域,而是选择正面迎击,用最准确的术语和最精炼的语言去阐述,这对于有一定基础的读者来说,无疑是巨大的福音。阅读过程中,我时常需要停下来反复思考,甚至动手搭建实验环境来验证书中的观点,这种主动学习的过程,让我受益匪浅。
这本书给我的感觉更像是一份详尽的“安全蓝图”,而非简单的操作手册。它深入浅出地剖析了Android安全生态的复杂性,尤其是在处理跨进程通信安全和数据流向追踪方面,提供了极具价值的视角。我发现作者在讲解TaintTrack机制时,引入了很多实际的内核调用追踪思路,这对于理解恶意代码是如何绕过既有防御机制的非常有帮助。此外,书中对一些较新Android版本中引入的安全特性,如Vertex/AppArmor的集成,也做了深入的剖析,显示出作者紧跟技术发展前沿的努力。对于我这种长期关注系统底层安全的人来说,这本书提供了一个难得的、从“自上而下”和“自下而上”双重视角来审视安全架构的机会。它不仅解答了“是什么”,更重要的是解释了“为什么是这样”。
4.28~5.14
有种相见恨晚的感觉,书中关于客户端证书认证的内容对我很有帮助。
有种相见恨晚的感觉,书中关于客户端证书认证的内容对我很有帮助。
将这本书翻了一遍,对于感兴趣的或者曾经或多或少接触过的部分较为认真的阅读了,其他部分一眼掠过。不得不说,内容还是比较翔实全面有深度的,但显然不适合入门者学习,尤其是像我这样一名在安全领域没什么基础的Android开发者来说,这本书读起来还是很吃力的。因此建议在读之前,读者最好具备以下两个条件:一,对于Android系统有较为深入的理解,尤其是底层的知识;二,对于安全技术有一定的基础,尤其是Linux下的安全架构及策略。
4.28~5.14