前几天,我在网上冲浪的时候,看到了一条相当震撼的消息:


简单来讲,就是主打封闭安全的 iPhone ,不仅被攻击者发现了漏洞成功入侵,完全控制整个手机。


更加抽象的是,入侵的还是知名杀毒软件卡巴斯基团队成员的 iPhone 。


这年头系统被攻击的事情本来就少见,更何况被攻击的还是封闭和安全著称的 iOS 系统。


这让我很好奇这样顶风作案 + 虎口拔牙的人到底是谁?他又是怎么做到的?同样好奇的当然也有受害者本人,也就是卡巴斯基团队。


他们给这个入侵行动起了个名字叫“三角测量行动”,并且对整个入侵事件就进行了复盘,给出了详细的报告。


卡巴斯基的报告里 ” 三角测量行动 “  附图


我仔细分析了一下卡巴斯基团队的分析报告,发现入侵者的入侵方法堪称 “ 豪华 ” ,连卡巴斯基团队自己都懵逼了,从来没见过这个玩法:


这次针对 iPhone 的攻击,居然同时利用了 4 个零日漏洞,就是凭借这 4 个漏洞,攻击者基本实现了对整个硬件设备的完全控制。


额外提一嘴,零日漏洞( Zero-Day )又叫零时差攻击,指的就是那种之前从来没有被发现过、所以没有被修复或者拦截的漏洞。


我尝试着把攻击者利用零日漏洞完成攻击的整个链条捋了一遍,大致是这个样子的:



通俗点来讲,就是黑客给目标手机发了一个假的 iMessage 附件,植入了一个木马,这个木马骗过了 iPhone 里各种严防死守的保护机制,甚至绕过了苹果 A 系列处理器芯片上的硬件防护,完全控制了整个手机硬件设备,可以说为所欲为。


在整个过程中,前面提到的 4 个零日漏洞被充分利用,被攻击的手机只是因为接到了 iMessage 附件,甚至都还没打开,整个手机就已经连底裤都被扒光了。


看完我感觉这个攻击者的操作离谱到匪夷所思,他真的是普通的攻击者吗?


听我讲完这些零日漏洞到底是啥,攻击者又是怎么利用他们的,估计就会懂我为什么会有这样的疑问了。


在最开始,攻击者会给目标手机发送一份恶意的 iMessage 附件,但是按照 iMessage 对待附件的逻辑,它会在不向用户显示任何迹象的情况下处理这个附件。



也就是说,用户可能还没察觉这个是不是有问题的附件, iMessage 就已经开始处理这个附件了,这个有问题的附件进入到你的 iPhone 的过程,用户是无法察觉的。


光是无法察觉这一点,估计已经吓坏一大帮人了,但是这还只是入侵者的引子。


攻击者真正的第一个目标是一个名为 CVE-2023-41990 的零日漏洞。这个漏洞存在于一款用来调整字体的显示效果的系统 API 指令中,可以让攻击者通过恶意 iMessage 附件远程执行代码,或者说植入了一个木马。


是的,苹果的字体指令中也会有漏洞,而且该指令自上世纪 90 年代初就已存在。但是这个字体指令本身是苹果公司独有的,而且苹果并没有公开这一条指令的存在,很多关注这个事情的人分析到这里的时候都怀疑攻击者的真实来头。


第一遍看的时候我以为,攻击者植入的木马就是这个 iMessage 附件本身。但实际上它只是打开字体指令漏洞的钥匙,真正的 “ 木马 ” 是在没公开的字体指令的漏洞里被植入的。


被植入之后,这个 “ 木马 ” 一路高歌猛进,从代码框架手上骗到了执行手机上别的程序的能力,


这已经进入到 iOS 系统非常深的内部了,甚至已经差不多要摸到系统内核了。一般来说到了这里,攻击者已经可以收手了,直接劫持一个本地程序,也能读取手机上的一些隐私和信息。


但对于这一次入侵的攻击者来说,前面所做的还只是他的开胃菜,他真正的目标就是 iOS 的系统内核。按照正常的思路,攻击者现在已经进入到 iOS 系统内部,下一步他应该会直接去攻击系统内核。



但是他没有这么做。攻击者利用了内核中第二个零日漏洞,内存管理 - 内存映射系统上的一个漏洞,直接先去控制了最最最底层的硬件内存( 获取了整个物理内存的读取和写入权限 )


相当于说,攻击者先放下了 iOS 的这一套系统不管,跑到了 A 系列芯片上,控制了处理器上实际物理内存。



我们平时接触到的 iMessage 、微信这些应用程序,并不会直接操作实际的芯片上的物理内存。


比如微信要存储一个文件,并不是微信自己的代码跑到硬件内存芯片上去写,它只要把文件交给系统的接口。剩下的具体操作系统会统一安排,到硬件内存芯片上去写入。


既然攻击者的目标是 iOS 系统内核,那为啥要费这么大劲儿绕过它,而去管那么远的硬件内存的事情呢?


