欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

深入探索在野外发现的iOS漏洞利用链(二)

来源:本站整理 作者:佚名 时间:2019-09-10 TAG: 我要投稿

本文所描述的漏洞利用,是我自2016年底以来一直在审计的一个已知漏洞类。导致该漏洞的原因将会在第3条漏洞利用链中再次看到,第三篇文章将在随后发布。
该漏洞利用链针对iOS 10.3 – 10.3.3有效。我独立发现了这一漏洞并将其报告给Apple,该漏洞在iOS 11.2中实现了修复。
这也同时表明,Project Zero研究的漏洞确实与在野外被利用的漏洞相重合。
 
iOS漏洞利用链#2:IOSurface
我们首先对最早发现的漏洞利用链进行分析,这是以iOS 10.0.1-10.1.1为目标的漏洞,可能自2016年9月以来就已经出现。
攻击目标:iPhone 5s到iPhone 7,运行iOS版本10.3 – 10.3.3(在11.2版本中被修复)
支持版本包括:
iPhone6,1 (5s, N51AP)iPhone6,2 (5s, N53AP)iPhone7,1 (6 plus, N56AP)iPhone7,2 (6, N61AP)iPhone8,1 (6s, N71AP)iPhone8,2 (6s plus, N66AP)iPhone8,4 (SE, N69AP)iPhone9,1 (7, D10AP)iPhone9,2 (7 plus, D11AP)iPhone9,3 (7, D101AP)iPhone9,4 (7 plus, D111AP)
支持版本包括:
14E277 (10.3 – 2017年3月27日)14E304 (10.3.1 – 2017年4月3日)14F89 (10.3.2 – 2017年5月15日)14G60 (10.3.3 – 2017年7月19日)
第一个不存在漏洞的版本:11.0 – 2017年9月19日
该漏洞在iOS 11.2版本中才实现修复,但漏洞利用仅支持10.3-10.3.3(iOS 10的最新版本)。针对iOS 11,攻击者转移到了新的漏洞利用链上。
 
内核漏洞
在这里,使用的内核漏洞是CVE-2017-13861,与Project Zero发现的漏洞#1417(async_wake)相同。我独立发现了这个漏洞,并在2017年10月30日向Apple报告。攻击者似乎在我发现之前就停止利用该漏洞,最早不受支持的版本是iOS 11,在2017年9月19日发布。该漏洞直到iOS 11.2(2017年12月2日发布)才得到修复。
iOS 11的发布破坏了该漏洞利用中的一种利用技术,具体来说,在iOS 11中删除了mach_zone_force_gc()内核MIG方法。目前还不清楚攻击者为什么要针对iOS 11系统使用一个全新的漏洞利用链(在删除方法后使用强制GC的新技巧),而没有更新这条利用链。
 
漏洞分析
我们在第一个利用链中看到可以通过IOConnectCallMethod函数调用IOKit外部方法。我们可以调用另一个函数:IOConnectCallAsyncMethod,它需要一个额外的mach端口和引用参数:
kern_return_t
IOConnectCallMethod(mach_port_t     connection,
                    uint32_t        selector,
                    const uint64_t* input,
                    uint32_t        inputCnt,
                    const void*     inputStruct,
                    size_t          inputStructCnt,
                    uint64_t*       output,
                    uint32_t*       outputCnt,
                    void*           outputStruct,
                    size_t*         outputStructCnt);
对比下面的:
kern_return_t
IOConnectCallAsyncMethod(mach_port_t     connection,
                         uint32_t        selector,
                         mach_port_t     wake_port,
                         uint64_t*       reference,
                         uint32_t        referenceCnt,
                         const uint64_t* input,
                         uint32_t        inputCnt,
                         const void*     inputStruct,

[1] [2] [3] [4] [5] [6] [7]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载