王铁磊、徐昊-盘古越狱揭秘

上传人:1861****258 文档编号:144557120 上传时间:2020-09-10 格式:PDF 页数:30 大小:6.32MB
返回 下载 相关 举报
王铁磊、徐昊-盘古越狱揭秘_第1页
第1页 / 共30页
王铁磊、徐昊-盘古越狱揭秘_第2页
第2页 / 共30页
王铁磊、徐昊-盘古越狱揭秘_第3页
第3页 / 共30页
王铁磊、徐昊-盘古越狱揭秘_第4页
第4页 / 共30页
王铁磊、徐昊-盘古越狱揭秘_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《王铁磊、徐昊-盘古越狱揭秘》由会员分享,可在线阅读,更多相关《王铁磊、徐昊-盘古越狱揭秘(30页珍藏版)》请在金锄头文库上搜索。

1、盘古越狱揭秘 王铁磊 徐昊 盘古安全团队 上海犇众信息技术有限公司 盘古越狱用户态漏洞分析 盘古越狱内核态漏洞分析 总结 移动安全研究团队,创建上海犇众信息技术有限公司 研究涉猎各种移动平台,包括Android、iOS、车联网以 及各种嵌入式设备 团队因多次发布针对iOS 7、8、9三代操作系统越狱工具 而闻名 组织一个专门针对移动平台的安全会议MOSEC 关于我们 大部分iOS安全机制都在iOS内核中实现,因此越狱工具 需要通过攻击内核漏洞才能突破这些安全机制 沙盒执行环境仅能与有限几个内核扩展模块通信,直接攻 击内核难度很大 沙盒外代码执行可以获得更大的内核攻击面,但是获得沙 盒外代码执行

2、本身不简单 越狱设计 通过用户态漏洞获得沙盒外代码执行 沙盒外任意文件读写漏洞 沙盒外任意代码执行漏洞 盘古越狱的特色 沙盒外任意文件读写漏洞 Mac OSiOS上进程间通信机制,是对Mach 消息的封 装,更加简单易用 2011年在iOS 5版本中引入 XPC进程间通信 XPC 服务端 XPC 客户端 Assetsd 负责名为 com.apple.PersistentURLTranslator.Gatekeeper 的系 统服务 Assetsd 本身位于 /System/Library/Frameworks/AssetsLibrary.framewo rk/Support/ 任何沙盒内应用都

3、可以与该服务通信 Assetsd漏洞 Assetsd 有个公开接口,负责将指定路径的文件或者目录 转移到 /var/mobile/Media/DCIM/ 下面 Assetsd 根据xpc消息中srcPath 和 destSubdir 字段获取 源文件和目的文件路径 漏洞成因 漏洞利用 在 srcPath/destSubdir 中使用 “./”技巧,就可以构成路径遍 历漏洞,导致任意文件读写 任意文件读直接导致严重隐私泄漏问题 任意文件写则可以被转化为安装任意App、替换系统App 等 参考MalwAirDrop: Compromising iDevices via AirDrop, Mark

4、Dowd, Ruxcon 2015 更多攻击场景 想法:在系统进程中注入动态链接库,从而在系统进程执行 环境中攻击内核 难点1:自iOS 8版本后,苹果公司设计了TEAM ID验证,这 个机制阻止系统进程加载第三方动态链接库 (除非系统进程 拥有 com.apple.private.skip-library-validation entitlement) 难点2:自iOS 8.3版本后,动态链接器dyld忽略DYLD_* 类 型的环境变量 (除非系统进程拥有 get-task-allow entitlement) 沙盒外任意代码执行 iOS 9 文件系统中的所有可执行文件都不具有 get-ta

