01 情报背景
卡巴斯基研究团队于12月27日在第37届混沌通信大会上披露了苹果IOS系统漏洞在“三角测量行动”间谍软件攻击中的关键作用。由4个IOS系统漏洞组合而成的“零点击”远程RCE漏洞利用链令其被称为“有史以来最复杂的攻击”。该攻击活动最早在今年6月1日由卡巴斯基发布系列博客披露并命名,预警针对IOS设备的未知恶意软件攻击;同日,俄罗斯联邦安全局(FSB)和外交部发文指责美国利用此行动监视其外交人员,据称数千台苹果手机受到了感染,包括俄罗斯公民及外交官员的手机,受影响的对象还包括北约国家、后苏联国家以及以色列、叙利亚和中国等。
命名“三角测量”的原因
在攻击链的开始,攻击者使用了一个名为Canvas Fingerprinting(画布指纹识别)的指纹识别技术,这种技术通常被网站用于浏览器跟踪和识别用户,由于浏览器在渲染像素时,会受到硬件设备、系统版本、字体、用户配置等影响,导致不同的计算机在绘制过程会产生不同,这些不能被人肉眼感知的细微差别成为一种有效的指纹识别手段。
由于攻击者会在受害者的浏览器渲染一个黄色的三角形,因此卡巴斯基的研究人员决定将这次攻击命名为“三角测量行动”(Operation Triangulation)。
图 攻击者采用的特殊设备指纹算法-绘制三角计算哈希
可能的国家级操作者背景
三角测量行动是一套新的技术,但是NSA至少在2007年就拥有了这样的攻击能力。斯诺登披露美国国家情报局(CIA)的绝密电子监听计划棱镜(PRISM),该计划揭示了包括谷歌、Facebook、YouTube 和苹果在内的大型科技公司将用户个人数据移交给这些机构的程度。公开资料显示,iPhone是2007年1月9日问世,直到6月才在美国上市,但NSA泄漏材料显示日期却为2007年1月8日。在该泄露资料中解密了由NSA开发的名为DROPOUTJEEP的针对Apple iPhone的恶意软件工具,它由模块化的任务程序组成,具备远程文件拉取、联系人和短信窃密,窃听及定位的能力。
图 NSA泄露机密文件中包含的针对IOS系统的攻击套件
国外主流论坛上的网络安全从业者也认为“三角测量行动”所采取的利用多个昂贵漏洞的复杂利用链,唯有在面对高价值目标时不计资源投入的国家级威胁行为体才能负担,与需要考虑攻击成本的普通攻击组织有明显区别。
02 多漏洞组合的零点击IOS系统RCE利用链
卡巴斯基安全人员发表题为《Operation Triangulation:What You Get When Attack iPhones of Researchers》的演讲,披露了有关“三角测量行动”的大量漏洞细节,包含一条极为复杂且充满疑问的iOS零点击漏洞利用链。该利用链揭示了攻击者在不需用户交互的情况下,如何成功利用这些漏洞进行攻击。
来自九十年代的漏洞
攻击的入口是通过一封带有恶意 iMessage 附件的电子邮件,攻击者通过投递一份包含 CVE-2023-41990 恶意载荷的 PDF 文件,成功利用了位于 fnt_ADJUST 中的 TrueType 字体指令数组越界漏洞。苹果公司对此漏洞的描述是“处理字体文件可能导致任意代码执行”。
具体而言,该漏洞的存在使得攻击者能够通过特定的 TrueType 字体指令,越界访问数组并执行任意代码。这种攻击方式的巧妙之处在于,它利用了 PDF 文件格式中的字体处理部分,并且应用程序会在不向用户显示任何迹象的情况下处理该附件,从而触发漏洞。
这一漏洞涉及的 fnt_ADJUST 模块早在九十年代就已存在,然而直到 2023 年 1 月,苹果才在 iOS 16.3 和 macOS 13.2 中悄悄地删除了这个模块的功能。在 2023 年 7 月,该漏洞的信息被披露,同时在 iOS 15 和 macOS 12 中通过改进缓存处理的方式对这一漏洞进行了修复。
复杂的攻击链
根据卡巴基斯研究人员披露,在利用CVE-2023-41990实现JavaScript代码执行后,攻击者编写了一个大约11000行经过混淆的恶意JavaScript代码。
该js代码实现功能复杂, 首先用rop配合 NSExpression/NSPredicate 查询语言编写多阶段后,完善JavaScriptCore库后保障调试功能可用后,利用 DollarVM ($vm) 最终实现执行本机api函数的执行能力。并且由演讲ppt可知,攻击者通过内存中已存在的签名指针成功绕过了PAC指针签名保护机制,最终实现完整的函数执行能力。
在实现完整性的函数执行之后,攻击者利用XNU 内存映射系统调用(mach_make_memory_entry 和 vm_map)中的整数溢出漏洞 CVE-2023-32434 来获取用户级别对设备整个物理内存的读/写访问权限。该漏洞几乎影响ios16.5.1、 iPadOS 16.5.1以下的大部分版本,并且在2023年7月份修复时,apple还声称该漏洞可能在iOS 15.7 下已经被积极利用。
最终,攻击者利用CVE-2023-38606绕过基于硬件的内核内存保护,最终实现完整的代码执行。
在此以后,攻击者实际已经在零交互的情况下获取到了系统的最高权限并且实现代码执行。
但是我们看到,攻击者居然用这个权限清除入侵痕迹,并且打开了Safari 并且在调用脚本验证受害者身份后调用CVE-2023-32435这个位于WebKit中的代码执行漏洞,然后又调用了一遍CVE-2023-32434 + CVE-2023-38606获取root权限执行间谍工具。
利用漏洞之后攻击者已然获取系统最高权限,但最终又一次调用了Safari浏览器需要交互CVE-2023-32435漏洞。这无谓地延长了整个攻击链条,带来了额外的暴露风险。这并不合乎高阶攻击者往往最小化攻击痕迹、规避攻击暴露的常理,背后的真实意图我们尚且无从得知。
据笔者推测攻击者或是希望通过引入额外漏洞的方法分散调查的注意力,使调查人员更加关注后续漏洞的利用,掩护CVE-2023-41990这个更高价值的零交互漏洞。这样一来,即使攻击被发现导致攻击链被完全切断,调查的结果可能指向:受害者无意间使用Safari访问了布置有CVE-2023-32435恶意载荷的漏洞从而导致自己失陷,而不容易追溯到初始的零交互漏洞。
又或者说,攻击者仅仅让CVE-2023-32435作为受害者身份验证,上述我们提到,Safari 触发漏洞前,曾调用恶意网页中的脚本对受害者身份进行判断,只有在判断有价值后再进行后续操作。但是其实在此之前,攻击者已经获取受害者权限并且可以执行任意操作,在此基础上,写一些简单的信息收集工作量是远远低于目前披露的执行链的,攻击者似乎没有这么做的必要。
当然,攻击者在此次间谍行动中所做的储备以及技术难度都是及其复杂的,一些我们所认为奇怪甚至无关的攻击链可能就是攻击者深思熟虑后的结果,简单的通过现有的材料去推测攻击者的意图可能有所偏差。一些似乎无关的步骤可能是为了混淆调查者、规遍防御机制,从而更好地达到他们的隐匿和渗透目标。
03 神秘的SoC硬件漏洞
本次事件热度迅速上升的很重要的一个原因是攻击者对iPhone设备中内存保护机制的绕过。卡巴斯基安全研究人员表示,他们本次揭示了Apple A12-A16 SoC 中一个不起眼的调试功能的细节,该功能整体流程是通过向一些未知的MMIO寄存器写入数据、目标地址、数据哈希等信息,触发一个未知的硬件特性,让它执行DMA操作,来绕过苹果芯片中的硬件保护层(Page Protection Layer, PPL),从而直接修改内核内存中的敏感数据,如页表项或代码段。这个硬件特性的原理和目的尚不清楚,也不知道攻击者是如何发现和利用它的。因此,该活动更多被认为是NSA安插在iPhone当中的后门机制。
关于CVE-2023-38606利用过程有两个关键部分让人惊讶于攻击者的能力。
EXP-1:利用预留的MMIO地址进行DMA操作
首先介绍一下相关概念
什么是MMIO:MMIO是内存映射输入/输出的缩写,是一种让CPU通过内存地址来访问外围设备的硬件寄存器的机制。
什么是DMA:DMA是直接内存访问的缩写,是一种让外围设备直接读写内存而不经过CPU的机制,可以提高性能和效率。
根据现场演讲内容,攻击者利用了两块既没有在设备树文件中定义,也没有被固件使用的MMIO地址范围进行DMA操作。
攻击者主要利用0x206040000、0x206140008、0x206140108、0x206150020、0x206150040 和 0x206150048几个未知地址。简单介绍一下每个寄存器在攻击中的作用,具体利用伪代码细节可以在参考链接原文中查看:
0x206040000:操作UTT区域。UTT区域是用于操控主CPU的CoreSight MMIO调试寄存器之一,UTT是APPLE(非ARM)添加的。在本次攻击事件中攻击者具备利用此区域实现CPU重启的能力;
0x206140008、0x206140108:启用和禁用漏洞利用相关的硬件功能;
0x206150020:用于Apple A15/A16 SoC的相关flag设置;
0x206150040:被用来保存一些状态标识和目标物理地址的低位部分;
0x206150048:用于存储需要写入的数据和目标物理地址的高位部分,与数据哈希和另一个未知值捆绑在一起。此硬件功能将数据写入64字节的对齐块中,并且数据分 9 次顺序写入0x206150048寄存器。
EXP-2:写入数据时黑盒哈希校验算法
在上面的利用中,向0x206150048写入数据需要进行哈希校验,而该哈希算法是一个自定义算法,使用了一个预定义的sbox进行哈希计算,攻击者是如何在没有相关功能说明的情况下获取并利用该硬件功能仍是个疑问。
演讲者给出的算法如下:
sbox = [
0x007, 0x00B, 0x00D, 0x013, 0x00E, 0x015, 0x01F, 0x016,
0x019, 0x023, 0x02F, 0x037, 0x04F, 0x01A, 0x025, 0x043,
0x03B, 0x057, 0x08F, 0x01C, 0x026, 0x029, 0x03D, 0x045,
0x05B, 0x083, 0x097, 0x03E, 0x05D, 0x09B, 0x067, 0x117,
0x02A, 0x031, 0x046, 0x049, 0x085, 0x103, 0x05E, 0x09D,
0x06B, 0x0A7, 0x11B, 0x217, 0x09E, 0x06D, 0x0AB, 0x0C7,
0x127, 0x02C, 0x032, 0x04A, 0x051, 0x086, 0x089, 0x105,
0x203, 0x06E, 0x0AD, 0x12B, 0x147, 0x227, 0x034, 0x04C,
0x052, 0x076, 0x08A, 0x091, 0x0AE, 0x106, 0x109, 0x0D3,
0x12D, 0x205, 0x22B, 0x247, 0x07A, 0x0D5, 0x153, 0x22D,
0x038, 0x054, 0x08C, 0x092, 0x061, 0x10A, 0x111, 0x206,
0x209, 0x07C, 0x0BA, 0x0D6, 0x155, 0x193, 0x253, 0x28B,
0x307, 0x0BC, 0x0DA, 0x156, 0x255, 0x293, 0x30B, 0x058,
0x094, 0x062, 0x10C, 0x112, 0x0A1, 0x20A, 0x211, 0x0DC,
0x196, 0x199, 0x256, 0x165, 0x259, 0x263, 0x30D, 0x313,
0x098, 0x064, 0x114, 0x0A2, 0x15C, 0x0EA, 0x20C, 0x0C1,
0x121, 0x212, 0x166, 0x19A, 0x299, 0x265, 0x2A3, 0x315,
0x0EC, 0x1A6, 0x29A, 0x266, 0x1A9, 0x269, 0x319, 0x2C3,
0x323, 0x068, 0x0A4, 0x118, 0x0C2, 0x122, 0x214, 0x141,
0x221, 0x0F4, 0x16C, 0x1AA, 0x2A9, 0x325, 0x343, 0x0F8,
0x174, 0x1AC, 0x2AA, 0x326, 0x329, 0x345, 0x383, 0x070,
0x0A8, 0x0C4, 0x124, 0x218, 0x142, 0x222, 0x181, 0x241,
0x178, 0x2AC, 0x32A, 0x2D1, 0x0B0, 0x0C8, 0x128, 0x144,
0x1B8, 0x224, 0x1D4, 0x182, 0x242, 0x2D2, 0x32C, 0x281,
0x351, 0x389, 0x1D8, 0x2D4, 0x352, 0x38A, 0x391, 0x0D0,
0x130, 0x148, 0x228, 0x184, 0x244, 0x282, 0x301, 0x1E4,
0x2D8, 0x354, 0x38C, 0x392, 0x1E8, 0x2E4, 0x358, 0x394,
0x362, 0x3A1, 0x150, 0x230, 0x188, 0x248, 0x284, 0x302,
0x1F0, 0x2E8, 0x364, 0x398, 0x3A2, 0x0E0, 0x190, 0x250,
0x2F0, 0x288, 0x368, 0x304, 0x3A4, 0x370, 0x3A8, 0x3C4,
0x160, 0x290, 0x308, 0x3B0, 0x3C8, 0x3D0, 0x1A0, 0x260,
0x310, 0x1C0, 0x2A0, 0x3E0, 0x2C0, 0x320, 0x340, 0x380
]
def calculate_hash(buffer):
acc = 0
for i in range(8):
pos = i * 4
value = read_dword(buffer + pos)
for j in range(32):
if (((value >> j) & 1) != 0):
acc ^= sbox[32 * i + j]
return acc
04 卡巴斯基的捕获与溯源措施
卡巴斯基作为身份特殊、受影响最大的受害者之一,精巧地在企业内网中为躲在暗处的高阶攻击者设下陷阱,最终成功捕获与分析威胁,打了一场漂亮的翻身仗。卡巴斯基在面对”三角测量行动“攻击时采取了一系列系统化的应对措施,在不惊扰攻击者的情况下,完成攻击行为的提取。
首先,在其统一监控与分析平台KUMA的SIEM系统发现iPhone和iPad上的可疑网络活动后,他们使用Wireshark等工具分析了网络流量。这一分析帮助他们确定了与iMessage服务器和其他特定域名之间建立连接的设备,并识别出了其他可疑的域名服务器。随后,通过监控和分析网络流量,他们确定了设备位置、影响范围,并识别出了攻击模式。由于数字取证软件的限制,他们采用iTunes备份对设备内容进行了分析。
图 卡巴斯基构建的异常网络监控机器人捕获到C2请求
在分析设备日志和网络时,卡巴斯基构建了恶意活动的时间线,特别关注了iMessage目录。他们检查了设备日志与数据库,并发现了与“BackupAgent”进程相关的异常活动。通过时间线分析,他们再次发现了恶意的iMessage活动,尽管相关附件已被删除。此外,他们尝试使用Frida脚本拦截iMessage信息,并部署了mitmproxy来拦截C2服务器的HTTPS通信。虽然无法解密Apple服务的HTTPS流量,但成功捕获了攻击者使用的NaCl库编写的JavaScript验证器模块。
图 卡巴斯基利用中间人劫持成功解密JavaScript验证器流量
在解密最终的C2流量时,卡巴斯基面临了数字取证的限制和iOS SSL pinning的障碍。然而,他们通过分析加密方法,替换了内存中的私钥,并成功实现了验证器后门的再次执行,从而解密了后续通信。他们还等待攻击者再次感染目标,分析了验证器执行的有效载荷,并发现了针对WebKit和iOS内核的两个漏洞。这些漏洞最终导致了一个二进制验证器的执行。卡巴斯基通过逆向工程分析了这个二进制验证器,并确定了最初感染链中的恶意附件是一个.watchface文件。他们利用mitmproxy成功破坏了iMessage附件下载过程,并提取出了该文件。通过这些方法,他们最终成功获取了完整的感染链,并提取出了命名为TriangleDB的完整后门。
卡巴斯基在这次应对中表现出了高度的专业性和技术能力,成功应对了多个技术挑战,并展示了其在网络监测、数字取证、事件响应、流量拦截、恶意代码分析和漏洞挖掘等方面的能力。他们的成功不仅在于捕获了攻击者,还在于提取了完整的后门文件,展现了卓越的技术实力和应对策略。
05 总结
附录 参考文献
https://securelist.com/trng-2023/
https://media.ccc.de/v/37c3-11859-operation_triangulation_what_you_get_when_attack_iphones_of_researchers
https://securelist.com/operation-triangulation-the-last-hardware-mystery/111669/
绿盟科技天元实验室专注于新型实战化攻防对抗技术研究。
研究目标包括:漏洞利用技术、防御绕过技术、攻击隐匿技术、攻击持久化技术等蓝军技术,以及攻击技战术、攻击框架的研究。涵盖Web安全、终端安全、AD安全、云安全等多个技术领域的攻击技术研究,以及工业互联网、车联网等业务场景的攻击技术研究。通过研究攻击对抗技术,从攻击视角提供识别风险的方法和手段,为威胁对抗提供决策支撑。
M01N Team公众号
聚焦高级攻防对抗热点技术
绿盟科技蓝军技术研究战队
官方攻防交流群
网络安全一手资讯
攻防技术答疑解惑
扫码加好友即可拉群