高通OTA升级方案介绍

高通OTA升级方案介绍

  • 1. 高通LE OTA
    • 1.1 背景
    • 1.2 Recovery系统
  • 2. SDX12 OTA方案
  • 3 OTA包的加密

3UK Penetration Test对于OTA升级也有严格的安全要求,下面是几条用例要求:

Firmware: A sufficiently strong signing key MUST be in use. Signing keys MUST be at least 2048-bits in the case of RSA. Certificate/key expiry SHOULD be no later than 10 years from creation (if applicable). Signing keys SHOULD NOT use deprecated digests, for example SHA1
固件:必须使用一个足够强的签名密钥。在RSA的情况下,签名密钥必须至少是2048位。证书/密钥有效期不应晚于创建后的10年(如果适用)。签名密钥不应该使用已弃用的摘要,例如SHA1
Firmware: Firmware (inc bootloader) MUST be downloaded securely - all firmware servers SHALL mandate TLS 1.2 or greater. Clear-text protocol such as HTTP MUST NOT be permitted.
固件:固件(inc bootloader)必须安全下载-所有固件服务器必须要求TLS 1.2或更高版本。明文协议,如HTTP绝对不允许。
Firmware: Firmware (inc. bootloader) MUST be encrypted using a NIST recognised authenticated cipher, for example AES-256-GCM or asymmetric cryptography. Salts and IV's SHALL be unique, IV's SHOULD NOT be reused. Encoding schemes (without a key) SHOULD NOT be used. Firmware MUST be signed and encrypted.
固件:固件(inc. bootloader)必须使用NIST认可的认证密码进行加密,例如AES-256-GCM或非对称加密。盐和 IV是唯一的, IV不能重复使用。不应该使用编码方案(没有密钥)。固件必须签名和加密。

按照要求,必须对ota固件包进行加密,以防止由升级包文件在下载过程中被截获导致系统文件被他人获取,甚至被他人篡改或替换导致不安全,进而造成无法估量的损失。

比如当前高通X12平台使用的是未加密的传输方式,在服务器端放置约定好名称的ota固件包,设备端轮询检测,当检测到有可用的ota固件包,则直接下载升级,存在较大的安全隐患

1. 高通LE OTA

1.1 背景

高通MDM、MSM平台提供了基本的升级功能,大概都以开源的Android升级设计实现作为基础,对其代码进行移植,适配到自身平台上。从差分包制作工具,升级过程,都有一套完整的方案,并且所涉及到的工具和代码均完全开放,因此该方案的可塑性也更大。其中包括统一的用于安装升级包的Recovery系统,编译OTA底包专属框架,和处理底包制作升级包的脚本和工具等。

由于该方案中各个文件的PATCH 基于文件系统而来,因此很难在bootloader 阶段实现(无法挂载文件系统),所以在分区设计上,除了预留存放差分包,备份文件的空间外,还需要添加专门的分区(kernel, bootloader,filesystem)以供FOTA 使用,而该分区必须独立于正常运行时的分区。这也就导致了该方案在硬件(FLASH,DDR)要求比较高。

在LE 的FOTA 方案中,升级程序作为一个应用程序运行,升级包则是一个标准的zip 文件(命名为ota 文件),升级过程则是解析升级包中指定的脚本文件,并根据解析到的内容引用对应的功能模块,从而完成整个升级过程。

1.2 Recovery系统

这里就不得不提recovery系统。Recovery系统是升级功能的载体,是一个包含文件系统相关操作的最小系统。OTA的安装过程,或是Nand、EMMC原始分区的读写,或是文件系统之上的文件操作。此外,MSM平台上,恢复出厂设置的功能,也是以Recovery系统为载体。

Recovery系统对升级包的安装,可以看作是一系列自动化的实现。在OTA升级中,相对应Recovery系统,习惯把正常启动的系统叫主系统(Main System)。下面通过一张简图,把各个概念融合一起,描述整体Recovery系统和主系统的关系。
在这里插入图片描述
以MDM平台项目为例。Kernel部分,两个系统完全一致,只是主系统有主系统的Boot分区,Recovery有Recovery分区,其中烧入的镜像完全一致。到system部分,主系统和Recovery系统有各自的rootfs,主要区别在两个系统的挂载和加载的进程服务不一样。Recovery系统区别于主系统的一点,是在启动后,init进程会拉起bin/recovery,这就是recovery service,由这个recovery service来完成安装包的解析安装。

在主系统和Recovery系统之间,还有一个cache分区,这个分区是专门为Recovery系统规划的。这个分区的作用是主系统与Recovery之间的文件共享。升级包从主系统中置于cache分区,recovery通过此分区读取升级包,Recovery的日志也会通过文件方式存储在这个分区。

以上是Recovery系统的基本流程,Recovery服务中安装升级包的具体过程,在此不做赘述,可参考代码:apps_proc/bootable/recovery/recovery.c:main(int argc, char** argv)。

