参考资料

感谢前辈的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校验流程相关推荐

  1. android AVB2.0(二)Uboot阶段AVB2.0校验流程

    android AVB2.0学习总结传送门 本篇属于android AVB2.0学习总结系列的第二篇文章,本篇主要介绍一下UBOOT或者UEFI阶段AVB2.0的介绍. 支持原创,转载请标明链接 ht ...

  2. AVB源码学习(一):AVB2.0工作原理及编译配置

    参考资料 感谢前辈的blog,安全相关的资料可太少了,很详细很卓越 https://blog.csdn.net/jackone12347/article/details/116241676 前言 在这 ...

  3. AVB源码学习(三):AVB2.0 Init阶段安全启动流程

    参考资料 感谢前辈的blog,安全相关的资料可太少了,很详细很卓越 https://blog.csdn.net/jackone12347/article/details/116241676 一.Ini ...

  4. AVB源码学习(七):AVB2.0-Super动态分区介绍

    感谢前辈的blog,安全相关的资料可太少了,很详细很卓越 https://blog.csdn.net/jackone12347/article/details/116241676 一.Super分区是 ...

  5. AVB源码学习(四):AVB2.0-libavb库介绍1

    参考资料 感谢前辈的blog,安全相关的资料可太少了,很详细很卓越 https://blog.csdn.net/jackone12347/article/details/116241676 前言 首先 ...

  6. ROS源码学习 二、线程池

    2021SC@SDUSC 目录 1.写在前面 2.ROS线程池概述 3.ROS线程池模型 4.ROS线程池源码详解 5.总结 1.写在前面 ROS作为一个操作系统,其职责是协调具有不同功能的node之 ...

  7. Golang源码学习(二)----Go源码学习基础

    ### 本文源码版本为 GO 1.17.8 Windows/amd64: ### 可能参与对比的版本:GO 1.16.2 Linux/amd64一.Golang的编译器究竟是如何工作的? (学习源码有 ...

  8. SocketServer源码学习(二)

    SocketServer 中非常重要的两个基类就是:BaseServer 和 BaseRequestHandler 在SocketServer 中也提供了对TCP以及UDP的高级封装,这次我们主要通过 ...

  9. 使用base标签后图片无法加载_Spring 源码学习(二)-默认标签解析

    `Spring` 解析默认标签~ 从上一篇笔记可以看出,在容器注册 bean 信息的时候,做了很多解析操作,而 xml 文件中包含了很多标签.属性,例如 bean . import 标签, meta ...

最新文章

  1. 麦肯锡顾问的核心意识:成果决定价值
  2. icmp回复报文_CCNA - Part7:网络层 - ICMP 应该是你最熟悉的协议了
  3. Rust linux 系统接口使用
  4. DoS Deflate Iptables
  5. python软件代码示例-Python学习示例源码
  6. VMWare虚拟机下为Ubuntu 12.04.1配置静态IP(NAT连接方式)
  7. 201409-5 拼图
  8. CV Code | 计算机视觉开源周报 20190601期
  9. 深度学习框架PyTorch:入门与实践 学习(二)
  10. web版pdf在线阅读器
  11. 传感器检测技术——概论
  12. CSP-X模拟题第三套-信心赛题解
  13. 同步数据显示服务器异常,同步异常云端服务器异常
  14. ROC-RK3328-CC板子编译烧录环境记录
  15. 51单片机学习笔记-1简介及点灯
  16. 医学考计算机的研究生,医学信息工程能考这些大学的研究生你知道吗
  17. 几个经典app制作网站
  18. 深度学习三十问!一位算法工程师经历30+场CV面试后总结的常见问题合集(含答案)...
  19. 论文笔记:再看ResNet——ResNet典型网络结构
  20. 基于php+mysql购物商城 校园二手商品 图书鲜花商城 毕业设计(9)商品评论

热门文章

  1. 程序员编程艺术第三十 三十一章 字符串转换成整数,通配符字符串匹配
  2. 新改版代shua网源码 已对接艾K支付 附25套模板
  3. 微信H5分享接口问题(避开99%坑)
  4. 为什么电场线不能相交或相切
  5. 并联串联混合的电压和电流_并联型的有源滤波器能够有多少种用法?
  6. R12.2.0 post install checks error : RW-50016: Error: - {0} was not created - 2
  7. 关于5G定位技术的探讨
  8. PageAdmin,织梦DedeCms和Wordpress—CMS建站系统怎么选
  9. html、css 实现轮播图的静态样式
  10. 二叉树、红黑树 详解