Android Security Overview


一、安全启动

1、Chain Of Trust

核心思路就是在当前启动代码加载下一级代码之前,对所加载的代码进行完整性校验,这些启动代码通常可以分为若干个阶段,例如ARM中的BL1、BL2、内核等。

最初的代码即BL1的代码,是保存在BootROM中,出厂烧写后不可修改的。因此BootROM代码需要尽可能简单,只需要进行必要的初始化操作。这样一来,信任根就变成了可以烧写BootROM代码的芯片厂商。信任是可以传递的,芯片厂商作为信任根将代码执行权限交给下一级之后,比如OEM厂商,下级代码就拥有了信任链所有权,也就是说下级代码就变成了新的信任根。但是ROM的空间有限,所以通常还使用OTP(One-Time-Programmable)来保存不同阶段的签名信息。OTP是支持一次性编程的硬件,如多晶硅熔断器(poly-silicon fuses),烧毁之后无法恢复,从而保证写入后无法被篡改。

在系统刚启动的时候会利用芯片中的OTP fuse的值对bootloader 镜像文件进行校验。bootloader启动后会根据Android verify boot 的规则去验证 kernel 也就是boot.img。kernel启动后会利用DM-verity 去验证system 和vendor的image。

2、Verify Boot

上图

2、DM-Verity(Device-mapper-verity)

在Android中基于dm-verity实现可信启动的步骤如下:
原文链接
1.生成ext4系统镜像
2.生成该镜像的哈希树
3.生成目标哈希树的dm-verity表(即前面提到的verity table字符串)
4.对dm-verity表进行签名5.将dm-verity表及其签名打包为元数据(verity metadata)
6.将系统镜像、元数据和哈希树进行打包,生成最终的镜像

二、安全运行

1、SELinux

SELinux is a security enhancement to Linux

There are three SELinux modes:

  • ENFORCING – SELinux security policy is enforced
  • PERMISSIVE – SELinux grants access but prints out error (denial) message
  • DISABLED – No SELinux policy is loaded

待填坑。。。

安全上下文

4、FDE(full disk encryption)

5、Security CTS Test

posted @ 2021-12-23 15:00  月的光景  阅读(153)  评论(0)    收藏  举报