跳到主要内容

Operation Triangulation:0click iMessage RCE 0day

事件背景

攻击是在 Kaspersky 对自身企业网络流量的常规监控中意外发现的。 2023 年初,Kaspersky 的研究人员注意到公司内部 Wi-Fi 网络中来自若干 iOS 设备的异常流量,随即展开调查,确认数十部高级员工的 iPhone 已被植入间谍软件。被感染的设备并未出现任何可见异常,攻击者事先已删除入侵痕迹,若非网络层面的流量分析,感染可能持续更久而不被察觉。

感染最早可追溯至 2019 年,到 2023 年被发现时已持续运作数年之久。 溯源分析显示,攻击活动在被公开披露时仍在进行中,最新成功攻击的目标设备运行至 iOS 15.7。整个行动横跨数年,期间始终保持极高的隐蔽性,直到 Kaspersky 以自身作为发现起点,才使这条攻击链第一次进入公众视野。

攻击链针对 iOS 16.2 及以下版本,而实际确认的主要受害设备运行 iOS 15.7 之前的版本。 Apple 在披露漏洞时确认,CVE-2023-32434 和 CVE-2023-32435 已被在 iOS 15.7 之前的版本上主动利用。核心硬件漏洞 CVE-2023-38606 影响范围延伸至 iOS 16.6。Apple 于 2023 年 6 月发布 iOS 16.5.1 和 iOS 15.7.7,修复 CVE-2023-32434 和 CVE-2023-32435;同年 7 月发布 iOS 16.6,修复 CVE-2023-38606 和 CVE-2023-41990,至此四个漏洞全部获得补丁。

Kaspersky 明确表示自己并非这次攻击的主要目标。 公司在调查报告中指出,感染 Kaspersky 员工设备更可能是对更大范围间谍活动的附带结果,真正的攻击目标尚不明确。与此同时,俄罗斯联邦安全局(FSB)发表声明,指控 Apple 配合美国情报机构在 iPhone 中植入后门,并称俄罗斯外交官设备遭到入侵。Apple 对此予以否认,Kaspersky 也表示其调查未找到任何指向 Apple 或情报机构合谋的证据。


Operation Triangulation 代表了移动端攻击链工程化的顶点。 攻击者通过 iMessage 发送带有恶意附件的消息给受害者,整个过程无需用户有任何交互,受害者不会看到任何消息提醒或记录。随后攻击链依次完成代码执行、权限提升、持久化植入和痕迹清除,最终在设备上留下功能完整的监控植入物。这条攻击链动用了四个 0day 漏洞,其中包括一个利用 Apple 未公开硬件功能的漏洞,技术复杂度和隐蔽程度均属罕见。

攻击链结构

攻击入口利用了字体解析层面的一个远古漏洞。 CVE-2023-41990 存在于 Apple 独有的 ADJUST TrueType 字体指令处理逻辑中,该问题自 1990 年代起就已存在于代码里,后来通过补丁删除,却在某些代码路径中被遗留了下来。攻击者将其作为初始 RCE 的触发点,在无需用户交互的前提下取得 JavaScriptCore 的执行权限。

JavaScript 阶段的目标是打通从脚本到内核内存的操作路径。 漏洞利用代码使用混淆的 JavaScript 编写,体量达数千行,核心手段是调用 JavaScriptCore 的调试接口 DollarVM($vm),获得从脚本层面直接操作 JavaScriptCore 内存并调用本机 API 的能力,为后续的内核漏洞利用铺垫基础。

CVE-2023-32434 将用户态的权限打到了对整块物理内存的读写。 该漏洞位于 XNU 内存映射调用(mach_make_memory_entryvm_map)中,利用整数溢出获得用户级别对设备整个物理内存的读/写访问权限,使得后续的内核控制成为可能。

CVE-2023-38606 绕过了苹果专门设计的硬件级内存保护机制。 新款 iPhone 针对内核内存敏感区域引入了基于硬件的页面保护层(PPL),其设计目标是在内核内存读写漏洞被利用时,阻止攻击者获得对设备的完全控制。攻击者使用了硬件内置的 MMIO 寄存器调试功能绕过了这一保护——这些功能在苹果的公开文档中没有任何记录,攻击者是如何发现和掌握这个未公开功能的,至今仍是一个悬而未决的问题。完成这一步之后,攻击者已拥有对设备执行任何操作的权限。

完成提权后,攻击链立即启动痕迹清除和验证流程。 IMAgent 进程被注入负载以清除设备中的漏洞利用痕迹,随后以不可见模式启动 Safari,访问一个包含混淆 JavaScript 的 URL。该 JavaScript 验证器对设备环境进行大量检测(运算能力、API 可用性、Canvas 指纹),收集设备信息后发送给 C2,由服务器决定是否进入下一阶段。这一设计的目的是避免 0day 漏洞和后续大马在非预期环境中暴露。

CVE-2023-32435 负责在 Safari 层面执行落地 shellcode。 该 Safari 漏洞用于运行最终的 shellcode,shellcode 内部复用了 CVE-2023-32434 和 CVE-2023-38606 的利用逻辑,完成设备级别的持久化控制。

Binary 验证器在下发大马前对目标做最后一轮环境确认。 这个二进制组件可同时运行在 iOS 和 macOS 上,使用了 Apple 私有 API,并在部分模块中保留了对早期 iOS 版本的兼容支持,说明该工具已被使用相当长的时间。其主要工作是清除可能暴露攻击过程的痕迹——包括 Crash 日志、含有 iMessage 通信记录的数据库文件、以及各类数据库中的 iMessage 附件痕迹,同时收集进程列表、网络接口、设备是否越狱等环境信息,以及用户名、电话号码、IMEI、Apple ID 等设备标识。

