第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页
谢谢