android安全启动验证链

这篇具有很好参考价值的文章主要介绍了android安全启动验证链。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言android 系统安全内容总结

1、签名验签

android 安全启动,android系统安全,安全,android,android,系统安全,安全,Powered by 金山文档

启动验证链核心技术就是签名验签,这里复习下,流程如上图:

android基础算法使用的是RSA

红色部分是编译时对需要验签的镜像与文件进行签名操作;需要用到私钥,这个私钥一般放在编译代码或者签名服务器。

黄色部分是开机启动时对启动镜像与文件的验签;需要用到公钥,这个公钥集成到镜像中,一般对开发与使用者都是可见的。

2、安全启动验证链

极简的开机启动流程如下

android 安全启动,android系统安全,安全,android,android,系统安全,安全,Powered by 金山文档

红色部分是secure boot部分,黄色部分是AVB部分(AVB包括verify-boot与dm-verity)。

https://blog.csdn.net/dongyi1988/article/details/103995737

以MTK为例:

Secure Boot验证阶段,Boot Rom程序段上电直接运行,这段程序不能修改或者跳过,它将获取芯片内部非易失只读性存储中的公钥or公钥HASH;用于验证引导加载程序(preloader)镜像末尾的root公钥,验证成功后启动preloader;然后preloader代码段的公钥头文件(oemkey.h)验证ATF、TEE、lk;在启动到lk后,利用TEE提供的加密库使用公钥头文件(oemkey.h)验证md1、scp、logo等。

AVB(android verify boot)校验阶段,启动到lk会用公钥头文件(avbkey.h)验证vbmeta分区,再用验证通过的vbmeta分区里面存的公钥对一般较小的分区(例如boot、dtbo)进行hash校验;验证完毕后进入kernel,kernel使用dm-verity对动态分区(一般较大的分区,例如system,vendor)进行hash tree的校验,所有分区校验成功后正常挂载,设备继续进入android启动流程。

2.1、secure boot

发现有价值文章:浅析安全启动(Secure Boot)

现在网上内容很多,不再赘述,解答标红的三个问题

QCOM启动流程图参考

android 安全启动,android系统安全,安全,android,android,系统安全,安全,Powered by 金山文档

https://www.cnblogs.com/schips/p/how_qualcomm_soc_boot.html

MTK启动流程图参考

android 安全启动,android系统安全,安全,android,android,系统安全,安全,Powered by 金山文档

https://blog.csdn.net/forever_2015/article/details/53000643

https://blog.csdn.net/forever_2015/article/details/53047993

MTK的secure boot配置参考:

https://blog.csdn.net/qq_43805880/article/details/108062898

QCOM的secure boot 配置参考:

https://blog.csdn.net/tq501501/article/details/94719382

1、只是刷入efuse.img镜像设备就熔丝了?

fastboot flash efuse只是刷写emmc/ufs上的分区数据,熔丝并不是fastboot做的事。如果还在调试,efuse熔丝公钥与preloader签名不匹配那不就完蛋了吗?

我们看不到Boot Rom代码,在secure boot安全验证上,以及芯片手册上能猜测其流程。其实从QCOM网站看到,文档名记不住了,大概意思如下流程图。

android 安全启动,android系统安全,安全,android,android,系统安全,安全,Powered by 金山文档
  • 熔丝真正操作在TEE,efuse公钥hash判断有效后,重启才真正生效,从此每次开机进行secure boot校验。

  • 硬件关闭公钥存储写入能力,也就是熔断操作,会耗电;如同读写标志位强制拉低,从此此段存储再也无法篡改。

  • 熔丝寄存器位也置为有效,再也无法关闭。

这就创建了一个值得信任的根。

2、为什么secure boot有多级验证?

android 安全启动,android系统安全,安全,android,android,系统安全,安全,Powered by 金山文档

MTK对其使用的镜像md1、scp、logo等等进行二次签名,那么开机需要进行二次验证增加启动耗时,安全性只是倍增,而不是指数级增加,有必要吗?

先了解多级认证的作用https://www.wenmi.com/article/q04bcq008upf.html

我理解这是供应商自己玩的隔离,即md1、scp、logo部分使用MTK自己签名授权的一级签名,二级签名交给ODM。这样MTK就控制了md1、scp等部分的芯片功能。(貌似还是跟QCOM学的。)

3、如何联网签名?

软件架构方案已经有了,但开发人员随意签名漏洞版本、可恶意窃取数据版本怎么办?如何降低开发人员的攻击呢?

