AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

解析bootloader安全 by 程君

发布者 security
发布于 1457053339324  浏览 6115 关键词 网络安全, 固件Firmware 
分享到

第1页

解析bootloader安全

程君 throber3@gmail.com



第2页

自我介绍

• 10年安全研究与开发 • 系统安全,移动与嵌入式安全 • 2008-2010 comodo 主动防御研究与开发 • 2010- 2011 网秦移动安全高级研究员 • 2011- 至今 猎豹移动研发经理,参与手机

毒霸研发



第3页

移动安全支付

• 社会工程 短信诈骗 电话诈骗 • 盗号 程序伪冒 钓鱼 键盘记录 网络截获 • 系统漏洞 Root 提权 内存读取 • bootloader级别漏洞



第4页

议程

• bootloader 基本介绍 • bootloader 获取与分析 • bootloader 具体流程 • bootloader attack vector 以及漏洞介绍 • bootloader 安全总结



第5页

bootloader 基本介绍

• 什么是bootloader

Bootloader 是启动加载的意思。在pc时代,windows 系统开 机时会首先加载bios,然后是MBR,再到os loader系统内核,最后启动 完毕。bootloader就相当于MBR 和os loader,它在手机启动的时候初 始化硬件,然后引导系统内核,直到系统启动。常见的有pc 的grub 和嵌入式的uboot。



第6页

bootloader 基本介绍

• 研究bootloader 的意义 1.修复变砖机器 2.寻找漏洞:越狱(iphone)与解锁

(android) iphone: bootrom 漏洞 key 提取 android:1.永久root 2.安装第三方rom 3.安全移动操作系统设计:knox



第7页

bootloader 基本介绍

• 研究对象

由于bootloader 涉及到芯片厂商和系统,不同厂商和不同系 统的启动流程均不相同,高通芯片和android市场占有率最高,本议 题如果没有指明特定的芯片和平台,均以android 下的高通平台作为 例子说明。iphone只简要介绍其bootloader流程



第8页

bootloader 基本介绍

• bootloader 组成 (android) 1.PBL:prime bootlader,iphone 叫

bootrom 2.SBL(1/2/3):secord bootloader 3.APPSBL:HTC 的叫hboot,有的叫aboot 4.HLOS: 基带也叫basehand或者radio 5.TZ:TrustZone



第9页

bootloader 基本介绍

• bootloader 组成 (iphone ) 1.BootRom: PBL, SecureROM 2.LLB:Low Level Bootloader, checks the signature of iBoot 3 iBoot:stage 2 bootloader ,recovery mode 4.iBBS:A stripped down version of iBoot 5.iBEC:performing a restore from Fake

DFU in LLB.



第10页

bootloader获取与分析

• Bootloader 获取 1.从rom 中获取 android后缀为mbn或者img 2. 从系统中dump a.有些android 手机 可以dump bootloader的挂载文件



第11页

bootloader获取与分析

• bootloader 获取 例如:华为P1 dd if=/dev/block/mmcblk0p3 of=/sdcard/mnt/bootloader.img b.iphone 下 Limera1n Exploit dump

Bootrom 3. 硬件使用jtag 接口获取 android 手机一般可以通过jtag 接口获取



第12页

bootloader获取与分析

• bootloader 分析(以android sbl1为例) 直接把sbl1 拖到ida 中反汇编效果不明显,

我们缺少了什么?加载地址。怎么样确定加 载地址?

1.bootloader cpu体系手册规定的加载地 址 2.bootloader 文件格式结构

3.手动分析,经验猜测



第13页

bootloader获取与分析

• bootloader 分析 (以android sbl1为例) 1.bootloader cpu体系手册规定加载地址 现在手机操作系统一般使用高通的芯片

比较多,我们以MSM8960为例 见下图 : sbl1 0x2A000000 tz: 0x2a020000 sbL2 0x2E000000 sbl3:0x47f00000



第14页

bootloader获取与分析

• 加载地址 来自《8960 Boot Architecture》



第15页

bootloader获取与分析

