首页
社区
课程
招聘
[翻译]利用高通EDL的程序员(1):获取访问和PBL内部信息
发表于: 2018-3-2 02:43 16526

[翻译]利用高通EDL的程序员(1):获取访问和PBL内部信息

2018-3-2 02:43
16526

2、我们创建了firehorse,这是一个基于Firehose的程序员公开的研究框架,能够调试/跟踪程序员(以及其他引导加载程序链,包括某些设备上的Boot ROM本身)。(第3部分和第4部分)

3、我们使用Firehose程序员和我们的研究框架获得并逆向设计了各种Qualcomm芯片组的PBL(MSM8994/MSM8917/MSM8937/MSM8953/MSM8974)。(第3部分)

4、我们获得了Nexus 6P(MSM8994)的RPM和调制解调器PBL。(第3部分)

5、我们设法使用基于存储的攻击解锁并根据各种Android Bootloader(例如小米Note 5A)进行解锁。(第2部分)

6、我们成功地对运行Snapdragon 425(MSM8937)的诺基亚6设备发起了端到端的攻击。我们认为这种攻击也适用于诺基亚5,并可能甚至可以扩展到其他设备,虽然未经验证。(第5部分)

在PBL从ROM-在装置之后是启动的。它很快将数字签名加载SBL到内部存储器(imem),并验证其真实性。我们所有提取的PBL都是32位(运行aarch32),其中SBLs是aarch32或者aarch64,其中PBL负责转换。某些设备具有XBL(可扩展引导加载程序)而不是SBL。所述SBL初始化DDR和负载数字签名的图像,例如ABOOT(它实现fastboot接口)的TrustZone,并再次验证其真实性。签名证书具有锚定在硬件中的根证书。

ABOOT然后验证的真实性boot或recovery图像,加载Linux内核和initramfs从boot或recovery图像。initramfs是一个cpio(gzipped)归档rootfs文件,/在Linux内核初始化期间被加载到(安装在RAM文件系统中)。它包含init二进制文件,第一个用户空间进程。在设备树Blob()中ABOOT准备initramfsLinux内核的内核命令行和参数DTB,然后将执行转移到Android(Linux)内核。

基于MSM的设备包含一种特殊的操作模式 - 紧急下载模式(EDL)。在这种模式下,设备Qualcomm HS-USB 9008通过USB标识自己。EDL由PBL实施。由于PBL是ROM常驻,所以EDL不能被软件破坏。EDL模式本身实现了Qualcomm撒哈拉协议,该协议通过USB接受OEM数字签名的编程器(ELF最新设备中的二进制文件,MBN旧版设备中的二进制文件),充当SBL。现代这样的程序员实施该Firehose协议,接下来分析。

有几种方法将该设备强制转换为EDL。

许多设备在其电路板上公开所谓的测试点,如果在启动过程中缩短,会导致PBL将其执行转向EDL模式。(使用我们的研究框架,我们设法找出了负责评估这些测试点的PBL的确切位置,但接下来的内容更多。)

例如,以下是我们的小米Note 5A主板上的测试点:

重新启动到EDL也可能发生在平台操作系统本身(如果已实施)以及允许adb访问(通过运行)adb reboot edl。我们向一些供应商报告了这种风险,包括OnePlus(CVE-2017-5947)和Google(Nexus 6 / 6P设备) -CVE-2017-13174。Google已在2017年12月的安全子弹入侵中修补CVE-2017-13174。(Nexus 6P需要root访问上下文,请参阅我们的漏洞报告以获取更多详细信息)。使用相同的机制,一些设备(主要是小米的设备)也允许/允许通过发行或通过专有命令重启EDL(即没有sysfsfastbootfastboot oem edlfastboot edloem)。有趣的是,在锁定的Android Bootloader中阻止这些命令有一个积极的趋势。

毋庸置疑,能够使用软件重新启动进入EDL的方式或仅使用此类USB电缆(描述缩短引脚的充电器)可启用危险的攻击媒介,如恶意USB端口(例如充电器)。

为了验证我们的基于经验的知识,我们使用了我们的调试器(第4部分)和IDA,以确定我们提取的PBL中的确切例程(第3部分),它决定了引导模式(正常或EDL)。在此之前,我们对MSM8937/MSM8917PBL做了一些初步分析,以便从高层角度了解其布局。我们相信其他PBLs没有那么不同。

0x100094PBL的重置处理程序(地址)大致如下所示(为便于阅读,省略了一些伪代码)

init功能负责以下内容:

它设置VBAR为0x100000

它将堆栈重置为0x205400。

