AVB源码学习(二):Uboot阶段AVB2.0校验流程
参考资料
感谢前辈的blog,安全相关的资料可太少了,很详细很卓越
https://blog.csdn.net/jackone12347/article/details/116241676
(我是真的不习惯打1、2这种)
1、avb正确启动流程
因为google对UBOOT或者UEFI阶段的AVB校验是没有标准的,各厂家都可以进行定制。虽然没有标准,但是google给出了建议的启动流程,各芯片厂家一般都会向这个靠齐。google建议的启动流程图如下:
(终于学会去水印了)
没怎么搞过AVB的同学,看到这张图,估计也不大清楚google想表示啥。我琢磨过一阵子,撸过相关的code,这里就给大家讲一下我的理解,一步步来分解一下。(感激)
1、Device Lock设备上锁
第一个遇到的是“Is Device Locked”,判断设备是否为locked上锁状态,意思是出厂的手机最好建议是上过锁的,如果没有上锁就warning告知一下用户。
那什么是上锁? 上锁有什么用? 是怎么上锁的?
一般OEM厂商最后产线出去的手机,可能会对设备进行上锁操作。上锁后,这台设备后续基本不大可能会被刷机了(概率词语),刷机工具会去判断这条设备是否上过锁,如果是上锁的状态,对不起请先解锁。
那怎么解锁类,OEM厂商的操作方式不一定一样,比如维修的时候提供fastboot功能等进行解锁,我这里只是说了一种可能性,实际上各家的方法不一定一样。
那这个上锁是怎么操作的?
一般是采用将数据写入到EMMC或者UFS中的RPMB分区(这里我曾写过,可以看一下),上锁的流程又有可能是通过TEE侧去操作的,REE侧是不知道怎么上锁的(这个我也写了哦)。
这样就把实现的细节全部屏蔽掉了,烧录工具烧录时判断是否上锁以及解决,也是走这个通路。
如果没有上锁,google建议界面显示橙色,提示用户当前设备没有上锁,可能不够安全,但一般不影响继续启到kernel阶段。
好了,Device Lock就介绍到这。
2、Valid Os found
accept verification errors and any of trust,这个是图中的括号里的,咋一看不知道这个在讲什么。
其实也比较简单,就是检察vbmeta.img是否合法,检查vbmeta的header信息中是否有“AVB0”开头,是否有预置public key等,就是check这些内容,如果没有通过,设置了verify flag的话就直接启动失败。
3、Was the root of trust set by the user
这个又是啥玩意,怎么跟user用户有关了? 其实这是google提供的很好的方法,就是我这台google设备并不是最终产线出去的,但我又想用这个AVB验证功能,所以就提供了另一种方法,可以让用户自己设置key。但是如果使用的是用户设置的key,建议给个黄色的界面进行warning提醒,毕竟不是OEM厂商签名发出的版本嘛。
4、Update rollback
什么是rollback,其实就是回滚。这里的意思是更新回滚,为什么要更新回滚?是因为android版本也会有漏洞,google会定期的发布安全补丁。
如果有人想使坏,使用没有打安全补丁的版本,然后想偷偷摸摸干点事情,嘿嘿,肯定是不好的对吧。
需要把这条路给它堵上。google就提供了rollball防回滚的机制。
比如我们发布的版本带有安全补丁,我们就把rollback index值加1,编译版本镜像->烧录->启动,启动的时候会去从设备的特殊分区中读取原来的rollback index值,如果发现设备中的index值小于vbmeta中的,就把vbmeta中的index更新到设备的特殊分区中。
这里的特殊分区可以是RPMB分区,也可以是其他不容易访问到的分区都是可以的。
如果这个时间,“某个坏人”通过OTA或者其他途径 刚好把有缺陷的镜像烧录成功到设备中了,启动的时候会遇到失败,因为有缺陷的版本rollback index值会小于特殊分区中的,启动失败,这样就达到了防止回滚了的目标了。
那么从代码层面上如何实现上面提到的这个点呢?就需要先移植libavb库到UBOOT或者UEFI中,然后实现avb_ops.c中的几个接口就可以了,我这里不方便贴代码,请见谅。
需要实现的接口在avb_ops.h中,如下几个需要实现,另外几个可选择性实现。
AvbIOResult (*read_from_partition)(AvbOps* ops,const char *partition,int64_t offset,size_t num_bytes,void* buffer,size_t* out_num_read);AvbIOResult (*read_rollback_index)(AvbOps* ops,size_t rollback_index_location,uint64_t* out_rollback_index);AvbIOResult (*write_rollback_index)(AvbOps* ops,size_t rollback_index_location,uint64_t rollback_index); AvbIOResult (*validate_vbmeta_public_key)(AvbOps* ops,const uint8_t* public_key_data,size_t public_key_length,const uint8_t* public_key_metadata,size_t public_key_metadata_length,bool* out_is_trusted);
以上就是UBOOT阶段AVB2.0的校验流程
2、avb非正常启动模块
ing
AVB源码学习(二):Uboot阶段AVB2.0校验流程相关推荐
- android AVB2.0(二)Uboot阶段AVB2.0校验流程
android AVB2.0学习总结传送门 本篇属于android AVB2.0学习总结系列的第二篇文章,本篇主要介绍一下UBOOT或者UEFI阶段AVB2.0的介绍. 支持原创,转载请标明链接 ht ...
- AVB源码学习(一):AVB2.0工作原理及编译配置
参考资料 感谢前辈的blog,安全相关的资料可太少了,很详细很卓越 https://blog.csdn.net/jackone12347/article/details/116241676 前言 在这 ...
- AVB源码学习(三):AVB2.0 Init阶段安全启动流程
参考资料 感谢前辈的blog,安全相关的资料可太少了,很详细很卓越 https://blog.csdn.net/jackone12347/article/details/116241676 一.Ini ...
- AVB源码学习(七):AVB2.0-Super动态分区介绍
感谢前辈的blog,安全相关的资料可太少了,很详细很卓越 https://blog.csdn.net/jackone12347/article/details/116241676 一.Super分区是 ...
- AVB源码学习(四):AVB2.0-libavb库介绍1
参考资料 感谢前辈的blog,安全相关的资料可太少了,很详细很卓越 https://blog.csdn.net/jackone12347/article/details/116241676 前言 首先 ...
- ROS源码学习 二、线程池
2021SC@SDUSC 目录 1.写在前面 2.ROS线程池概述 3.ROS线程池模型 4.ROS线程池源码详解 5.总结 1.写在前面 ROS作为一个操作系统,其职责是协调具有不同功能的node之 ...
- Golang源码学习(二)----Go源码学习基础
### 本文源码版本为 GO 1.17.8 Windows/amd64: ### 可能参与对比的版本:GO 1.16.2 Linux/amd64一.Golang的编译器究竟是如何工作的? (学习源码有 ...
- SocketServer源码学习(二)
SocketServer 中非常重要的两个基类就是:BaseServer 和 BaseRequestHandler 在SocketServer 中也提供了对TCP以及UDP的高级封装,这次我们主要通过 ...
- 使用base标签后图片无法加载_Spring 源码学习(二)-默认标签解析
`Spring` 解析默认标签~ 从上一篇笔记可以看出,在容器注册 bean 信息的时候,做了很多解析操作,而 xml 文件中包含了很多标签.属性,例如 bean . import 标签, meta ...
最新文章
- 麦肯锡顾问的核心意识:成果决定价值
- icmp回复报文_CCNA - Part7:网络层 - ICMP 应该是你最熟悉的协议了
- Rust linux 系统接口使用
- DoS Deflate Iptables
- python软件代码示例-Python学习示例源码
- VMWare虚拟机下为Ubuntu 12.04.1配置静态IP(NAT连接方式)
- 201409-5 拼图
- CV Code | 计算机视觉开源周报 20190601期
- 深度学习框架PyTorch:入门与实践 学习(二)
- web版pdf在线阅读器
- 传感器检测技术——概论
- CSP-X模拟题第三套-信心赛题解
- 同步数据显示服务器异常,同步异常云端服务器异常
- ROC-RK3328-CC板子编译烧录环境记录
- 51单片机学习笔记-1简介及点灯
- 医学考计算机的研究生,医学信息工程能考这些大学的研究生你知道吗
- 几个经典app制作网站
- 深度学习三十问!一位算法工程师经历30+场CV面试后总结的常见问题合集(含答案)...
- 论文笔记:再看ResNet——ResNet典型网络结构
- 基于php+mysql购物商城 校园二手商品 图书鲜花商城 毕业设计(9)商品评论
热门文章
- 程序员编程艺术第三十 三十一章 字符串转换成整数,通配符字符串匹配
- 新改版代shua网源码 已对接艾K支付 附25套模板
- 微信H5分享接口问题(避开99%坑)
- 为什么电场线不能相交或相切
- 并联串联混合的电压和电流_并联型的有源滤波器能够有多少种用法?
- R12.2.0 post install checks error : RW-50016: Error: - {0} was not created - 2
- 关于5G定位技术的探讨
- PageAdmin,织梦DedeCms和Wordpress—CMS建站系统怎么选
- html、css 实现轮播图的静态样式
- 二叉树、红黑树 详解