当前位置:易索资讯>>易索论坛>>[IT科技/网络存储]
主题
正在载入……
最大的敌人是自己 于 2023-12-29 15:48 发布于 [IT科技/网络存储] 点击:228 回复:0

历时4年,iPhone遭史上最复杂攻击!一条iMessage窃走所有隐私数据,Karpathy惊呼

正文
PM 信息 回复 编辑 删除 管理

iPhone曝出「史上最复杂」硬件级别漏洞!黑客只需一条iMessage即可拿到所有敏感数据,而用户不会有任何察觉。整个漏洞涉及的链条极其复杂,让Karpathy都惊呼:不是普通人能干出来的事。

最近,卡巴斯基的研究人员发现,有黑客在四年多的时间里给数千部iPhone留下了一个非常隐蔽的后门。

通过这个硬件级别的后门,能直接获得iPhone最高级别的Root权限。而要成功利用这个后门,必须要对苹果产品最底层的机制有非常全面细致的了解。

以至于发现这个漏洞的卡巴斯基研究人员称「无法想象这个漏洞是如何被意外发现的。」在他看来,除了苹果和ARM之外,几乎不可能有人能获知这个漏洞。

而间谍软件可以通过这个复杂的漏洞,将麦克风录音、照片、地理位置和其他敏感数据传输到攻击者控制的服务器。

尽管重新启动就能关闭这个漏洞,但攻击者只需在设备重新启动后向设备发送新的恶意iMessage文本,就能重新开启这个漏洞。

期间完全不需要用户进行操作,而且也不会留下任何蛛丝马迹,非常隐蔽。

对此,OpenAI科学家Andrej Karpathy表示:这无疑是我们迄今为止所见过的攻击链中最为复杂的一个。


对此,Karpathy认为,这已经不是个人行为能够触及的范畴了,应该是国家层面的行为了。


而一位声称自己还用Palm手机的网友回复道:「我坚持用Palm手机的意义就在这里。」


甚至还有网友感叹:「如果你成功地惹恼了具备这种技术能力和资源的人,可能你最不需要担心的就是自己手机里的数据了。」


目前,苹果公司已于2023年10月25日修复了这一核心安全漏洞。

「三角行动」攻击链

这个漏洞被发现的研究人员称为「三角行动」(Operation Triangulation)。

- 攻击者通过iMessage发送一个恶意附件,应用程序会在用户毫无察觉的情况下开启这个漏洞。

- 该附件利用了一个远程代码执行的漏洞(CVE-2023-41990),该漏洞存在于一个只有苹果公司知道的、未公开的 ADJUST TrueType字体指令中。这个指令自九十年代初就存在,直到最近一个更新才被移除。

- 攻击过程中,它采用了一种称为「返回/跳转导向编程」的高级编程技巧,并且使用了多个阶段的代码,这些代码是用NSExpression/NSPredicate查询语言编写的,它们修改JavaScriptCore库的环境,以执行一个用JavaScript编写的权限提升的漏洞攻击程序。

- 这个JavaScript漏洞攻击程序经过特殊处理,使其变得几乎无法读懂,同时也尽可能地缩小了它的体积。然而,它仍然包含大约11000行代码。这些代码主要用于分析和操纵JavaScriptCore和内核内存。

- 它还利用了JavaScriptCore的一个调试功能DollarVM ($vm),通过这个功能,攻击者可以在脚本中操纵JavaScriptCore的内存,并调用系统原生的API函数。

- 这个攻击工具被设计成兼容新旧型号的iPhone,并且对于新型号的设备,它包含了一个用于绕过指针认证码(PAC)的技术,这使得攻击能够针对最新设备生效。

- 它通过利用XNU内存映射系统调用(mach_make_memory_entry和vm_map)中的一个整数溢出漏洞(CVE-2023-32434),实现了以用户级别对设备所有物理内存的读写控制。

- 该工具还运用了硬件内存映射I/O(MMIO)寄存器来规避页面保护层(PPL),这一问题在CVE-2023-38606中已经被缓解。

- 利用了所有漏洞之后,JavaScript漏洞便能随意操控设备,包括部署间谍软件。不过,攻击者选择了:(a)启动 IMAgent进程,注入代码以清除利用痕迹;(b)无痕模式下运行Safari进程,并引导至含有下一阶段内容的网页。

- 该网页内嵌了一个脚本,能够确认受害者身份,一旦验证通过,便会加载下一阶段的攻击代码:Safari漏洞。

- Safari漏洞通过CVE-2023-32435来执行shellcode。

- 这个shellcode进一步执行另一个内核级漏洞,同样利用CVE-2023-32434和CVE-2023-38606。它在规模和功能上都非常庞大,但与JavaScript编写的内核漏洞截然不同。它们共享的只是与上述漏洞利用相关的部分代码。然而,其大部分代码也专注于解析和操控内核内存。

- 这一漏洞最终获得了root权限,并继续执行其他阶段的操作,这样就可以加载间谍软件。


谜一样的漏洞

讨论的焦点是一个已经得到修复的安全漏洞,编号为CVE-2023-38606。

新一代iPhone在硬件层面增加了额外的安全防护措施,专门用来保护内核内存中的敏感区域。

即使攻击者能够读写内核内存,比如利用CVE-2023-32434漏洞实施的这次攻击,这种防护也能阻止他们完全控制设备。

研究人员发现,攻击者为了规避这种硬件防护,竟然利用了苹果自家设计的SoC中的另一项硬件功能。

简单来说,攻击者的手法是这样的:他们在绕过硬件防护的同时,将数据、目标地址和数据的哈希值一并写入到芯片中未被固件使用的某些未知硬件寄存器,以此来对特定的物理地址进行数据写入。