它在我们命名的函数中重置MMU和一些其他系统寄存器reset_MMU_and_other_stuff,位于0x110004。

它认为pbl_struct,这节省了PBL上下文数据,并且在PBL的整个循环周期内都存在。它的一部分接着传递给SBL。

如上所述,现代EDL程序员实施Qualcomm Firehose协议。分析几个程序员的二进制文件很快就会发现命令通过XML(通过USB)传递。例如,以下XML使程序员刷新一个新的辅助引导加载程序(SBL)映像(也通过USB传输)。

可以看到,指示程序员刷新新图像的相关标签是program。

挖掘程序员的代码(uggliteaarch32本例中的小米Note 5A程序员)表明它实际上是某种扩展的SBL。其主要程序如下:

pbl2sbl_data是在pbl_jmp_to_sbl函数的最后从PBL传递给SBL的数据。sbl维护SBL上下文数据,其第一个字段指向副本pbl2sbl_data。

ImageLoad是负责加载下一个引导程序的功能,包括ABOOT:

因此,他们仅在firehose_main回调方面有所不同!

深入研究兔子洞,分析firehose_main及其后代揭示了所有Firehose接受的XML标签。

1、基于存储的攻击(利用program/update&read)。这些在第2部分中介绍。

2、基于内存的攻击(利用peek和poke)。这些被覆盖在第3部分,第4部分与第5部分。

PS:[其中一些加括号()的内容为使文章流畅而补充的连接语及注释]
1:12~实在胃疼的厉害,所以只编辑完一点,算了,明天下午再继续了!
2:16~还好有“胃安宁”!不能断,已经一半了,坚持就是胜利!
2:43~写完了,药劲儿才发挥出来。睡觉!

今天先在此祝大家元宵节快乐!
足之处,还请多多指出!

国外最新安全推文整理(第19期)最后一篇
Exploiting Qualcomm EDL Programmers
利用高通EDL的程序员
原文链接:https://alephsecurity.com/2018/01/22/qualcomm-edl-1/
原作By:罗伊·海伊 (@roeehay) 和哈达 

目前网上存在许多指南,可能分为7部分,(这里我也不太清楚,欢迎大佬指点)在互联网中关于'unbricking'基于高通公司的移动设备。所有这些指南都使用紧急下载模式(EDL),这是Qualcomm Boot ROM(主引导加载程序)的备用引导模式。要使用这种模式,其操作人员只能是掌握了OEM签名的相关程序员,这些程序员似乎可以公开获得各种这样的设备。虽然他们的公开可用性的原因是未知的,但我们最好的猜测可是这些程序员可能是经常从OEM设备维修实验室泄密一些东西。除此之外,其他如一些OEM(如小米)也在官方论坛上发布。

在下面列出了我们设法获得的一些公开可利用程序员(社工)的部分列表:(表格一个一个输入实在费劲,只好以图片形式表示)




在这篇由5部分组成的博客文章中,我们将讨论泄密的程序员所引发的安全影响。第一部分介绍了PBL,EDL,Qualcomm Sahara和程序员的一些内部组成部分,重点介绍了Firehose。在第2部分中,我们将讨论利用EDL程序员功能的基于存储的攻击 - 我们将看到一些具体的例子,例如解锁小米Note 5A(代号ugglite)引导加载程序,以便安装和加载恶意启动映像,的信任。第3部分,第4部分和第5部分致力于我们研究的主要焦点 - 基于内存的攻击。在第3部分中,我们利用Firehose程序员的隐藏功能来执行具有最高特权的代码(EL3),例如,允许我们转储各种SoC的Boot ROM(PBL)。然后,我们介绍我们的exploit框架,firehorse,它为流水线程序员实现了一个运行时调试器(第4部分)。我们以诺基亚6的完整安全启动旁路攻击结束,该攻击MSM8937使用我们的漏洞利用框架。我们在PBL(或更准确地说,在PBL克隆中)实现代码执行,使我们能够击败信任链,在引导加载链的每个部分获得代码执行,包括TrustZone和高级操作系统(Android)本身。

我们的(具体)研究成果如下:
1、我们描述了Qualcomm EDL(Firehose)和撒哈拉协议。(第1部分)

