1. iOS沙盒机制与进程隔离的本质第一次拆解iOS应用时我被沙盒机制狠狠教育了。当时试图用NSFileManager直接读取系统相册路径结果只得到冷冰冰的Operation not permitted错误。这种设计就像给每个应用分配了带独立密码锁的保险箱——你的应用只能打开自己的箱子其他应用的数据想都别想。苹果的沙盒规则远比想象中严格。每个应用安装后拥有独立的/var/mobile/Containers/Bundle/Application/{UUID}目录存放应用本体数据存储在隔离的/var/mobile/Containers/Data/Application/{UUID}目录运行时内存空间完全隔离连ptrace调试都被禁用但现实需求总是突破限制。比如企业微信要调用钉钉传文件或者安全测试时需要监控剪贴板数据流动。这时候就该IPC进程间通信机制登场了——它相当于给保险箱开了几个受控的传送门。我在逆向某金融App时就曾通过Hook URL Scheme拦截到未加密的账户ID传输这暴露出开发者对IPC安全性的严重低估。2. 逆向工程师眼中的四大IPC通道2.1 URL Schemes最容易被滥用的后门在逆向分析中URL Scheme就像应用的门铃监控器。通过class-dump提取Info.plist里的CFBundleURLTypes我常发现开发者埋了许多隐藏入口。某次审计中一个未文档化的alipay://transfer?amount1000让我直接触发了转账界面。实战中要注意三个关键点参数校验缺失用Cycript注入修改参数值测试边界条件// 原始调用 [[UIApplication sharedApplication] openURL:myapp://pay?amount100]; // Hook后调用 [[UIApplication sharedApplication] openURL:myapp://pay?amount999999];Scheme劫持通过修改LSApplicationQueriesSchemes实现中间人攻击回调验证监测application:openURL:options:是否检查sourceApplication2.2 Pasteboard移动端的共享内存剪贴板监控是数据收集的黄金位置。逆向时我会用Frida实时监听UIPasteboard变化Interceptor.attach(ObjC.classes.UIPasteboard[- setString:].implementation, { onEnter: function(args) { console.log(剪贴板写入:, ObjC.Object(args[2]).toString()); } });曾发现某社交App在后台持续读取通用剪贴板连密码管理器粘贴的内容都被上传。更危险的是iOS 14后引入的UIPasteboardDetectionPattern它能识别剪贴板中的特定模式如加密货币地址这种设计本为方便用户却成了数据嗅探的帮凶。2.3 App Groups沙盒中的共享仓库当逆向遇到com.apple.security.application-groups时意味着可能找到跨应用数据通道。通过NSFileManager的containerURLForSecurityApplicationGroupIdentifier:可以访问共享目录这里经常藏着意外收获某银行App与它的Widget共享未加密的用户Token某游戏用NSUserDefaults同步存档数据到主应用某视频App在共享目录缓存解密后的DRM内容破解方法很简单——用lldb附加到进程后直接调用相关方法获取组ID(lldb) po [NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:group.com.example.app2.4 XPC Services苹果的IPC高速公路XPC是逆向工程中的硬骨头但突破后回报巨大。分析步骤通常是从Mach-O文件的LaunchDaemons段提取XPCServices目录用xpcproxy动态分析服务注册信息通过NSXPCConnection伪造客户端某次金融App分析中我发现其加密操作通过XPC委派给com.example.secureenclave.xpc处理。通过Frida hookNSXPCInterface的protocol方法成功获取到完整的RPC接口定义const iface ObjC.classes.NSXPCInterface.interfaceWithProtocol_(Protocol.getProtocol(SecureEnclaveProtocol)); console.log(iface.debugDescription());3. IPC机制的安全攻防实战3.1 防御者的最佳实践给开发者的三条铁律URL Schemes使用UIApplication的canOpenURL:验证Scheme可用性在AppDelegate中校验sourceApplication白名单对URL参数进行HMAC签名验证PasteboardiOS 10使用UIPasteboardNameGeneral替代过时的generalPasteboard敏感内容设置expirationDate自动清除启用UIPasteboardOptionLocalOnly限制设备内共享XPC在NSXPCInterface中明确protocol的方法签名使用NSXPCConnectionPrivileged创建高权限连接实现connection:shouldAcceptNewConnection:验证客户端3.2 攻击者的武器库逆向工程师常用的三板斧动态注入通过DYLD_INSERT_LIBRARIES注入监控代码# 使用theos开发tweak监控URL调用 %hook UIApplication - (BOOL)openURL:(NSURL*)url { NSLog(### 拦截URL调用: %, url); return %orig; } %end流量镜像用iproxyrvictl重定向XPC通信# 创建虚拟接口 rvictl -s UDID # 使用Wireshark捕获XPC流量 tcpdump -i rvi0 -w xpc.pcap内存取证当IPC数据加密时直接dump进程内存# 使用LLDB获取进程内存 (lldb) process attach --name TargetApp (lldb) memory read --outfile /tmp/dump.bin 0x0000000100000000 0x00000001010000004. 从数据流视角看IPC安全真正危险的往往不是IPC机制本身而是开发者的使用方式。我总结出三类典型漏洞模式模式一信任边界混淆把App Groups共享目录当作安全存储认为XPC通信自动具有TLS级别的安全性假设只有自己的应用会调用注册的URL Scheme模式二数据生命周期失控剪贴板内容长期驻留内存共享文件删除后未擦除磁盘空间XPC连接未及时销毁导致句柄泄漏模式三元数据泄露URL Scheme调用记录在系统日志中通过NSFileManager可枚举App Group列表XPC服务暴露了过多接口信息在最近一次银行App评估中我们通过组合利用这些缺陷先通过未受保护的URL Scheme进入应用再从App Groups共享目录获取加密密钥最终通过XPC接口缺陷执行了任意SQL查询。整个过程没有破解任何加密算法纯粹利用IPC设计缺陷就突破了层层防线。