研究人员推测,这个不为人知的硬件功能很可能是为了苹果工程师或工厂的调试或测试而设计的,或者是意外包含在内的。由于固件并未使用这一功能,研究人员对于攻击者是如何知晓并利用这一功能的方式一无所知。


技术细节

在系统级芯片(System on a Chip, SoC)中,各种外设可能会提供特殊的硬件寄存器,以供中央处理器(CPU)使用,从而控制这些外设。

为了实现这一点,这些硬件寄存器被映射到CPU可以访问的内存中,这种方式被称为「内存映射输入/输出 (Memory-Mapped I/O, MMIO)」。

苹果的产品,如iPhone、Mac以及其他设备中,外围设备的MMIO地址范围被存储在一个特殊的文件格式中,名为「设备树(DeviceTree)」。

这些设备树文件可以从固件中提取,并且可以使用dt(DeviceTree)工具来查看它们的内容。


设备树中MMIO的存储示例

例如,在这张截图里,可以看到cpu0的acc-impl MMIO范围的起始地址(0x210f00000)和大小(0x50000)。

深入研究「三角行动」(Operation Triangulation)攻击中使用的漏洞时,研究人员意外发现,攻击者为了绕过硬件级别的内核内存保护所使用的大部分MMIO地址,并没有在设备树中定义。

这个漏洞专门针对苹果从A12到A16的SoC,攻击的是位于0x206040000,0x206140000和0x206150000的神秘MMIO寄存器块。

这激发了研究人员的好奇心,进行了一系列的尝试。翻遍了各种设备的设备树文件和固件文件,但都没找到任何线索。

这让研究人员困惑不已,这些被攻击者利用的MMIO地址,为什么不在固件中使用呢?攻击者是怎么发现这些地址的?这些MMIO地址到底属于哪些外围设备?

之后研究人员决定去查看一下这些未知MMIO块附近是否有其他已知的MMIO地址。这次,他终于找到了一些有价值的信息。

在gfx-asc的设备树条目的信息中,这是GPU的协处理器。


设备树中gfx-asc条目的数据转储

它包含两个MMIO(Memory-Mapped I/O)内存映射范围:0x206400000–0x20646C000和0x206050000–0x206050008。


gfx-asc MMIO范围与漏洞所用地址的相关性

要更加准确地描述,这个漏洞使用了以下一些未知的地址:0x206040000、0x206140008、0x206140108、0x206150020、0x206150040和0x206150048。

研究人员发现,这些地址大部分位于两个gfx-asc内存区域的中间,而剩余的一个地址则靠近第一个gfx-asc区域的起始位置。

这暗示了所有这些内存映射输入输出(MMIO)寄存器很有可能是属于图形处理单元(GPU)的协处理器!

随后,研究人员对这个漏洞进行了更深入的分析,并且发现了一个进一步的证据。

在初始化过程中,漏洞首先会写入一些位于每个SoC特定地址的内存映射输入输出(MMIO)寄存器。


if (cpuid == 0x8765EDEA): # CPUFAMILY_ARM_EVEREST_SAWTOOTH (A16) base = 0x23B700408 command = 0x1F0023FF
elif (cpuid == 0xDA33D83D): # CPUFAMILY_ARM_AVALANCHE_BLIZZARD (A15) base = 0x23B7003C8 command = 0x1F0023FF
elif (cpuid == 0x1B588BB3): # CPUFAMILY_ARM_FIRESTORM_ICESTORM (A14) base = 0x23B7003D0 command = 0x1F0023FF
elif (cpuid == 0x462504D2): # CPUFAMILY_ARM_LIGHTNING_THUNDER (A13) base = 0x23B080390 command = 0x1F0003FF
elif (cpuid == 0x07D34B9F): # CPUFAMILY_ARM_VORTEX_TEMPEST (A12) base = 0x23B080388 command = 0x1F0003FF
if ((~read_dword(base) & 0xF) != 0): write_dword(base, command) while(True): if ((~read_dword(base) & 0xF) == 0): break

漏洞中GFX电源管理器控制代码的伪代码

在设备树和Siguza开发的工具pmgr的辅助下,研究人员发现所有这些地址都对应于电源管理器中的GFX寄存器所在的MMIO(Memory-Mapped Input/Output)范围。

最后,当研究人员尝试去访问这些未知区域的寄存器时,得到了第三个证实。

GPU的协处理器几乎立刻报错,显示信息:「GFX SERROR Exception

这样,研究人员就确认了所有这些未知的MMIO寄存器,它们是被用来进行漏洞利用的,确实属于GPU的协处理器。

这促使研究人员更深入地研究这个固件,这些固件也是用ARM架构编写且未加密的,但是他在固件中并没有找到任何与这些寄存器相关的信息。

他决定更仔细地研究这个漏洞是如何操纵这些未知的MMIO寄存器的。在所有寄存器中,0x206040000特别引人注目,因为它位于一个与其他所有寄存器都不同的独立MMIO块中。

它仅在漏洞的初始化和结束阶段被操作:在初始化过程中是第一个被设置的寄存器,在结束阶段是最后一个。

根据研究人员的经验,很明显这个寄存器不是用来启用/禁用漏洞所利用的硬件功能,就是用来中断控制。

研究人员开始追踪中断的线索,不久之后,他不仅识别出了这个未知的寄存器0x206040000,还发现了地址范围0x206000000–0x206050000究竟映射了什么。下面展示的是研究人员能够识别出的漏洞代码的逆向工程结果。

点亮
0
复印
0
[***这是一个复印贴***]
主题列表
查看全部
只看作者回帖
只看我的回帖
您未登录,不能回复主题,点击登录并回复此主题