查看原文
其他

谷歌修复Nexus 6安全启动绕过漏洞

2017-05-27 代码卫士


HCL技术公司研究人员表示,谷歌在2017年5月的安全补丁中修复的漏洞能导致攻击者通过内核命令行注入绕过Nexus 6的安全启动。


能物理访问设备的攻击者或拥有授权ADB/快速启动USB访问(经引导加载程序锁定)设备的攻击者能获取不受限制的根权限以及“完全拥有用户空间”。为此,攻击者必须加载一个被篡改或恶意initramfs图像。


安全研究员Roee Hay还解释称,由于利用并不会导致出厂重置,用户数据还是完整的且经加密的。该漏洞的编号是CVE-2016-10277。


Hay表示这个问题是CVE-2016-8467的延续,后者是一个高风险漏洞影响Nexus 6/6P引导加载程序,且于2017年1月修复。这个利用代码滥用fastboot命令更改内核命令行中的androidboot.mode参数并通过强化引导加载程序得以解决。


研究人员表示就在谷歌发布补丁之前发现了在Nexus 6中绕过的方法。


由于Nexus 6引导加载程序中的fsg-id、carrier和console参数可通过fastboot界面得到控制(即使是在引导加载程序被锁定的情况下),如果这个引导加载程序并没有清洁以上三个参数的话,那么攻击者就能通过任意内核命令行参数。研究人员还发现一系列包含任意值和能传播到内核命令行的参数。


此前发现能篡改引导程序后,研究人员主要集中通过将任意参数插入命令行的方式攻陷设备。最后他们发现通过控制一个参数就能绕过安全启动。


这个利用依赖于initramfs,即在Linux内核初始化过程中加载到rootfs(RAM文件系统)的cpio归档文件。这个引导加载程序为Linux内核准备好内核命令行和initramfs参数,然后将执行转移到Linux内核。


Kernel_init函数执行第一个用户空间进程/init,一个内核命令行参数rdinit能覆盖这个默认值但利用并没有效果,主要因为Nexus 6 initramfs包含的二进制文件集不是足够大。


通过覆盖默认值,研究人员能让内核崩溃,随后他们将自己的initramfs归档文件通过fastboot加载到设备内存。研究人员指出,Linux内核并不会再次验证initramfs的真实性而是依赖于引导加载程序,因此如果能设法将篡改的initramfs置于受控制的phys_initrd_start物理地址,那么内核确实会将其填充到rootfs中。


Fastboot通过USB提供下载机制,因为即使在引导加载程序被锁定的情况下也可操作,攻击者能利用它加载篡改的initramfs。如果引导加载程序和内核在initramfs被填充到rootfs之前并没有覆盖数据的话,利用就成功了。


安全研究人员创建了一个PoC并将其上。通过完全控制rootfs,攻击者能创建一个恶意的/vendor文件夹,这个文件夹通常是存储多种SoC的固件图像。内核驱动通常会在初始化时消耗这些图像,并在需要时更新其SoC副本,因此攻击者能够显示未经签名的固件图像。研究人员指出虽然还未检查是否存在未签名的固件图像,但从经验来看是存在的。对于签名的固件图像而言,降级攻击有可能发生。


谷歌通过设置引导加载程序来清洁fsg-id、carrier和console配置参数的方式,于2017年5月解决了这个问题。



本文由360代码卫士编译,不代表360观点,转载请注明“转自360代码卫士www.codesafe.cn”。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存