作者:百度安全实验室
iOS 系统向来以其良好的安全性深得广大用户的信赖,特别是其安全升级速度与安卓相比有明显优势。但是根据百度安全实验室对上亿台国内 iOS 设备系统版本统计发现,iOS 10.3.3于7.19日发布至今已有50天,仅有54%的用户升级到了最新的iOS 10.3.3系统,剩余的近半数国内 iOS 设备依然停留在受高危漏洞影响的旧版系统。即使最新的 iPhone7 系列机型,也有近32%的设备没有及时升级。而这些旧版本的多个高危漏洞的利用方法已经被公开,未升级用户面临着严峻的安全风险。我们呼吁 iOS 用户尽快升级,也呼吁手机厂商采用更有效的技术保护普通用户,防止他们受到已知高危漏洞的威胁。
安全实验室对国内上亿台 iOS 设备的系统版本进行了统计,排除虚假设备干扰后结果显示,目前国内升级到最新的 iOS 10.3.3系统的设备仅占54%。依然有近半的 iOS 设备分散停留在其余44个不同的旧版 iOS 系统。这些运行旧版 iOS 系统的设备将面临前文中列举的各个高危漏洞带来的安全风险。
详细的系统版本比例分布如图1所示,从左半部分开始,逆时针方向按新旧版本次序依次为最新的iOS 10.3.3到4年前的版本iOS 7。其中,最新的 iOS 10.3.3系统占比53.6%;iOS 10的旧版本主要以10.3.2 (占比8.2%)和 10.2.1(占比6.2%)为主,10.2与10.1.1各占3%,剩余7个 iOS 10旧版本公占比6.9%;仍有超过18%的用户停留在 iOS 10之前的版本,发布已经两年的 iOS 9 占比11.9%,发布已经三年的 iOS 8 占比 6%。
此外,我们对主要机型类别的系统版本比例进行了统计,结果如图2所示,自左至右分别为iPhone7系列(2016年9月发布),iPhone6s系列(2015年9月发布), 更老的iPhone型号,iPad Pro系列和其他iPad系列。5类设备型号都一定比例的碎片化问题,即便是目前最新的iPhone7系列手机,也有近32%没有升级到最新的10.3.3系统。
每次iOS系统发布新版本后,新版本已修复的部分漏洞细节以及利用方法会被研究者公开,部分漏洞利用的完整代码也会公开发布供研究交流。在为安全社区作出贡献的同时,也为恶意攻击者提供了便利的攻击条件。恶意攻击者也可以从公开渠道获取相关利用代码,结合部分Webkit漏洞利用,甚至可以完成从点击链接到获取Kernel权限的完整攻击。如果用户没有及时更新到最新版的iOS系统,将面临严峻的安全威胁。
表1列举了部分带有巨大危害的iOS漏洞:
Triple Fetch漏洞(CVE-2017-7047):影响10.3.2及之前的iOS系统,通过攻击用户态XPC通信反序列化机制的缺陷,从而实现在特权用户态进程(如launchd,coreauthd等)中的任意代码执行。完整的漏洞利用代码已经被公开。
ziVA系列内核漏洞:影响10.3.1及之前的iOS系统,通过攻击内核AppleAVEDriver的逻辑缺陷进而获取Kernel权限。该攻击可以复用上面的Triple Fetch漏洞完成前期沙盒逃逸,完整的漏洞利用代码已经在github公开。
BroadPwn Wi-Fi漏洞(CVE-2017-6975):影响10.3及之前的iOS系统,iOS设备上的Broadcom Wi-Fi芯片固件中含有缓冲区溢出漏洞。攻击者可以通过网络直接攻击同一Wi-Fi热点下的有漏洞的iOS设备,在受害者无感知的情况下在对方设备上运行恶意代码。
mach_voucher内核漏洞(CVE-2017-2370):影响10.2及之前的iOS系统,通过攻击iOS 10新引入的mach trap的缺陷以获得内核空间的任意读写能力。完整的利用代码已经公开,该漏洞也被用于 yalu 10.2越狱工具中。
在iOS系统为用户提供更多的安全防护与隐私保护策略的同时,针对iOS系统的漏洞也呈现逐年上涨的趋势。由于iOS系统尚无热修复的功能,用户只能通过系统升级的方式来消除漏洞威胁。在过去的一年里,苹果公司陆续发布12个iOS版本(目前版本号为10.3.3)更新,共计修复338个安全漏洞,包含30个内核漏洞,106个Webkit代码执行漏洞,其中多个高危漏洞完整利用代码已经公开,可直接获取系统最高权限,严重威胁用户安全。
自2016年9月发布至今,iOS 10系统每隔2个月会有一次小版本升级,每次升级平均修复数十个高危安全漏洞。攻击者可以通过点击链接、访问恶意服务线网络、安装应用等方式对系统发起攻击,利用这些高危漏洞获取系统最高权限,进而达到窃取用户敏感信息、远程监控、定向攻击等目的。
苹果公司开发者网站显示,自2016年9月发布至今,全球范围内87%的iOS用户已经升级到iOS 10,但没有给出具体的版本分布情况。但如前文所述,小版本的更新不及时依然会造成严峻的安全威胁。
表2列举了含有安全更新的iOS版本、发布时间、间隔天数与修复漏洞总数的统计情况,统计时去除了iOS10中三个(10.0.2,10.0.3,10.1.1)无安全更新的版本。
从表中计算得到,常规情况下平均每46天iOS系统会进行一次系统更新,每次更新平均修复漏洞34个。在某些特殊情况下,苹果公司也会选择在更短的周期内发布更新,紧急修复个别高危漏洞。例如,为了修复部分iPhone 7/7Plus 预装iOS 10系统中的高危漏洞,选在在发布iOS10的同一天发布iOS 10.0.1,对“三叉戟”iOS APT攻击中的内核信息泄漏漏洞(CVE-2016-4655)进行修复;在Project Zero正式发表博客公开漏洞细节的前一天,发布iOS 10.3.1修复高通Wi-Fi芯片任意代码执行漏洞(CVE-2017-6975)。
除了统计每个安全更新修复的漏洞总数外,我们还对版本升级中修复的内核漏洞数量(可被利用获取系统最高权限)和Webkit代码执行漏洞数量(可被利用完成远程攻击)单独进行了统计:
内核漏洞:包含内核拒绝服务、内核信息泄漏、内核代码执行等多种不同类型的漏洞。一次完整的内核攻击通常是对一个漏洞直接利用或多个内核漏洞组合利用完成的。一旦漏洞利用成功,将会直接获取系统最高权限执行任意代码,用户的所有信息也会被攻击者轻易获取。如表2所示,常规版本升级几乎每次都会修复内核漏洞。
Webkit中的可执行漏洞:Webkit是iOS系统浏览器的核心执行引擎,其攻击途径容易,危害程度高。受害者无需安装应用,点击链接即可被远程攻击。如表3所示,Webkit代码执行相关的漏洞数量较内核更多,通常会修复数十个。虽然iOS的安全更新说明中模糊描述了漏洞详情,很多都可以通过CVE编号在exploit-db等公开渠道获取PoC。
由于苹果公司的封闭策略,硬件方面严格控制了运行iOS的机型数量;软件方面,只有系统大版本(通常每年一次)发布才引入API的变动。因此,从开发的角度看,iOS系统的开发生态面临的碎片化问题不大。
然而,如表4所示,过去四年发布的四个iOS大版本中共涵盖了45个小版本的升级。这意味着iOS系统每一次带有安全更新的小版本升级都将把整个iOS安全生态的系统分布进行一次切割。每个小版本都会有部分的残留用户,只有一直保持升级到最新系统的用户才可能最大限度的免受安全威胁。因此,从安全的角度看,iOS安全生态也会面临碎片化的问题。
值得注意的是,iOS系统升级需要苹果服务端验证,服务端只允许iOS系统升级至当前的最新版,这种升级策略在一定程度上可以避免用户在部分中间版本有滞留,缓解安全生态碎片化的问题。
然而,实际的统计结果显示,iOS安全生态碎片化问题依然存在,用户选择不升级的带来的安全隐患不容忽视。
另外,我们还统计了自7月19日iOS 10.3.3正式发布以来,国内iOS用户系统的升级趋势。如图3所示,iOS 10.3.3主要来自10.3.2的用户,这部分用户升级习惯较好,会在接到新版本通知时及时升级系统。升级系统的设备中,近80%在发布新版本后的三周之内选择了升级,随后整个升级趋势放缓。其他各残留旧版本均有少量用户选择升级,整体占比有微小的下降趋势,但大多数用户仍然选择停留在旧版系统。
虽然苹果强制升级最新版的策略在一定程度上可以缓解安全生态的碎片化,从实际的统计情况来国内近半数的iOS设备并不能及时升级,安全生态的碎片化问题依然存在。近期iOS 11会正式发布,在提供新功能同时,还会修复大量安全漏洞,建议广大用户在条件允许的情况下及时升级到最新版本,避免受到高危漏洞影响。同时我们也呼吁手机厂商采用更有效的技术保护普通用户,防止他们受到已知高危漏洞的威胁。
[1] https://developer.apple.com/support/app-store/
[2] https://www.cvedetails.com/version-list/49/15556/1/Apple-Iphone-Os.html
[3] https://bugs.chromium.org/p/project-zero/issues/detail?id=1247
[4] https://github.com/doadam/ziVA
[5] https://bugs.chromium.org/p/project-zero/issues/detail?id=1004
[6] https://bugs.chromium.org/p/project-zero/issues/detail?id=965
[7] https://en.wikipedia.org/wiki/IOS_version_history