高通启动链的研究进展如何?有哪些关键点值得关注?
摘要:之前了解到移动安全之后陆续看了各个平台的soc的安全漏洞,包括mtk unisoc qualcomm kirin 还有apple的一些经典漏洞。在说qualcomm之前我先把之前一点点微小的工作总结一下吧。 然后我是研究了kirin的boo
之前了解到移动安全之后陆续看了各个平台的soc的安全漏洞,包括mtk unisoc qualcomm kirin 还有apple的一些经典漏洞。在说qualcomm之前我先把之前一点点微小的工作总结一下吧。
然后我是研究了kirin的bootrom复现了checkm30,然后在别人的帮助下搞定了新批次利用了xloader的漏洞,然后就卡住了就放弃了,然后复现紫光的bootrom的两个漏洞(一个证书里面缓冲区溢出造成了永久安全启动和临时安全启动绕过,因为这个验证既在download模式存在也在普通模式存在),然后一个download模式的任意写入和缓冲区溢出(因为是真的物理意义的不验证),后来unisoc的bsp源码在github上有泄露所以通过审计源码得到了紫光有名的bsp漏洞也是永久安全启动绕过。
然后自己当时就开始装(还是太菜感觉),这几个复现也没有记录。然后我就开摆了精神状态太差了啥也弄不动x(其实是自己菜),当然前面我们研究的都是早期的启动链比如bootrom或者第一级的loader,所以说地址空间基本是RWX的,而且栈地址是固定的,所以说随便找一段空间就可以放shellcode然后直接溢出到栈地址是没啥含金量的,但是当时我太得瑟了(再次说明自己菜)。尤其是所谓checkm30,只能说是高一时候看到那个文章感觉很厉害所以留下了一点幻想对吧。
当然这里后续打算弄一个紫光完整一点的工具(spd_dump已经很好了),。
后来大概是25年8-9月的时候有人让我研究一下mtk,mtk确实是漏洞研究很好的平台,mtkclient利用了一个usb协议里面的bootrom漏洞,这个漏洞原理还没有复现(没有看bootrom去确认),还利用了一个gcpu和dma里面的漏洞,大概是说mtk下载模式有一个方式可以通过usb发送写入的地址在指定的地址写入内容,但是有一个白名单,只能写白名单的(也可能是黑名单),然后可以写入gcpu或者dma的映射的地址,然后利用这个额外的硬件去在任意的地址写入内容。然后mtk的启动链就是bootrom->preloader->gz->lk->kernel,preloader呢校验lk,bootrom和preloader下面有下载模式,但是bootrom的下载模式可以通过efuse屏蔽,所以之前的bootrom漏洞就失效了。当时有一个比较好的github项目,是修补lk的。
我当时一看!woc lk可以修补?然后逆向preloader加上一份leak的preloader源码我就发现如果sec policy允许在seccfg解锁情况下不校验lk,那么lk就可以随便修改,大多数机子都是可以这样做的除了小米啥的。
这样就实现了修补LK实现解锁bootloader,然后后面就有fenir漏洞,就是说有一些机子的preloader的sec policy有问题,即使seccfg锁定也不校验下一级!然后MTK在新一点的soc preloader的下一级是BL2_EXT而BL2_EXT在EL3,所以说我们不需要去利用一个任意代码执行漏洞去解锁seccfg就可以以EL3权限执行任意代码!
后面呢,新一点的soc修补了bootrom漏洞,而且变成V6的协议了。
这里面MTK在下载模式下是bootrom/preloader->DA1->DA2
BOOTROM没有漏洞了,BOOTROM有sla,也就是如果sla开启,那么进行usb发送命令之前要先通过RSA鉴权。
