首次分析 Apple 的 USB 限制模式绕过 (CVE-2025-24200)

admin 2025年2月18日23:23:21评论46 views字数 6829阅读22分45秒阅读模式
首次分析 Apple 的 USB 限制模式绕过 (CVE-2025-24200)

Apple 发布了 iOS 18.3.1 (build ) 来修补公民实验室报告的与辅助功能22D72框架相关的漏洞。让我们来分析一下吧!

漏洞公告可在此处找到。以下是直接摘自 Apple 网站的概述:

无障碍设施

适用于: iPhone XS 及更新机型、iPad Pro 13 英寸、iPad Pro 12.9 英寸第 3 代及更新机型、iPad Pro 11 英寸第 1 代及更新机型、iPad Air 第 3 代及更新机型、iPad 第 7 代及更新机型、iPad mini 第 5 代及更新机型

影响: 物理攻击可能会禁用锁定设备上的 USB 限制模式。Apple 获悉一份报告称,该问题可能已被利用于针对特定个人的极其复杂的攻击中。

描述:已通过改进状态管理解决授权问题。

CVE-2025-24200:多伦多大学蒙克学院公民实验室的 Bill Marczak

在这篇博文中,我们解释了迄今为止我们对该补丁的理解。

🚧 USB 限制模式

在分析更新之前,让我们简单提一下 USB 限制模式以及它的重要性。

如果 iPhone 在激活该功能时保持锁定状态超过一小时,则通过其端口的数据连接将被禁用,直到用户解锁设备并明确授予配件连接的权限:

首次分析 Apple 的 USB 限制模式绕过 (CVE-2025-24200)

这对于减轻涉及外部设备(如法医提取器)的复杂攻击至关重要,例如这个或这个。

能够从锁定屏幕绕过此机制将恢复使用此类设备的可能性。这条最新推文显示了此功能对于威胁行为者的重要性:

首次分析 Apple 的 USB 限制模式绕过 (CVE-2025-24200)

在下一部分中,我们将对 CVE-2025-24200 进行初步分析,该漏洞可以在某些条件下绕过 USB 限制模式。

📦设置

在找到实际补丁之前,第一步是下载补丁前后的 iOS 版本:

# pre-patchipsw download ipsw --device iPhone14,4 --build 22D63# post-patchipsw download ipsw --device iPhone14,4 --build 22D72

然后,我们可以从两个版本中提取所有二进制文件和库来调查更改。

🔬 查找补丁

我们首先查看了Blacktop针对每个 iOS 版本生成并发布的差异报告。ipsw diff

从这里,我们可以检查每个值得注意的变化。值得注意的是,在公告中,Apple 提到了改进的状态管理,这可能需要额外的检查,从而引入新的基本块。

使用以下(无头)二进制忍者脚本,我们可以列出同一二进制文件的两个符号化版本的基本块计数差异:

import binaryninjabinaryninja.disable_default_log()defbuild_table(bv: binaryninja.BinaryView):"""Builds a table of function names to their basic block count."""    table = {}for f in bv.functions:ifnot f.name.startswith('sub_'):            table[f.name] = [len(f.basic_blocks)]return tabledefdiff_tables(original, patched):"""Compares two basic block tables and prints changes."""for fn in original.keys() & patched.keys():if original[fn] != patched[fn]:            print(f'{fn}{original[fn]} -> {patched[fn]}')t1 = build_table("/path/to/original")t2 = build_table("/path/to/patched")diff_tables(t1, t2)

在接下来的小节中,我们将重点介绍其中两个组件中发现的显著变化。

更改 AXSpringBoardServerInstance

在这个框架中,下面的函数似乎有4个新的基本块。

-[AXSpringBoardServerHelper _handleDisallowUSBRestrictedModeSCInformativeOnly:]

仔细检查后发现,Apple 似乎在函数的最开始处添加了一个检查,以确保设备在显示警报之前已解锁。此警报的标题为 id 的本地化字符串sc.disallow.usb.restricted.mode.alert.title,以及一个可点击的操作,即OK

顾名思义,该函数仅提供信息,即它仅影响用户界面。我们仍然需要找到在出现警报后有效禁用 USB 限制模式的位置。

更改 profiled

profiled 是一个重要的 iOS 守护进程,处理很多事情,其中包括辅助功能、远程设备管理 (MDM) 等等……

在此版本中,修补了以下功能并获得了 6 个基本块:

-[MCProfileServicer setParametersForSettingsByType:configurationUUID:toSystem:user:passcode:credentialSet:completion:]
以下是我们通过对两个版本进行逆向工程成功恢复的补丁:
diff --git a/original.m b/patched.mindex cd2b537..7fe1bd4 100644--- a/original.m+++ b/patched.m@@ -8,6 +8,13 @@ BOOL has_ent = [selfif (has_some_entitlement == NO) {    // Unchanged} else {NSDict *rb = [settingsByType objectForKeyedSubscript: @"RestrictedBool"];BOOL is_device_locked [[MCDependencyManager sharedManager] isDeviceLocked];BOOL restricted_mode_allowed = [rb objectForKeyedSubscript: @"FeatureUSBRestrictedModeAllowed"]+if (restricted_mode_allowed == NO || is_device_locked == NO) {               [[[MCProfileServiceServer sharedServer]]                       setParametersForSettingsByType: type                       sender: [self remoteProcessBundleID]                       completion: completion               ]+} else {NSError *error = [MCErrorWithDomain: _MCSettingsErrorDomaincode: 0x6d66descriptionArray: _MCErrorArrayerrorType: _MCErrorTypeFatal];+if (completion) {completion.completionHandler(completion, error);}} }

我们可以看到,在调用setParametersForSettingsByType有效设置所需设置(即我们例子中的受限模式状态👀)的内部方法之前,该函数会检查设备是否已解锁。

这似乎是有效缓解 CVE-2025-24200 的补丁。

攻击向量

现在我们对补丁有了更深入的了解,我们需要找到可以让我们利用底层漏洞的代码路径。

第一步是找到可以通过之前确定的两个修补函数之一禁用 USB 限制模式的位置。

经过一番研究,我们发现assistivetouchd守护进程包含通过以下函数禁用 USB 限制模式的代码:

-[SCATScannerManager _setUSBRMPreferenceDisabled]

此函数包含对多个类的引用AX[...]。这暗示它可能与我们讨论的补丁的第一部分(发出警报)有关。这促使我们更加关注这个守护进程。

assistivetouchd守护进程

assistivetouchd 您可以在 iOS 设备上的以下位置找到该守护进程:

System/Library/CoreServices/AssistiveTouch.app/assistivetouchd
每当设备上启用某些辅助功能时,它都会在后台持续运行。最引人注目的例子是Assistive Touch功能,它允许您从屏幕上始终显示的新菜单中执行某些操作:

首次分析 Apple 的 USB 限制模式绕过 (CVE-2025-24200)

通过查看交叉引用来assistivetouchd查找_setUSBRMPreferenceDisabled可以调用的位置,我们可以找到以下函数:

-[SCATScannerManager handleUSBMFiDeviceConnected]

根据其名称,我们可以预期只需连接 MFi(经 iPhone 认证)设备就足以激活它。

下面是我们成功逆向的该函数的代码(虽然可能存在不准确之处):

@implementationSCATScannerManager- (void)handleUSBMFiDeviceConnected {    AXSettings btm = [SCATBluetoothManager sharedInstance];bool did_read_rm_alert = [btm switchControlUserDidReadUSBRestrictedModeAlert];bool has_disabled_rm = [self userHasDisabledUSBRM];bool should_disallow_rm = [btm switchControlShouldDisallowUSBRestrictedMode];if (!did_read_rm_alert && !has_disabled_rm && should_disallow_rm) {        [btm setSwitchControlShouldDisallowUSBRestrictedMode:NO];// Forwards a call to the AXSettings framework that is responsible// for showing the alert discussed earlier in the patch section// The -[SCATScannerManager _setUSBRMPreferenceDisabled] function that// disables USB restricted mode is passed as the callback handler for// this alert.    }}@end

执行一些基本检查以确定是否应显示警报。基本上,如果尚未显示警报并且启用了 USB 限制模式,则应该显示警报。发生这种情况时,唯一的选择是单击OK,这将触发提供的回调。

在这种情况下,回调就是_setUSBRMPreferenceDisabled函数。

手动触发该功能以进行测试

为了验证我们的假设,我们想在可以使用FridahandleUSBMFiDeviceConnected调试的 iOS 设备上任意调用该方法。

不幸的是,我们无法通过ModuleAPI 获得该函数。因此,我们决定采用另一种方法,并assistivetouch使用以下命令从设备中提取二进制文件:

frida-pull -U /System/Library/CoreServices/AssistiveTouch.app/assistivetouchd

从这个二进制文件中,我们可以手动计算可触发函数和目标函数之间的偏移量。

在我们的例子中,我们将使用钩子,-[HNDRocker _shakePressed]因为我们可以在设备锁定时从辅助触摸菜单触发它。以下是onEnter处理程序:

onEnter(log, args, state) {// Following addresses need to be adapted for each build    shakePressedBaseAddr = 0x100042858;    handleUSBMFiDeviceConnectedBaseAddr = 0x1000ad1c8;off = handleUSBMFiDeviceConnectedBaseAddr - shakePressedBaseAddr    shakePressedAddr = this.context.pc;    log('ShakePressed::', shakePressedAddr)    handleUSBMFiDeviceConnectedAddr = shakePressedAddr.add(off)    log('handleUSBMFiDeviceConnected:', handleUSBMFiDeviceConnectedAddr)    handle = new NativeFunction(handleUSBMFiDeviceConnectedAddr, 'long', []);    handle()},
追踪方法如下:
frida-trace -U assistivetouchd -m'-[HNDRocker _shakePressed]'
最后,我们可以通过单击Shake来触发跟踪函数;感谢我们的钩子调用该handleUSBMFiDeviceConnected函数并弹出窗口:

首次分析 Apple 的 USB 限制模式绕过 (CVE-2025-24200)

如前所述,此时攻击者只需单击OK锁定屏幕即可禁用 USB 限制模式。

  • 本节描述的测试是iPhone10,3使用运行 iOS 16.7.10 (build 20H350) 的 iPhone X ( ) 进行的。

如何在实际情况下触发此功能

到目前为止,我们只能通过任意调用该方法来使警报出现-[SCATScannerManager handleUSBMFiDeviceConnected],但我们还不知道在实际条件下应该如何调用它。

我们没有提到的一点是,Assistive Touch功能并不是唯一一个让assistivetouchd守护进程在后台运行的功能。另一个可以做到这一点的辅助功能是Switch Control。

此功能允许将外部设备插入 iPhone 以进行控制。从我们迄今为止查看的各种方法的类名来看,它们都以SC(可能是 Switch Control) 开头,我们可以推断这是合法的方法:将经过 MFi 认证的开关控制设备插入 iPhone。

看了市面上的开关控制设备,似乎大部分都是蓝牙设备。不过,我们发现了一个曾经通过雷电操作的设备。

以下是该产品供应商网站的截图。请注意,该产品不再可用:

首次分析 Apple 的 USB 限制模式绕过 (CVE-2025-24200)

当设备处于受限模式时,USB 协议将被完全禁用。但是,其他协议可以通过闪电端口自由使用。例如, MFi 设备可以使用的iAP2协议就是这种情况。

这就是为什么我们认为将这种设备插入启用了切换控制的 iPhone 可能足以使弹出窗口出现并在 iOS 18.3.1 之前从锁定屏幕禁用 USB 限制模式。

免责声明:

虽然我们相信这种方法可行,但目前我们缺乏测试所需的硬件。我们还知道,对于物理配件而言,限制模式并不是唯一的缓解措施,实际利用方法可能更为复杂。

此外,我们仅探索了此漏洞的一个可能攻击媒介,但可能还存在其他攻击媒介。即使您不使用辅助功能,也建议您将设备更新到最新版本。

参考

安全地激活数据连接 - Apple 支持(英国)

  • https://support.apple.com/en-gb/guide/security/sec5044aad1b/1/web/1

关于 iOS 18.3.1 和 iPadOS 18.3.1 的安全性内容 - Apple 支持 (我国)

  • https://support.apple.com/en-ca/122174

关于 Blue2 和 Hook+ 开关接口的重要信息(2024 年 4 月 8 日更新)| OMazing Kids AAC Consulting

  • https://omazingkidsllc.com/2022/06/30/important-info-about-the-blue2-and-hook-switch-interfaces/

stacksmashing - Hithackers 的 Apple Lightning 和 JTAG 黑客指南 - V02

  • https://media.defcon.org/DEF%20CON%2030/DEF%20CON%2030%20presentations/stacksmashing%20-%20The%20hitchhackers%20guide%20to%20iPhone%20Lightning%20%20%20JTAG%20hacking.pdf

原文始发于微信公众号(Ots安全):首次分析 Apple 的 USB 限制模式绕过 (CVE-2025-24200)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月18日23:23:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   首次分析 Apple 的 USB 限制模式绕过 (CVE-2025-24200)https://cn-sec.com/archives/3746053.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息