• bootloader 获得与分析 (以android 为例) 2.bootloader 文件结构中规定的加载地址



第16页

bootloader获取与分析

• bootloader 分析 (以android sbl1为例)

3.手动分析,经验猜测

我们知道这些未知格式的rom要运行的话, 必须有加载地址,可能有简单的头格式,如第二 种方法种见到的头格式,如果有的话,这个头格 式可能包含加载地址(pe,elf格式文件头都有这 种加载地址叫entrypoint)。在程序代码引用中如 果出现大量的未知地址,如果这些地址很相近, 那么可能是我们要找的加载地址。



第17页

bootloader 基本介绍

• bootloader 分析 (以android sbl1为例)

从上面可以看出,0xF803D5A5 没有解析出来, 这个地址附近相关地址在系统中出现,可能是我 们的加载地址,由于对其原因,我们可以猜测出 加载地址为:0xF8000000



第18页

bootloader 具体流程

• boot 一般流程 第一阶段:

1.初始化基本硬件; 2.把bootloader自动搬运到内存中; 3.设置堆栈指针并将bss段清零,为后续执行代码做准备; 第二阶段: 1.初始化本阶段要用到的硬件; 2.读取环境变量; 3.启动: (a)自启动模式,从Flash或通过网络加载内核并执行; (b)下载模式,接收到用户的命令后执行;



第19页

bootloader 具体流程

• bootloader 具体流程 (android ) PBL(bootrom)-sbl1-> sbl2-> tz->sbl3-> APPSBL(app bootloader)



第20页

bootloader 具体流程

• bootloader 具体流程 (iphone ) 1.iphone normal mode

2.iphone DFU mode

(Device Firmware Upgrade)



第21页

bootloader 具体流程

• bootloader 具体流程总结 一般bootloader 分为多阶段引导,除了

进行正常的硬件初始化,还有一个重要的任 务就是签名验证,上一层对下一层进行安全 签名验证,以保证下一层系统的完整性,最 终加载os 系统内核。



第22页

bootloader attack vector

• fastboot 是bootloader 的交互接口

fastboot oem unlock(厂商留着解锁的) fastboot boot 危险接口



第23页

bootloader attack vector

• 对于未解锁的 通过fastboot 接口,bypass 验证签名达到 改写系统目录权限 • 对于解锁的 1.修改加载的boot.img 系统文件 init.rc 文件加 载自己的恶意服务 2.在bootloader 中嵌入rootkit 代码



第24页

bootloader attack vector

• 未解锁漏洞攻击 1.google Nexus one 的bootloader 签名被绕过 2.Motorola Android系统 TrustZone内核安全漏 洞(CVE-2013-3051 ) 3.samsung-galaxy-s4 aboot 漏洞

这三个中我们只分析第二个,具体分析将在 后面漏洞分析中介绍



第25页

bootloader attack vector

• 已解锁修改boot.img init.rc 启动文件 OldBoot 系列修改boot.img 的init.rc 添加

服务 service imei_chk /sbin/imei_chk class core socket imei_chk stream 666



第26页

bootloader attack vector

• 已经解锁 bootloader rootkit 还未发现攻击,估计很快将会出现



第27页

bootloader attack vector

• google Nexus one 的bootloader 签名被绕过 htc 手机有个安全属性s-on, s-off,当签名

检查通过后,就可以写系统目录,此时状态 是s-off, 当签名没有检查通过,就不能写系统 目录,此时状态就是s-on

由于Hboot 可以引导一个用户的kerenl, 而这个kernel 可以用来patch 签名的检查,从 而导致可以写系统目录。



第28页

bootloader 漏洞介绍

• google Nexus one 的bootloader 签名被绕过 工具:blackrose http://forum.xda-

developers.com/showthread.php?t=1270 原理: http://hi.baidu.com/vessial/item/830e961

d2c2bea623e87ce47



第29页

bootloader 漏洞介绍

• samsung-galaxy-s4 aboot 漏洞 工具:https://github.com/Berrrry/loki 原理: http://blog.azimuthsecurity.com/2013/05/

