Android安全启动功能

验证启动(安全启动)功能旨在保证设备软件(从硬件信任根直到系统分区)的完整性。在启动过程中,无论是在每个阶段,都会在进入下一个阶段之前先验证下一个阶段的完整性和真实性。

设备启动安全级别状态,用绿黄橙红四种颜色表示:

绿色代表所有信任链关系上的镜像都被正常校验通过;

黄色代表boot分区不是被OEM key认证成功,启动bootloader显示警告和使用的公钥的摘要信息(fingerpring);

橙色表示系统软件是可自由烧写状态,其完整性需用户进行判断,bootloader显示警告;

红色表示启动过程中有校验失败,启动终止。

Device state - 设备状态分为unlocked和locked:

locked状态下,设备不能被烧写,可能启动到绿黄红三种状态。

Unlocked状态下,设备可以被自由烧写,启动到橙色状态。

dm-verity - Linux 内核驱动,用来作分区完整性检查。

OEM key - OEM提供的一个固定的不可被篡改密钥,在bootloader中可见,用来验证boot镜像。

设备处于“绿色”启动状态时,除了正常设备启动所需的用户互动外,用户应该不会看到任何其他用户互动。设备处于“橙色”和“黄色”启动状态时,用户会看到一条至少持续 5 秒的警告。如果用户在这段时间内与设备互动,该警告持续显示的时间至少会延长 30 秒,或者直到用户关闭该警告。设备处于“红色”启动状态时,该警告会显示至少 30 秒,之后设备将会关机。

要实现完整的信任链,需要启动分区上的引导加载程序和软件支持,这个引导加载程序需要完成:

1,初始化TEE及其绑定的信任根。也就是ROOT OF TRUST。

2,验证启动分区的完整性,并显示状态中的警告。

在启动分区验证和TEE初始化完成后,引导加载程序会将启动分区签名时的公钥和当前设备状态信息传递给TEE,绑定keymaster信任根。

下面简要说一说各个分区的启动验证!

BOOT ROM

BOOT ROM固化在芯片内部,不可被篡改。

Preloader

签名:编译时由OEM厂商将CHIP_KEY公钥预置到preloader镜像,并用CHIP_KEY私钥对镜像执行签名。

验签:BOOT ROM从外部存储加载preloader镜像,从签名头获取镜像签名信息和公钥地址,获取公钥,后从efuse分区加载efuse镜像,读取公钥hash值,计算公钥值并与之比较,若一致则认为公钥合法,用此公钥对preloader进行验签,若通过则说明镜像未变篡改。

TEE

签名:TEE镜像包括ATF和TEE OS镜像,两镜像由OEM/TEE厂商进行签名,组合成trustzone.bin再用mtk Sign-Tool进行签名。

验签:preloader先后分别对atf和tee内容执行验签。

LK,BOOT

lk和boot分区的保护都有两层签名,第一层使用VERIFIED_BOOT_IMG_AUTH_KEY进行签名,运行时验签,然后使用KEY_IMAGE_AUTH再次签名,Secure Download时验签。

防回滚机制

MTK SecLib有实现MTK_SECURITY_ANTI_ROLLBACK,推测是在某片存储中记录了已安装过的所有版本号和摘要信息。

原文发布于微信公众号 - 安智客(china_safer)

原文发表时间:2017-12-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏葡萄城控件技术团队

网站HTTP升级HTTPS完全配置手册

今天,所有使用Google Chrome稳定版的用户迎来了v68正式版首个版本的发布,详细版本号为v68.0.3440.75,上一个正式版v67.0.3396....

4230
来自专栏电光石火

tengine+tomcat+php安装

在安装tengine之前,确认centos环境中有无gcc、pcre、openssl,如果没有按以下命令进行安装

2497
来自专栏阮一峰的网络日志

Nginx 容器教程

春节前,我看到 Nginx 加入了 HTTP/2 的 server push 功能,就很想试一下。 正好这些天,我在学习 Docker,就想到可以用 Nginx...

4294
来自专栏SDNLAB

OpenStack keystone详解及调优

一、Keystone基本概念介绍 User User即用户,他们代表可以通过keystone进行访问的人或程序。Users通过认证信息(credentials,...

6976
来自专栏FH云彩

免费的泛域名SSL证书!

8884
来自专栏安富莱嵌入式技术分享

【RL-TCPnet网络教程】第33章 SMTP简单邮件传输协议基础知识

本章节为大家讲解SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)的基础知识,方便后面章节的实战操作。

1982
来自专栏电光石火

tengine+tomcat+php安装

在安装tengine之前,确认centos环境中有无gcc、pcre、openssl,如果没有按以下命令进行安装 #yum install gcc #yu...

23410
来自专栏刺客博客

利用SSL For Free 申请泛解析免费证书

5442
来自专栏张戈的专栏

分享一个SSL证书在线转换工具,以及IIS7环境下开通https的方法

衔接上一篇文章,提到了公司只能提供 Nginx 下的 SSL 证书,却要在 IIS 里面开启 https 这个问题。本来想去申请上次分享的沃通免费 SSL 证书...

7638
来自专栏FreeBuf

基于RDP的SSL中间人攻击

作者 Taskiller 本文通过演示在RDP会话期间劫持的按键发送信息,向读者演示了为什么用户忽略那些基于SSL的RDP连接的证书警告可能导致中间人(MiTM...

4276

扫码关注云+社区

领取腾讯云代金券