Android安全新书推荐——《Android 安全架构深究》

基本信息

编辑推荐

如今大约有十亿台安卓设备正在被世界各地的人们使用着,而每台设备都可能是潜在的被攻击目标。但不幸的是,现在安卓安全专家之外的很多人对很多安卓安全基础特性的理解程度近乎黑盒。在本书中,顶尖安全专家Nikolay Elenkov带领我们一起挖掘安卓安全系统的细节。本书自底向上描述了Android的安全架构,并探索安全相关组件和子系统,比如Binder进程间通信、权限、加密提供者和设备管理等。
你将从本书中学到:
1 Android系统如何声明、使用并保护权限。
2 Android系统如何进行应用包管理并使用代码签名验证。
3 Android系统如何实现Java密码体系(JCA)和Java安全套接字扩展(JSSE)框架。
4 Android的凭据存储系统和API,用于应用安全地保存密钥。
5 在线账户管理框架和Google账户与安卓系统的集成。
6 验证启动、磁盘加密、锁屏和其他设备安全特性的实现。
7 Android的引导加载程序和恢复系统如何完成完整系统更新,以及如何获取root权限。
《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安全模型
Android体系结构
Linux内核层
原生用户空间层
Dalvik虚拟机
Java运行时库
系统服务
进程间通信
Android框架库
应用程序
Android的安全模型介绍
应用程序沙箱
权限
代码签名和平台密钥
多用户支持
SEL
系统更新
验证启动模式
总结

第2章 权限
权限的本质
权限申请
权限管理
权限的保护级别
权限的赋予
权限执行
内核层的权限执行
原生守护进程级别的权限执行
框架层的权限执行
系统权限
signature权限
development权限
共享用户
自定义权限
公开和私有组件
activity和 service权限
广播权限
content provider权限
静态 provider权限
动态 provider权限
pending i
总结
第3章 包管理机制
Android应用程序包文件的格式
代码签名
Java代码签名
Android代码签名
APK的安装过程
应用程序包和数据的位置
活动组件
安装一个本地包
更新包
安装加密
转发锁定
Android 4.1转发锁定实现
加密的 App和 Google
包验证
Android对包验证的支持
Google Play实现
总结
……

译者序

  随着Android 系统在智能设备上的广泛应用,Android 安全的重要性不言而喻。Android的安全框架,虽然继承自Linux 系统,但经过重新设计后大有不同,可以说是一套全新的安全体系架构。
