在 Android 系统中,有多种安全机制来保证系统的安全。从 Framework,到 Kernel 再到硬件。 硬件层安全机制如 TZ(TrustZone) 这里不过多讨论。这里我们暂时只讨论操作系统层面的 Android 机制。
Framework 层
- Android 的虚拟机隔离,每一个 App进程都运行在独立的进程空间(虚拟地址),所以内存之间相互隔离
- Android 的 Permission 机制,在 getService 的时候,系统会检查你这个进程是否有这个对应的 permission,如果有些 permission 涉及到系统调用,那么本质上还是依赖了 Kernel 的 UGO 权限机制。
- Linker Namespace,通过 Linker Namespace 限制普通应用对系统的一些私有的库的调用。
Kernel 层
- UGO(User、Group and Others) 权限模型, Android 基于 Linux 操作系统,对于 Kernel 来说,Android 程序也是一个单独的进程,所以也能利用 Linux 上的 UID/GID 来实现安全隔离。比如,每一个 App 进程,都会在 /data/data/ 目录下有一个单独的工作目录,并且只有自己和 SharedUserID 的 App 进程才有权限访问,这些也是基于 UGO 权限机制。
- SEAndroid (Security-Enhanced Android)。SEAndroid 是 Android 操作系统根据自身情况扩展了 Security-Enhanced Linux,相比于 UGO 权限模型,SEAndroid 粒度更细,更安全,即使设备在 root 的情况下,依旧能有效的限制非法访问。
举个例子,比如在进程中,使用 open 来打开一个文件,那么它至少会经过 UGO 权限模型和 SEAndroid 两层的检查
后面会介绍的内容:
- Android 的 Permission 机制
- Android 的 Linked Namespace
- UGO 权限模型
- SEAndroid