高通安全启动
高通MSM设备启动过程的摘要概述如下:
[Primary Bootloader (PBL)]
|
`---NORMAL BOOT---.
                  [Secondary Bootloader (SBL)]
                  |-. 
                  | [Android Bootloader (ABOOT)]
                  | `-.    
                  |   [boot.img]
                  |   |-- Linux Kernel
                  |   `-- initramfs
                  |       `-.
                  |         [system.img]
                  |
                  `-[TrustZone]


                
[Primary Bootloader (PBL)]
|
`---NORMAL BOOT---.
                  [Secondary Bootloader (SBL)]
                  |-. 
                  | [Android Bootloader (ABOOT)]
                  | `-.    
                  |   [boot.img]
                  |   |-- Linux Kernel
                  |   `-- initramfs
                  |       `-.
                  |         [system.img]
                  |
                  `-[TrustZone]


                

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2018-12-25 12:48 被挽梦雪舞编辑 ,原因: 重新排版
收藏
免费 2
支持
分享
最新回复 (21)
雪    币: 26136
活跃值: (1409)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
自己顶楼!今天怎么没人?
2018-3-2 12:51
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
3
这是机器翻译吗。。看起来好困难。
2018-3-2 15:25
0
雪    币: 26136
活跃值: (1409)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
bxc 这是机器翻译吗。。看起来好困难。
手机打的,还没排版,纯手工啊!兄弟,你自己拿机器翻译后对照一下。。
2018-3-2 15:56
0
雪    币: 26136
活跃值: (1409)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
bxc 这是机器翻译吗。。看起来好困难。
今天人们都是怎么了?原来是过十五,忙忘了
最后于 2018-3-3 00:03 被挽梦雪舞编辑 ,原因:
2018-3-2 16:00
0
雪    币: 26136
活跃值: (1409)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
bxc 这是机器翻译吗。。看起来好困难。
排版完了,看看还可以不?
2018-3-2 23:48
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
7
挽梦雪舞 排版完了,看看还可以不?
可以,感谢分享
2018-3-2 23:57
0
雪    币: 26136
活跃值: (1409)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
bxc 可以,感谢分享
嗯嗯,谢谢支持,一些专有名词是直译的,不足之处多多提出,我会不断改进的。
2018-3-3 00:03
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
好吧,表示看不懂
2018-3-3 01:31
0
雪    币: 26136
活跃值: (1409)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
yy虫子yy 好吧,表示看不懂
什么专业的?
2018-3-3 01:50
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
挽梦雪舞 什么专业的?
专业搬砖的我,不说了,明天继续搬砖 
2018-3-3 02:38
0
雪    币: 26136
活跃值: (1409)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
yy虫子yy 专业搬砖的我,不说了,明天继续搬砖 [em_51]
是挺晚了,唉,彻底没心情了,翻译不适合我,自己默默看好了。累了。
2018-3-3 02:51
0
雪    币: 6112
活跃值: (1212)
能力值: (RANK:30 )
在线值:
发帖
回帖
粉丝
13
挽梦雪舞 是挺晚了,唉,彻底没心情了,翻译不适合我,自己默默看好了。累了。
多翻几篇就好了  专有名词,可以不译,大家都懂的,哈哈
2018-3-5 15:16
0
雪    币: 26136
活跃值: (1409)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
哆啦咪 多翻几篇就好了[em_19] 专有名词,可以不译,大家都懂的,哈哈[em_12]
嗯嗯。这话好有深意……
2018-3-5 22:18
0
雪    币: 84
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
学习中,谢谢楼主!
2018-3-12 21:26
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
2018-3-12 23:27
0
雪    币: 26136
活跃值: (1409)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
聖blue [em_63]
2018-3-12 23:36
0
雪    币: 4005
活跃值: (2193)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
泄漏的程序员是什么意思,程序员还能被调试跟踪的吗?
没有任何针对译者的意思,不过这和机翻还是有很大的相似性

最后于 2018-3-13 09:18 被Umiade编辑 ,原因:
2018-3-13 09:14
0
雪    币: 26136
活跃值: (1409)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
19
Umiade 泄漏的程序员是什么意思,程序员还能被调试跟踪的吗?没有任何针对译者的意思,不过这和机翻还是有很大的相似性
嗯嗯,原谅我的直译,牛津查的,你提到的一些已经改了,谢谢指出,哪里还有问题截图回复。谢谢!
2018-3-13 12:48
0
雪    币: 677
活跃值: (24)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
你要是把Programmer翻译为编程器,可能会顺一点……
2018-3-13 14:51
0
雪    币: 26136
活跃值: (1409)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
21
fishgs 你要是把Programmer翻译为编程器,可能会顺一点……
嗯,这个是针对编译器被调试,跟踪及其他一系列操作的,有点晕,实在没找到那块内容,方便的话给整个截图,还有就是编程器读起来有点不顺口,编译器更好一点,就好比直接说成IDE
2018-3-13 23:08
1
雪    币: 500
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
猜猜我是谁
2018-12-24 00:38
0
游客
登录 | 注册 方可回帖
返回
//