news 2026/4/15 14:32:02

第141篇:美国苹果手机“三角测量“iMessage消息附件后门及辅助模块样本是如何被捕捉到的 | “三角测量“系列第7篇

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第141篇:美国苹果手机“三角测量“iMessage消息附件后门及辅助模块样本是如何被捕捉到的 | “三角测量“系列第7篇

Part1 前言

大家好,我是ABC_123。这两天ABC_123满怀着对美国NSA发起的苹果手机"三角测量"行动的极大兴趣、对该后门极其复杂的攻击链、以及超过认知的苹果设备底层漏洞分析的探索,而连续更新了多篇技术文章。今天ABC_123着重给大家讲解一下,国外安全公司是如何捕捉到所有阶段的"三角测量"后门样本的。让人惊叹的是,历经很多波折,耗时长达数月!最终获得了4个0day漏洞、2个验证器后门、1个TriangleDB植入后门及其后门的多个辅助模块(文末有技术交流群的加群方式)。

《第135篇:美国APT的苹果手机"三角测量"行动是如何被溯源发现的》

《第136篇:美国NSA的苹果手机"三角测量"后门的窃密模块分析 | 机器学习引擎识别照片信息》

《第137篇:揭秘美国NSA的苹果手机"三角测量"后门的隐匿手段》

《第138篇:俄罗斯卡巴斯基是如何发现美国iPhone手机"三角测量"攻击的 》

《第139篇:美国苹果手机"三角测量"验证器后门样本及0day漏洞是如何被捕捉到的》

《第140篇:美国NSA苹果手机"零点击"漏洞入侵中国国家授时中心的流程图梳理和分析》

Part2 溯源分析过程

  • 研究iMessage消息附件传输流程

为了获取iMessage恶意附件样本,需要仔细研究一下苹果移动设备发送 iMessage 附件的流程。包括以下几个步骤:

1. 发送方生成一个随机的 AES 密钥,并使用它去加密iMessage附件;

2. 加密后的附件密文被上传到 iCloud;

3. 加密附件的 iCloud 链接会与 AES 密钥一起发送给收件人,AES 密钥还会使用移动设备的RSA 公钥进行额外加密。

因此,为了获取恶意iMessage附件文件,需要两样东西:

1. iMessage附件的密文(可以从 iCloud 得到);

2. AES 密钥(可以通过 iMessage 得到,而且会暂存到苹果移动设备的本地数据库中)

其中,获取附件密文是可以实现的,可以通过 mitmproxy 拦截到发往 iCloud 服务器的流量。之前文章介绍过 iOS 不允许解密 Apple 服务的 HTTPS 流量,有SSL Pinning绑定;然而,iCloud 附件链接却是该规则的一个例外,它的通信是可以解密的,但获取 AES 密钥的过程相当困难。该密钥通过 iMessage 协议发送, mitmproxy 是无法进行拦截的。经过研究,发现了一种利用对目标设备的物理访问来恢复附件并提取该密钥的方法。我们想办法使iMessage附件(是通过 iCloud 链接下载的)内容报错,导致其无法成功下载,进而防止漏洞被激活而导致附件被删除,于是先前的 AES 加密密钥会一直被保存在 SMS.db 数据库中。

接下来使用先前搭建好的mitmproxy 插件更改iMessage附件密文中的几个字节,这样就破坏了下载附件密文的过程,导致目标设备无法成功下载/处理附件,而iMessage已经把解密密钥写在本地数据库 SMS.db 中。之后研究人员从设备的 iTunes 备份里把 SMS.db 导出来,拿到 AES 密钥,再用原始(未破坏的)密文把附件解密提取出来,得到恶意文件样本。最终我们成功解密并获得了攻击者发送的恶意 .watchface 附件,这就是用来攻破设备的漏洞链的起点。

注:当iPhone设备收到包含 iCloud 链接的 iMessage 时,客户端先处理消息元信息,并把用于解密附件的 AES 密钥保存到本地(例如 SMS.db),即"消息里的钥匙先存好"。真正去 iCloud 下载并解密附件是后续一步,也就是说,客户端会去取密文并尝试用已经存的 AES 密钥进行解密。

  • 获取并还原三角测量后门样本

在我们获取到攻击者所利用的漏洞后,下一步就是收集并还原三角测量(Triangle)后门样本。二进制验证器后门负责从攻击者的 C2 服务器下载并激活 Triangle 后门模块;它在与 C2 通信时使用了 RSA 与 AES 的组合加密方案。由于使用了 RSA 公钥对称密钥封装,仅凭抓取到的密文流量无法直接解密并恢复被植入的后门样本。为与 C2 服务器交换数据,二进制验证器后门的工作流程如下:

1. 生成一个随机的 AES 会话密钥;

2. 使用验证器后门配置中指定的服务器RSA 公钥对该 AES 密钥进行加密;

3. 使用生成的 AES 密钥对要发送到 C2 的消息体进行对称加密;

4. 将加密后的消息发送到 C2,并接收其返回的密文响应;

5. 使用同一 AES 会话密钥解密 C2 的响应,得到明文数据。

二进制验证器后门对每个要发送的数据包都按下列 ARM 指令序列调用加密流程:

E0 03 18 AA MOV X0, X242E 1A 00 94 BL serialize_plistA0 04 00 B4 CBZ X0, loc_100006CD4E1 03 17 AA MOV X1, X2339 1A 00 94 BL encryptData

这段代码首先调用 serialize_plist(或类似命名的序列化函数),该函数准备要发送的数据。执行完成后,寄存器 X0 指向准备发送到服务器的数据。下一个被调用的函数是"encryptData"。它有两个参数:指向被加密数据的指针传递给 X0 寄存器,而 X1 寄存器包含一个带有配置数据的 plist,其中包括加密参数。该函数执行完毕后,X0 寄存器包含指向密文的指针。为拦截并分析设备发出的明文数据,我们需要理解并控制(或替换)该加密调用的结果。我们决定用一条 NOP 指令(1f 20 03 d5)替换对"encryptData"函数的调用。这样,X0 寄存器的值就不会被加密数据的指针覆盖,二进制验证器后门将向我们的 VPN 服务器发送明文数据。与我们此前对 JavaScript 验证器后门所采用的方法类似,我们在 mitmproxy 插件中实现了动态补丁进行实时替换:

sig_pattern = re.compile(rb"...\xaa...\xf9...\x94...\xaa...\x94...\xb4...\xaa...\x94...\xb4...\xb4...\x71...\x54...\xaa...\x70...\xd5...\xaa...\x14")block_to_nop = sig_pattern.findall(ungzipped)[0]new_block = block_to_nop[:28] + b'\x1f\x20\x03\xd5' + block_to_nop[32:]ungzipped = ungzipped.replace(block_to_nop, new_block)

在我们的测试环境中,当苹果设备向 C2 发送明文数据并到达我们的 VPN 服务器时,mitmproxy 插件模拟了密钥交换与数据加密流程,并对加密密钥的值进行控制(以便解密 C2 的响应)。最终,我们成功解密并分析了 C2 返回的数据,从中提取并还原出了 TriangleDB后门的主体。

  • 提取三角测量后门的辅助模块样本

在对 TriangleDB 后门进行逆向分析后,我们发现它能够加载并执行许多辅助模块,于是我们还剩最后一个任务,就是获取这些辅助模块的二进制文件。在对 TriangleDB 后门的分析中,我们发现辅助模块可执行文件是通过 CRXUpdateRecord 和 CRXUpdateRunRecord 命令传递给 TriangleDB 后门的。因此,为了获得这些可执行文件,就必须能够解密发送给 C2 服务器的所有命令。

同样,这套加密算法基于 RSA 公私钥,所以可以使用先前获取二进制文件时的方法;但这次我们已有 TriangleDB 后门样本,经过逆向分析,我们决定换一种方法:

1. 生成我们自己的 RSA 公/私钥对;

2. 将 TriangleDB 后门配置中的 RSA 公钥替换为我们生成的公钥。

我们通过向 mitmproxy 插件添加以下代码实现抓取辅助模块的功能:

macho_second_index = find_nth(decompressed_implant, b"\xcf\xfa\xed\xfe", 2)macho_second = decompressed_implant[macho_second_index:]rsa_key, xored_signature_offset, xor_key = extract_rsa_key(macho_second)my_der_key = MY_CERT_DERself.infections[flow.client_conn.peername[0]]["true_device_public_cert"] = rsa_keymy_der_key_xored = xor_one_byte_key(my_der_key, xor_key)decompressed_implant[macho_second_index + xored_signature_offset:macho_second_index + xored_signature_offset+796] = my_der_key_xored

当植入辅助模块的流量到达我们的 VPN 服务器时,用我们先前生成的RSA 私钥对流量解密,然后保存解密后的流量内容,最后再用攻击者原先使用的公钥对流量重新加密并转发。通过这种方式,我们能够监听植入程序执行时的所有通信,并获取到辅助模块的二进制文件样本。

至此,耗时长达数月的对"三角测量"行动完整攻击链的所有后门样本提取工作,全部完毕!

Part3 总结

1. 在此过程中,安全团队对 iOS 内部结构进行了大量研究,并提出了许多有趣的技术,比如用来解密并提取苹果 iMessage 附件的方法。

2. 在研究"三角测量"攻击链过程中遇到的主要难题是如何处理每个阶段都使用的公私钥加密。为了绕过加密,不得不开发一个又一个 mitmproxy 插件,能够动态修补恶意阶段并破解原始算法。最初,插件的代码有 30 行,当完成后门的模块提取时,代码已经增长到大约 400 行。

3. 为了便于技术交流,现已建立微信群"希水涵-信安技术交流群",欢迎您的加入。

公众号专注于网络安全技术分享,包括APT事件分析、红队攻防、蓝队分析、渗透测试、代码审计等,每周一篇,99%原创,敬请关注。

Contact me: 0day123abc#gmail.com

OR 2332887682#qq.com

(replace # with @)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/11 0:07:59

ETL、数据仓库与数据湖详解

ETL、数据仓库与数据湖详解 一、ETL(提取、转换、加载) 定义:ETL 指将数据从来源端提取、进行清洗转换后加载至目标系统的过程,是数据集成与预处理的核心环节。 大数据项目中常见实现方式: 传统批量ETL工具&#xff1a…

作者头像 李华
网站建设 2026/4/13 8:58:24

R量子计算电路优化完全指南(从入门到高阶的7个关键步骤)

第一章:R量子计算电路优化概述 量子计算作为前沿计算范式,正逐步从理论走向工程实现。在实际应用中,量子电路的执行效率与硬件资源高度敏感,因此电路优化成为提升性能的关键环节。R语言虽非主流量子编程语言,但凭借其强…

作者头像 李华
网站建设 2026/4/12 23:01:19

【R语言量子模拟实战】:掌握纠缠度计算的核心算法与高效实现技巧

第一章:R语言量子模拟与纠缠度计算概述量子计算作为前沿计算范式,正逐步从理论走向实践。R语言虽以统计分析见长,但凭借其强大的矩阵运算能力和丰富的扩展包生态,亦可用于基础量子态模拟与纠缠度量化分析。通过构建希尔伯特空间中…

作者头像 李华
网站建设 2026/4/5 16:57:07

R语言在临床研究中的高级应用(分层分析全流程精讲)

第一章:R语言在临床研究中的分层分析概述在临床研究中,分层分析是一种关键的统计方法,用于控制混杂因素的影响,并评估治疗效应在不同亚组中的一致性。R语言凭借其强大的统计建模能力和丰富的生物统计包(如survival、lm…

作者头像 李华
网站建设 2026/4/14 19:19:46

VGGT终极实践指南:从零掌握视觉几何Transformer核心技术

VGGT终极实践指南:从零掌握视觉几何Transformer核心技术 【免费下载链接】vggt VGGT Visual Geometry Grounded Transformer 项目地址: https://gitcode.com/gh_mirrors/vg/vggt 你是否曾经为复杂的3D重建任务而头疼?面对多视图几何、相机位姿估计…

作者头像 李华
网站建设 2026/4/13 23:36:16

气象数据分析高手都在用的方法(R语言极值拟合实战全公开)

第一章:气象极值分析与R语言应用概述气象极值分析是气候学和环境科学中的核心研究方向,旨在识别和建模极端天气事件,如暴雨、高温、寒潮等。这类分析对于灾害预警、基础设施设计和气候变化评估具有重要意义。R语言凭借其强大的统计计算能力和…

作者头像 李华