首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
iOS安全
发新帖
19
9
vPhone 虚拟 iOS 环境解析与风控防御实践
发表于: 2026-2-28 22:52
12571
vPhone 虚拟 iOS 环境解析与风控防御实践
qqqiu
1
2026-2-28 22:52
12571
## 前言 2026 年 2 月 25 日,韩国安全研究员 **wh1te4ever(Seo Hyungyu)** 在 GitHub 发布了一篇技术 writeup,随即在 iOS 安全圈引发广泛关注。这篇文章不是关于某个新漏洞,而是关于一件更有意思的事情——**在 macOS 上完整运行一台 iOS 26 虚拟机,并获取 root 权限**。 这件事之所以重要,不仅仅在于技术本身,更在于它对 **iOS 风控对抗体系** 的影响。传统风控 SDK 依赖的越狱特征检测,在 vphone面前失效的更多 本文参考了非虫大佬的文章(<mark class="encrypted">b9fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0M7q4)9J5k6i4N6W2K9i4S2A6L8W2)9J5k6i4q4I4i4K6u0W2j5$3!0E0i4K6u0r3M7#2)9J5c8Y4g2s2N6K6V1#2k6h3q4y4b7K6c8q4i4K6u0V1d9Y4g2B7M7#2m8g2d9U0c8H3b7g2!0q4c8W2!0n7b7#2)9^5z5g2!0q4y4g2!0n7x3q4)9^5y4W2!0q4y4q4!0n7b7W2)9^5c8g2!0q4y4W2)9^5b7g2)9^5x3q4!0q4y4W2)9&6b7#2!0m8c8W2!0q4y4g2)9^5c8g2)9&6c8W2!0q4y4#2)9&6x3q4)9^5y4W2!0q4y4g2)9^5y4#2!0n7b7g2!0q4y4g2)9^5c8W2)9&6x3g2!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4#2!0m8c8g2)9^5x3q4!0q4y4g2)9^5c8q4)9&6y4g2!0q4z5q4!0m8c8W2!0n7y4q4!0q4z5q4!0m8c8W2!0n7y4s2k6H3K9r3!0F1k6b7`.`.</mark> 的实现机制(详细可以看非虫师傅的那篇文章),并基于菜鸟(我)自研的 **CloudPhoneRiskKit 3.0** 给出系统性的防御方案。 --- ## 一、vPhone 是什么 ### 1.1 一句话定义 vphone 是**在 Apple Silicon Mac 上运行的、拥有 root 权限的真实 iOS 虚拟机**。 它不是 Xcode Simulator(那只是重新编译的 macOS App),不是传统意义上的手机越狱(没有任何越狱文件特征),也不是 QEMU 模拟(性能接近原生)。它是一个真正的 iOS 内核在 ARM64 虚拟化环境下运行的完整系统。 ### 1.2 技术谱系与时间线 理解 vphone 需要先理解它的来源——这件事从头到尾都有苹果自己的"配合"。 **2024 年底**:苹果推出 Private Cloud Compute(PCC,私有云计算),用于在 Apple Silicon 服务器上做安全的云端 AI 推理,并将源码开放给安全研究者审计。 **2025 年底**:研究员 `@matteyeux` 在扫描 PCC 固件时发现,cloudOS 26 固件里悄悄藏着一个组件——`vphone600ap`,即"iPhone Research Environment Virtual Machine"的硬件平台标识符。苹果在服务器固件里预置了虚拟 iPhone 的骨架,原因至今存疑:或许是为内部安全研究准备的工具,或许是类似 2021 年 iOS 15 beta 里 DEVELOPMENT/KASAN 内核泄露的工程失误。 **2026 年 1 月**:研究员 `@_inside` 发推展示了第一个基于 vphone600ap 组件成功 boot 起来的虚拟 iPhone 画面。 **2026 年 1 月 31 日**:wh1te4ever 看到后完全着迷,当天开始动手构建自己的版本。 **2026 年 2 月 25 日 00:34 AM**:wh1te4ever 正式发布 writeup 和工具代码,推文获得 55.4K 次浏览。同日,Lakr233 发布 `vphone-cli`,将整套流程自动化封装,进一步降低了使用门槛。 --- ## 二、技术原理深度拆解 ### 2.1 为什么能做到:同架构的基础优势 Apple Silicon(M 系列)和 iPhone(A 系列)使用相同的 ARM64 指令集。macOS 的 `Virtualization.framework` 提供近原生性能的 ARM 虚拟化支持。这两个条件叠加,意味着 Mac 在硬件层面完全有能力运行 iOS 内核。 **Intel Mac 无法实现,这是架构层面的硬性限制。** ### 2.2 私有 API:苹果留的后门 `Virtualization.framework` 的公开 API 只支持 macOS 和 Linux 虚拟机。但框架内部有个未公开的私有类 `_VZMacHardwareModelDescriptor`,它的 `setPlatformVersion:` 方法接受整数参数: ``` PV = 1 → 标准 macOS 虚拟机 PV = 3 → vphone 虚拟 iPhone ← 关键突破口 ``` 创建 vphone 硬件模型的核心代码: ```objc VZMacHardwareModel *VPhoneCreateHardwareModel(void) { _VZMacHardwareModelDescriptor *desc = [[_VZMacHardwareModelDescriptor alloc] init]; [desc setPlatformVersion:3]; // PV=3 是 vphone [desc setBoardID:0x90]; // vresearch101 板卡标识 [desc setISA:2]; // ARM64 return [VZMacHardwareModel _hardwareModelWithDescriptor:desc]; } ``` 整个虚拟 iPhone 的创建过程依赖 **11 个私有 API**,包括自定义 ROM、DFU 模式、GDB 调试端口、SEP 协处理器配置、USB 多点触控、ARM PL011 串口等。 使用这些私有 API 还需要 **5 个特殊 Entitlements**: ```xml <key>com.apple.private.virtualization</key> <!-- 访问私有虚拟化 API --> <key>com.apple.private.virtualization.security-research</key> <!-- PV=3 专属 --> <key>com.apple.security.virtualization</key> <key>com.apple.vm.networking</key> <key>com.apple.security.get-task-allow</key> ``` 这些权限正常情况下只有苹果签名的二进制才能使用,要绕过这个限制必须禁用 SIP 和 AMFI。 ### 2.3 固件:两份 IPSW 的"杂交" vphone 的固件不来自单一来源,而是将两份固件精确合并: ``` cloudOS PCC 固件 → 提供引导链(iBSS / iBEC / LLB / 内核 / DeviceTree) → 包含 vresearch101 平台的虚拟化支持 iPhone 17,3 iOS 26.1 IPSW → 提供完整用户空间(Cryptex / SystemOS / AppOS) → 真实的 iOS 系统库、框架、应用层组件 ``` 合并之后还需要生成包含 5 种配置的 `BuildManifest.plist`,覆盖 idevicerestore 所有可能走到的恢复路径。 ### 2.4 41+ 处二进制 patch:破防的关键 固件合并完还不能直接启动,因为引导链里的签名验证会把一切拦死。`patch_firmware.py` 对 6 个启动组件进行 **41+ 处精确二进制修改**: **AVPBooter(ROM,最先执行)** 搜索十六进制常数 `0x4447`(DGST 签名标识),定位验证函数,将返回值从 `mov x0, x20` 改为 `mov x0, #0`——4 字节修改,强制告知整个引导链"签名验证通过"。 **iBSS / iBEC(第二三阶段引导)** 搜索 `validate_property_callback` 的特征指令模式,将 `b.ne`(失败跳转)改为 `nop`,将 `mov x0, x22` 改为 `mov x0, #0`。iBEC 还需要 ADRP+ADD 地址重编码来替换 boot 参数。 **XNU 内核(25 处,覆盖 5 个子系统)** | 子系统 | patch 数量 | 目标 | |--------|-----------|------| | APFS SSV 签名封印 | 6 处 | 允许修改系统分区 | | MAC Policy Hooks | 10 处 | 全部替换为 `mov x0,#0; ret` | | PE_i_can_has_debugger | 2 处 | 强制返回 1,开启内核调试 | | Launch Constraints | 2 处 | 绕过进程启动约束 | | dyld 加载策略 | 2 处 | 允许未签名动态库 | **TXM Trustcache** 偏移 `0x2C1F8` 一处 patch,让所有二进制通过 CDHash 验证,为后续注入 SSH、VNC 等工具铺平道路。 ### 2.5 最终运行状态 完整搭建后,vphone 的状态: ``` 设备型号: iPhone99,11 硬件型号: vresearch101ap 内核版本: Darwin 25.1.0 xnu-12377.42.6 RELEASE_ARM64_VRESEARCH1 GPU: Apple Paravirtual device 访问方式: SSH 直连 + VNC 图形界面 权限: root,内核调试器开启,MAC 策略禁用 ``` --- ## 三、vPhone 对风控体系的威胁 ### 3.1 传统风控 SDK 的失效分析 传统 iOS 风控 SDK 的越狱检测体系,大致包含以下几类信号: ``` FileDetector → 检测 Cydia.app、MobileSubstrate 等文件 SchemeDetector → 检测 cydia://、sileo:// 等 URL Scheme DyldDetector → 检测加载的越狱动态库 EnvDetector → 检测 DYLD_INSERT_LIBRARIES 等环境变量 ``` 这些信号对 vphone **全部失效**,原因很简单:vphone 不是越狱的真机,是拥有 root 的虚拟机。Cydia 不存在,MobileSubstrate 不存在,越狱文件特征一个都没有。你的检测器在找"越狱特征",vphone 根本不是越狱,所以完全透明地通过了所有检测。 ### 3.2 vPhone 的真实威胁场景 vphone 的核心威胁不在于"单台设备的高级操作",而在于**规模化**: 一台 Apple Silicon Mac,运行多个 vphone 实例,快照克隆初始状态,批量注册账号,批量操作,完成后快照回滚清除痕迹。这套流程的成本极低,自动化程度极高,对账号工厂、黑产薅羊毛、虚假流量生成都是巨大的能力升级。 而且更麻烦的是,如果攻击者在 vphone 上叠加 Frida hook,把设备型号、内核版本等特征全部伪装成正常 iPhone,即使你新增了 vphone 特征检测,也可能被 patch 掉。 **这就引出了整个防御设计的核心命题:如何对抗可以被 patch 的检测?** --- ## 四、CloudPhoneRiskKit 3.0:分层防御体系 基于对 vphone 技术的深度分析,笔者在 SDK 3.0 中构建了一套**四层防御纵深**体系,核心思想是:**让 patch 行为本身成为最强的风险信号,而不是追求某一个"不可绕过"的单一检测。** ``` ┌─────────────────────────────────────────────────────────┐ │ Layer 4: 服务端策略层(动态权重 / 聚合分析 / 黑名单) │ ├─────────────────────────────────────────────────────────┤ │ Layer 3: 行为熵层(IMU 统计分布 / 触摸物理特征) │ ├─────────────────────────────────────────────────────────┤ │ Layer 2: 一致性校验层(多路径交叉验证 / 反 hook 探针) │ ├─────────────────────────────────────────────────────────┤ │ Layer 1: 硬件指纹层(GPU 型号 / boardID / 内核版本) │ └─────────────────────────────────────────────────────────┘ ``` 越底层越难绕过,越顶层覆盖越广。单层都可以被突破,四层同时突破的成本在工程上构成实质性壁垒。 ### 4.1 Layer 1:硬件指纹层 vphone 有几个固化于内核驱动层的硬件特征,不经过普通用户态 API,攻击者 patch 的门槛更高。 **GPU 型号检测** vphone 使用苹果半虚拟化 GPU,Metal API 返回的设备名是 `Apple Paravirtual device`,真机是 `Apple A18 GPU` 这类包含芯片代号的名称。这个名字来自 IOKit 驱动层,不是用户态字符串。 **关键设计:三路径交叉验证** 不只用一条路径读硬件型号,用三条路径同时读并做一致性校验: ``` 路径1: sysctl hw.machine → 常规路径,最容易被 Frida hook 路径2: IOKit IORegistry → 不经过 libc,绕过 Frida 难度更高 路径3: uname() 系统调用读内核版本 → 直接走内核接口 ``` 三条路径结果不一致,说明其中某条被 patch,**路径结果不一致本身就是风险信号**,即使攻击者成功隐藏了 vphone 特征,他引入的不一致也暴露了他的存在。 ### 4.2 Layer 2:一致性校验层(反 hook 核心) 这层的设计哲学是:**hook 本身会留下痕迹,让 patch 行为成为检测信号。** **函数入口完整性检测** ARM64 正常函数入口是 `STP` 指令(`0xA9`),Frida inline hook 后会被替换为无条件跳转 `B` 指令(`0x14`)或 `BLR` 寄存器跳转(`0xD6`)。 对 `sysctlbyname`、`getenv`、`dlopen`、`fork`、`ptrace` 等关键函数的入口字节做扫描。区分语义:`dyld` 被 hook 是常见的越狱软信号,但 `sysctlbyname` 被 hook 是强烈的**隐藏意图**信号——合法用户没有任何理由 hook 这个函数。 **调用时序探针** Frida 注入后,被 hook 的函数调用需要走 JavaScript bridge,会引入额外延迟。正常 `sysctlbyname` 调用约 1μs,被 hook 后通常超过 20μs。采 50 次样本取中位数,做统计意义上的延迟异常检测。 **Mutation(检测逻辑变异)** 3.0 引入了 `MutationPlanner`,每次检测时随机化检测顺序、检测路径和检测策略。攻击者针对某一次运行做了定向 patch,下次运行因为路径变了,patch 可能失效。这大幅提高了攻击者"稳定绕过"的工程成本。 **Blind Challenge(盲挑战)** 对攻击者隐藏检测意图:用一个看起来无关紧要的 API 调用,实际上在探测某个 hook 是否存在。攻击者不知道这是检测,就不会针对性地 patch 它。 ### 4.3 Layer 3:行为熵层(最难伪造) **这层针对的是软件 patch 根本无法解决的问题:无法用软件伪造根本不存在的硬件。** **IMU 传感器统计分析** vphone 没有真实的 IMU 传感器。CoreMotion 数据来自硬件中断,不经过普通用户态 API,Frida 难以 hook 到这一层。 真机静止放在桌上,加速度计有稳定的地球重力分量(约 9.8 m/s²),有真实的热噪声抖动,Z 轴方差约 1e-6 量级。vphone 的 IMU 数据要么全零,要么是固定伪随机数,统计分布特征与真机完全不同。 采集 2 秒、50Hz 的 IMU 数据,计算两个核心特征值: - `imuMagnitude`:重力向量模长,真机静止约 1.0g,vphone 异常 - `imuVariance`:Z 轴噪声方差,vphone 接近 0,真机约 1e-6 **触摸物理特征** vphone 通过 USB 虚拟触控模拟触摸事件,没有真实的接触面积和压力变化: - `touch.force` 全为 0(真实手指有压力变化) - `touch.majorRadius` 固定值(真实手指接触面积因按压力度而变化) - 速度曲线突变(真实手指有物理惯性的加减速) 这些特征的统计分布无法用软件完美伪造,是整个防御体系中最难被突破的层。 ### 4.4 Layer 4:服务端动态策略层 **IP 聚合度分析** 这是 vphone 场景特有的高价值信号。一台 Mac 运行多个 vphone 实例,这些实例共享同一出口 IP。本地 SDK 看不出异常,但服务端聚合全量数据后,可以发现某个 IP 上同时在线的"iPhone"数量远超正常用户分布。 **动态权重下发** 本地 SDK 有默认权重,服务端可实时调整,无需发版本。发现某个绕过方案流行后,立即降低被绕过信号的权重,提高其他信号权重,几分钟内全量生效。**这是攻防不对称的核心:防守方更新成本极低,攻击方每次都要重新投入。** **新型 vphone 特征下发** 随着 vphone 版本迭代,设备型号、内核版本字符串可能变化。将新特征通过服务端策略下发,本地 SDK 自动适配,无需等待 App Store 审核。 --- ## 五、信号状态模型与评分体系 ### 5.1 五态信号模型 SDK 3.0 将信号状态从 2.0 的三态扩展为五态: | 状态 | 含义 | 典型场景 | |------|------|----------| | `hard(detected)` | 本地即可定性 | GPU 型号异常、内核版本包含 VRESEARCH | | `soft(confidence)` | 需组合判断 | IMU 方差偏低、触摸压力为零 | | `serverRequired` | 必须等服务端 | IP 聚合度、机房 IP 判断 | | `unavailable` | 环境不支持 | 模拟器中传感器不可用 | | `tampered` | **检测过程本身被干扰** | sysctlbyname 被 Frida hook | **`tampered` 状态是 3.0 最重要的新增**,语义上区别于"发现了什么风险"——它表达的是"有人在试图阻止我发现风险",这种隐藏意图本身的风险权重高于很多具体的风险信号。 ### 5.2 非线性加权评分 评分矩阵采用非线性设计,防止软信号无限叠加超过硬信号: ``` 硬信号:取所有命中信号的最大权重值(一票否决型) 软信号:加权求和后乘以置信度衰减系数(防止叠加膨胀) 被干扰计数:引入乘数效应,tamperedCount 越高,总分越高 ``` 最终分数 = min(100, (hardScore + softScore) × (1 + tamperedCount × 0.5)) ### 5.3 三档处置策略 ``` 分数 ≥ 80 或 hardScore ≥ 80 → 直接拦截 分数 ≥ 60 → 触发验证码挑战 分数 ≥ 40 → 静默标记,持续观察 ``` 对于金融风控场景可收紧阈值,电商场景可适当放宽,策略由服务端动态下发,无需发版本调整。 --- ## 六、误杀与漏杀分析 这是风控策略方向最需要正视的问题,不能只关注检测率。 **GPU 型号、内核版本字符串**:正常真机几乎不可能触发,误杀率极低,适合直接作为硬信号。 **IMU 全零**:极罕见的硬件故障也可能导致传感器返回全零,不建议单独一票否决,应与其他信号组合。 **时序探针**:低端设备本来就慢,容易产生误判,定位为软信号输入评分矩阵,不单独判断。 **tampered 信号**:合法用户没有理由 hook `sysctlbyname`,误杀率极低。但极少数安全类 App 可能有类似行为,建议先做风险标记而非直接拦截。 **反直觉结论**:`tamperedCount > 0` 比很多具体的 vphone 特征更有价值。攻击者可以用 Frida 把所有 vphone 特征隐藏得干干净净,但 Frida 注入本身会被 Layer 2 的反 hook 探针发现。他越努力隐藏,tampered 计数越高,最终评分反而越高。 --- ## 七、总结 vphone 技术的出现,标志着 iOS 端风控对抗进入了一个新阶段。传统的"文件特征 + URL Scheme"检测体系已经不足以应对这种新型威胁。 CloudPhoneRiskKit 3.0 的核心设计哲学可以用一句话概括: **不追求"不可绕过的单一检测",而是构建"绕过成本大于收益"的多层体系,并让攻击者的 patch 行为本身成为最强的风险信号。** | 维度 | SDK 2.0 | SDK 3.0 | |------|---------|---------| | vphone 硬件指纹 | ❌ 无 | ✅ GPU / boardID / 内核版本 | | 多路径一致性校验 | ❌ 无 | ✅ sysctl + IOKit + uname | | 反 hook 检测 | ⚠️ 基础 | ✅ 入口指令 + 时序探针 | | 检测干扰上报 | ❌ 无 | ✅ tampered 状态 | | IMU 统计分析 | ❌ 无 | ✅ 重力向量 + 噪声方差 | | 触摸物理特征 | ⚠️ 仅轨迹 | ✅ 压力 + 面积 + 加速度 | | 检测逻辑变异 | ❌ 无 | ✅ MutationPlanner | | 盲挑战机制 | ❌ 无 | ✅ Blind Challenge | | 服务端动态权重 | ❌ 无 | ✅ ServerRiskPolicy 下发 | | 离线兜底能力 | ⚠️ 弱 | ✅ 本地四层不依赖服务端 | vphone 的攻击方成本在持续降低(Lakr233 的 `vphone-cli` 已经大幅简化了搭建流程),防御侧需要尽快完成体系升级。 项目地址:<mark class="encrypted">aeaK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1j5I4y4o6V1@1x3K6R3&6y4e0p5$3i4K6u0r3j5$3I4G2N6h3c8H3K9r3!0F1k6g2)9J5k6s2u0A6M7$3E0Q4x3X3c8V1k6i4c8W2j5%4c8G2M7R3`.`.</mark> *本文所有内容仅供安全研究与学习参考,请遵守相关法律法规。*
冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。
#基础理论
#程序开发
#系统相关
收藏
・
19
点赞
・
9
打赏
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
周游列国
非常支持你的观点!
2026-7-4 10:46
zhongdong
为你点赞!
2026-6-18 20:15
Yangser
你的分享对大家帮助很大,非常感谢!
2026-3-25 09:48
fei3ei
感谢你分享这么好的资源!
2026-3-11 14:10
伯阳今天看书了没
你的帖子非常有用,感谢分享!
2026-3-8 03:43
qqizai
期待更多优质内容的分享,论坛有你更精彩!
2026-3-5 09:12
SC28
为你点赞!
2026-3-4 14:31
wx_Q道长
你的分享对大家帮助很大,非常感谢!
2026-3-2 18:04
R0g
+10
非常支持你的观点!
2026-3-1 22:50
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
4
)
巴巴查克
雪 币:
30
活跃值:
(26)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
3
粉丝
0
关注
私信
巴巴查克
2
楼
这个能过苹果的App Attest?
2026-3-2 16:46
0
qqqiu
雪 币:
1606
活跃值:
(706)
能力值:
( LV4,RANK:40 )
在线值:
发帖
9
回帖
44
粉丝
54
关注
私信
qqqiu
1
3
楼
现有 vPhone PoC 基本过不了严格的App Attest,但现实世界里很多业务没接 / 接不全 / 不敢强依赖 App Attest,这个sdk做的是另外一层 —— 设备与行为风控,和 App Attest 是互补关系,而不是替代关系。
2026-3-2 17:13
0
mb_ahpbekaq
雪 币:
0
能力值:
( LV1,RANK:0 )
在线值:
发帖
0
回帖
7
粉丝
0
关注
私信
mb_ahpbekaq
4
楼
巴巴查克
这个能过苹果的App Attest?
是的 能不能过app attest 是最大的重点 ,不然跟模拟器没啥区别
2026-3-2 17:40
0
mb_pakcfsam
雪 币:
能力值:
( LV1,RANK:0 )
在线值:
发帖
0
回帖
7
粉丝
0
关注
私信
mb_pakcfsam
5
楼
有没有联系方式,想请教您开发一个系统
2026-6-3 16:39
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
qqqiu
1
9
发帖
44
回帖
40
RANK
关注
私信
他的文章
从端侧风险检测到策略闭环
758
防得最狠的地方往往最不值钱--xx总结
4088
某反作弊 VMP Native 层深度逆向:从 643KB 混淆 SO 到 RC4-like Mixer 的完整穿透路径
10464
纯静态硬啃xx反封号 dylib:OLLVM CFF MBA 全链路反混淆,还原 167 hook 攻防全图(看着吓人
23761
CloudPhoneRiskKit深度解析:从特征匹配到物理约束验证
4564
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部