【技术分享】如何解锁高通骁龙660上的安卓引导加载程序

本文是我们在DEF CON
29大会上的演示视频的配套文章,视频的链接地址为https://www.youtube.com/watch?v=z4gIxdFfJDg。

要想在安卓手机上获得root权限,通常需要解锁引导加载程序,禁用手机的签名验证,这样的话,我们就可以部署一个修改过的安卓引导映像了。在Qualcomm芯片组上,这是一个标准化的过程,可以使用安卓引导加载程序中的命令来执行解锁。智能手机制造商经常修改引导加载程序以增加特定的限制,但是,这通常要求使用他们自家的工具。

这些自定义的限制通常包括:强迫创建一个用户账户来请求解锁,并在允许解锁之前强制等待一段时间,等等。

那么,手机制造商为什么要添加这些限制呢?原因如下所示:

◼ 防止没有经验的用户因为受骗而削弱手机的安全性;

◼ 防止第三方在售前给设备加载恶意软件(如供应链攻击);

◼ 制造商可以跟踪是谁解锁了他们的引导加载程序。

我购买的手机就有这些限制,要求我等待七天后才能获得设备的root权限。由于这个原因,我决定调查我是否可以绕过同一制造商生产的旧智能手机的等待期。我给自己设定了一个挑战,即在七天等待期结束前绕过引导加载程序的保护。

在这里插入图片描述

标准绕过方法

实际上,现在已经有一些标准方法可以绕过这些限制,然而,它们都具有相应的风险。

其中,最常用的方法就是进入高通公司紧急下载模式。这是一种低级别的紧急状态启动模式,可以使用诊断工具将具有签名的“加载器”有效载荷上传至芯片,这样,就可以直接修改设备的分区了。虽然这种方法是有效的,但这要求用户先引导进入该模式(并非所有用户都可以直接进入该模式),并且需要访问可能无法用于该设备的已签名加载程序ELF文件。

第二种常见的方法是在硬件层面上攻击设备。通过拆卸手机,并连接电路板上的EMMC芯片,就能在配置分区中设置“解锁”位,从而获得解锁权限。现在,已经有一些这方面的公开资料,其中说明了应该连接到哪些引脚,但是这通常需要一些硬件知识和动手能力。此外,硬件一旦受到物理损坏,手机就可能永远变砖了。

因此,我可不想使用这两种方法,相反,我的目标是攻击第二阶段的引导加载程序。这是因为,虽然通过第一阶段的引导加载程序可以进入紧急下载模式,但是在引导过程的下一个阶段,却可以获得额外的诊断和管理工具。

SDM660安卓手机

目标设备是2017年发布的一款中档手机,它使用Qualcomm Snapdragon 660作为核心芯片组。

对制造商实现的自定义解锁功能的分析表明,它会将一个较小的唯一值从手机发送到解锁工具,并在其服务器上生成一个签名。七天后,这个签名将被发送到手机上并进行验证,从而完成解锁。我是借助于Windows主机和USBPCAP USB分析软件对这个过程进行分析的。

在这里插入图片描述
我发现,对唯一值的请求、签名的发送以及对引导加载程序解锁的请求,都是通过安卓引导加载程序的Fastboot界面完成的。通过手机上的ADB重新启动到引导加载程序模式,或者在启动时按住音量下降键,就可以访问这个界面。然后,我们可以使用命令行工具“fastboot”,通过USB访问该界面。
在这里插入图片描述

Fastboot工具

这个工具能够简化对标准和定制的功能的访问,包括闪存分区、获得OEM特定的数据,或引导至不同的模式。对这个工具的分析表明,fastboot协议非常简单,可以用基本的C++代码和LibUSB进行实现。
在这里插入图片描述
在这里插入图片描述
分析表明,这个工具的所有的命令都是通过一个USB端点以ASCII文本形式发送的,而对命令的响应则是由另一个端点异步发送的。同时,虽然可以借助于某些程序库来简化对fastboot界面的访问,但是,我还是决定使用LibUSB,因为这样能够更好地控制通信过程。

ABL引导加载程序

实际上,fastboot界面是由安卓引导加载程序提供的,它属于第二阶段的引导加载程序,存储在手机的“abl”分区中。这个引导加载程序的作用,就是验证和加载手机的安卓映像和恢复映像,以实现其标准功能,或接收fastboot命令。需要说明的是,这个引导加载程序的高通版本是完全开源的,以便于手机制造商对其进行修改。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值