http://i.blackhat.com/Asia-24/Asia-24-Frielingsdorf-YouShallNotPassAnalysing.pdf
先简单回顾一下他的议题。
去年臭名昭著的 NSO 又秀了一把肌肉,用一个单 poc 就很复杂的 libwebp 0day 漏洞开发了零点击漏洞攻击。关于这个 webp 的 0day 漏洞,可参考如下两篇文章的分析:
https://blog.isosceles.com/the-webp-0day/
这个 iVerify 是做手机取证的厂商,拿到了样本资源,也就是被感染设备的 iTunes 备份数据。其中包含了原始的漏洞利用载荷和数个漏洞未能完美执行而导致的崩溃日志。
这个议题并没有能分析出漏洞的利用链,不过由于最终的载荷用了 NSPredicate,体现在样本里就是大片的代码字符串,初步具有一定的可读性。
无法考证到底是谁第一个把 NSPredicate 用到实战里。最早公开的研究是 Real World CTF 2019 上的一个 ctf 题,数年之后隔三差五被炒冷饭。所以作者跑来问我。
在样本里提取出来的代码格式化和解密之后大体结构如下:
更多细节请参考作者公开的 ppt 材料。
在这个 NSExpression 里调用了数个深藏在 PrivateFrameworks 里的私有函数,用来解码混淆。怕是专业的 iOS 开发也不会知道这些乱七八糟的 category 方法。攻击者肯定在大规模逆向和查找二进制代码上做了一些自动化的工作。
这篇演讲简而言之就是 strings 找到 NSExpression,然后对轻度混淆的代码做了一些展开工作。但整个 exploit 是如何从图像解析漏洞跳到执行 NSExpression 仍然是一个迷。
这一次 Ian Beer 有一个类似主题的演讲 Blasting Past Webp。Google 也拿到了样本,在这个议题公开他们的分析进度。
此前的分析认为攻击者没有成功利用 HomeKit 的部分,然后才换到 webp。但这个议题认为(具体细节还没搞清楚)两个漏洞其实是一起利用的,PWNYOURHOME 用来远程泄漏基地址绕过 ASLR,然后 BLASTPASS 执行任意代码。
BLASTPASS 的触发点是一个 pkpass 文件,本质上是嵌入其中的图片和 json 格式的元数据。
https://developer.apple.com/documentation/passkit_apple_pay_and_wallet
玄机在 pkpass 内嵌的两个图片文件。虽然扩展名都是 png,但一个是 webp 格式,另一个是 TIFF。
接下来是分析 webp 漏洞 CVE-2023-4863 的堆布局技术。这个图片用来分配内存的原语利用了一个特殊的 EXIF 标签,而这个标签的格式居然是苹果的 Property List。
如果读者有 iOS 的开发经验,就是那个 Info.plist 用的格式。plist 支持嵌入长度和内容完全可自定义的二进制数据,还有字典、uuid 等数据格式,也是 macOS / iOS 最常见的数据序列化容器,用来做堆风水不奇怪。
EXIF 就是照片里面保存 GPS 坐标、镜头型号品牌、曝光等元数据的部分。我拙劣地凹了很多年的摄影爱好者人设,居然第一次知道 EXIF 里还能嵌入 plist,还会被系统解析。
https://exiftool.org/TagNames/EXIF.html
有没有懂哥讲讲,为什么尊贵的哈苏会用苹果的格式?
而另一个图片 TIFF 也没闲着。虽然本身不会触发任何漏洞,但承担了类似堆喷射的角色。解码出来的位图不是给人看的,而是具有特定重复模式的二进制数据结构。其中包含一些伪造的 CoreFoundation 对象,用来触发第一个控制 pc 寄存器的原语。
议题到这里戛然而止,Ian 甚至开始环视全场,干脆问漏洞的作者今天有没有来,给大家秀一下更多的细节。我还以为这段是节目效果,没想到真的有很多未完待续的部分,就草草结束了。
去年年底开始太阳活动异常活跃。11 月有一次,欧洲相当多地区罕见地观测到了极光。那天下午(对应国内时区凌晨)看着群里大佬刷屏,在新疆拍到的红色极光,我还没有意识到同一时间我头顶也有……就这么错过了一次不花钱的。
后来大年初五的飞机上,凌晨被气流颠簸弄醒。迎财神了。打开地图发现定位在俄罗斯,脑子里突然冒出来一个念头,要不要看看外面有没有极光。
找朋友要的德国乡下的图,暴力水印了一下
但我自己还没看到啊。
我直接跑旁边有树的地方盯了好久,也不知道是不是心理作用,总觉得天色有一点粉粉的。
零点终于轮到我这里来了大爆发。虽然之前就已经拍到了一张,只是不能确定。但这一波的光柱形状和颜色就完全确认了,强到市区也肉眼可见,只是裸眼难以分辨颜色而已。
这张照片压低了曝光和饱和度,来模拟肉眼真实的效果。
而手机打开夜景模式之后,就可以直接实时在取景器里看。
我们不和网上的照骗同流合污。这张图仅仅用了 iPhone 3 秒夜景模式,没有特别夸张的长曝光,右下角的建筑还没有过曝。
当时现场还有上百号黑客在里面把酒言欢。我很想对着他们大喊快来看极光,但又觉得欧洲人要去北欧买张廉航机票说走就走,大体是不稀罕这种东西,就小范围跟几个附近的人展示了一下手机取景器的效果。
零点多我和另一个朋友直接一拍大腿,决定打车去郊区看。
当时出租车司机的视角是这样的:两个外国人走过来拦车,开口就问,能载我们到一个月黑风高的地方吗?越暗越好。
我觉得他当时可能心跳有一点加快。
在给他看了照片并大致解释了一下之后,没想到司机不仅同意了,还答应等我们拍完照再载我们回来。
接下来就是难以置信的追光之旅。我们花了 150 欧,包了两个小时的车,跑到距离柏林市中心 30 分钟车程的郊区。中途换了几个地方,看了个爽。我觉得司机也挺开心,大半夜这个营业额还是不太常遇到的。
说来我还以为那帮大黑客不稀罕呢。第二天好几个人在我评论区怒拍大腿,二十年一遇的奇景怎么就给错过了。
第二晚还有酒会。当晚极光的数据已经明显下降了,我就没再尝试出去追,倒是给好多人秀了手机的照片拉仇恨。
扩展阅读:彗星来的那一夜