5、sk- allow entitlement 幸好在老版本的DDI(Developer Disk Image)中找到 了vpnagent 谁拥有get-task-allow 直接加载一个老版本的DDI? iOS 9 有版本检查,老版本DDI无法被成功加载 但是。 如何上传vpnagent到设备 直接加载一个老版本的DDI? iOS 9 有版本检查,老版本DDI无法被成功加载 但是。 MobileStorageMounter会先将DDI中的trustcache注册 到内核,通知内核把DDI中trustcache文件里的CDHASH 值加入到可信列表中 结果:老版本中的vpnagent在iOS设备上

6、具备了合法签名 如何上传vpnagent到设备 加载一个正常的DDI,使得iOS设备上有debugserver 利用之前的XPC漏洞,将老版本的vpnagent写到一个 debugserver可以访问的位置 通知debugserver 调试vpnagent,设置 DYLD_INSERT_LIBRARIES环境变量,强制vpnagent加 载我们提供的动态链接库 调试vpnagent 在我们的dylib中,重用系统可执行文件的签名段 内核会误以为vpnagent加载一个系统dylib,因此不会触 发Team ID 验证失败 但是这个dylib会触发代码签名验证失败 绕过TEAM ID验证 为支持

7、iOS设备调试,内核允许具有get-task-allow entitlement的进程发生代码签名错误 例如,如果调试器设置断点,这类断点本质上就会修改代 码段,导致代码签名验证失败 但是内核会允许进程继续执行 因此vpnagent加载我们dylib的时候,虽然触发了代码 签名错误,但是内核并不会终止vpnagent进程 get-task-allow的神奇 盘古越狱用户态漏洞分析 盘古越狱内核态漏洞分析 总结 CVE-2015-6974 IOHID 组件中的释放后使用类型漏洞(UAF) 一个漏洞就可以完全控制内核(信息泄漏任意代码执行) 细节参见 http:/blog.pangu.io/poc

8、2015-ruxcon2015/ iOS 9.0越狱中内核漏洞 CVE-2015-7084 IORegistryIterator中条件竞争漏洞(Race Condition) 一个漏洞就可以完全控制内核(信息泄漏任意代码执行) 被Ian Beer 报告给Apple Lokihardt在他私有越狱工具中使用了该漏洞 沙盒内可以直接触发 细节参见 http:/blog.pangu.io/race_condition_bug_92/ iOS 9.1越狱中内核漏洞 CVE-2016-4054 IOMobileFrameBuffer中堆溢出漏洞(Heap Overflow) 一个漏洞就可以完全控制内核(

9、信息泄漏任意代码执行) 沙盒内可以直接触发 细节以后再公开 iOS 9.3.3越狱中内核漏洞 iOS64位设备采用Kernel Patching Protection机制防止 内核被运行时篡改 KPP保护了什么 r-x/r 属性的kernelcache内存页面 例如:代码页和const页面 这些页面的页表 KPP不会保护什么 堆内存 rw属性的kernelcache内存页面 内核修补绕过KPP com.apple.security.sandbox模块的mach-o头部 _TEXT段受KPP保护 _DATA段不受KPP保护 _got中保存了sub 函数地址 内核模块页表属性示例 代码签名和沙盒检

10、查的实现都是通过 MAC 策略扩展实现 内核调用mac_policy_register 函数去设置钩子函数 钩子函数指针保存在mac_policy_conf.mpc_ops中 iOS 9.2以前, 这个数据段保存在_DATA._bss中, 属于rw页面,因此不受KPP保护 直接把相应函数指针设置为NULL就可以关掉相应功能 iOS 9.2后mac_policy_conf.mpc_ops被转移到 _TEXT._const页面中 内核修补绕过KPP 签名检查中如何检查调试开关是否开启? 调用导入函数 PE_i_can_has_debugger,确定是否有 debug标识 PE_i_can_has_debugger函数指针保存在 _DATA._got 中,不受KPP保护 直接修改PE_i_can_has_debugger函数指针就可以轻易绕 过签名检查 内核修补绕过KPP 越狱研究和苹果公司之间的博弈使得iOS更加安全 沙盒内可触发的内核漏洞和进程间通信漏洞给iOS带来巨 大威胁 总结 谢谢

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号