exploiting-samsung-galaxy-s4-secure-boot.html



第30页

bootloader 漏洞介绍

• Motorola Android系统 TrustZone内核安全漏洞 (CVE-2013-3051)

漏洞描述:使用Qualcomm MSM8960芯片的 Motorola Razr HD,Razr M,以及Atrix HD设备中 某Motorola定制版的Android 4.1.2系统TrustZone 内核中存在漏洞,该漏洞源于程序没有校验某物 理地址参数与内存区域之间的关联。通过使用内 核模式执行对特制0x9和0x2 SMC操作,本地攻击 者可利用该漏洞解锁引导装载程序(bootloader)



第31页

bootloader 漏洞介绍

• Motorola Android系统 TrustZone内核安全漏 洞(CVE-2013-3051 )

Motorola 解锁需要token,命令为: fastboot oem unlock [token] 当有token后,motorola bootloader 里面有个 全局标记记录是否解锁,但是特殊的0x9和 0x2 SMC,会改写这个标志



第32页

bootloader 漏洞介绍

• Motorola Android系统 TrustZone内核安全漏 洞(CVE-2013-3051 ) 工具:motopocalypse

http://vulnfactory.org/public/motopocalypse.zip

原理: http://blog.azimuthsecurity.com/2013/04/ unlocking-motorola-bootloader.html



第33页

bootloader 漏洞介绍

• motopocalypse 中unlock 程序分析: 1.搜索全局标志 2.构造smc_command 命令参数,并映射到

内核地址0x80202000 3. hook unix_seqpacket_ops 中的ioctl 函

数,用payload 替换



第34页

bootloader 漏洞介绍

• motopocalypse 中unlock 程序分析: 4.触发payload 调用 socket(PF_LOCAL,SOCK_SEQPACKET, 0); ioctl(socket_fp, 0, 0) 5.payload 函数构造



第35页

bootloader 漏洞介绍

• 1.搜索全局标志,全局标志有返回错误1001,搜索value 0xfffffc17 (-1001) if (global_flag) ret = -1001;



第36页

bootloader 漏洞介绍

• 2.构造smc_command 命令参数,并映射到内 存地址0x80202000(第一次构造smc 0x9)



第37页

bootloader 漏洞介绍

• 2.smc_command 0x9 对应的bootloader处理



第38页

bootloader 漏洞介绍

• 2.构造smc_command 命令参数,并映内存地 址0x80202000(第二次构造)



第39页

bootloader 漏洞介绍

• 2.smc_command 0x2 对应的bootloader处理



第40页

bootloader 漏洞介绍

• 3.hook unix_seqpacket_ops 中的ioctl 函 /proc/kallsyms中得到地址

hook unix_seqpacket_ops 调用触发我们的 payload



第41页

bootloader 漏洞介绍

• 4.触发payload 调用

socket 调用最终触发了unix_create中的 case SOCK_SEQPACKET: sock->ops = &unix_seqpacket_ops;

由于hook 了 unix_seqpacket_ops 中的ioctl,调 用ioctl触发我们的hook 函数payload



第42页

bootloader 漏洞介绍

• 5.payload 函数构造



第43页

bootloader 安全总结

• 1.bootloader 安全是一个信任链安全,任何 输入文件的信任,都必须对文件签名和校 验,Nexus one的漏洞是由于没有签名kernel 文件,导致已有的签名被绕过,Oldboot的 利用是没有签名boot.img

• 2.解锁的bootloader 不能保证系统的安全性 • 3.对关键内核的函数地址隐藏关闭

kptr_restrict写权限,对内核结构进行写保 护



第44页

后续待研究

• bootloader rootkit • 主流android未解锁解锁bootloader 漏洞发掘



第45页

参考

• 8960 Boot Architecture • http://blog.azimuthsecurity.com • 如果绕过Nexus One的Bootloader的数字签名

by xee • Android系统典型bootloader分析 by 火翼 • http://forum.xda-developers.com/



第46页

谢谢



支持文件格式:*.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。