25.2.2 Android系统安全机制

2025-06-22 17:41:02 更新

(一)各层安全措施


位置

安全措施

1

应用程序层

权限声明机制

2

应用程序框架层

应用程序签名机制

3

系统运行库层

安全沙箱、网络加密通信SSL

4

内核层

内核安全:文件系统安全、地址空间布局随机化、SELinux

(二)权限声明机制

在操作权限和对象之间设定限制,只有两者绑定才有权操作。

权限声明机制还制定了不同级别不同认证方式的制度。

默认情况下Android应用不会被授予权限,权限分配由APK安装包中的AndroidManifest.xml文件确定。

(1)AndroidManifest.xml

(2)声明权限和对外提供权限

<permission‌ />:用于声明和定义一个权限,表明应用提供给其他应用的访问能力。

开发者可以使用<permission>节点来自定义权限保护应用的组件,确保只有拥有相应权限的应用才能访问这些组件。

<uses-permission‌:用于申请一个已声明的权限,表明应用需要使用其他应用提供的某些功能。

开发者在<uses-permission>节点中声明所需权限,应用在安装时系统会询问用户是否授权这些权限。

系统:<uses-permission android:name="android.permission.INTERNET" />

第三方应用<uses-permission android:name="com.demo.service" />

(3)权限等级

android:protectionLevel=[“normal” | “dangerous” | “signature” | “signatureOrSystem”]


应用层权限

说明

1

normal权限

不会带来实质性伤害,只要申请就能使用。

在AndroidManifest.xml 中添加uses-permission

2

dangerous权限

可能带来潜在威胁(安装时提醒用户),如读取位置、电话簿等

3

signature权限

具有同一签名的应用才能访问

4

signatureOrSystem权限

主要由设备商使用。签名相同,或者申请权限的应用为系统应用(在system image中)

(三)应用程序签名机制

APK文件数字签名,标识开发者和程序之间存在信任关系。

所有安装到Android系统中的程序都必须拥有一个数字证书。

目前有三种签名方案:

(1)v1 方案:基于 JAR 签名。

(2)v2 方案:APK 签名方案 v2,在 Android 7.0 引入。

(3)v3 方案:APK 签名方案 v3,在 Android 9.0 引入。

在引入 v3 方案后,Android 9.0 及更高版本中,可以根据 APK 签名方案,v3 -> v2 -> v1 依次尝试验证 APK。而较旧的平台会忽略 v3 签名并尝试 v2 签名,最后才去验证 v1 签名。

(四)沙箱机制

沙箱隔离机制:使应用程序和其相应运行的Dalvik虚拟机都运行在独立Linux进程空间,不与其他应用程序交叉,实现完全隔离。

应用程序默认没有访问系统资源或其他应用资源的权限。

每个App和系统进程都被分配唯一且固定的User ID(与内核层进程的UID对应)。

Android使用Dalvik虚拟机和Linux文件访问控制来实现沙箱机制,要访问系统资源或其他APP资源,必须在自身Manifest文件中声明权限或者共享UID。

(五)网络通信加密

使用SSL/TSL协议加密传输网络数据,防止敏感数据泄露。

(六)内核安全机制


内核安全

说明

1

Linux ACL权限控制机制

每个文件访问控制权限都由其拥有者、所属组、读写执行共同控制。

文件创建时被赋予不同程序ID,只有拥有相同程序ID或被设置为全局可读写才能被其他程序所访问。

每个应用均具有自身用户ID和私有文件目录。

2

分区

最外层安全保护由Linux提供

①system.img分区:只读,不允许用户写入

②data.img分区:可读写,用于存放用户数据

安全措施(Linux自身安全措施之外)

  1. 不允许在堆栈中执行代码
  2. 地址空间布局随机化
  3. 支持SELinux