高通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" ] ; thenopenssl enc -d -aes-256-cbc -in "$1" -out "$dec_name" -K E05A84ED2068B3DEE402304AD12F4A40E27DCFC8DF33FA58E335BEBB5978B7B4 -iv E27DCFC8DF33FA58E335BEBB5978B7B4elif [ "$input" = "zip" ] || [ "$input" = "ota" ] ; thenopenssl enc -aes-256-cbc -in "$filename" -out "$filename".aes -K E05A84ED2068B3DEE402304AD12F4A40E27DCFC8DF33FA58E335BEBB5978B7B4 -iv E27DCFC8DF33FA58E335BEBB5978B7B4elseecho "文件名不存在或不支持此类文件类型!!!"fi

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

visionOS空间计算实战开发教程Day 6 拖拽和点击

在之前的学习中我们在空间中添加了3D模型,但在初始摆放后就无法再对其进行移动或做出修改。本节我们在​​Day 5​​显示和隐藏的基础上让我们模型可以实现拖拽效果,同时对纯色的立方体实现点击随机换色的功能。 首先是入口文件,无需做出改变…

Linux反弹SHell与检测思路

免责声明 文章仅做经验分享用途,利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担!!! 反弹shell payload在线生成 https://www.chinabaiker.com/Hack-Tools/ Online - Reverse Shell G…

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

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

itext - PDF模板套打

项目需求:获取列表数据之后直接将数据生成一个pdf。因此需要使用到 itext 对pdf进行直接操作。 环境配置 需要为pdf添加文字域,因此需要安装Adobe Acrobat 准备一个空的PDF文件,如果有现成的模板更好 依赖配置,我们使用itext的7版…

python数据结构与算法-14_树与二叉树

树和二叉树 前面我们讲了两种使用分治和递归解决排序问题的归并排序和快速排序,堆排序先就此打住,因为涉及到树的概念,所以我们先来讲讲树。 讲完了树之后后面我们开始介绍一种有用的数据结构堆(heap), 以及借助堆来实现的堆排序…

python命令行 引导用户填写ssh登录信息

字多不看,直接体验: 待补充 演示代码 # -*- coding:UTF-8 -*- """ author: dyy contact: douyaoyuan126.com time: 2023/11/23 9:20 file: 引导用户填写ssh接口信息.py desc: xxxxxx """# region 引入必要的依赖 impor…

【图像分类】基于深度学习的垃圾分类系统的设计与实现(ResNet网络,附代码和数据集)

写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。(专栏订阅用户订阅专栏后免费提供数据集和源码一份,超级VIP用户不在服务范围之内,不想订阅专栏的兄弟们可以私信…

el-table表格排序(需要后端判别),el-table导出功能(向后端发送请求)

&#xff08;1&#xff09;表格排序 &#xff08;2&#xff09;简单的table导出功能&#xff08;需要后台支撑&#xff09;必须要有iframe &#xff08;3&#xff09;页面所有代码&#xff1a; <template><div class"mainContainer"><el-form:model&…

使用Pytorch从零开始构建DCGAN

在本文中&#xff0c;我们将深入研究生成建模的世界&#xff0c;并使用流行的 PyTorch 框架探索 DCGAN&#xff08;生成对抗网络 (GAN) 的一种变体&#xff09;的实现。具体来说&#xff0c;我们将使用 CelebA 数据集&#xff08;名人面部图像的集合&#xff09;来生成逼真的合…

网络安全等级保护收费标准?

不同省份价格会略有不同&#xff0c;二级等保一般不低于5万元;三级等保不低于9万元&#xff0c;个别省份也可能7万也能办理&#xff0c;根据企业实际情况和省市选定的代理机构确定。 等级保护二级? 第二级等保是指信息系统受到破坏后&#xff0c;会对公民、法人和其他组织的合…

《YOLOv8创新改进》专栏指导书册 手把手创新教程

&#x1f680;&#x1f680;&#x1f680;YOLOv8改进专栏&#xff1a;http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8&#xff0c;从入门到创新&#xff0c;轻轻松松搞定科研&#xff1b; 本专栏为订阅者提供答疑服务&#xff0c;每一篇提供源代码和详细的每一个步骤改进地方。…

Navicat 技术指引 | 适用于 GaussDB 的模型功能

Navicat Premium&#xff08;16.2.8 Windows版或以上&#xff09; 已支持对 GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结构同步、协同合作、数据迁移等&#xff09;&#xff0c;这…

工业交换机具备哪些功能?

在工业网络中&#xff0c;工业交换机起着至关重要的作用&#xff0c;具备多样功能和广泛的应用。 1、工业交换机的作用是实现不同网络设备之间的互联。它能够连接各种不同类型的设备&#xff0c;如计算机、服务器、传感器和监控设备&#xff0c;实现设备间的相互通信和数据传输…

应用高斯高通滤波器提取图像轮廓

任务要求&#xff1a; 图为HALCON中的例图“tooth_rim”&#xff0c;请用高斯高通滤波器提取图像的轮廓。 任务分析&#xff1a; 图像的边缘对应频谱的高频部分&#xff0c;可以通过构造一个高频滤波器&#xff0c;过滤掉图像的低频部分&#xff0c;从而得到图像的边缘。HALC…

苹果怎么关闭悬浮球?让我来解答您的疑惑!

悬浮球是苹果设备上的一种可进行自定义的快捷操作功能&#xff0c;它可以位于手机屏幕的任意位置&#xff0c;以浮动的方式显示。然而&#xff0c;有时候悬浮球对某些朋友来说可能会变得多余&#xff0c;那么苹果怎么关闭悬浮球呢&#xff1f;接下来&#xff0c;小编将为大家揭…

docker compose搭建渗透测试vulstudy靶场示例

前言 渗透测试&#xff08;Penetration test&#xff09;即网络安全工程师/安全测试工程师/渗透测试工程师通过模拟黑客&#xff0c;在合法授权范围内&#xff0c;通过信息搜集、漏洞挖掘、权限提升等行为&#xff0c;对目标对象进行安全测试&#xff08;或攻击&#xff09;&am…

详解——菱形继承及菱形虚拟继承

目录 一&#xff0c;菱形继承 1.1单继承 1.2多继承 1.3菱形继承 1.4菱形继承的问题 1.5虚拟继承解决数据冗余和二义性的原理 二.继承的总结和反思 一&#xff0c;菱形继承 C三大特性——继承-CSDN博客 1.1单继承 单继承&#xff1a;一个子类只有一个直接父类时称这个继…

anaconda安装配置

创建分区 conda create -n cpu 安装Cpu版本 https://pytorch.org/ conda install pytorch torchvision torchaudio cpuonly -c pytorch 激活环境 conda activate cpu 验证 退出当前分区 conda deactivate 安装GPU版本 创建分区conda create -n gpu 激活环境 conda…

Java面向对象(高级)-- final关键字的使用

文章目录 一、 final的意义二、 final的使用&#xff08;1&#xff09; final修饰类&#xff08;2&#xff09; final修饰方法&#xff08;3&#xff09; final修饰变量1. 修饰成员变量1.1 举例11.2 举例2 2. 修饰局部变量2.1 举例12.2 举例2 &#xff08;4&#xff09;final搭…

java协程操作mysql数据库

我的项目&#xff1a; nanshaws/nettyWeb: 复习一下netty&#xff0c;并打算做一个web项目出来 (github.com) 最近在项目中分别添加了虚拟线程操作mysql数据库&#xff0c;和用协程操作mysql数据库 同理先跟我这个博客操作一下前面的&#xff1a;就单纯代码的时候进行修改&a…