ODM只需要管理好发布版本,管理好私钥即可,这就是非对称密钥的好处。将私钥存储到服务器,开发人员编译镜像需要授予签名权限,控制版本输出。MTK与QCOM的secboot签名都做好了接口,修改非常方便,有钱也可直接请人搭建👌。

MTK的secure boot最终签名接口调用hsm.py,路径应该在vendor/mediatek/proprietary/scripts/secure_chip_tools,如注释部分描述,替换lib.cert.sig_gen的实现即可。

hsm_rsa_sign(data, key, padding, sig)函数中,data是镜像hash、key私钥名、padding加密方式,sig返回签名后内容。

def hsm_rsa_sign(data, key, padding, sig):  
    """ 
    sign data with HSM 
    """  
    # note that key is pubk actually, use it as index for  
    # HSM parameters such as key selection  
    hsm_param_obj = HsmParam()  
    key_table = create_key_table()  
    hsm_param_obj.m_prvk = query_key_table(key_table, key)  
     if hsm_param_obj.m_prvk is None:  
         print 'not valid HSM parameter'  
         return -1  
   
     print "========================"  
     print "HSM parameter:"  
     print "    m_prvk  = " + hsm_param_obj.m_prvk  
     print "========================"  
   
     # place hsm request here -- start  
     # we re-direct it to signing with private key to mimic HSM  
     # data is not hashed here, you can hash data here to reduce  
     # network usage  
     lib.cert.sig_gen(data, hsm_param_obj.m_prvk, padding, sig)  
     # place hsm request here -- end  
     return 0   

联网签名步骤参考:

  • 连接服务器

  • 透传前面三个参数

  • 服务器解析

  • 验证账号与密钥对应权限

  • 使用指定的密钥签名,

  • 返回签名数据

联网签名使用的是镜像hash,联网签名时间不受被签名镜像的大小影响。

2.2、AVB

现在网上内容很多,不再赘述,解答标红的问题

android启动流程

android 安全启动,android系统安全,安全,android,android,系统安全,安全,Powered by 金山文档

https://source.android.google.cn/docs/security/features/verifiedboot/boot-flow?hl=zh-cn

android的AVB配置:

开启只需要打开AVB开关即可

BOARD_AVB_ENABLE:=True

BOARD_AVB_ALGORITHM := SHA256_RSA2048

BOARD_AVB_KEY_PATH := device/mediatek/common/oem_prvk.pem

如果是MTK需要开启kernel的config

MTK_AVB20_SUPPORT default y

换密钥参考:

https://blog.csdn.net/dongyi1988/article/details/103995737#t1

其中2、3步生成公钥头文件,MTK有现成转换工具der_extractor

android 安全启动,android系统安全,安全,android,android,系统安全,安全,Powered by 金山文档

AVB工具

https://android.googlesource.com/platform/external/avb/+/master/README.md

vbmeta结构

https://android.googlesource.com/platform/external/avb/+/master/libavb/avb_vbmeta_image.h

1、AVB如何联网签名?

google当然帮你想好了。avbtool有两个参数(--signing_helper与--signing_helper_with_files)均能达到联网签名的目的。

android 安全启动,android系统安全,安全,android,android,系统安全,安全,Powered by 金山文档

2、新增镜像如何纳入验证链?

如果放入secureboot流程,在env_cfg文件配置;

如果放入verify-boot流程,用vbmeta结构进行hash验证,可额外定制密钥,avbtool add_hash_footer 进行镜像签名,avbtool make_vbmeta_image制作vbmeta镜像时增加相关参数。

如果放入dm-verity流程,用vbmeta结构进行hashtree验证,可额外定制密钥,avbtool add_hashtree_footer进行镜像签名,avbtool make_vbmeta_image制作vbmeta镜像时增加相关参数。

3、安全启动验证链总结

安全启动验证链说明:

  1. 整个启动验证链信任根是一次性写入的只读性存储中的公钥or公钥HASH;

  1. 这个信任根验证芯片厂商(vendor)所用到的所有镜像,关键是会验证lk和TEE;

  1. lk与TEE证明可信之后,才能进一步验证kernel、dtbo、vbmeta,并确认结果;如果vbmeta有hash校验的分区,在此步直接校验;

  1. kernel与vbmeta证明可信后,才能进一步验证system、vendor,odm等hashtree校验的分区,并确认结果。

所有不会改动的分区都应该纳入到这个验证链中,芯片厂商相关镜像一般放到secure boot,小镜像一般用verify-boot,大镜像一般放到动态分区进行dm-verity。

