V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Divinook
V2EX  ›  信息安全

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

  Divinook · 158 天前 · 7531 次点击
这是一个创建于 158 天前的主题,其中的信息可能已经有所发展或是发生改变。

原文见: 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 位寄存器、加法器等等,从而可以在这个环境下执行任意代码,接下来的沙箱逃逸,就会在这个环境下运行,而这些仅仅发生在一个图像的解析过程中。

61 条回复    2021-12-20 15:44:48 +08:00
cest
    1
cest  
   158 天前
apple 打赏过 xpdf 吗?
yanyumihuang
    2
yanyumihuang  
   158 天前
这也太猛了吧
wazggcd
    3
wazggcd  
   158 天前 via iPhone
卧槽,那有什么临时性的防御措施吗?
also24
    4
also24  
   158 天前
@wazggcd #3
The vulnerability discussed in this blog post was fixed on September 13, 2021 in iOS 14.8 as CVE-2021-30860.
v2000000001ex
    5
v2000000001ex  
   158 天前
ios13.5 索索发抖
rphoho
    6
rphoho  
   158 天前
类似之前微信的 gif 溢出 bug 吧
Ginray
    7
Ginray  
   158 天前
太猛了,每一步都在想象之外
madNeal
    8
madNeal  
   158 天前
java ${XXX:xxxxxxx}
hahahaha123567
    9
hahahaha123567  
   158 天前
攻击者怎么知道 Apple 使用的是 ImageIO/Xpdf 库呢?
这种纯内存操作已经是炫技了吧
cholerae
    10
cholerae  
   158 天前
@wazggcd ios 14.8 已经修复了
x86
    11
x86  
   158 天前
这是个神仙呀
liuxu
    12
liuxu  
   158 天前
真 TM 牛逼。。。
edwinxe2v
    13
edwinxe2v  
   158 天前
卧槽,太牛逼了!多谢分享,讲解得很清楚。
搜了一下,Hacker news 的相关讨论: https://news.ycombinator.com/item?id=29568625
24bit
    14
24bit  
   158 天前
太强了
beichenhpy
    15
beichenhpy  
   158 天前   ❤️ 12
”但是攻击者使用了超过七万个段命令组成门电路并模拟了一个小型计算机架构“
dingwen07
    16
dingwen07  
   158 天前
太强了。。。
qsmd42
    17
qsmd42  
   158 天前
其实我好奇的是国内的网安承包商有没有买 NSO 的软件
micean
    18
micean  
   158 天前
我的天。。。。
shayuvpn0001
    19
shayuvpn0001  
   158 天前
关闭 iMessage 了应该就没事了吧
AlexaZhou
    20
AlexaZhou  
   158 天前   ❤️ 1
这个漏洞比 log4j 牛逼多了,要是熬夜修这个漏洞也有意思呀,熬夜修 log4j 这么蠢的漏洞,一点成就感都没有
agagega
    21
agagega  
   158 天前 via iPhone
@hahahaha123567
iOS 系统里有 legal notice ,里面应该会写明用到的每一个开源软件以及 license
wazggcd
    22
wazggcd  
   158 天前 via iPhone
@also24 哦哦好,我对安全不太懂,以为是还没修复的呢,真是涨知识啊
@cholerae 好的好的,那就放心了
levelworm
    23
levelworm  
   158 天前
我擦太牛逼了,什么样的人可以发现这种漏洞?感觉是深深浸入系统编程几十年才有这种功力。。。
levelworm
    24
levelworm  
   158 天前
妈的这种才叫编程。。。平时做的那些都是什么啊。。。
Perry
    25
Perry  
   158 天前 via iPhone
牛逼,大学的时候光是设计十几个 instructions 就头秃了
cwyalpha
    26
cwyalpha  
   158 天前 via iPhone
对比下 l4j 的一句话攻击就知道二进制攻击的难度有多大了
Elietio
    27
Elietio  
   158 天前
这才叫黑客啊,太强了
paceewang1
    28
paceewang1  
   158 天前
"尽管 JBIG2 标准下没有提供脚本的执行环境,但是攻击者使用了超过七万个段命令组成门电路并模拟了一个小型计算机架构..."
zmxnv123
    29
zmxnv123  
   157 天前
真正的 hacker news.
treo
    30
treo  
   157 天前   ❤️ 1
以色列人做的洞,卖给沙特政*府,用来针对沙特异*议者
为啥这么麻烦,直接把异*议者肢解不就好了
documentzhangx66
    31
documentzhangx66  
   157 天前
楼上居然有一堆说强,看来我 guo 计算机教育任重道远..

就算你不懂图像处理,至少应该明白,接口在设计时,应该加入指定文件类型,来避免把 gif 猜测到 pdf 这种浪费算力与电池的脑 can 操作。
zhoudaiyu
    32
zhoudaiyu  
   157 天前   ❤️ 1
ta 来了,ta 来了,独醒帝来了
LUO12826
    33
LUO12826  
   157 天前
@documentzhangx66 你能有多明白呢?反正我就收到过文件拓展名和实际文件类型不一致的图片。而且这也不影响他们强呀,系统级编程做到这种程度的人能有多少呢?
Coolwinds
    34
Coolwinds  
   157 天前
什么叫门电路组成了一个小型计算机架构?传说中的 0,1 写了个操作系统?
pengtdyd
    35
pengtdyd  
   157 天前
这个要懂汇编吧,现在国内懂汇编的人都不多了吧
collen
    36
collen  
   157 天前   ❤️ 8
请问如何把安卓声音发送到 PC 电脑?

程序员应该学点婚恋学的基础知识,来避免自己陷入舔狗一无所有,或高攀成功后婚后吞针的遭遇。

楼上居然有一堆说强,看来我 guo 计算机教育任重道远..

就算你不懂图像处理,至少应该明白,接口在设计时,应该加入指定文件类型,来避免把 gif 猜测到 pdf 这种浪费算力与电池的脑 can 操作。

Windows 也是这样。开机时、解开锁屏时、mstsc-RDP-远程桌面连接时,等等。

不喜欢就别去读,不就行了。换个对味的内容。

起点,米读小说,快看,那么多有趣的内容,不够你看吗?

比如起点的冒牌大英雄、裁决、异界全职业大师、末法王座;
比如米读小说的玄幻:我真的不是盖世英雄;
比如快看的我独自升级。
推荐的都是爽文。

PC 装一个 360 安全卫士,打开里面的流量防火墙里的防护功能,然后打开树莓派 4 。如果 树莓派 4 有什么攻击网络的动作,360 安全卫士的流量防火墙的防护功能,会记录并提示你的。

他太懂回答了
yinanc
    37
yinanc  
   157 天前
这也太神仙了
xFrye
    38
xFrye  
   157 天前
@documentzhangx66 谁给你说文件后缀名就是文件类型的?
xing7673
    39
xing7673  
   157 天前 via iPhone
@shayuvpn0001 如果 apple 是一个正常应用程序员写的话,应该就不会去解析这个 gif 了。那就不会有问题产生。
boris93
    40
boris93  
   157 天前 via iPhone
@Coolwinds #34 不,是用各种逻辑运算,以软件的方式实现了一部分硬件………
coer
    41
coer  
   157 天前
@treo 沙特如果真的用了,那亚马逊的老板贝索斯估计就是因为这个漏洞被攻击了 hhh ,沙特王子给他发了 gif 图
kidblg
    42
kidblg  
   157 天前   ❤️ 2
贝索斯之前闹丑闻,就是因为中东皇室小哥发了一个小黄图给贝索斯,然后贝索斯点开,就中招了,然后被中东小哥看到了绯闻短信,丑闻抖了出来。之所以搞贝索斯,是因为他之前买了华盛顿邮报,这个报纸经常报道中东皇室负面新闻。
mamba
    43
mamba  
   157 天前
@collen 你这是想要笑死我
mamba
    44
mamba  
   157 天前
@collen 不给人家留一点面子
thcode
    45
thcode  
   157 天前
@collen 我以前会和自己说,要接受人类的多样性。但是现在随手 block 完事,毕竟中国精神障碍疾病的就诊率非常低,你根本不知道是不是在和正常人交流
mooniitt
    46
mooniitt  
   157 天前
佩服楼主能理解原文
Showfom
    47
Showfom  
   157 天前
太牛逼了
levelworm
    48
levelworm  
   157 天前 via Android
@coer 这个是 zero click 应该不用点,不过也可能是双层攻击。。。
zyffy
    49
zyffy  
   157 天前 via Android
关于楼上说解析的,一般 codec 都是根据文件的 magic number 来进行解析的,比如微信发表情
sillydaddy
    50
sillydaddy  
   157 天前
之前看过栈溢出的利用,原理很简单,只是覆盖返回地址。这个应该是利用堆溢出吧,难度系数更大。
我觉得这个漏洞之所以这么精彩,在于 JBIG2 本身提供的 API 功能: 「 JBIG2 会对图像的 bitmap 进行逻辑运算」,有了这个就有了实现 mini 图灵机的机制,否则的话,这个漏洞的利用跟其他的堆溢出漏洞应该差不多。

期待下一篇关于怎样逃脱沙盒的介绍。
documentzhangx66
    51
documentzhangx66  
   157 天前
@xFrye

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

讨论之前,请一定要先仔细看清评论,别急着回复,别让情绪淹没你的理智。
documentzhangx66
    52
documentzhangx66  
   157 天前
@collen
你想评论我,或者是觉得我哪里说的不对,直接 @ 我就行了。

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

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

那,你是什么?
joooooker21
    56
joooooker21  
   157 天前
@documentzhangx66 #31

Xpdf 不是 pdf ,请看完全文再评论。
documentzhangx66
    57
documentzhangx66  
   157 天前
@joooooker21

我没说 Xpdf 是 pdf ,请仔细阅读我在 31 楼的回帖后再评论。
greenskinmonster
    58
greenskinmonster  
   157 天前
那么这个漏洞到底被利用了几年?
ambeta
    59
ambeta  
   156 天前
评论区混入了奇怪的东西
kidblg
    60
kidblg  
   156 天前
@greenskinmonster 黑客圈里有很多漏洞,发现了之后,都是拿出来卖的。估计还有很多核弹级别的漏洞还没找到出手阔绰的好买家。
LinShiG0ng
    61
LinShiG0ng  
   154 天前
已经完全超出我的知识范围了,真的就是,我看不懂,但是我大受震撼
关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4121 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 27ms · UTC 02:39 · PVG 10:39 · LAX 19:39 · JFK 22:39
Developed with CodeLauncher
♥ Do have faith in what you're doing.