安全界至今公认最精妙的零点击漏洞利用链,莫过于 NSO Group 针对 iMessage 发起的 FORCEDENTRY,被 Google Project Zero 评价为他们见过的最复杂的漏洞利用之一。
最离谱的地方,是黑客竟然在一个图片解码器里造出了一台虚拟计算机。
攻击从一条无需用户点击的 iMessage 开始。
附件看起来是 .gif 图片,实际上却是嵌入了 JBIG2 数据的恶意 PDF。
当时 iOS 的图片处理流程会通过 ImageIO 识别文件真实格式,结果这份伪装的 GIF 被送进 CoreGraphics 的 PDF 解码器,触发 JBIG2 解析中的整数溢出,最终获得越界内存读写能力。
JBIG2 原本是上世纪为扫描文档设计的黑白图像压缩标准,支持通过 AND、OR、XOR、XNOR 等逻辑运算组合图像。
攻击者利用这一特性,构造了超过 70,000 条 JBIG2 段命令,硬是在图片解码过程中搭建出一台拥有寄存器、64 位加法器和比较器的虚拟计算机。
它甚至能够搜索内存地址、执行算术运算,为下一阶段的沙箱逃逸做好准备。
而真正的沙箱逃逸,又利用了 Apple 的 NSExpression 反序列化与求值机制。
整个过程不需要用户点击附件,也没有依靠传统的机器码注入或 ROP 链来完成初始攻击。
最可怕的不是图片解码器存在内存漏洞,而是攻击者把原本只用于处理黑白像素的逻辑运算,变成了一台能够执行复杂计算的机器。
这也解释了为什么 FORCEDENTRY 至今仍是零点击漏洞研究中的经典案例。
Google Project Zero 技术复盘:
projectzero.google/2021/12/a-deep…
https://x.com/fishjar/status/2118976591514800448?s=35