android安全启动验证链说明有类似Blog,参考https://www.cnblogs.com/azwhikaru/p/17063938.html,我们要学的是这个链式验证的思想,其中vbmeta结构还能扩展很多密钥,android的APEX功能就利用vbmeta结构也挂在这个验证链上。文章来源地址https://www.toymoban.com/news/detail-745131.html

到了这里,关于android安全启动验证链的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 金山终端安全系统V9.0 update_software_info_v2.php处SQL注入漏洞复现 [附POC]

    免责声明:请勿利用文章内的相关

    2024年02月03日
    浏览(61)
  • 金山办公推出WPS AI,开放应用于智能文档

    🦉 AI新闻 🚀 金山办公推出WPS AI,开放应用于智能文档 摘要:金山办公宣布WPS AI正式面向社会开放,首先用于WPS智能文档,该产品支持内容生成、表达优化、文档理解及处理等功能。用户可通过WPS客户端、App、金山文档小程序以及官网进行体验。WPS智能文档具备内容生成、

    2024年02月09日
    浏览(43)
  • AIGC席卷智慧办公,金山办公如何架构文档智能识别与理解的通用引擎?

    如今,智慧办公是企业办公领域数字化转型的题中之义。作为国内最早开发的软件办公系统之一,金山办公如何应用深度学习实现复杂场景文档图像识别和技术理解?本文将从复杂场景文档的识别与转化、非文本元素检测与文字识别、文本识别中的技术难点等多个方面进行深

    2024年02月11日
    浏览(53)
  • OpenAI 的 AI 安全负责人:LLM 支持的自主代理 LLM Powered Autonomous Agents

    目录 LLM 支持的自主代理 Agent System Overview 代理系统概述 Planning 规划 Memory 记忆 Tool use 工具使用

    2024年02月09日
    浏览(44)
  • 使用Spring Gateway为对象存储系统MinIo和kkFileView文档预览增加登录验证

    官网介绍:kkFileView为文件文档在线预览解决方案,该项目使用流行的spring boot搭建,易上手和部署,基本支持主流办公文档的在线预览,如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等。 前一文章《开源对象存储系统MinIo部署配置与SpringBoot客户端整合访问》已经介绍

    2024年02月09日
    浏览(39)
  • 打造灵动办公新体验,金山数字办公助力建筑央企实现办公“效率+安全“双提升

    某建筑央企,是我国建筑领域的头部企业的子公司,业务范围涵盖设计施工、工厂生产、前端设计研发、后端运营以及运营维保等。近年来,为应对建筑工业化速度快、质量高、较宜居的要求,该建筑央企积极推进新型建筑工业化进程,致力于实现建筑产业现代化、数字化,

    2024年02月03日
    浏览(42)
  • Android安全启动学习(五):Android Verified Boot 2.0

    AVB2.0被用于启动引导,此用法添加一个“vbmeta.img”镜像。 public key被编译到bootloader中 用于 校验vbmeta数据 ,vbmeta.img包含应 由此public key验证的签名。 vbmeta.img包含用于验证的public key,但只有bootloader验证过vbmeta.img才会可信,就好比认证一样,包含可信public key和签名。 因此,

    2023年04月23日
    浏览(37)
  • Android安全启动学习(一):AVB校验是什么?

    最近老师让学习一下AVB,这玩意很难找到资料。只有网上搜索一些零碎的资料和博客。最多的资料就是官网的。这里来整理学习一下AVB的相关资料。 如果你知道安全启动ATF,那么到这里肯定是能接上的,如果没有那也不影响。 我们的ATF在安全启动流程的时候走到了BL33,BL3

    2024年02月07日
    浏览(29)
  • 验证码,让风控系统更安全

    风控系统指通过识别、评估、管理风险,可以帮助企业和个人降低风险,提高安全性。在金融领域,风控可以帮助金融机构识别和评估信用风险、市场风险、操作风险等,从而降低金融机构的损失。在保险领域,风控可以帮助保险公司识别和评估保险风险,从而提高保险公司

    2024年02月03日
    浏览(49)
  • Android系统启动(四) — Launcher 启动过程

    1 Launcher 概述 系统启动的最后一步是启动一个应用程序来显示系统中已经安装的应用程序,这个应用程序就叫做 Launcher 。 Launcher 在启动过程中会请求 PackageManagerService 返回系统中已经安装的应用程序信息,并将这些信息封装成一个快捷图标列表显示在系统屏幕上,这样用户就

    2024年02月01日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包