探究iPhone的完全远程攻击面
字数 3045 2025-08-22 18:37:22
iPhone完全远程攻击面分析与漏洞挖掘技术文档
1. 远程攻击面概述
iPhone的完全远程攻击面是指不需要任何物理或用户交互即可被利用的漏洞攻击面,主要包括:
- SMS/MMS(短信/彩信)
- Visual Voicemail(可视语音邮件)
- Email(电子邮件)
- iMessage(苹果即时通讯)
关键特征:
- 完全远程(Fully Remote):无需物理接近目标
- 无交互(Zero-click):不需要用户任何操作
- 实时工作:攻击可立即执行
2. SMS/MMS攻击面分析
2.1 SMS处理机制
- 由
CommCenter进程处理 - 二进制SMS PDU由
sms::Controller::parseRawBytes方法解析 - 创建
sms::Model类实例存储消息详情 - 最终由
sms::Controller::processReceivedSms_sync处理
分析工具:
- 内置SMS模拟器(通过XPC触发)
- 自定义库补全缺失功能(用于fuzz测试)
2.2 MMS处理机制
- 主要由
MmsOperation::decodeMessage方法处理 - 可通过编写调用此方法的iOS应用进行fuzz
3. Visual Voicemail (VVM)攻击面
3.1 VVM工作原理
- 通过IMAP协议从运营商服务器获取语音邮件
- 服务器URL和凭证通过特殊格式SMS提供
- 示例VVM SMS消息:
STATE?state=Active;server=vvm.att.com;port=143;pw=asdf;name=5556667777@att.com
3.2 攻击限制
- 设备必须配置VVM功能
- SMS的PID字段必须设置为目标运营商VVM值
- 部分运营商阻止外部IMAP请求
3.3 发现漏洞(CVE-2019-8613)
- 漏洞类型:NSString UAF(Use-After-Free)
- 触发路径:
- IMAP服务器发送
LIST命令获取邮箱分隔符字符串 - 服务器发送
NAMESPACE命令获取邮箱前缀 - 服务器遇到错误时释放分隔符字符串
NAMESPACE处理代码未检查命令是否成功,继续使用已释放内存
- IMAP服务器发送
4. Email攻击面分析
4.1 MIME处理漏洞(CVE-2019-8626)
- 漏洞位置:
[MFMimePart _contents:toOffset:resultOffset:downloadIfNecessary:asHTML:isComplete:] - 漏洞原理:
- 通过将MIME类型字符串直接追加到"decode"并调用结果方法
- 可能导致调用非预期选择器,引发内存损坏
- 影响范围:
- iOS 11.3.1可被利用
- iOS 12仅导致crash
5. iMessage攻击面深度分析
5.1 iMessage消息结构
二进制plist格式,关键字段:
t:纯文本消息内容x:XML消息内容bid:插件标识符bp:插件数据(使用NSKeyedUnarchiver反序列化)ati:归属信息p:参与者
5.2 反序列化攻击面
bp字段在SpringBoard中反序列化(无沙盒环境)ati字段在imagent进程中解码- 使用
NSKeyedArchiver序列化机制
5.3 NSKeyedArchiver安全机制
- NSSecureCoding:
- 类必须实现
requiresSecureCoding - 必须提供允许反序列化的类白名单
- 类必须实现
- 反序列化方法:
- 安全方法:
initForReadingFromData:,unarchivedObjectOfClasses:fromData:error: - 不安全方法:
initWithData:,unarchiveObjectWithData:error,initForReadingWithData:
- 安全方法:
5.4 发现的iMessage漏洞
5.4.1 Digital Touch扩展漏洞(CVE-2019-8624)
- 类型:越界读取
- 原因:在复制前错误检查字节数组长度
- 位置:Digital Touch扩展的protobuf解码
5.4.2 SGBigUTF8String漏洞(CVE-2019-8663)
- 类型:越界内存访问
- 原因:将字节数组视为null终止UTF-8字符串而未验证null终止
5.4.3 NSURL Bookmark漏洞(CVE-2019-8661)
- 类型:堆内存破坏
- 原因:处理已弃用的alis格式时不安全使用
strcat - 仅影响:Mac系统
5.4.4 _NSDataFileBackedFuture漏洞(CVE-2019-8646)
- 类型:内存损坏
- 原因:反序列化长度与最终加载文件长度不一致
- 特点:违反NSData长度保证
5.4.5 _PFArray漏洞(CVE-2019-8647)
- 类型:使用已释放对象
- 原因:
initWithObjects:count:假设对象有引用而实际无引用
5.4.6 NSKnownKeysDictionary1漏洞(CVE-2019-8660)
- 类型:整数溢出导致内存损坏
- 原因:在检查密钥数量前使用NSKnownKeysMappingStrategy1实例
5.5 NSKeyedArchiver反序列化深度问题
5.5.1 循环引用问题
反序列化流程:
- 临时字典存储alloc返回对象(不保留引用)
- 调用
initWithCoder: - 从临时字典移除对象
- 将返回对象加入永久对象字典
潜在问题:
initWithCoder:可能释放alloc返回对象- 反序列化可能引用同一对象,导致无效引用
initWithCoder:完成前使用对象可能导致状态不一致
5.5.2 攻击面扩展问题
示例:仅允许NSURL类的反序列化实际包含:
- NSURL及其所有子类的
initWithCoder: - NSURL的
initWithCoder:中调用的其他类(NSString、NSData等) - 这些类的所有子类
- 这些类方法调用的其他方法
攻击面呈指数级扩大,特别是当应用导入额外框架时。
6. 漏洞挖掘工具与方法
6.1 SMS/MMS测试工具
- 内置SMS模拟器
- 自定义补全库
- IDA静态分析
- Fuzz测试框架
6.2 iMessage测试工具
- Frida hook工具(发送/转储iMessage)
- 自定义消息生成器
- Plist分析工具
- NSKeyedArchiver分析脚本
6.3 通用方法
- 逆向分析(IDA)
- 动态调试
- Fuzz测试
- 协议分析
- 继承关系分析
7. 防御建议
7.1 开发层面
- 全面启用NSSecureCoding
- 严格限制反序列化类白名单
- 避免危险的反序列化模式
- 对子类进行安全审查
- 实现深度防御检查
7.2 架构层面
- 减少远程攻击面
- 隔离高风险组件
- 增强沙盒限制
- 监控异常反序列化行为
8. 总结
本文详细分析了iPhone的完全远程攻击面,重点包括:
- SMS/MMS处理机制及漏洞
- Visual Voicemail的IMAP攻击面
- Email客户端的MIME处理问题
- iMessage的NSKeyedArchiver反序列化漏洞集群
共发现并报告了10个高危漏洞(均已修复),其中大部分存在于iMessage中,主要由于:
- 极其广泛且难以完整枚举的反序列化攻击面
- 多个框架的意外交互
- 非常规使用路径的安全疏忽
这些研究成果表明,减少和加固远程攻击面是提高iOS安全性的关键方向。