五、SE Android机制
Android是一个基于Linux内核的系统,Android也有用户的概念。只不过这些用户不需要登录。Android系统将每一个安装在系统的APK都映射为一个不同的Linux用户。也就是每一个APK都有一个对应的UID和GID,这些UID和GID在APK安装的时候由系统安装服务PackageManagerService分配。Android沙箱隔离机制就是建立在Linux的UID和GID基础上。
这种基于Linux UID/GID的安全机制存在什么样的问题呢?
Linux将文件的权限划分为读、写和执行三种,分别用字母r、w和x表示。每一个文件有三组读、写和执行权限,分别针对文件的所有者、文件所有者所属的组以及除了所有者以及在所有者所属组的用户之外所有其它用户。这样,如果一个用户想要将一个自己创建的文件交给另外一个用户访问,那么只需要相应地设置一下这个文件的其它用户权限位就可以了。所以,在Linux系统中,文件的权限控制在所有者的手中。因此,这种权限控制方式就称为自主式的,正式的英文名称为Discretionary Access Control,简称为DAC。
然而,一个用户可能会不小心将自己创建的文件的权限位错误地修改为允许其它用户访问。如果这个用户是一个特权用户,并且它错误操作的文件是一个敏感的文件,那么就会产生严重的安全问题。这种误操作的产生方式有三种:
- 用户执行了错误的命令
- 负责执行用户命令的程序有Bug
- 负责执行用户命令的程序受到攻击
后来,Linux内核采用了必要的访问控制机制:SE Linux(Security-Enhanced Linux),它采用了一种强制存取控制MAC(Mandatory Access Control)策略的实现方式,目的在于通过限制系统中的任何进程以及用户对资源的访问,保护内核安全。而SE Android(Security-Enhanced Android)是Android与SE Linux的结合,由美国NSA在2012年推出的Android操作系统安全强化套件,以支持在Android平台上使用SE Linux。
目前SE Android系统中的策略机制主要有三种:
- 安装时MAC(install-time MAC)
- 权限取消(permission revocation)
- 权限标签传播(tag propagation)
安装时MAC通过查找MAC策略配置来检查应用程序的权限。权限取消可以为已安装的应用取消权限,该机制在应用程序运行的权限检查时通过查找权限取消列表来取消应用的某些权限。权限标签传播是一种污点跟踪方式的应用,Android系统的权限作为抽象的标签映射到MAC策略配置文件中。
SE Android安全机制所要保护的对象是系统中的资源,这些资源分布在各个子系统中。实际上,系统中需要保护的资源非常多,除了文件之外,还有进程、socket和IPC等。SE Android是一个复杂的安全模型, SE Android安全机制的目的不是为了完全杜绝别人攻击我们的设备,而是为了保证我们的设备受到攻击时,受到的损害减少到最少的程度。
图6. Android Selinux
六、Android Verified Boot机制
保护系统的安全性,涉及的范围:从受硬件保护的信任根到引导加载程序,再到启动分区和其他已验证分区(包括 system、vendor 和可选的 oem 分区)的完整信任链。从上电复位开始的整个启动过程中,下一级的安全基于上一级的验证,最终依赖于芯片内置的OTP和安全硬件,逐级的验证构成了整个系统的信任链。
图6. Vbmeta image生成
图7. AVB 验证信任链
bootloader启动后会根据Android verify boot 的规则去验证 kernel 也就是boot.img。kernel启动后会利用DM-verity 去验证system 和vendor的image。如果验证通过就正常运行。否则就会报错,运行失败。
图8. AVB2.0 验证流程图
七、硬件安全机制TrustZone技术
为了给移动设备提供一个安全的运行环境,ARM从ARMv6的架构开始引入了TrustZone技术。TrustZone技术将中央处理器(Central Processing Unit, CPU)的工作状态分为了正常世界状态(Normal World Status, NWS)和安全世界状态(Secure World Status, SWS)。支持TrustZone技术的芯片提供了对外围硬件资源的硬件级别的保护和安全隔离。当CPU处于正常世界状态时,任何应用都无法访问安全硬件设备,也无法访问属于安全世界状态下的内存、缓存(Cache)以及其他外围安全硬件设备。
为了给移动设备提供一个安全的运行环境,ARM从ARMv6的架构开始引入了TrustZone技术。TrustZone技术将中央处理器(Central Processing Unit, CPU)的工作状态分为了正常世界状态(Normal World Status, NWS)和安全世界状态(Secure World Status, SWS)。支持TrustZone技术的芯片提供了对外围硬件资源的硬件级别的保护和安全隔离。当CPU处于正常世界状态时,任何应用都无法访问安全硬件设备,也无法访问属于安全世界状态下的内存、缓存(Cache)以及其他外围安全硬件设备。
图9. TrustZone技术
TrustZone技术之所以能提高系统的安全性,是因为对外部资源和内存资源的硬件隔离。这些硬件隔离包括中断隔离、片上RAM和ROM的隔离、片外RAM和ROM的隔离、外围设备的硬件隔离、外部RAM和ROM的隔离等。实现硬件层面的各种隔离,需要对整个系统的硬件和处理器核做出相应的扩展。这些扩展包括:
□ 对处理器核的虚拟化,也就是将AMR处理器的运行状态分为安全态和非安全态。
□ 对总线的扩展,增加安全位读写信号线。
□ 对内存管理单元(Memory Management Unit, MMU)的扩展,增加页表的安全位。
□ 对缓存(Cache)的扩展,增加安全位。
□ 对其他外围组件进行了相应的扩展,提供安全操作权限控制和安全操作信号。
ATF (ARM Trusted firmware)安全加载流程
图a. ATF加载流程
TEE 应用例子在线支付
每一台手机在工厂生产过程中都会使用微信提供的工具生成一对RSA密钥,公钥将会被上传到微信的服务器中,生成密钥的操作是由TEE来完成,而且在使用微信时,相关数据的组包、签名都由TEE来完成。微信的在线支付功能在使用时会使用到系统中的keystore模块、keymaster模块、TEE驱动、运行于TEE中的在线支付TA、指纹TA模块。整个过程中所有数据的加密、签名以及生成密钥的过程都是在TEE环境中完成的,这也就能保证在线支付操作的安全。