大马具备完整的持续监控能力,通过动态加载辅助模块实现功能扩展。 植入物可录制麦克风(支持按屏幕状态、电量、时长等条件控制录制行为,使用 AES 加密传输),通过开源库读取钥匙串数据,模拟授权服务获取 GPS 位置,以及通过 SQLite 直接访问 SMS、WhatsApp、Telegram 等应用的消息数据库和照片元数据。

追踪:如何发现的

发现这次攻击始于对异常网络活动的时间线分析。 研究人员通过 libmobiledevice 对受感染设备进行 iOS 备份,使用 MVT 导出时间线数据,发现可疑网络活动的时间点附近存在一个系统进程 BackupAgent——而这个进程早在数年前就已被 Apple 弃用。这种"已知弃用进程出现活动"的模式,是定位感染时间窗口的初始线索。

MITM 环境搭建是深入分析攻击流量的关键手段。 将受感染设备接入部署了根证书的 VPN 网络,结合 IoC 指标在 Telegram 上配置实时告警,最终捕获了加密的验证器通信。破解加密的方式是通过 MITMProxy 插件将 response 中 JavaScript 生成密钥对的方法替换为从已知文本串初始化密钥对,从而控制共享密钥,实现对 C2 通信内容的解密。

iMessage 附件的取证路径需要绕过协议本身的加密设计。 附件的 AES 密钥通过 iMessage 协议传输,无法被 MITMProxy 直接拦截。研究人员采用的方法是:通过代理修改 iCloud 附件 response 中的若干字节,阻止附件成功下载,使漏洞利用无法触发,从而让 AES 密钥保留在 SMS.db 中而不被删除;再通过 iOS 备份从 sms.db 中提取密钥,配合 iCloud 附件明文(iCloud 附件不使用 HTTPS Pinning)成功还原了 .watchface 格式的恶意附件。整个取证流程最终确认了四个 0day、两个验证器和一个含多个辅助模块的植入程序的完整攻击链。

隐蔽性

攻击链在设计上最大化地压缩了留下可观测痕迹的机会。 iMessage 附件触发漏洞的方式无需用户任何交互,消息本身在利用完成后即被删除,受害者在设备上看不到任何异常。感染链的核心执行阶段在内存中完成,不向磁盘落地可执行文件,Crash 日志、iMessage 数据库中的附件记录等可能暴露利用过程的文件也在攻击链内部被逐一清除。大马通过模拟已授权服务的行为获取位置等敏感信息,进一步规避了权限异常告警。

分阶段的验证器设计使得 0day 和大马被捕获的风险降到最低。 JavaScript 验证器和 Binary 验证器作为独立的筛查层,在确认目标环境符合预期之前不下发后续载荷。即使某一阶段被截获,攻击者损失的也只是当前阶段的组件,而不是整条攻击链的核心工具。

复杂性

四个 0day 的串联使用,意味着攻击者需要对 iOS 从字体渲染层到硬件寄存器层有贯通式的理解。 每个漏洞承担攻击链中的特定职责:字体漏洞负责初始代码执行,内核整数溢出负责获得物理内存读写权限,硬件 MMIO 寄存器漏洞负责绕过硬件级保护,Safari 漏洞负责落地执行。四个漏洞在同一条攻击链中顺序配合,任何一个失效都会导致整条链路中断。

利用未公开 CPU 调试功能绕过硬件保护,代表了漏洞研究能力的极高水位线。 PPL(页面保护层)是 Apple 专门针对内核内存写入攻击设计的硬件级防御,其设计预期是即使攻击者取得内核读写能力也无法完全控制设备。攻击者选择利用芯片上存在但从未被公开文档记录的 MMIO 寄存器功能来绕过它,这意味着攻击者对 Apple SoC 的内部设计有远超公开资料的深度掌握,或者拥有针对芯片的硬件级逆向分析能力。

防御启示

多层安全设计并不等同于攻击者无法突破,关键是建立异常行为检测而不是依赖边界防御。 PPL 的存在是为了在漏洞被利用时提供额外一层保护,但攻击者的应对方式是找到 PPL 本身的绕过路径。当攻击者具备充足的漏洞储备和系统级知识时,叠加防御层只会提高攻击成本,无法提供绝对保障。检测异常行为——包括弃用系统进程的活动、非预期的网络外联、与正常使用模式不符的内存操作——是在 0day 攻击已经发生时仍有机会发现入侵的有效路径。

攻击者归因

攻击者身份至今未被任何一方正式确认,但现有技术线索指向国家级行为体。 这条攻击链动用了四个 0day 漏洞,其中包括针对 Apple SoC 未公开硬件功能的利用,开发和维护这类能力所需的资源、时间和芯片级逆向工程能力,均超出一般网络犯罪组织的范畴。Kaspersky 未就归因发表任何官方声明。

俄罗斯政府的指控将矛头指向美国情报机构,但未提供可验证的技术证据。 FSB 在 Kaspersky 披露后随即发表声明,称 NSA 利用 Apple 植入的后门入侵了俄罗斯外交官的设备,并要求 Apple 作出解释。这一政治表态的时机与内容引发广泛关注,但 FSB 始终未公开支撑其指控的技术细节。Kaspersky 自身的调查结论与该指控保持距离。

部分独立研究者基于工具特征和目标选择提出了与 NSA 相关的推测性分析,但同样未获证实。 攻击工具中发现的对旧版 iOS 的兼容性保留、多年持续运作而不暴露的能力管理方式,以及目标涵盖安全行业高级员工这一选择,均指向一个长期、有节制运作的情报收集项目。37C3 会议(2023 年 12 月)上 Kaspersky 研究人员对整条攻击链的完整披露,是目前公开资料中对该行动技术细节最为系统的呈现,但归因问题在会议上同样未有定论。