light bokeh photography

iMessage 误入深水区 – Operation Triangulation 介绍

1. 东窗事发

前些个儿咱卡巴斯基莫斯科老正三色旗的兄弟们显得没事儿干,发现这无线网里有几个水果手机乱联网。因为现代水果手机没法性感手机在线杀毒,我们就给他整了个整机备份,然后请出我们东厂软件 mvt-ios 给备份来了个大记忆恢复术。结果您猜怎么着,还真抓到点东西。哥们手机一收 iMessage,连点都不用点,立马就上线了!

2. 攻击链路

鉴于这玩意事后清理做的还挺干净,哥们好不容易抓了一活的,看看老兄的APT怎么整了个大的,还是震网同款四个0day豪华配置:

  1. 大洋对面的朋友给你们逐一发送老八秘制 iMessage 信息,水果系统吃下去以后并没有通知用户
  2. iMessage 里利用苹果字体引擎处理90年代传下来的秘制ADJUST指令时会爆的问题 CVE-2023-41990 获得本地代码执行权限(那有的同学可能会问了,为啥每次字体引擎都会爆?那你要知道字体甚至能拿来打游戏)
  3. 秘制小汉堡字体执行了一个多阶段 ROP,拿 NSExpression 给苹果的JS引擎喂了个JS写的提权脚本,这个混淆过的提权脚本有11000多行,然后用苹果的 DollarVM 调试功能操作 JSCore 的内存,调用原生 API。
  4. 哥们的脚本兼容性贼好,同时支持新老 iPhone,给新 iPhone 整了Arm指针签名(PAC)绕过。
  5. 然后在脚本里用了个苹果内核0day,CVE-2023-32434,拿到了任意内核读写。
  6. 之后就是最强而有力的0day,利用一个没被 XNU 正确保护的内存映射IO绕过了苹果的内存页保护,编号是 CVE-2023-38060。这个我们下面会细嗦。
  7. 这哥们本来就可以现在就整个狠活,但是他比较小心,他拉了两个进程,第一个是起了个 FaceTime 的后台进程皮套,然后用它来把之前的东西毁尸灭迹了,第二个是后台起了个 Safari 浏览器,重定向到下一阶段的加料网页
  8. 网页跑了个脚本,看看 战鹰 用户几岁了,是不是要找的人,如果是,那继续把 Safari 日了,这个脚本用了个内存管理的洞跑任意代码执行,CVE-2023-32435。之后又写了个跟上面完全不同的利用两个洞的大炸逼,下载执行间谍软件。

3. 小心为上

之前讲到,这玩意清理做的很干净,怎么个干净法呢?首先,这攻击链路里问了两次用户几岁了,在第三步跑的 JavaScript 和最后下载的间谍软件中都做了验证,发现打错人了就崩撤卖溜,防止打错人了,白送给大家一0day。
第一次跑的 JavaScript 校验里测试了一大堆算术操作,媒体编解码之类的,然后画了个三角形,把画图结果当设备指纹上传。
第二次的就比较复杂了,不仅校验,还会把崩溃日志和秘制小 iMessage 删掉,避免被抓现行。同时还会把装了的应用,在运行的进程,用户名,IMEI和苹果账号,还有设备越狱状态上传到服务器。上传完一套之后还会偷偷给用户录音,同时监控用户的地理位置。

4. 俺拾之乱,或,我是怎么停止内耗并拿下CoreSight的

上面这波操作里最神必的还是那个绕过苹果内存页保护的0day,这个强而有力的漏洞的神必之处在于,这位海对面的技师老大成功的俺寻思出了一个没人知道的设备地址,并且寻思出了这玩意在不同水果 CPU 上的位置,然后还在路上拾到了这玩意的用法和校验算法。正三色旗的莫斯科爷们检查过了,这个设备地址从来没出现在我们能拿到的任何苹果软硬件和文档里。
但是呢,这个设备地址离 GPU 的设备地址还蛮近的,然后大家发现,原来这堆东西在水果的 GPU 的协处理器上,于是把水果 GPU 固件进行了一个向的逆,然而并没有找到任何用到这玩意的地方,于是大家决定研究一下技师老大从亚空间寻思出来的代码,结果发现怎么和 CPU 的 CoreSight 长的如此相像,那倒是还能理解他怎么寻思出这有个设备的。恰巧,苹果的 GPU 并没有完全的被页面保护保护到,于是我们这位绿皮就从GPU寻思到了被保护的内存里。
更神必的是,这个设备根本没有被任何代码或者固件用到,我们至今没法知道为什么这个设备没被关掉。也许这个用了神必的自定义汉明码的设备的使用方法是从哪个苹果丢掉的井盖或者固件里拾出来的罢。

结束

最后让我们点一首 Ingress 金曲: Triangles are my favorite shape

参考资料

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注