2. SDX12 OTA方案

X12 OTA升级使用的是高通平台通用的FOTA方案,基本可以总结以下几个步骤:

  1. 本地制作差分包,并上传到远端OTA服务器
  2. x12启动OTA client线程去在固定间隔时间访问OTA服务器
  3. 当OTA服务器上有可用OTA 包,则校验包是否完整、版本号是否符合预期
  4. 若3中校验OK,则下载OTA包到本地
  5. 下载完成后重启进入recovery模式
  6. recovery模式启动后会先检测是否存在OTA包,存在则解压包并使用包中的工具打patch
  7. 升级完成后设置成功标记并重启进入boot模式
  8. 升级完成

流程图如下:
在这里插入图片描述
X12原本的OTA升级流程中仅有对OTA包的校验,针对的是其完整性和合法性,并没有安全性的保障,如黑客可以通过特殊方式篡改OTA包,并上传到OTA服务器上,就会存在极大的安全隐患。针对这一问题,我们在X12 OTA流程中增加了相关加解密,最大可能保证包的安全性。

3 OTA包的加密

按照行业规范,设备固件升级(OTA 远程或本地升级)前应先对固件包进行完整性哈希得到固件包摘要,再使用公私钥方式对摘要进行合法性签名和验签,确认升级包完整性与合法性再进行更新,以防止固件包被篡改或替换。固件升级包完整性哈希应采用安全的哈希算法,完整性凭据应在设备与服务端的加密通信通道内传输。
在这里插入图片描述
我们按照这个思路对x12的OTA流程做了优化,增加OTA包加解密流程:

  1. 本地制作差分包,对差分包使用openssl工具进行-aes-256-cbc加密,并上传到远端OTA服务器
  2. x12启动OTA client线程去在固定间隔时间访问OTA服务器
  3. 当OTA服务器上有可用OTA 包,则校验包是否完整、版本号是否符合预期
  4. 若 3 中校验OK,则下载OTA包到本地
  5. 下载完成后,再使用openssl工具解密,解密后再重启进入recovery模式
  6. recovery模式启动后会先检测是否存在OTA包,存在则解压包并使用包中的工具打patch
  7. 升级完成后设置成功标记并重启进入boot模式
  8. 升级完成

下面是OTA包加解密的脚本:

#!/bin/sh
filename=$1
input=${filename:0-3}
#echo $input
dec_name=${filename%.*}
#echo $dec_name
if [ "$input" = "aes" ] ; then
    openssl enc -d -aes-256-cbc -in "$1" -out "$dec_name" -K E05A84ED2068B3DEE402304AD12F4A40E27DCFC8DF33FA58E335BEBB5978B7B4 -iv E27DCFC8DF33FA58E335BEBB5978B7B4

elif [ "$input" = "zip" ] || [ "$input" = "ota" ] ; then
    openssl enc -aes-256-cbc -in "$filename" -out "$filename".aes -K E05A84ED2068B3DEE402304AD12F4A40E27DCFC8DF33FA58E335BEBB5978B7B4 -iv E27DCFC8DF33FA58E335BEBB5978B7B4

else
    echo "文件名不存在或不支持此类文件类型!!!"

fi

通过上面的方式,我们就完成了OTA包的加密,也可以根据需要去客制化加密方式、加密密钥、初始向量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/180111.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kubernetes 部署 spinnaker

spinnaker简介 Spinnaker 是一个开源、多云持续交付平台,它将强大而灵活的管道管理系统与主要云提供商的集成相结合。Spinnaker 提供应用程序管理和部署,帮助您快速、自信地发布软件变更。 Spinnaker 提供了两组核心的功能: 应用管理与应用程…

信息系统的安全保护等级的五个级别

信息系统的安全保护等级分为五级:第一级为自主保护级、第二级为指导保护级、第三级为监督保护级、第四级为强制保护级、第五级为专控保护级。 法律依据:《信息安全等级保护管理办法》第四条 信息系统的安全保护等级分为以下五级:   &#…

外贸自建站服务器怎么选?网站搭建的工具?

外贸自建站服务器用哪个好?如何选海洋建站的服务器? 外贸自建站是企业拓展海外市场的重要手段之一。而在这个过程中,选择一个适合的服务器对于网站的稳定运行和优化至关重要。海洋建站将为您介绍如何选择适合的外贸自建站服务器。 外贸自建…

SAP LU04记账更改通知单创建转储单报错:L3094 记帐修改没有份存在

解决办法: 使用事务码LU02,修改过账更改状态,将过账更改状态改为U,强制关闭 1. LU04 查找记账更改通知单号 2. 事务码LU02修改状态 这个时候再用LU04去查看的时候,就不会再显示了

一个ETL流程搞定数据脱敏

数据脱敏是什么? 数据脱敏是指在数据处理过程中,通过一系列的技术手段去除或者替换敏感信息,以保护个人隐私和敏感信息的安全的过程。数据脱敏通常在数据共享、数据分析和软件测试等场景下使用,它旨在降低数据泄露和滥用的风险。…

Sealos 云操作系统私有化部署教程

Sealos 私有云已经正式发布了,它为企业用云提供了一种革命性的新方案。Sealos 的核心优势在于,它允许企业在自己的机房中一键构建一个功能与 Sealos 公有云完全相同的私有云。这意味着企业可以在自己的控制和安全范围内,享受到公有云所提供的…

4.22每日一题(累次积分的计算:交换次序)

注:因为 是积不出的函数,所以先不用算,最后发现,出现dx与dy可以相互抵消,即可算出答案

【TypeScrpt算法】算法的复杂度分析

算法的复杂度分析 什么是算法复杂度? 不同的算法,其实效率是不一样的 让我举一个案例来比较两种不同的算法在查找数组中给定元素的时间复杂度 [1,2,3,4,5,6,7,...9999,n] 顺序查找 这种方法从头到尾遍历整个数组,依次比较每个元素和给定元…

Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署

JenkinsMavenGitlabTomcat 自动化构建打包、部署 1、环境需求 本帖针对的是Linux环境,Windows或其他系统也可借鉴。具体只讲述Jenkins配置以及整个流程的实现。 1.JDK(或JRE)及Java环境变量配置,我用的是JDK1.8.0_144&#xff0…

Talk | UCSB博士生宋珍巧:基于人工智能的功能性蛋白质设计

本期为TechBeat人工智能社区第549期线上Talk。 北京时间11月22日(周三)20:00,UC Santa Barbara博士生—宋珍巧的Talk已准时在TechBeat人工智能社区开播! 她与大家分享的主题是: “基于人工智能的功能性蛋白质设计”,介绍了如何利用机器学习算…

好用的局域网监控软件推荐

局域网监控软件是一种用于监控局域网内计算机使用情况的软件,可以帮助企业管理者更好地了解员工的工作状态和行为,规范上网行为并保护企业网络资源。 一、域之盾软件 这是一款专业的上网监控软件,它支持多种操作系统和平台,可以全…

CodeWhisperer 体验总结

CodeWhisperer 体验总结 | CodeWhisperer 是一款亚马逊新推出的通用代码生成器 可以实时进行代码数据的提供 还可以定义安全问题 CodeWhisperer 对个人用户是免费使用 企业用户需要订阅使用 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例…

【精选】改进的YOLOv5:红外遥感图像微型目标的高效识别系统

1.研究背景与意义 随着科技的不断发展,红外遥感技术在军事、安防、环境监测等领域中得到了广泛应用。红外遥感图像具有独特的优势,可以在夜间或恶劣天气条件下获取目标信息,因此在小目标检测方面具有重要的应用价值。然而,由于红…

当当网获得dangdang商品详情商品列表API 测试请求入口

item_get-获得dangdang商品详情 获取商品详情 item_search-按关键字搜索dangdang商品 获取商品列表 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请…

python数据结构与算法-13_高级排序算法-快速排序

快速排序 快速排序名字可不是盖的,很多程序语言标准库实现的内置排序都有它的身影,我们就直奔主题吧。 和归并排序一样,快排也是一种分而治之(divide and conquer)的策略。归并排序把数组递归成只有单个元素的数组,之后再不断两两…

PC端页面进去先出现加载效果

自定义指令v-loading&#xff0c;只需要绑定Boolean即可 v-loading“loading” <el-table :data"list" border style"width: 100%" v-loading"loading"><el-table-column align"center" label"序号" width"5…

java--static修饰成员变量

1.static 叫静态&#xff0c;可以修饰成员变量、成员方法。 2.成员变量按照有无static修饰&#xff0c;分为两种&#xff1a; ①类变量&#xff1a;有static修饰&#xff0c;属于类&#xff0c;在计算机里只有一份&#xff0c;会被类的全部对象共享(不管那个类调用的&#x…

脸爱云一脸通智慧管理平台未授权访问

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 一、漏洞概述 脸爱云一脸通智慧管理平台存在严重漏洞&#xff0c;允许…

数据结构与算法编程题13

设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B、C&#xff0c;其中B表的结点为A表中值小于零的结点&#xff0c;而C表的结点为A表中值大于零的结点&#xff08;链表A中的元素为非零整数&#xff0c;要求B、C表利用A表的结点&#xff09; for example: A -1 2 …

企业软件定制开发有哪些优势?|app小程序网站搭建

企业软件定制开发有哪些优势&#xff1f;|app小程序网站搭建 企业软件定制开发是一种根据企业特定需求开发定制化软件的服务。相比于购买现成的软件产品&#xff0c;企业软件定制开发具有许多优势。 首先&#xff0c;企业软件定制开发可以满足企业独特需求。每个企业都有自己独…