OffensiveCon24:BLASTPASS 技术分析;从蹭会到连夜追极光
2024-5-13 09:3:9 Author: mp.weixin.qq.com(查看原文) 阅读量:0 收藏

会棍博主重新上线。
想换口味去点别地方,今年 OffensiveCon 完全没买票也没计划。是开幕前两天冥冥之中突然感觉会错过什么东西(下文会揭晓这个神秘的超自然力量),直接订了第二天一早的飞机过来。
有一会形式叫做 LobbyCon(大堂会议),即使没有票也可以到场外找人尬聊。正式议题前一天遇到前不久 BlackHat Asia 的一个议题的作者,他找我聊了下 NSPredicate 转译回 ObjectiveC 伪代码的问题。

http://i.blackhat.com/Asia-24/Asia-24-Frielingsdorf-YouShallNotPassAnalysing.pdf

先简单回顾一下他的议题。

去年臭名昭著的 NSO 又秀了一把肌肉,用一个单 poc 就很复杂的 libwebp 0day 漏洞开发了零点击漏洞攻击。关于这个 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 的 homed 进程PWNYOURHOME),然后切换到 webp 漏洞。

此前的分析认为攻击者没有成功利用 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 甚至开始环视全场,干脆问漏洞的作者今天有没有来,给大家秀一下更多的细节。我还以为这段是节目效果,没想到真的有很多未完待续的部分,就草草结束了。

今年的欢迎 party 和去年完全一致,还是几辆大巴把人拉到同一个餐厅。
但是接下来的体验绝对能记住一辈子。
大家这两天被史诗级太阳风暴和极光刷屏了吗?没错,本文也将加入炫耀的行列。
先插叙一段背景。之前想了很久都没去成北欧追极光。怕冷没装备,凑不到人,还穷。

去年年底开始太阳活动异常活跃。11 月有一次,欧洲相当多地区罕见地观测到了极光。那天下午(对应国内时区凌晨)看着群里大佬刷屏,在新疆拍到的红色极光,我还没有意识到同一时间我头顶也有……就这么错过了一次不花钱的。

后来大年初五的飞机上,凌晨被气流颠簸弄醒。迎财神了。打开地图发现定位在俄罗斯,脑子里突然冒出来一个念头,要不要看看外面有没有极光。

肉眼看远处就一大片云,分辨不出什么颜色。但是手机夜景模式直接就是绿的。
虽然我带了相机,但是缺少前景,机舱里三脚架也伸展不开,反而没有手机夜景模式好看。
回到 OffensiveCon 当天晚上。
从下午开始新闻就不停出现史诗级太阳风暴的消息。美国国家海洋和大气管理局(NOAA)针对这个事件开了新闻发布会,预警可能会出现的无线电中断、卫星定位不准等现象。我当时就在群里嚷嚷这次要来一波大的。
所以晚上虽然有几百号黑客在旁边尬聊,我是完全心不在焉。一边刷着极光预报的 KP 值,一边盼着太阳赶紧落下去。
柏林的纬度十点多了才天黑。我还发了条推,怎么 8.0 的 KP 和 28% 可见概率的预报,毛都没看到?

这时候我在聚会的院子里拍了第一张照片。可以明显看到云层里出现紫色的光,但我没办法确认到底是不是城市光污染。聚会的地点就在柏林动物园隔壁,相对还是很市中心的。
十一点左右推上欧洲区网友已经陷入疯狂了。阿尔卑斯地区有很多 24 小时直播的风景监控探头,直接变成了一片紫色。极光预报 app 上的目击报告地点是这样的:

同时我在微信上发动欧洲留学的朋友去碰运气,起码帮三四个人省下了北欧机票钱吧。也不知道哪个大英的小留,下午还在嘲讽我天天就知道看极光,结果晚上屁颠屁颠去拍一堆照片。还有朋友直接在卧室门都不用出,躺着看。

找朋友要的德国乡下的图,暴力水印了一下

但我自己还没看到啊。

我直接跑旁边有树的地方盯了好久,也不知道是不是心理作用,总觉得天色有一点粉粉的。

零点终于轮到我这里来了大爆发。虽然之前就已经拍到了一张,只是不能确定。但这一波的光柱形状和颜色就完全确认了,强到市区也肉眼可见,只是裸眼难以分辨颜色而已。

这张照片压低了曝光和饱和度,来模拟肉眼真实的效果。

而手机打开夜景模式之后,就可以直接实时在取景器里看。


我们不和网上的照骗同流合污。这张图仅仅用了 iPhone 3 夜景模式,没有特别夸张的长曝光,右下角的建筑还没有过曝。

当时现场还有上百号黑客在里面把酒言欢。我很想对着他们大喊快来看极光,但又觉得欧洲人要去北欧买张廉航机票说走就走,大体是不稀罕这种东西,就小范围跟几个附近的人展示了一下手机取景器的效果。

零点多我和另一个朋友直接一拍大腿,决定打车去郊区看。

当时出租车司机的视角是这样的:两个外国人走过来拦车,开口就问,能载我们到一个月黑风高的地方吗?越暗越好。

我觉得他当时可能心跳有一点加快。

在给他看了照片并大致解释了一下之后,没想到司机不仅同意了,还答应等我们拍完照再载我们回来。

接下来就是难以置信的追光之旅。我们花了 150 欧,包了两个小时的车,跑到距离柏林市中心 30 分钟车程的郊区。中途换了几个地方,看了个爽。我觉得司机也挺开心,大半夜这个营业额还是不太常遇到的。

中途 KP 值一度涨到 9。要知道去年年底那一次,大半个欧洲都目击到极光的事件,KP 是 7。
整个天都粉粉的,还偶有光柱跳动。无法形容的感觉。这不是北极圈,这是柏林!
朋友问我关键时刻为什么没带相机。其实相机如果没有三脚架意义也不大,还不如手机算法加持的夜景模式。更何况我上次在飞机上用相机拍极光已经翻车过一次了。

说来我还以为那帮大黑客不稀罕呢。第二天好几个人在我评论区怒拍大腿,二十年一遇的奇景怎么就给错过了。

第二晚还有酒会。当晚极光的数据已经明显下降了,我就没再尝试出去追,倒是给好多人秀了手机的照片拉仇恨。


扩展阅读:彗星来的那一夜


文章来源: https://mp.weixin.qq.com/s?__biz=Mzk0NDE3MTkzNQ==&mid=2247485381&idx=1&sn=fb14149b0a3b3560d2b313fee9d631d0&chksm=c329f935f45e702334e0ff11d11c3070b904a53d96c56ec42bb3b6a07931a02ebd563e324449&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh