阻力最小的路径-联发科设备上从无线基带到应用处理器的权限提升

原文:https://comsecuris.com/blog/posts/path_of_least_resistance/
翻译: softs.im 介绍 当今的移动系统由多个独立但高度互连的处理单元组成,每个处理单元都运行各自的代码。先前的研究证明,这些组件,尤其是无线基带处理器,容易受到远程或附近的攻击。在过去的几年中,针对所有主要基带SoC供应商的实践已经证明了这种利用。入侵基带(在MTK源代码中称为调制解调器或MD)是一种强大的攻击,因为它可以访问通过调制解调器的所有数据,而实际上却无法被当前的保护机制检测到。然而,它在持久性和实用性方面有其局限性:显然,这种入侵无法访问客户端加密的数据或通过其他渠道传输的数据。 这些类型的攻击发展过程中自然而然的下一步就是提高代码执行效率,并入侵其他处理单元,最重要的是应用处理器(AP)。通过其他组件攻击AP的优势在于,它们可以提供审核较少,安全性较低的攻击面。在应用处理器上运行的操作系统通常配备有不断改进的现代防御和利用缓解机制,以提高利用成本。相反,其他嵌入式组件(例如不易暴露于最终用户的蜂窝基带和传统的攻击媒介)在历史上通常很少受到安全社区和供应商的审查。 这项研究旨在通过对采用联发科芯片组,并假设3G调制解调器受到入侵的HTC One M9 +手机进行案例研究,从而提供一种评估和审核不同处理单元之间接口的方法。首先,探索调制解调器与其他组件之间的通信通道,并研究负责加载基带固件的Android内核驱动程序。在介绍了通用体系结构和通信格局之后,提供了一些示例,用于评估使用调制解调器数据的用户空间应用程序的漏洞。这些示例包括手动调查(剖析远程文件系统驱动程序)和自动发现(模糊攻击供应商RIL)。此外,我针对远程文件系统驱动程序中发现的路径遍历漏洞开发了概念证明漏洞利用(PoC)。 PoC可用于从受入侵的基带接管Android系统。我将指导您完成PoC及其开发步骤,包括MTK基带固件的逆向工程过程。最后,为了完善漏洞利用链,我还将说明如何模糊攻击基带固件GSM协议栈的目标文件。 自这项研究开展以来,来自Google Zero项目的Gal Beniamini发表了一篇出色的文章,内容涉及入侵Broadcom的Wi-Fi芯片并增强对应用处理器的访问。他的工作还进一步表明,这些不是孤立的案例,也不是特定于某些供应商的案例。而是它们是现代(移动)操作系统中设计问题的示例,即OS-es(操作系统)固有地信任其他处理组件的意图和完整性,并且很少采取防御措施。 这项研究是在我在Comsecuris的三个月实习期间进行的,事实证明这是对移动平台低级安全问题的令人兴奋的介绍。在此,我要感谢拉尔夫·菲利普·韦恩曼(Ralf-Philipp Weinmann),尼科·戈德(Nico Golde)和丹尼尔·科马罗米(Daniel Komaromy)所提供的难得的机遇,以及他们在整个研究过程中提供的宝贵见解。
披露时间表 2016年11月14日-向MTK披露了漏洞(多次请求后无响应)
2016年11月14日-向HTC披露漏洞
2016年11月18日-向Google披露了漏洞(因为Lava Pixel手机也受到影响)
2016年11月28日-HTC确认已通知供应商
2016年12月6日-HTC报告此问题已修复并已部署到产品线
2017年2月10日-Google要求进一步澄清,此后一直未回应(问题仍未解决) 我无法验证联发科技如何解决该问题,他们是否将修复程序发布给所有客户,以及这些修复程序是否已将其植入现场设备。
联发科技架构设计 研究的第一步是收集有关基带处理器和平台的低级架构的知识。 HTC One M9 +出厂附有MediaTek MT6795T SoC(代号Helio X10),其中包含八核应用处理器(Cortex A53 ARMv8)和集成调制解调器CPU。不幸的是,与竞争对手(高通的Snapdragon和三星的Shannon芯片组)相比,MTK芯片在安全研究领域的关注度较低。泄漏的MTK数据表(虽然是不同或较旧的芯片MT6595,MT6782等)很多,其中包含SoC布局的高级概述。此外,Markus Vervier还撰写了一篇有关攻击的文章,这些攻击能够主动克隆移动身份并提供有关Mediatek调制解调器固件的其他详细信息。 根据MTK文档,调制解调器系统由DSP和ARMv7 Cortex-R4 MCU组成。两者都与应用处理器位于同一芯片内。 DSP实现了蜂窝基带栈的物理层,因此不在本文的讨论范围之内(当我谈论调制解调器或基带处理器时,我指的是MCU)。 ARMv7内核运行基带固件,并实现不同的蜂窝数据链路和网络层协议。 为了从调制解调器的角度建立可能的攻击面,我们需要发现并了解AP与MD之间的各种通信通道。我们还需要确定AP端的各个软件组件,这些组件消耗来自调制解调器的数据。一个开始寻找的好地方是CCCI(Cross Core Communication Interface跨核心通信接口)内核驱动程序,它负责基带处理器的管理和监督以及AP和MD之间的数据交换。大量底层Android内核源代码(包括其驱动程序)是公开可用的。可以从HTC网站下载源代码。相关文件位于驱动程序/ misc / mediatek / eccci /和drivers / misc / mediatek / [dual_] ccci /目录中,作为内核源代码树的一部分。 CCCI驱动程序包括CCIF子系统,该子系统包含用于在应用程序处理器和调制解调器之间建立低级通信接口的代码。这包括初始化UART线(主要用于传输AT命令和音频数据),以及设置用于交换数据和控制命令的共享存储区。共享内存分为多个子区域,这些子区域专用于某些任务,用于传输各种IPC命令,调制解调器日志条目,远程文件等。这些存储区中的每个存储区都分为一个单独的发送和接收通道,对它们的访问由专用信号区控制。信号区域用作一种流或访问控制通道,以指示共享存储缓冲区中何时有新数据可用,或者另一方何时已接收到新数据。CCCI驱动程序的其余部分通过其自己的环形缓冲区实现提供对这些通道(包括共享内存和UART通道)的统一访问。这些环形缓冲区通过一组提供IOCTL系统调用处理程序的字符驱动程序公开给用户空间Mediatek二进制文件。图1描述了这种架构,包括CCCI驱动程序的调制解调器端。有关调制解调器的管理及其数据处理的大多数逻辑是在用户空间应用程序中实现的。内核驱动程序仅用作控制调制解调器和AP之间的通信通道的通信接口(顾名思义)。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注