提起”安全”二字,会让人很自然地联想到Hacker(黑客)。的确,当前市面上的与Android 安全相关的书籍,多是从Hack 的角度出发,读者会从书中收获一些Hack 技巧。但不足之处是,读者所收获的知识难成体系。很多安全研究人员,熟悉Android 环境下的反编译、调试、逆向和混淆技术,却对Android 的安全体系架构没有一个明确清晰的概念。广大的Android 开发人员,更需要从安全编码的角度来了解Android 平台的工作机制与其安全特性,从而避免潜在的安全风险,提升Android 应用的编码质量。
鉴于此,我们决定翻译此书。原书作者Nikolay Elenkov 早在Android 1.5 版时,就已致力于Android 开发与安全特性研究,并且具有10 年以上的企业安全工作经验,他曾发现和修正数个Android 重大安全缺陷,其个人博客(http://nelenkov.blogspot.com)也广受好评。
你手上的这本书是一本与众不同的书,它几乎涵盖了与Android 安全相关的所有内容,自底向上系统地讲述了Android 安全架构体系,深入探究了Android 安全相关组件和子系统的具体实现。在这本书中,你几乎可以找到任何你想要了解的与Android 安全相关的主题。而且通读本书之后,以Android 安全为切入点,你也将会对整个Android 系统实现有更全面和更深入的认识。
在翻译过程中,我们力求将原文准确、清晰地翻译成中文。本书涉及的专业名词非常多,除了一些已被广泛认可的专业名词,其他均保持与原书一致,以避免产生理解偏差。译者水平有限,如书中存在疏漏之处,请不吝指出。
刘惠明 刘跃
2015 年12 月21 日
xii

前言

  Android 在相当短的时间内,迅速成为世界上最流行的移动平台操作系统。虽然其设计初衷是面向智能手机的,但它目前也被广泛用于平板电脑、电视以及可穿戴设备,甚至你可能很快在汽车上也能找到它的身影。Android 的开发节奏惊人,平均每年会发布两个发行版。每个新发行版都会带来更优质的UI 体现、性能提升以及许多面向用户的新特性,这些都会被Android 的狂热爱好者深入细致地剖析。
虽然Android 平台在过去几年里发展显著,但其安全问题却很少受到公众的关注。这些年来,Android 变得更能抵抗通用型漏洞利用技术(比如缓冲区溢出),它的应用隔离(沙箱机制)也已被加固,并且通过大幅降低root 用户运行系统进程的数量,大大减小了其攻击面。除这些漏洞缓解技术之外,最新的Android 版本也引入了许多新安全特性,比如受限用户的支持、全盘加密、硬件支持的凭据存储和集中式设备管理的支持。更多面向企业的特性和安全特性的改进也已被公告会在下一个Android 版本中引入(撰写本文时,是指Android L),这些特性包含管理受限用户、改进的全盘加密和对生物识别技术的支持。
和任何新的平台特性一样,讨论尖端的安全特性改进非常令人兴奋,但更重要的是自底向上地理解Android 安全体系架构,因为每个新安全特性均是在平台的核心安全模型上构造和集成的。Android 的沙箱模型(每个应用程序以不同的Linux 用户运行,并且拥有各自的数据目录)和权限系统(需要每个应用程序明确声明它需要的平台特性)文档清晰,相对容易理解。但其他影响设备安全的基础平台特性的内部实现,诸如包管理和代码签名机制,对于Android 安全社区来说,极大程度上还是黑盒状态。
Android 如此流行的原因之一是可以相对容易地刷入一个定制的Android,通过应用一个第三方更新包进行root,或进行其他系统定制。Android 爱好者会在论坛和博客上给出很多关于解锁设备和如何操作定制包的实践指导,但它们很少涉及关于系统更新操作的内部实现,以及它会带来的风险等结构化的信息。
本书将会填补这方面的空白,自底向上地描述Android 的安全体系架构,深入探究与安全相关的Android 子系统、设备和数据组件的内部实现。这部分内容题材广泛,而且会影响到所有应用,其中包括包和用户管理,权限和设备策略,以及一些特殊机制—密码服务、凭据存储和安全元件的支持。
在安卓的新版本中整个子系统都被替换或重写的情况非常常见,但与安全相关的开发则相对稳健谨慎;虽然不同版本之间的某些行为可能会有所不同,但在未来的版本中,Android 的核心安全体系结构应该会保持相对稳定。
本书面向的读者
本书适用于所有对Android 安全体系架构感兴趣的读者。希望对Android 整体或子系统进行评估的安全研究员,以及致力于定制和扩展Android 的开发人员,均会在本书中找到每个安全特性的高层次的描述以及一些详细实现细节,为理解Android 底层源码实现构筑了起点。应用程序开发者能够更深入理解平台的工作机制,以更好地使用与安全相关的API,编写更安全的应用程序。虽然非技术读者可以阅读本书的某些部分,但因为大量的讨论均非常贴近Android 源码或系统文件,所以熟悉UNIX 环境下软件开发的核心思想会非常有用。
预备知识
本书假定读者基本熟悉类UNIX 操作系统(Linux 更佳),不会解释比如进程、用户组、文件权限等通用的概念。Linux 特定的或最近新增的OS 特性,比如权能(capability)和挂载命名空间,会在讨论到使用它们的Android 子系统之前简要进行介绍。书中大部分平台代码均来自核心的Android 守护进程(通常以C 和C++实现)以及系统服务(通常以Java实现),所以至少应对其中之一有一定了解。有些代码示例使用了Linux 系统调用,所以了解Linux 系统编程会非常有助于理解这些代码,但不是必需的。最后,虽然在最初的章节中会介绍Android 应用的基本结构和核心组件(比如activity 和服务),但还是假定读者对Android 开发有一定了解。
Android 版本
在本书中,Android 体系架构和实现的描述(除了一些Google 专利的特性),均基于Android 开源项目(AOSP)中公开的部分代码。大部分讨论和代码节选自Android 4.4 版本,在撰写本书时,是当前最新公开版本。AOSP 的主分支也被数次引用,因为主分支上的commit 也通常反映了未来Android 版本发展的方向。然而,不是所有主分支的改动都会被合并到Android 的公开发行版中,所以在未来版本中进行改动甚至移除某些功能也是极有可能的。
下一个Android 的开发预览版(Android L)已在本书完成时公布。然而,撰写本书时,Android L 的代码还没有公开,并且其具体的公开发行版日期还未确定。虽然预览版中引入了一些新特性,比如设备加密的改进、托管配置和设备管理,但这些特性还未最后确定,因此可能还会改动。这也是本书不讨论这些新特性的原因。虽然我们可以不基于源码,只基于观察到的行为介绍一些Android L 的安全改进措施,但任何对这部分实现的讨论都是推测出来的,并且也是不完整的。
本书内容组织
本书包括13 章,每章讨论一个不同的Android 安全主题或特性,后续章节会基于前面介绍的概念进行讲解,所以请尽量按照顺序阅读。即使你已相当熟悉Android 的体系结构和安全模型,也还是建议你至少快速浏览第1 至3 章的内容,因为前三章的内容是本书其余部分的基础。
第1 章高层次地概括了Android 的体系结构和安全模型。
第2 章描述了Android 权限的声明、使用和执行。
第3 章讨论了代码签名和Android 应用程序安装和管理过程的工作细节。
第4 章介绍了Android 的多用户支持,并描述了在多用户设备上数据隔离的实现。
第5 章概述了Java 加密体系结构(JCA)框架,并介绍了Android 的JCA 密码提供者。

.  第6 章引入了Java 安全套接字扩展(JSSE)框架,并深入探究其Android 实现。
第7 章介绍了Android 的凭据存储,并介绍提供给应用的安全存储密钥的API。
第8 章讨论了Android 的在线账户管理框架,并且展示了对Google 账户的支持是如何集成进Android 的。
第9 章介绍了Android 的设备管理框架,VPN 支持的实现细节,并深入探究了Android对于可扩展认证协议(EAP)的支持。
第10 章介绍了验证启动(verified boot)、磁盘加密和Android 锁屏的实现,并展示了安全USB 调试和设备加密备份的实现。
第11 章概述了Android 的NFC 栈,深入探究了安全元件(SE)的集成及其API,并介绍了基于主机的卡模拟(HCE)。
第12 章从简要介绍SELinux 的架构和策略语言开始,详细讲解为集成进Android,SELinux 所做的改进,并概述了Android 基础的SELinux 策略。
第13 章讨论了引导加载程序和恢复系统是如何用于执行全系统更新的,以及在工程和量产Android 版本上获取root 访问的细节。
约定
因为本书主题是Android 的体系结构及其实现,它包含很多代码摘要和文件清单,它们被各章节广泛引用。这些引用会约定使用一些格式,并与正文区分开来。
命令、函数和变量名、XML 属性和SQL 对象名称均使用代码体(比如:id 命令、getCallingUid()方法、name 属性等)。文件和目录名、Linux 用户和组、进程和其他OS对象使用斜体(比如:packages.xml 文件,system 用户,vold 守护进程等)。字符串常量也使用斜体(比如:AndroidOpenSSL Provider)。如果在代码内使用字符串常量,通常需要使用单引号或双引号将之括起来( 比如: Signature.getInstance(“SHA1withRSA”,”AndroidOpenSSL”))。Java 类名格式通常不带包名(如:Binder 类);完整包名仅用于在讨论的API 或包里存在多个相同类名,或指定的容器包特别重要(比如:javax.net.ssl.SSLSocketFactory类)。当在文本中被引用时,函数名和方法名通常要带圆括号,但参数省略(比如,getInstance()工厂方法)。完整的函数和方法请参见相关参考文档。
大部分章节包含图,用于阐述所讨论的安全子系统或组件的架构。所有图均是“线框和箭头模式”,不严格遵照特定的格式。也就是说,大部分图借鉴了UML 类图和部署图的做法,线框通常表示类或对象,箭头表示依赖或通信路径。

序言

  《Android 安全架构深究》一书正如其书名一样,着重从架构角度介绍Android 平台的安全机制。近几年,Android 安全研究的热点一直围绕着恶意软件攻防、应用加固与逆向、支付安全、应用层与框架层漏洞挖掘和内核漏洞挖掘利用这几个方向。目前,已有数位研究者将应用逆向和应用层漏洞评估整理成书籍,但其他安全研究方向仍以碎片化的形式存在于各大安全会议或部分书籍之中。究其原因,我认为是一些高级的安全问题需要必要的平台安全机制方面的知识做铺垫,不然,初学者会感到难以上手。《Android 安全架构深究》一书介绍的正是铺垫性的知识。
该书自底向上地描述了Android 的安全体系架构,深入探究与安全相关的Android 子系统、设备和数据组件的内部实现,并介绍了新引入的安全特性,如受限用户支持、全盘加密、硬件支持的凭据存储和集中式设备管理的支持。
本书前4 章首先简要介绍Android 的体系结构和安全模型。体系结构方面与其他书籍无异,介绍Android 系统重要组件的基本概念,包括Linux 内核层、Dalvik 虚拟机、Java运行时库、Binder 机制和Android 框架库,其中对Binder 机制的介绍较为详细。安全模型方面简要介绍了沙箱机制、应用层权限、IPC 通信、多用户支持和SELinux 机制,尤其在SELinux 机制中,介绍了引入MAC 机制的必要性和DAC 机制的先天不足;并详细讲解了Android 权限的声明、使用和执行过程。开发过简单的Android 程序的人明白权限声明是怎么一回事儿,但这一部分具体阐述了当安装App 时,包管理器是如何将App 声明的权限标识记录到已安装包的核心数据库/data/system/package.xml 文件中的。对于权限赋予,先将系统所有程序分为两类:高层组件(安装的App 和系统服务)和低层组件(本地进程),高层组件的权限赋予仍以包管理器通过package.xml 数据库来决定,低层组件的权限赋予依赖进程UID、GID 和补充GID 来决定。在权限执行的讲解中,作者还是按照自底向上的结构讲解内核层权限的执行、原生守护进程级别权限的执行和框架层权限的执行。实现内核层权限执行的关键在于Android 内核在普通Linux 内核访问控制机制的基础上,又增加了一些特有的访问控制机制,如对网络的访问,上层App 申请了Internet 权限后,内核层才能判断App 对应的进程是属于inet 组的(属于该组才能访问Internet)。原生守护进程的权限执行采用标准文件系统权限机制进行权限控制。框架层权限执行正是我们熟知的AndroidManifest.xml 配置文件机制。该部分接着对四大组件的权限执行、共享用户ID、自定义权限、四大组件声明权限进行了介绍,与基本的Android 开发无异;然后,作者详细讲解了Android 的包管理机制,包管理机制主要负责APK 包的安装和校验。在介绍APK的安装过程之前,先介绍了APK 文件的格式和APK 文件的签名,这一部分已是老生常谈。之后针对APK 安装包的安装形式, 介绍了其安装步骤: 解析和验证包( 从AndroidManifest.xml 中提取信息和包签名,验证APK 完整性)→接受权限和启动安装进程(显示应用申请的权限)→复制到应用程序目录(/data/)→包扫描→创建数据目录(由installd 进程负责)→生成Optimized DEX 文件(installd 运行dexopt 命令)→文件和目录结构→添加到package.xml 数据库(包名、包属性、路径、权限……)→签名验证,一个APK的安装过程大致如此;最后,介绍了Android 的多用户支持,并描述了在多用户设备上数据隔离的实现。多用户机制在Android 4.2 中就已经加入,但只支持平板模式;在Android L中,多用户机制已支持手机模式。在该部分中,详细介绍了用户类型,每个用户类型所对应的用户元数据及对用户所有的应用程序的管理。
第5 章和第6 章介绍的是加密服务和PKI 机制,这两部分作为安全架构的重要组成部分同时也是Android 安全开发所关注的内容。Android 上的加密服务主要依赖JCA 引擎,在介绍加密服务的章节中,该书对JCA 引擎类中重要的类方法进行了较为细致的介绍,如安全随机数SecureRandom、消息摘要MessageDigest、签名Signature、加密算法Cipher 和密钥Key 等。PKI 机制一直在网络安全中扮演重要角色,在Java 语言中,Java 安全套接字扩展JSSE 实现了SSL 和TLS 协议,并提供数据加密、服务器验证、消息完整性和可选客户端验证等机制。Android 上JSSE 的实现极大地方便了开发人员在Android App 中部署PKI方案。该章节对Android JSSE 实现的描述,对开发人员有着重要的参考意义。
接下来,该书详细介绍了Android 系统中引入的新的安全特性,比如硬件支持的凭据存储、集中式设备管理的支持和全盘加密技术的实现。在凭据存储部分,介绍了Android的凭据存储,并介绍了提供给应用的安全存储密钥的API。对于在线账户管理,本书详细分析了账户管理在Android 系统中的具体实现和认证模块的具体细节。在集中式设备管理方面,本书详细介绍了Android VPN 技术的各个细节和Wi-Fi EAP 认证的具体方法,这对开发企业安全应用有着重要的参考价值。随后的设备安全部分,介绍了验证启动(verifiedboot)、磁盘加密和Android 锁屏的实现,并展示了安全USB 调试和设备加密备份的实现。接着概述了Android 的NFC 栈,深入探究了安全元件(SE)的集成及其API,并介绍了基于主机的卡模拟(HCE)。以上介绍的安全机制被引入Android 系统的时间并不长,而且,目前对这些技术的公开详细介绍并不多见。该书对这些新的安全机制的介绍不仅为安全研究人员提供了新的研究方向,还为开发人员运用这些新的安全机制提供了重要的参考。
在该书的最后一部分,作者详述了Android 平台引入的最为重要的安全机制–SELinux。众所周知,SELinux 是Linux 2.6 内核引入的一个全新的安全机制,不同于Linux DAC 机制,它是一种强制访问控制MAC 机制。从Android 4.3 开始,Android 基于SELinux 机制,实现了SEAndroid 机制来加强系统安全性。为了能让读者对SEAndroid 有更细致的了解,作者先对SELinux 的实现细节做了详细描述,包括SELinux 的架构、SELinux模式、安全上下文、策略声明、类型转换和域转换等。接着描述了Android 上的实现,最后介绍了Android 4.4 的SELinux 策略。至此,从简要介绍SELinux 的架构和策略语言开始,详细讲解为集成进Android,SELinux 所做的改进,并概述了Android 基础的SELinux 策略,一步一步让读者对Android 平台的SELinux 机制有更清晰的认识。
总的来说,《Android 安全架构深究》一书对Android 平台的安全机制做了较为细致的剖析。全书专注于对Android 平台重要安全机制的分析,尤其对新引进的安全机制的分析弥补了该方面的空白,这无论是对新手还是对安全有一定研究的人员和开发者都具有重要的参考价值。
Only_Guest(张瑞冬)
四川无声双螺旋安全研究院院长、攻防实验室负责人

媒体评论

  本书全面介绍了Android 体系架构的攻防,涉及root、SEAndroid 的加密解密等核心安全问题,是为数不多的深入讲解安卓底层安全的书籍。作者和译者都是业界资深专家,原文精彩、译文流畅,相关从业者均值得一读。
–乌云知识库
国内安全圈对攻防的热衷程度很高,但经典的安全架构大多来自国外,实际上攻防和安全建设并不能画等号,这也是国内安全设计人才极少的原因。而这本书正是从经典安全设计的角度,提供了较为系统化的分析,对于想积累软件安全体系架构的视野以及从事安全架构设计的从业人员来说都是很好的参考书,对移动安全领域的研究者或移动平台开发者同样适用。
–赵彦 华为云安全首席架构师
Android 安全作为近年来的热门领域涌现出了大批优秀书籍,而本书则是其中新出现的佼佼者。本书在高层次上对Android 安全的上层架构做了详细介绍,是安全研究人员挖掘分析漏洞的优秀学习参考资料,ROM 开发人员和App 开发者也可以通过阅读本书加深对Android 安全体系这个复杂而庞大结构的认识,从而减少漏洞的产生,设计出更安全的系统和App,从而给用户以更好的保护。作者和译者均在Android 领域有着丰富的经验,相信会让读者受益良多。
–何淇丹(Flanker) KeenLab(原KeenTeam)高级研究员、谷歌Android 安全名人堂成员、Blackhat 演讲者
通过本书,我们可以深度了解Android 的整个体系结构,并从中找到读者在研发及安全加固时所需要的资料与知识。如本书中的EAP 可扩展认证协议部分,通过对此架构的理解,你将对Android 对企业安全的支持有更深刻的认识,对研发以Android 为平台的企业安全产品有指导性的作用。本书关于Android 的NFC 协议栈的知识,建议各位读者认真阅读,这将是Android 体系中最有趣的部分,通过对该协议栈的掌握,你或许可以实现利用一台Android 手机的NFC 模块模拟一张自己的门禁卡这样炫酷的事情。
–杨卿(Ir0nSmith) 360 独角兽团队(UnicornTeam)创始人
《Android 安全架构深究》这本书一直是学习安卓安全的必备图书之一,很荣幸读到中文版。这本书深入讲解了Android 的安全架构,从Android 安全模型的介绍到相关权限、签名、用户管理、更新等机制无所不包。推荐每个学习安卓安全的读者都能好好阅读本书,相信对大家在Android 安全方面的技术进阶绝对能起到极大助益。
–张祖优(Fooying) 知道创宇安全研究员、Sebug 负责人
作为当今最流行的开放操作系统平台,Android 驱动着数以亿计的设备工作。这样一个充满魅力的系统,一定拥有完善的安全体系。本书对Android 安全体系的架构做了详细介绍,如果你对Android 实现感兴趣,那么这本书一定会适合你。
–钱文祥 腾讯浏览器安全研究员,《白帽子讲浏览器安全》作者
新的信息技术给信息安全带来了新的研究方向,我们既感叹需要更新的知识越来越多,新的知识也让多年的信息安全从业者和热爱学习的新锐们又重新站在了同一起跑线上,这成为改变格局的机会。
Android 的流行让我们很难忽视它可能存在的安全问题,《Android 安全架构深究》能让我们快速了解它的整体架构,也能在我们需要的时候查找更底层的安全细节,无论是深度阅读,还是作为工具书偶尔查阅,这本书都是难能可贵的。作为一个希望能不断更新自身技术知识的信息安全从业人员,通过阅读本书的样章能够使我快速并愉快地了解一些之前觉得毫无头绪的内容。
如果还有什么感慨,就是等本书正式发行的时候,迅速地去买一本,细细阅读。
–郝轶 百度云安全部资深安全专家
这本书对于致力于安卓安全研究和深入安卓系统开发的读者有非常大的参考价值,可以帮助大家了解和学习安卓的安全体系架构。在安全攻防圈子里流行着一句话”know it thenhack it”,只有对一个事物足够了解,你才有能力hack 它,突破更多的限制,希望大家可以循着作者的思路对安卓安全有更进一步的了解。
–宋申雷 360 安全技术经理

书摘

  推荐序
《Android 安全架构深究》一书正如其书名一样,着重从架构角度介绍Android 平台的安全机制。近几年,Android 安全研究的热点一直围绕着恶意软件攻防、应用加固与逆向、支付安全、应用层与框架层漏洞挖掘和内核漏洞挖掘利用这几个方向。目前,已有数位研究者将应用逆向和应用层漏洞评估整理成书籍,但其他安全研究方向仍以碎片化的形式存在于各大安全会议或部分书籍之中。究其原因,我认为是一些高级的安全问题需要必要的平台安全机制方面的知识做铺垫,不然,初学者会感到难以上手。《Android 安全架构深究》一书介绍的正是铺垫性的知识。
该书自底向上地描述了Android 的安全体系架构,深入探究与安全相关的Android 子系统、设备和数据组件的内部实现,并介绍了新引入的安全特性,如受限用户支持、全盘加密、硬件支持的凭据存储和集中式设备管理的支持。
本书前4 章首先简要介绍Android 的体系结构和安全模型。体系结构方面与其他书籍无异,介绍Android 系统重要组件的基本概念,包括Linux 内核层、Dalvik 虚拟机、Java运行时库、Binder 机制和Android 框架库,其中对Binder 机制的介绍较为详细。安全模型方面简要介绍了沙箱机制、应用层权限、IPC 通信、多用户支持和SELinux 机制,尤其在SELinux 机制中,介绍了引入MAC 机制的必要性和DAC 机制的先天不足;并详细讲解了Android 权限的声明、使用和执行过程。开发过简单的Android 程序的人明白权限声明是怎么一回事儿,但这一部分具体阐述了当安装App 时,包管理器是如何将App 声明的权限标识记录到已安装包的核心数据库/data/system/package.xml 文件中的。对于权限赋予,先将系统所有程序分为两类:高层组件(安装的App 和系统服务)和低层组件(本地进程),高层组件的权限赋予仍以包管理器通过package.xml 数据库来决定,低层组件的权限赋予依赖进程UID、GID 和补充GID 来决定。在权限执行的讲解中,作者还是按照自底向上的结构讲解内核层权限的执行、原生守护进程级别权限的执行和框架层权限的执行。实现内核层权限执行的关键在于Android 内核在普通Linux 内核访问控制机制的基础上,又增加了一些特有的访问控制机制,如对网络的访问,上层App 申请了Internet 权限后,内核层才能判断App 对应的进程是属于inet 组的(属于该组才能访问Internet)。原生守护进程的权限执行采用标准文件系统权限机制进行权限控制。框架层权限执行正是我们熟知的AndroidManifest.xml 配置文件机制。该部分接着对四大组件的权限执行、共享用户ID、自定义权限、四大组件声明权限进行了介绍,与基本的Android 开发无异;然后,作者详细讲解了Android 的包管理机制,包管理机制主要负责APK 包的安装和校验。在介绍APK的安装过程之前,先介绍了APK 文件的格式和APK 文件的签名,这一部分已是老生常谈。之后针对APK 安装包的安装形式, 介绍了其安装步骤: 解析和验证包( 从AndroidManifest.xml 中提取信息和包签名,验证APK 完整性)→接受权限和启动安装进程(显示应用申请的权限)→复制到应用程序目录(/data/)→包扫描→创建数据目录(由installd 进程负责)→生成Optimized DEX 文件(installd 运行dexopt 命令)→文件和目录结构→添加到package.xml 数据库(包名、包属性、路径、权限……)→签名验证,一个APK的安装过程大致如此;*后,介绍了Android 的多用户支持,并描述了在多用户设备上数据隔离的实现。多用户机制在Android 4.2 中就已经加入,但只支持平板模式;在Android L中,多用户机制已支持手机模式。在该部分中,详细介绍了用户类型,每个用户类型所对应的用户元数据及对用户所有的应用程序的管理。
第5 章和第6 章介绍的是加密服务和PKI 机制,这两部分作为安全架构的重要组成部分同时也是Android 安全开发所关注的内容。Android 上的加密服务主要依赖JCA 引擎,在介绍加密服务的章节中,该书对JCA 引擎类中重要的类方法进行了较为细致的介绍,如安全随机数SecureRandom、消息摘要MessageDigest、签名Signature、加密算法Cipher 和密钥Key 等。PKI 机制一直在网络安全中扮演重要角色,在Java 语言中,Java 安全套接字扩展JSSE 实现了SSL 和TLS 协议,并提供数据加密、服务器验证、消息完整性和可选客户端验证等机制。Android 上JSSE 的实现极大地方便了开发人员在Android App 中部署PKI方案。该章节对Android JSSE 实现的描述,对开发人员有着重要的参考意义。
接下来,该书详细介绍了Android 系统中引入的新的安全特性,比如硬件支持的凭据存储、集中式设备管理的支持和全盘加密技术的实现。在凭据存储部分,介绍了Android的凭据存储,并介绍了提供给应用的安全存储密钥的API。对于在线账户管理,本书详细分析了账户管理在Android 系统中的具体实现和认证模块的具体细节。在集中式设备管理方面,本书详细介绍了Android VPN 技术的各个细节和Wi-Fi EAP 认证的具体方法,这对开发企业安全应用有着重要的参考价值。随后的设备安全部分,介绍了验证启动(verifiedboot)、磁盘加密和Android 锁屏的实现,并展示了安全USB 调试和设备加密备份的实现。接着概述了Android 的NFC 栈,深入探究了安全元件(SE)的集成及其API,并介绍了基于主机的卡模拟(HCE)。以上介绍的安全机制被引入Android 系统的时间并不长,而且,目前对这些技术的公开详细介绍并不多见。该书对这些新的安全机制的介绍不仅为安全研究人员提供了新的研究方向,还为开发人员运用这些新的安全机制提供了重要的参考。
在该书的*后一部分,作者详述了Android 平台引入的*为重要的安全机制——SELinux。众所周知,SELinux 是Linux 2.6 内核引入的一个全新的安全机制,不同于Linux DAC 机制,它是一种强制访问控制MAC 机制。从Android 4.3 开始,Android 基于SELinux 机制,实现了SEAndroid 机制来加强系统安全性。为了能让读者对SEAndroid 有更细致的了解,作者先对SELinux 的实现细节做了详细描述,包括SELinux 的架构、SELinux模式、安全上下文、策略声明、类型转换和域转换等。接着描述了Android 上的实现,*后介绍了Android 4.4 的SELinux 策略。至此,从简要介绍SELinux 的架构和策略语言开始,详细讲解为集成进Android,SELinux 所做的改进,并概述了Android 基础的SELinux 策略,一步一步让读者对Android 平台的SELinux 机制有更清晰的认识。
总的来说,《Android 安全架构深究》一书对Android 平台的安全机制做了较为细致的剖析。全书专注于对Android 平台重要安全机制的分析,尤其对新引进的安全机制的分析弥补了该方面的空白,这无论是对新手还是对安全有一定研究的人员和开发者都具有重要的参考价值。
Only_Guest(张瑞冬)
四川无声双螺旋安全研究院院长、攻防实验室负责人
购买地址:http://product.china-pub.com/4918438