首页»版块 更多荣耀手机 荣耀X40系列 浅谈底层固件安全性——强解BL,隐藏ID机等背后的真相( ...

浅谈底层固件安全性——强解BL,隐藏ID机等背后的真相(一)

[复制帖子标题和链接]

76502

荣耀粉丝212674382  LV7  发表于 2022-10-16 13:20:21 安徽 来自:浏览器
本文包含高通9008模式以及联发科SP Flash Tool刷机的原理,这段文字放在开头方便想要了解的朋友更加容易找到此文。

在开始之前,先了解一下高通平台的启动流程,以下为启动流程图

从图中看出,按下电源键后,运行的第一段代码便是PBL(高通称其为Primary Boot Loader,通用的叫法为BootROM,BootROM是在SoC生产时就已经写死在芯片内部的,不可以更改),PBL负责验证并加载下一阶段的BootLoader(XBL或SBL,在16年之前被称为SBL),并响应异常情况,还会读取QFUSE来执行相应的策略,这部分在文章后面再说。XBL会验证并加载TEE以及ABL(TEE的具体加载流程在文章后面),ABL是指Android BootLoader,也就是大家熟悉的FastBoot线刷时所处的位置,ABL会执行AVB(Android Verified Boot安卓验证启动)策略,比如说检查BL锁状态来决定是否执行下一阶段的启动验证,检查软件版本,防止未经授权的降级等等。如果检测到用户按下某些按键,或者触发某些事件(如OTA升级,恢复出厂设置等等)则会启动到Recovery模式,正常启动时会验证并加载Boot分区(Android系统的Linux内核部分),最后由Linux内核验证并加载Android系统剩余部分。至于图中的TrustZone,则是XBL负责加载的,详情文章后面再说。

我们再来看一下ATF(ARM Trusted Firmware 可信固件)架构

大多数ARM SoC的安全启动架构基于ATF,其中BL1对应BootROM,BL2对应XBL,BL33对应着ABL和之后的启动流程部分,BL32和BL31提供了TEE(Trusted Execution Environment可信执行环境,用于处理如生物识别数据等对安全性高度敏感的场景),其中BL31负责Normal World与Trusted World之间的数据交互,BL32负责运行TEE操作系统(如OPTEE,QTEE,Trusty等),TA(Trusted Application 可信应用)运行在TEE操作系统上,就像我们在Andoid系统上安装的应用,只不过TA不能由用户自由安装,只能由OEM决定,TA是具体执行各种需要安全性任务的应用程序,如生物数据的识别与存储,DRM的实现(如最著名的Widevine),各种凭据的验证与存储,各种文件的系统加密等等。

Normal World和Trusted World之间通过ARM TrustZone技术隔离,原理是利用硬件控制器强制隔离两者的寄存器,RAM等资源,各种运算器采用分时复用的方式同时处理来自两者的指令,Normal World不可以直接访问Trusted World的资源,反过来Trusted World可以访问Normal World的资源,我们常见的Android系统运行在Normal World上,而TEE操作系统等运行在在Trusted World上(具体看上图,有详细的划分)。

除了以上的隔离措施,ARM还准备了更细粒度的权限控制框架,叫做EL(Exception Level),分为EL3,EL2,EL1,EL0,权限依次由大减小,权限大的可以访问权限小的资源,反之不行。注意,权限的控制还要符合以上Trusted World与Normal World的隔离规则,比如说Normal World EL2虽然数字大于Secure World EL0,但是也无法直接访问Secure World EL0的资源,因为违反了Secure World 与Normal World之间的隔离规则。以上的ATF框架图涂有不同颜色的部分代表其中所处的EL,说明在图中右下方。

聪明的读者可能会发现,BL2处于Secure EL1,BL31处于EL3,而BL31是由BL2负责加载的,按照通常的情况,先加载的权限是大于后加载的,那这是怎么做到的呢?答案是BL2通过向BL1的SMC handler发送SMC指令初始化BL31运行所需的环境,间接地实现写入比自身权限更高才能访问的资源,当然这个过程是受监控和限制的,不能随便乱来,这也是SMC存在的意义。

有了以上内容的铺垫,我们来看一下实际的攻击案例。

高通EDL模式(9008模式)的漏洞

回顾以上高通平台的启动流程,PBL会响应各种异常情况,出现异常情况后,PBL会进入EDL模式,高通准备了以下方式进入EDL:按键组合(只有部分OEM会选择实现这种方式,如一加,联想,moto等);主板触点短接(几乎所有机型都会有);USB接口触点短接,俗称深度刷机线(新机器基本上都禁用了这种方式);软件方式,如adb指令,部分OEM只有在解锁BL后才会正确响应;启动流程中ABL及之前的流程校验失败,所有机型都有。
进入到EDL模式后,需要通过USB使用Sahara协议发送Programmer,Programmer本质上是XBL的变种,只不过XBL是PBL由硬盘里加载的,Programmer是PBL由USB加载的,来源不同而已。PBL的EDL模式本身只实现了Sahara协议,并验证和加载Programmer,其它功能需要由Programmer实现。Programmer需要OEM的有效签名,不能自己编写,不然PBL会拒绝加载。

Programmer通常不会被OEM公开,但是有一些例外,如小米的官方线刷包里都会有Programmer,一加的ColorOS尝鲜版刷机包里也有Programmer,联想和moto官方的刷机程序也会自动下载对应机型的Programmer等等。但是不公开不等于没有,有很多从不公开的OEM,网上也会有内鬼泄露的Programmer,不然某宝上满大街的刷机服务是怎么来的[受虐滑稽]

Programmer可以由OEM定制,大部分OEM会选用Firehose Programmer,高通官方默认的Programmer,只做少许的修改以实现OEM自定义的功能,如小米的售后账号授权机制。

搞到了Programmer后,尝试执行降级攻击,一般情况下,锁定BL时是不允许刷写任何分区的,但是这个机制是由ABL实现的,在启动流程中处于较为靠后的位置,Programmer处于启动流程的第二步,处于非常靠前的位置,权限比ABL高得多(Programmer处于Secure EL1,ABL处于Non-Secure EL2),自然有能力访问,写入任何分区。在部分机型上有已知的漏洞,这里以一加3T为例,将ABL降级到易受攻击的版本,易受攻击版本有以下漏洞,CVE-2017-5626和CVE-2017-5624,在Fastboot模式下输入以下指令,并返回了以下信息
$ fastboot oem disable_dm_verity
...
OKAY [ 0.045s]
finished. total time: 0.045s
$ fastboot oem 4F500301
...
OKAY [ 0.020s]
finished. total time: 0.020s

这时验证启动被关闭,BL锁被解除,但是没有触发恢复出厂设置,此时可以刷入第三方REC提取出data分区的所有数据,无需验证锁屏密码,造成严重的隐私泄露。(手动开启安全启动即可避免数据被提取,不过默认情况下不会开启,大部分普通用户受到此漏洞的威胁)

这里再说一个较为新的例子,原帖在以下链接
https://www.xda-developers.com/oneplus-nord-2-vulnerability-root-shell/
具体来说,在一加Nord 2上有Root Shell 漏洞,启动到REC模式下,停留在语言选择界面,然后连接电脑和手机,在adb下输入adb root,然后就获取了root权限,而且不会触发数据清除,可以利用这个漏洞绕过锁屏密码提取隐私数据,还可以在不清除数据的情况下安装具有root权限的木马,危害极大,目前这个漏洞已经修复,不过还没人测试过降级攻击是否凑效,若降级REC后仍然可以正常启动,那么这个漏洞等于没修复。

再来一个红米Note 5A的例子,读取devinfo分区,稍作修改再写回去,可以发现BL锁被解除还没有触发数据清除,数据提取方式如一加3T。

一加3T和Note 5A的例子来源于AlephSecurity,针对高通平台EDL的研究和BootROM漏洞的开发利用也是AlephSecurity,感兴趣的读者可以访问他们的官网 https://alephsecurity.com/
现在暂时访问不了,可以通过 https://archive.org/
访问历史镜像(要t)

以上的攻击是针对存储的,最强大的攻击方式是针对RAM和寄存器的攻击,通过一定的漏洞利用方法,可以做到以EL3的最高权限执行任意代码,限于篇幅和个人水平,这里不做详细的原理解析,基本思路是想方设法绕过内存地址的访问和写入限制,将恶意代码通过缓冲区溢出的方式写入执行位,导致任意代码的执行,这种攻击无法通过软件更新修复(有一些例外,接下来会举例),可以干几乎任何事情,包括但不限于暴力破解密码,伪造指纹支付请求,解密受DRM保护的媒体等,具体实现上由于TEE部分的闭源,实际上很难实现。以下我将介绍这种攻击方式的实例。

mtk kamakiri漏洞:最早由XDA用户xyz`发现,联合XDA用户k4y0z发布了第一个实际用例,解开Fire TV Stick 4K的BL锁,原帖地址:
https://forum.xda-developers.com/t/unlock-root-twrp-unbrick-fire-tv-stick-4k-mantis.3978459/

后来基于这个漏洞,k4y0z开发出了现在著名的SLA/DAA绕过工具,也是众多联发科机型秒解BL能够实现的基础,原帖地址:
https://forum.xda-developers.com/t/mod-dev-mediatek-mtk-auth-bypass-sla-daa-utility.4232377/
名词解释:
SLA(Serial Link Authentication 串行链路认证)
开启了SLA的机型,需要在SP Flash Tool加载特定的.auth文件才可以让BootROM接收并加载来自USB发送的DA,不然会拒绝加载。
DAA(Download Agent Authentication 下载代理认证)
DA(Download Agent 下载代理)类似于上文提到的Programmer,是Preloader的变种(Preloader类似于上文提到的XBL,同样处于ATF的BL2级别),OEM可以自行定制DA以实现不同的DAA方式,同样以小米为例,较新的联发科机器会要求登录售后小米账号才可以进行深度刷机。BootROM加载的DA仍然需要有效的OEM签名(不能自己编写DA),不然即使通过了SLA也会拒绝加载。
SLA和DAA可以同时存在,也可以只存在其中一种,取决于OEM,其中SLA政策是烧写入SoC内部的eFuse(电子熔丝),是一个密钥,需要拥有这个密钥的人才可以通过SLA,一旦烧写就无法更改 或擦除。

Amlogic BootROM漏洞:由fred发现,个人主页:
https://fredericb.info/
此人从Khadas VIM3L 开发板上转储了S905D3 SoC的BootROM镜像,正常来说,BootROM镜像是不可以由外界读取的,Normal World也无法读取,只能由Secure World读取,但这个开发板是没有烧写过eFuse的,意味着并没有开启安全启动,于是他编译了自定义的BL2,在Secure World里获取到了BootROM,然后通过UART端口传输出来。在分析后他发现了BootROM级别的漏洞,然后找来了搭载S905D3G的Chromecast wi
评论2
扬程amoy  LV10  发表于 2022-10-16 16:50 福建 来自:浏览器
有点长 没看明白
荣耀粉丝214482037  LV3  发表于 2023-1-9 20:17 河北 来自:荣耀Play5T Pro
复制粘贴好玩吗?被我找到破绽了吧!! 浅谈底层固件安全性——强解BL,隐藏ID机等背后的真相(一)
您需要登录后才可以评论 登录 | 立即注册
简体中文 - China
快速回复 返回顶部 返回列表