Google Project Zero 所见最天才的漏洞利用之一: NSO zero-click iMessage exploit

2021-12-16 18:45:16 +08:00
 Divinook

原文见: https://googleprojectzero.blogspot.com/2021/12/a-deep-dive-into-nso-zero-click.html

今天上午摸鱼时在 hacker news 上看到了这篇文章,惊叹于其中体现的技术细节与智慧,有兴趣的朋友可以直接看原文,这里做一个大概的介绍。

简单介绍

所谓的 zero-click 漏洞,是与 one-click 漏洞作比较,之前 iMessage 出现过通过钓鱼链接诱使目标点击并进行攻击,这次的漏洞强大在于不需要任何点击,只需要通过 iMessage 向目标发送一个精心构造的 GIF payload ,目标设备就会在无感知的情况下被攻陷,完全无法防御。

利用原理

1

iMessage 在接受后缀为.gif 的文件时,会对它进行解析和渲染,Apple 使用 ImageIO 库来解析目标文件,但是 ImageIO 库会尝试猜测目标文件的类型并进行相应解析(而非使用后缀,见[https://googleprojectzero.blogspot.com/2020/04/fuzzing-imageio.html]),因此攻击面扩大到了 20 多个图像编解码器。

2

漏洞的下一步利用在 CoreGraphics PDF 的解析过程中,JBIG2 是 CoreGraphics PDF 中一种用于图像压缩和解压缩的标准,在 JBIG2 中,它会尝试将每个页面分割成单个字形,并用模式匹配将相似的字形作为一个来储存,从而压缩体积。在压缩和解压缩的过程中,JBIG2 会对图像的 bitmap 进行逻辑运算,例如在压缩时使用 XOR 来储存两个相似图像之间的差异像素,并在解压缩时用 OR 来恢复原始图像(这里纯文字可能不太好理解,原文有一些图像辅助解释,可以在原文查看)。JBIG2 中的逻辑运算符( AND, OR, XOR or XNOR )使用非常灵活,他将图像视为 segment 并进行逻辑运算操作,这些操作被称为段命令。 Apple 使用开源的 Xpdf 作为 JBIG2 的实现,在 Xpdf 在处理引用 JBIG2Segment 类(包括 Xpdf 的控制命令,用于对图像的操作)时存在一个典型的整数溢出问题,攻击者可以在这里的溢出基础上进行堆溢出(这里涉及很多二进制安全的细节,可以在原文查看),从而修改了用于控制图像边界的变量,进而解除了绘制区域的限制。

3

在解除了画布限制后,攻击者就可以操作段命令( JBIG2 标准下存在完整而灵活的 AND, OR, XOR, XNOR 逻辑运算)来对任意内存上进行操作,实际上这些逻辑运算符可以组成门电路并进行计算操作。尽管 JBIG2 标准下没有提供脚本的执行环境,但是攻击者使用了超过七万个段命令组成门电路并模拟了一个小型计算机架构,有完整的 64 位寄存器、加法器等等,从而可以在这个环境下执行任意代码,接下来的沙箱逃逸,就会在这个环境下运行,而这些仅仅发生在一个图像的解析过程中。

10130 次点击
所在节点    信息安全
62 条回复
coer
2021-12-17 17:05:47 +08:00
@treo 沙特如果真的用了,那亚马逊的老板贝索斯估计就是因为这个漏洞被攻击了 hhh ,沙特王子给他发了 gif 图
kidblg
2021-12-17 18:03:59 +08:00
贝索斯之前闹丑闻,就是因为中东皇室小哥发了一个小黄图给贝索斯,然后贝索斯点开,就中招了,然后被中东小哥看到了绯闻短信,丑闻抖了出来。之所以搞贝索斯,是因为他之前买了华盛顿邮报,这个报纸经常报道中东皇室负面新闻。
mamba
2021-12-17 18:15:26 +08:00
@collen 你这是想要笑死我
mamba
2021-12-17 18:15:50 +08:00
@collen 不给人家留一点面子
thcode
2021-12-17 18:24:21 +08:00
@collen 我以前会和自己说,要接受人类的多样性。但是现在随手 block 完事,毕竟中国精神障碍疾病的就诊率非常低,你根本不知道是不是在和正常人交流
mooniitt
2021-12-17 18:31:03 +08:00
佩服楼主能理解原文
Showfom
2021-12-17 19:14:27 +08:00
太牛逼了
levelworm
2021-12-17 20:11:01 +08:00
@coer 这个是 zero click 应该不用点,不过也可能是双层攻击。。。
zyffy
2021-12-17 20:38:14 +08:00
关于楼上说解析的,一般 codec 都是根据文件的 magic number 来进行解析的,比如微信发表情
sillydaddy
2021-12-17 20:58:04 +08:00
之前看过栈溢出的利用,原理很简单,只是覆盖返回地址。这个应该是利用堆溢出吧,难度系数更大。
我觉得这个漏洞之所以这么精彩,在于 JBIG2 本身提供的 API 功能: 「 JBIG2 会对图像的 bitmap 进行逻辑运算」,有了这个就有了实现 mini 图灵机的机制,否则的话,这个漏洞的利用跟其他的堆溢出漏洞应该差不多。

期待下一篇关于怎样逃脱沙盒的介绍。
documentzhangx66
2021-12-17 22:51:01 +08:00
@xFrye

谁给你说我说过文件后缀名就是文件类型的?

讨论之前,请一定要先仔细看清评论,别急着回复,别让情绪淹没你的理智。
documentzhangx66
2021-12-17 22:55:02 +08:00
@collen
你想评论我,或者是觉得我哪里说的不对,直接 @ 我就行了。

没必要偷偷躲着发一堆我之前的发言,然后又不敢 @ 我。这种做法像极了之前那位网友:又菜,又没实力,但又想刷存在感。
treo
2021-12-17 22:56:47 +08:00
@levelworm Bezos iphone 被黑是发生在 2018 年 5 月,那时候这个 zero-click exploit 很可能还没开发出来
documentzhangx66
2021-12-17 22:57:20 +08:00
@thcode

你在不了解前后文,不了解别人的情况下,还在别人背后,批评别人是中国精神障碍疾病或不正常人。

那,你是什么?
treo
2021-12-17 22:57:32 +08:00
joooooker21
2021-12-17 23:03:16 +08:00
@documentzhangx66 #31

Xpdf 不是 pdf ,请看完全文再评论。
documentzhangx66
2021-12-17 23:30:14 +08:00
@joooooker21

我没说 Xpdf 是 pdf ,请仔细阅读我在 31 楼的回帖后再评论。
greenskinmonster
2021-12-18 09:30:34 +08:00
那么这个漏洞到底被利用了几年?
ambeta
2021-12-18 15:24:15 +08:00
评论区混入了奇怪的东西
kidblg
2021-12-18 18:53:36 +08:00
@greenskinmonster 黑客圈里有很多漏洞,发现了之后,都是拿出来卖的。估计还有很多核弹级别的漏洞还没找到出手阔绰的好买家。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/822664

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX