news 2026/8/5 16:57:09

第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/8/4 18:57:57

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

Part1 前言 大家好,我是ABC_123。最近几天,美国APT实施的苹果手机"三角测量"行动又成为大家关注的话题,引发了大家对于苹果手机、Mac笔记本电脑的安全性问题的广泛讨论。此次行动利用了至少4个苹果系统的0day漏洞,其使用…

作者头像 李华
网站建设 2026/8/4 9:20:38

高效节能的工业动力核心:西门子罗宾康高压变频器LDZ14501000.070

在工业传动与节能领域,西门子罗宾康系列高压变频器凭借其卓越的技术与可靠性享有盛誉。其中,产品代码为LDZ14501000.070的型号,正是该系列中面向高要求工业应用的一款高性能解决方案。该型号通常指代一款额定容量为1000kVA、电压等级为特定中…

作者头像 李华
网站建设 2026/8/4 19:47:42

CosyVoice语音合成实战指南:从零到一掌握微调全流程

CosyVoice语音合成实战指南:从零到一掌握微调全流程 【免费下载链接】CosyVoice Multi-lingual large voice generation model, providing inference, training and deployment full-stack ability. 项目地址: https://gitcode.com/gh_mirrors/cos/CosyVoice …

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

使用 Coze MCP 插件 + curl 调用工具生成高质量提示词示例

使用 Coze MCP 插件调用工具生成高质量提示词示例 在现代 AI 图像生成工作流中,我们常需要通过 API 调用来生成或优化图像提示(prompt),以获得更精细、更专业的生成效果。本文以 Coze MCP 平台的插件接口为例,展示如何…

作者头像 李华
网站建设 2026/8/4 19:39:40

5个Apache Weex渲染性能提升技巧:终极优化指南

5个Apache Weex渲染性能提升技巧:终极优化指南 【免费下载链接】incubator-weex Apache Weex (Incubating) 项目地址: https://gitcode.com/gh_mirrors/in/incubator-weex Apache Weex作为业界领先的跨平台UI框架,在移动应用性能优化领域发挥着重…

作者头像 李华