读《Android 安全架构深究》

安全是一个非常立体而丰富得概念。在不同的场景下,安全有着不同的含义。

比如对于网络传输,安全指的是传输的数据不会被其他人看到、篡改、伪造及仿冒,传输的数据不会遭到破坏,数据从发送端发送出来到接收端接收到,可以保持完整准确。

Android 安全架构深究

再比如在操作系统层面,可以从用户和进程两个角度来看安全。从用户的角度来看,即是非授权的用户,无法访问未被授权访问的数据。相信刚刚接触 Unix-like 系统的朋友,对于 “Permission denied” 的报错都是烦不胜烦。这即是由于 Linux 上的普通用户,不能随意查看或修改其他用户的数据。

而从进程的角度来看,每个进程都有自己的虚拟内存空间,它们的运行时数据相互之间完全隔离,通常情况下,除非是调试工具,否则一个进程不能随意访问其它进程的内存空间,修改其它进程的内存数据。此外,进程的执行继承执行的用户和用户组的身份,因而对于不允许响应用户访问得文件及数据,进程也被禁止访问。

这些也是安全最主要的场景,及要解决的最主要的问题。

为了解决安全问题,在 Android 中有着两大最根本的机制。一是权限管理及自主访问控制,二是数据加密。

第一点主要由操作系统来实现。如同在 Linux 中那样,系统中的每个文件都有着自己的所有者用户,所有者组,以及针对系统中的用户身份的权限模式,比如 权限模式为 0644 的文件,其所有者可以读可以写但不能执行,其用户组中的用户和其它用户可以读但不能写不能执行。系统根据文件、数据的权限模式及执行操作的用户的身份,对所有的数据访问进行控制。基于 Unix-like 系统中一切皆文件的理念,对于设备的访问如同对文件得访问一样。为了解决 Linux 系统中权限管理及访问控制的粒度过粗的问题,而发明了 SELinux,进一步细化进程的权限管理及访问控制。而 Android 社区也将 SELinux 引入 Android,并形成 SEAndroid。

而数据加密,则是将明文的数据,转为看上去非常随机的密文,以防止未授权的人访问我们想要保密的数据。密码学上,加密算法主要分为加密密钥和解密密钥相同的对称加密,及加密密钥和解密密钥不同但满足一定的数学关系的非对称加密。在 Android 平台上,对于应用层来说,数据加密主要由 Java 的 JCA 框架来实现。目前 JCA 框架的实现主要基于 OpenSSL 来完成,未来则可能迁移到 Google fork 的 OpenSSL 分支 boringssl 上。

基于这两种最根本的安全机制,而设计了非常非常多的各种安全策略。

Android 应用的沙箱模型是,为系统中运行的几乎所有应用,无论是本地层的守护进程也好,还是系统应用进程,亦或是用户安装的应用,单独分配用户 ID,同时将不同应用的数据单独建立文件夹进行保存,并为这些文件夹设置适当的权限模式,以最小权限原则,防止应用不当的数据访问。借助于 SEAndroid 的强制模式,系统中拥有着超高特权的守护进程的操作权限被更细粒度地进行控制,以防止守护进程被攻破时,而有不当的行为。

基于加密机制,而有了 Android 应用程序安装包的签名验证,有了 HTTPS 的 PKI 体系中的身份认证方法及数据加密传输,有了验证启动中对数据完整性的哈希验证,有了 VPN,有了票据存储体系等,有了锁屏界面,有了磁盘加密,有了 OTA 升级中的包合法性验证等等等。而加密时的加盐,主要是为了防范攻击者通过已有的密码字典,而快速猜出密码。

加密机制在用户空间实现。不管是对称加密算法,非对称加密算法,还是哈希算法,MAC 算法,当前都有许许多多的选择。对于加密,还需要关注加密密钥的强度,加密迭代的次数,加密的模式,ECB 模式、CBC 模式还是其它,padding 的模式,前向安全性等等。此外还有复杂的 SSL/TLS 体系的 JSSE,及密钥存储值得关注。因而 Android 平台的数据加密领域丰富多彩,非常有趣。

当然大多数安全策略的设计,是同时基于两种机制来实现的。

权限管理及自主访问控制,数据加密机制,以及基于这两者而创建的各种安全策略,共同构成了 Android 的安全架构。

《Android 安全架构深究》这本书即是对 Android 安全架构的比较全面的描述,但各个主题深度有限,再所难免。有兴趣者自然可以挑选一些感兴趣的主题,比如包管理系统,应用程序安装包验证过程,票据存储,JCA 及 JSSE 等主题,以此书所述为基础,而通过阅读系统源码及其它相关资料,再做深入的研究。

参与安全事件的人,从立场的角度来看,可以分为攻方和守方。守方建立一整套一整套的安全机制和策略,来保护数据,并抵御任何实现非授权访问的企图。而攻方则寻找既有系统中可能存在的漏洞,并利用这些漏洞来获取更高的权限,执行限制性的代码,访问任意的数据,或者搞一些破坏。

目前国内有着很多关于攻的书籍,讲解怎么做漏洞挖掘,做反编译,破解。而这本书则更多地是讲解 Android 整个安全体系得构建,主要讲防,讲建设。

尽管有很多地方,翻译读起来,明显让人能感觉是通过自动翻译完成的。但这本书还是带给了我们对于 Android 整个安全体系架构较为完整的认识。这仍然是一本,整体读起来让人觉得开心的书。

愿每个人对这本书都能读起来开心。

打赏

坚持原创技术分享,您的支持将鼓励我继续创作!