实际上到这里为止,系统内核还是安全的,只是被利用了一下。因为就算攻击者能够往实际的物理内存里乱写东西,也没有用——攻击只能往这里面写,但是不知道这一个内存块存的是什么东西、是用来干嘛的。


而且内核访问硬件内存的路径也是七弯八绕的根本不知道,攻击者企图从硬件内存反攻回内核简直是在自己找死,自己在里头绕几圈没准就迷路绕死了。



除此之外攻击者还有一个 “困难 ” 要克服 —— 苹果的硬件级内存防护。


比如苹果的页表保护层 PPL(Page Protection Layer),这样的硬件级别的内存防护,专门防这种能搞定硬件内存的攻击者。



在这次的攻击事件发生之前,苹果的这种深度基于硬件的保护被认为是牢不可破的。因为这样的硬件级别内存防护高度依赖于 SOC 设计本身,正常情况下只有芯片设计者自己知道这个保护是怎么回事。


但是攻击者又是怎么破的呢?


准确地说,他并没有攻破这一层的硬件级内存防护。因为他找到了第三个零日漏洞——苹果的这个页表保护层虽然很强势,但是可以绕过。


那攻击者是怎么利用这个零日漏洞的呢?用卡巴斯基团队自己的话来说就是:


攻击者能够把数据写入某个特定的物理地址,通过将数据、目的地址和数据哈希写入到未被固件使用的芯片的未知硬件寄存器,从而绕过了基于硬件的内存保护。


简单讲就是,苹果的这一层硬件级防护,只能保护那些被系统内核用过的硬件区域。也就是说,硬件内存里有一块隐藏区域,连苹果的安全系统都不知道它的存在,保护不到它,但是这个黑客知道。于是这块隐藏区域成为了绕过安全检查的后门。



攻击者就这样绕过了这一层硬件级别的防护,劫持了系统内核。


在利用完前面三个零日漏洞之后,攻击者基本就可以在设备上做任何他想做的事情了,他想要进的系统内核,也能进了。但是攻击者还没有要收手的意思。


估计手机自己都无语了,我现在从外到里又从里到外都已经被你看了个遍了,你想让我干嘛也我也完全要听你的了,你还想怎么样?


事实上攻击者确实也可以清除掉所有漏洞利用痕迹,继续埋伏在这一台 iPhone 里,闷声发大财,或者就干脆擦屁股走人。但是攻击者选择了悄悄地运行 Safari 浏览器的进程,找到了另一个零日漏洞。


假如读者里有搞攻防的小伙伴,可能现在的心情已经非常崩溃了。大家可能不知道 iPhone 的一个零日漏洞有多值钱——去年的 Pwn2Own 大会拿一百万美元都没钓出来苹果的 0day。



结果这哥们轻轻松松就扔了四个出来。而且最离谱的是,你们知道他拿这第四个 0day 漏洞干了什么吗?他又执行了一遍先控制物理内存再反攻 iOS 内核的操作!(最开始提到第一个漏洞时做过的事情。)


这位黑客,请问你是来搞黑客攻击的还是来炫富的?


假如 iPhone 能说话,可能也要开始大喊开挂了。


好了,这次事件的攻击流程我们总算是大概给大家盘完了。这次攻击事件中最有意思的就是前面说到的,被攻击者用来从硬件内存反攻系统内核的“隐藏区域”。


这个隐藏区域,其实是某个没有被用到的硬件寄存器。正常情况下,各种可用的外围设备比如马达、扬声器、麦克风等等,都会提供特殊的硬件寄存器,CPU 可以通过这些寄存器来操作这些设备。


而此次攻击者用来绕过苹果硬件层保护的这些寄存器,CPU 自己都没有调用过,也不知道他们是用来干嘛的。



这就是为啥要说这些寄存器是“未知”的。夸张点说,即使是苹果自己的工程师来了,不花上一点功夫都不一定能找到这些硬件寄存器在哪里。


那攻击者是怎么知道这些未知寄存器的存在的?又是怎么知道用这些寄存器就能绕过苹果的硬件级内存保护,从而实现整个手机硬件的控制的?


对于这一点,作为受害者和第一手资料分析者的卡巴斯基团队,并没有给出合理的解释,只是非常委婉地指出:


我们猜测,这个未知的硬件特性很可能是苹果工程师或工厂用于调试或测试的目的,或者是无意中被包含进去的。因为这个特性没有被固件使用,我们不知道攻击者是如何知道如何使用它的。


但是其他几个零日漏洞都隐隐约约地透露出,这个攻击者不是一般的外部攻击者。这人说不定真是个内部人员,一直知道这些工程后门的存在,但是这人也知道这些后门又是iMessage又是硬件内存的,会涉及到很多个产品线。


按苹果这种大公司内部的协调效率的话,不推他们一下他们大概率是不会改的。所以这位大哥直接拿这些东西黑了卡巴斯基,借卡巴斯基的手把事捅大了。


事情是不是一下子变得合理了起来?不过大家别慌,这些漏洞已经被苹果堵上了。


图片、资料来源:Operation Triangulation: The last ( hardware ) mystery


本文来自微信公众号:差评 (ID:chaping321),作者:施昂,编辑:面线、米罗