第二章AndroidLinux内核层安全
来源:YuryZhauniarovich|Publications
译者:飞龙
协议:CCBY-NC-SA4.0
作为最广为人知的开源项目之一,Linux已经被证明是一个安全,可信和稳定的软件,全世界
数千人对它进行研究,攻击和打补丁。不出所料,Linux内核是Android操作系统的基础
[3]。Android不仅依赖于Linux的进程,内存和文件系统管理,它也是Android安全架构中
最重要的组件之一。在Android中,Linux内核负责配置应用沙盒,以及规范一些权限。
2.1应用沙盒
让我们考虑一个Android应用安装的过程。Android应用以Android软件包(.apk)文件的
形式分发。一个包由Dalvik可执行文件,资源,本地库和清单文件组成,并由开发者签名来
签名。有三个主要媒介可以在Android操作系统的设备上安装软件包:
GooglePlay
软件包安装程序
adbinstall工具
GooglePlay是一个特殊的应用,它为用户提供查找由第三方开发人员上传到市场的应用,以
及安装该应用的功能。虽然它也是第三方应用,但GooglePlay应用(因为使用与操作系统
相同的签名进行签名)可访问Android的受保护组件,而其他第三方应用则缺少这些组件。
如果用户从其他来源安装应用,则通常隐式使用软件包安装程序。此系统应用提供了用于启
动软件包安装过程的界面。由Android提供的 adbinstall工具主要由第三方应用开发人员使
用。虽然前两个媒介需要用户在安装过程中同意权限列表,但后者会安静地安装应用。这就
是它主要用于开发工具的原因,旨在将应用安装在设备上进行测试。该过程如图2.1的上半
部分所示。此图显示了Android安全体系结构的更详细的概述。我们将在本文中参考它来解
释这个操作系统的特性。
在Linux内核层配置应用沙箱的过程如下。在安装过程中,每个包都会被分配一个唯一的用
户标识符(UID)和组标识符(GID),在设备的应用生命周期内不会更改。因此,在
Android中每个应用都有一个相应的Linux用户。用户名遵循格式app_x,并且该用户的
UID等于 Process.FIRST_APPLICATION_UID+x,其中Process.FIRST_APPLICATION_UID常量对应
于 10000。例如,在图2.1中, ex1.apk包在安装期间获得了用户名 app1,UID等于
10001。