-
-
阿里发布2015移动安全漏洞年报
-
发表于: 2016-3-8 08:37 1380
-
新闻链接:http://www.freebuf.com/vuls/98052.html
新闻时间:2016.03.08
新闻正文:
第一章 2015年应用漏洞
1.1 业界公开的应用漏洞类型和分布
2015是不平凡的一年,各界媒体对移动应用的漏洞关注度也越来越高,漏洞的产生不仅带来用户设备与信息的安全影响,也给企业带来业务或声誉上的损失。
阿里聚安全每周对国内外50家著名安全公司、媒体、漏洞平台的态势进行分析,国内外移动安全事件和资讯的关注依然是围绕操作系统和移动应用的技术风险展开,其中国内更加关注移动应用的漏洞风险。以下数据结论来自于阿里聚安全对业界风险态势的统计。
1. 行业分布
根据公开的漏洞数据统计,产生漏洞的应用所占行业比例与用户设备中安装的比例相似,应用工具类APP所产生的漏洞占比最高,达54%;游戏类应用漏洞占比最低,为2%,原因是大部分用户手机中安装的游戏应用较少,且游戏类应用更新迭代速度快、漏洞不易被深入挖掘。
漏洞1.png
图1 2015年公开应用漏洞的行业分布
2. 漏洞类型
移动应用是连接用户与业务的桥梁,在智能设备中与用户直接交互,并通过通信链路传输业务请求到后端服务器。安全研究者从移动应用为入口,对应用进行漏洞挖掘及业务安全分析,数据显示大部分高风险漏洞爆发在服务端环节。
在2015年公开的漏洞数据中,71%的漏洞集中在移动业务网关、服务器端,攻击者把移动应用作为入口进行分析,而漏洞产生及修复需要在服务器端完成。现阶段大量业务从传统的PC端扩展到移动端,在服务器上运行业务逻辑也是较为安全和低成本的实现方式,也印证了以上数据。但正因为业务逻辑是在服务端处理,如果不对作为入口的客户端进行强有效的安全校验,客户端很容易被黑客作为突破口,用于挖掘服务端的业务风险漏洞。阿里聚安全的安全组件提供移动应用访问网络的加签、加密功能,可以从攻击行为上避免被黑客篡改数据包、挖掘服务端的漏洞。
移动应用本身引起的漏洞占总比25%,其中应用的拒绝服务漏洞占客户端漏洞的四分之一。从漏洞详情来看,代码执行漏洞相比去年单一的Webview远程命令执行有了更多的诠释,如代码中预留的指令被执行。诸如以上的逻辑类漏洞,往往需要在特定的业务场景中考虑被绕过及攻击的风险。在软件开发生命周期中融入安全流程,是规避此类漏洞的最佳方式。在代码实现功能前,通过安全评审确保业务逻辑不会被绕过、确保用户数据流向的准确性和安全性。
漏洞2.png
图2 2015年应用漏洞类型分布
1.2 移动应用漏洞分析
为分析移动应用各行业的漏洞情况,我们在第三方应用市场分别下载了18个行业 的Top10应用共计180个,使用阿里聚安全漏洞扫描引擎对这批样本进行漏洞扫描。18个行业的Top10应用中,97%的应用都有漏洞,总漏洞量15159个,平均每个应用有87个漏洞,且23%的Top10应用都有高风险漏洞。
1. 18个行业Top10应用的漏洞
Webview远程代码执行漏洞量占比最高,达21%,Webview远程代码执行漏洞引起的主要原因是调用了Webview的addJavaScriptInterface方法,该方法的安全风险只在安卓API 17及更高版本中才被Google修复。由于API 17以下的机型在市场上仍占20%,故很多开发者为了兼容性还将Android应用支持的最小版本设置在API 17以下,导致该漏洞量一直不降反升。
漏洞3.png
图3行业Top10应用的漏洞数量
行业Top10 Android应用的15159个风险漏洞中,23%属于高危漏洞、64%属于中危漏洞,低危漏洞仅占13%。
漏洞4.png
图4 Top10 Android应用漏洞的风险分布
在所有漏洞中26%是触及了安全红线,触及红线的漏洞 容易被攻击者利用,阿里聚安全建议开发者尽快修复以免影响移动业务的安全。
高危漏洞、中危漏洞、低危漏洞中,触及红线漏洞的占比依次为17%、16%、88%。低危漏洞中触及红线的漏洞占比最大,如拒绝服务漏洞,被利用后会造成应用拒绝服务,但其修复成本低,建议开发者尽快扫描验证并修复。
漏洞5.png
图5 Top10触及安全红线的漏洞情况
2. 重点行业漏洞分析
18个行业中,旅游类应用的漏洞量最多,占所有行业总漏洞量的13%,电商、游戏、金融等与用户财产息息相关的行业,漏洞数量相对少一些,分别占所有行业总漏洞量的6%、5%、和4%。
金融类Top10 Android应用虽然漏洞总量排名靠后,但其高危漏洞量占比高达34%,位居行业内第一,值得重视。
漏洞6.png
图6 18个行业Top10 Android应用的漏洞量
1)电商行业Top10 Android应用漏洞
电商类Top10应用共有851个漏洞,平均每个应用含85个漏洞,其中约27%是Webview远程代码执行高危漏洞,可导致恶意应用被植入、通讯录和短信被窃取、手机被远程控制等严重后果。
电商类Top10Android应用的851个漏洞中,约27%是高危漏洞,比18个行业的高危漏洞均值高17%,且电商类应用与用户资金密切相关,开发者可参考阿里聚安全提供的多种方案进行修复,确保用户利益和企业信誉不受影响。
漏洞7.png
图7 电商类Top10应用的漏洞类别分布
2)游戏行业Top10 Android应用漏洞
游戏类Top10 Android应用有788个漏洞,平均每个应用含79个漏洞。其中29%是Webview远程代码执行高危漏洞。
游戏类Top10 Android应用的788个漏洞中,约19%是高危漏洞,比18个行业的高危漏洞均值低17%,在18个APP行业中高危漏洞相对较少。游戏类应用更新迭代频率高,资金,用户下载量大,存在的漏洞风险亦不容忽视。
漏洞8.png
图8 游戏类Top10应用的漏洞类别分布
3)金融行业Top10 Android 应用漏洞
金融类Top10 Android 应用有669个漏洞,平均每个含67个漏洞,其中22%是Webview远程代码执行高危漏洞。
金融类Top10 Android 应用的669个漏洞中,约34%是高危漏洞,比18个行业的高危漏洞均值高48%,在18个APP行业中高危漏洞占比最高。由于金融类应用与用户财产息息相关,存在的漏洞隐患给用户财产带来巨大风险。
漏洞9.png
图9 金融类Top10 Android 应用的漏洞类别分布
1.3 典型应用漏洞
由于Android系统本身的开放性,相较2014年的Webview远程命令执行漏洞,2015年研究者通过研究移动应用在系统中的运行机制,发现了更多新的Android 应用通用漏洞类型,这些漏洞可以通过代码规则进行发现匹配、在开发阶段进行漏洞规避。
1. Android通用拒绝服务漏洞
2015年1月,国内安全厂商的研究人员发现一个Android通用型的拒绝服务漏洞,恶意攻击者可以利用该漏洞使应用崩溃无法正常运行。在漏洞公布时几乎影响市场上所有的Android应用,在漏洞公布初期,每个应用平均有10个以上的漏洞点。
漏洞产生原因是Android API的getStringExtra等getXXXExtra类函数在获取值时,如果获取到自定义的序列化类,就会抛出类未定义的异常,导致应用崩溃。而对于该漏洞的修复也比较简单、几乎不影响业务代码逻辑,只需要加入try catch捕获异常即可。
阿里聚安全漏洞扫描引擎具备动态fuzz功能,能够精准发现该漏洞。
2. 端口开放引起的远程控制风险
如今市场上越来越多的移动应用为了满足业务需求,如进行位置信息交换、或接收其它应用及服务器传输的业务指令,因此在应用运行时开启了可被访问的端口,通过该端口接收数据到本地。一旦端口访问控制不严谨、被攻击者恶意利用,应用可能接收被伪造的协议指令,预留的业务功能被进一步恶意利用。如2015年爆发的各种SDK后门事件中,开放端口是远程控制的重要途径。
2015年10月国内安全研究者发现的WormHole漏洞,指出百度的MoPlus SDK存在采集用户及设备信息,以及添加联系人、拨打电话和发送短信等敏感功能代码,由于应用运行时开启了本地的TCP端口(40310),使得攻击者可以通过向该端口发送请求来获取敏感信息、执行代码中预留的敏感功能。
3. 寄生兽漏洞
“寄生兽”漏洞是一种代码劫持漏洞,但由于该漏洞的利用条件较苛刻,因此影响面也非常有限。在满足可劫持的网络下载环境、可篡改的应用公共存储区、或文件解压不进行合法校验等条件下,可以达到劫持代码、执行恶意程序的目的,一旦利用成功则是高风险的漏洞。
漏洞原理是Android应用在运行时使用DexClassLoader动态加载和反射调用具有某些特定功能的单独apk或jar文件,以实现插件机制做到无缝升级和功能扩展,函数DexClassLoader第二个参数为目标odex路径,若应用未对odex路径下的缓存文件做保护,则可能在中间人攻击、文件替代等环境下被执行代码。
通过分析恶意代码的执行环境和条件,阿里聚安全的漏洞扫描引擎从攻击路径的角度来发现应用是否存在该漏洞。根据扫描结果,目前市场上受该漏洞影响的应用较少。
1.4 应用安全事件
1. XcodeGhost——编译器后门
2015年9月14日,国内安全研究者发现大量知名的iOS应用同时向某第三方服务器发送大量请求,数亿级的用户信息存在泄漏风险。阿里移动安全通过分析这类iOS应用的样本,于9月17日紧急向开发者发布了安全公告,将该病毒命名为XcodeGhost,公告包含样本细节、检查和修复措施。由于使用了非官方下载、被恶意篡改的iOS应用编译软件Xcode导致。安全公告发布后该接收敏感信息的第三方服务器已紧急关闭,但随后阿里移动安全研究者发现仍有攻击者通过网络劫持的方式、“截胡”用户的敏感信息,影响并未停止。
据统计,使用该恶意Xcode开发的iOS应用达4300+,甚至包含了市场中下载量排名前十的应用,包括但不仅限于微信、网易云音乐、铁路12306等日常工具类软件、甚至银行应用。随后苹果官方发布公告确认了XcodeGhost的不良影响,并且在官方应用商城AppStore中下架了所有受影响的应用。该事件堪称已知影响用户数规模最大,载入移动安全史册。
事件根源是由于开发者为了更便利快速地下载到iOS应用的开发工具Xcode,通过非官方渠道、或p2p下载工具进行下载,这种行为使得恶意攻击者有机可乘:往Xcode中的编译库中插入恶意代码,导致通过其编译的iOS应用被种植了后门程序(XcodeGhost)。后门程序具备向攻击者服务端上传敏感信息、接收控制指令、执行打开网页、发送短信、拨打电话等功能。
漏洞10.jpg
图10 XcodeGhost的危害
2. SDK安全事件风波–SDK后门
2015年由第三方SDK引起的安全事件层出不穷,引起了业界震荡及对移动端应用安全的关注。
9月22日,安全研究者发现手游中常用的游戏图形渲染组件Unity3D、Cocos2d-x,也被发现非官方下载渠道的版本包含与XcodeGhost的相类似的功能。此外,有米、多盟、艾德思奇、万普等SDK也被指出可采集用户隐私信息,并遭到苹果商城AppStore的下架,影响应用数上千。其中部分SDK甚至同时影响Android和iOS端,具备全平台兼容能力。有的SDK在发布到苹果商城前,关闭了采集数据的功能 “开关”,因此审核时躲过了苹果商城审核员的检查,在AppStore上架成功、用户安装运行后再远程打开“开关”,实时采集用户隐私数据或执行其它业务指令——“开关”行为也因此被苹果商城审核员列入黑名单。
3. WormHole漏洞——“百度全家桶”
2015年11月,百度系列应用被爆存在“WormHole”漏洞,可被利用远程执行敏感操作:打电话、发短信、获取用户隐私信息等。而产生源头是在于百度的Moplus SDK,百度及旗下大部分产品中均集成,因此被网友称为“百度全家桶”。WormHole 漏洞其实是基于百度的广告端口存在身份验证和权限控制缺陷而产生的,而此端口本来是用于广告网页、升级下载、推广应用的用途。但Moplus代码中预留的各类敏感代码(操作通讯录、电话、短信等)使得WormHole一旦被利用则影响巨大,因为这些APP的用户数量覆盖上亿。
1.5 应用漏洞的发展趋势
1. 漏洞的关注逐渐从应用漏洞转向业务逻辑漏洞
Android市场各行业Top10应用平均每个应用有87个漏洞。大量应用仍包含多种类型的漏洞,居高不下,是由于开发者的安全意识不足:如认为移动端漏洞较难影响正常业务运营,或认为漏洞利用成本较高、需要劫持或具备一定的触发条件。
但从业界采集的漏洞信息来看,大部分的高危漏洞却集中在需人力研究分析的设计缺陷、认证授权等逻辑漏洞类型上。这类漏洞一旦触发能够直接影响用户数据和业务服务器的正常运行流程,导致大量的资损、信息泄漏事件发生。虽然漏洞的分析成本较高,但利用效果更好,平衡攻击成本与收益来看,未来会有更多的业务逻辑漏洞被挖掘发现甚至产生安全事件。
2. 用户隐私信息泄漏将是业务移动化的最大风险
阿里聚安全对国内外市场中的应用进行漏洞扫描,发现国外市场的漏洞同样不计其数,但国外的移动应用业务更关注信息泄漏。从2015年国外媒体的报道中,不论是苹果AppStore还是Google Play,都会非常在意用户隐私数据的存储传输问题,但市场不会因为应用存在漏洞而直接惩罚下架,但一旦触碰到隐私数据则难辞其咎。
国外媒体也甚为关注信息的明文存储及传输问题,如AFNetWorking网络库SDK,曾因未强校验服务端HTTPS证书问题而被媒体指责。如今用户的使用习惯已经移动化,信息泄漏将是移动化的最大风险,是未来长久的话题。
3. 开发者需兼顾开发环境的潜在风险
2015年的应用安全大事件中,开发软件、第三方SDK等开发环境引起的问题已经使大量用户深受其害,并引发了业界舆论。移动应用开发者在关注自身应用是否具有安全风险漏洞的同时,还需要更多兼顾开发环境的潜在风险。由于移动应用存在发版速度慢、修复周期长的问题,各厂商如何快刀切除和修复、动态更新自身的安全性将是未来需要持续关注的难题。开发者可使用阿里聚安全的加固服务,来提升恶意攻击者的分析成本、保护应用安全。
第二章 2015年Android系统漏洞
2.1 Android系统漏洞综述
2015年Android系统漏洞整体呈现爆发式增长。其中,Application Framework & Libraries的漏洞总量达130个,同比上涨1082%。无论是从绝对数量上还是从漏洞增长率来看,都位居2009年以来的首位。同时,Linux Kernel中也依然存在很多影响Android系统安全的提权漏洞,例如通用型提权漏洞CVE-2015-3636和很多位于设备驱动中的提权漏洞如CVE-2015-8307/CVE-2015-8680等。
2015年Android的系统漏洞量涨幅迅速,主要原因是关注移动安全的研究人员越来越多。随着移动安全的重要性愈发增强,我们相信2016年Android系统漏洞的数量依然会保持在一个较高的水位。
漏洞11.png
图11 Application Framework & Libraries漏洞增长趋势
在2015年Application Framework & Libraries漏洞中,占比最高的三类漏洞是代码执行、溢出和拒绝服务漏洞,分别占比26%、23%和20%。其中,由媒体库引发的代码执行漏洞数量最多,约占全部代码执行漏洞的40%。而在Linux Kernel中,除了Kernel通用代码中的漏洞外,设备驱动依然是安全漏洞的重灾区。
漏洞12.jpg
图12 Application Framework & Libraries漏洞类别占比
2.2 典型Android系统漏洞
1. 代码执行漏洞
普通用户往往认为只要是从正规渠道下载的应用就不会受到安全威胁。然而,经过2015年Android系统安全漏洞的爆发式增长,这种认知已然过时。以Stagefright漏洞为例,攻击者只要知道攻击对象的手机号码,就可以在用户无感知的状态下通过彩信主动发起远程攻击。
Stagefright是Android多媒体框架中的一个核心组件,在Android 2.2版本引入,从Android 2.3起成为Android默认的多媒体框架中的一部分。在Android 5.1前的所有版本上都存在Stagefright漏洞。Stagefright是一个非常复杂的系统库,支持对MPEG4/MP3等多个多媒体文件格式的解析。作为Android多媒体框架的核心组件,针对Stagefright的攻击向量超过11种,包括浏览器/MMS等等。
由于Stagefright库运行在MediaServer进程中,攻击者一旦成功利用Stagefright漏洞发动攻击,就能够获得MediaServer进程所具有的权限;进一步的,攻击者可以再结合其他漏洞提权到Root权限,从而彻底控制攻击对象。事实上,从PC时代开始,类似于多媒体文件之类的复杂文件格式解析就是安全漏洞的重灾区。从Stagefright漏洞开始,2015年披露了一系列和多媒体文件解析相关的系统安全漏洞,约占全部代码执行漏洞的40%。
多媒体文件解析相关漏洞并不是2015年内唯一一类高危的远程攻击漏洞。在2015年4月,阿里安全研究人员还发现了一个存在于wpa_supplicant组件中的缓冲区溢出漏洞,并命名为“Wifi杀手”。在手机开启了WLAN直连功能时,攻击者只要在手机Wifi的覆盖范围之内,就有可能在用户不知情的状态下通过远程发送恶意代码获得用户手机上的执行权限。
Wifi杀手漏洞影响面很广,所有在1.0到2.4版本之间且默认配置了CONFIG_P2P选项的wpa_supplicant组件都受到影响。而作为用户日常使用的一项重要功能,很多厂商在出厂时默认开启了WLAN直连功能,这也进一步的增加了Wifi杀手的危害程度。
2. 本地提权漏洞
从2013年的put_user漏洞,到2014年的TowelRoot所使用的通用漏洞,再到2015年的Pingpong漏洞,基本上每年都会爆出来至少一个“通杀”所有Android机型的通用型提权漏洞。
Pingpong是国内安全研究人员所提出的一个位于Kernel之中的提权漏洞,影响了Android 4.3之后的所有的系统版本。事实上,存在漏洞的代码在Android 4.3以下的版本中同样也是存在的。但在Android 4.3之前的版本中,普通应用是没有权限创建触发该漏洞所必需的Socket,因此得以幸免。
值得一提的是,Android系统的演化整体是朝着权限控制越来越严格前进的,而与Pingpong漏洞相关的这一项权限的放开是为数不多的“反例”。从Android 4.3版本开始(包括到最新的Android 6.0),init.rc改变了/proc/sys/net/ipv4/ping_group_range的值,使得这一项Kernel配置从先前的“1 0”变成了“0 2147483647”。
有意思的是,这一改变的主要目的是为了实现一个不需要特权的ping程序,本质上还是为了加强系统的权限管控,但最终反而为Pingpong漏洞的利用创造了条件。与之相对应的是,同样存在漏洞代码的一些Linux桌面/服务器发行版和Android 4.3之前版本一样,由于没有放开对应的Socket权限而得以免受Pingpong漏洞的危害。
Pingpong漏洞是根植于Linux Kernel中的提权漏洞,其覆盖面很广。除此之外,设备驱动也是近年来容易产生提权漏洞的一个常见领域。我们在对某厂商2015年手机内核进行审核的过程中也发现了很多的此类漏洞。这一类漏洞也是近几年中导致Android系统被“一键Root”的一个重要因素。
另一方面,从2014年起,Android系统用户态漏洞在大量研究人员的关注下呈现出爆发趋势。以CVE-2015-1528为例,这是国内安全研究人员发现并上报给Google的一个系统提权漏洞,攻击者可以通过这个漏洞获得System权限。
具体而言,当GraphicBuffer对象通过Binder接受特定的跨进程指令时,没有对指令的有效性进行校验,从而导致在进行堆分配时存在整数溢出漏洞。此后,在对这一块内存区域进行操作时,就会导致堆内存遭到破坏。受限于Android系统的权限控制,需要反复利用这个漏洞,经过三个步骤才能最终提权到System权限,如下图所示。
漏洞13.png
图13 提权到System权限的流程
该漏洞并不是Android系统上第一个由于未检测Binder传递过来的命令参数而产生的漏洞,在2014年也曾披露出和Binder相关的漏洞。由于受到用户态漏洞缓解技术的影响,这些漏洞的利用往往更为复杂,需要用到ROP等利用技术。目前,恶意软件和一键Root工具大多还是直接使用Kernel漏洞用以提权。但随着Android系统权限的持续收窄,未来Android系统上将需要多个漏洞配合才能完成Root的提权工作。
2.3 Android安全生态和漏洞展望
在Google公司的主导下,Android系统一直保持了快速更新的节奏。在2014年底正式推出Android 5.0之后,2015年9月又推出了Android 6.0,新的Android系统在权限控制和漏洞缓解技术上的应用更加完善,这对保护终端用户的手机安全具有积极意义。
具体的,Android从版本4.3起引入了SELinux作为对整个系统权限控制的重要补充。在Android 4.3上是Permissive模式,只是记录违反了权限控制的日志,并不是真正阻断违反权限控制的操作。从Android 4.4起,SELinux改为Enforce模式,System分区去除了包含“s”bit位的本地程序,这也导致了在4.4版本之后的Root持久化工具被迫采用Daemon模式。在Android 5.0上,SELinux对权限的控制进一步收紧,从而导致了Root持久化工具必须在系统启动后Patch SELinux Policy之后才能生效。随着64位Android机型的逐渐普及,新版本的Android系统中Kernel集成了PXN特性 ,位于用户态地址空间的代码不能在特权模式下运行,使得Kernel漏洞的提权难度大幅增加。
漏洞14.png
图14 安卓系统版本的权限控制
但相对于苹果iOS系统,新的Android系统的普及速度缓慢,2015年国内真正使用上Android 6.0系统的用户极少。这在很大程度上与Android产业链过长密切相关。在一个新的Android版本正式发布之后,还需要经过芯片厂商和终端厂商的适配工作才能到达用户手中。在一些客观因素的制约下(例如研发成本限制),用户要经过漫长的等待后才能获得新的系统推送,部分机型在发布后甚至就不再进行更新。
漏洞15.png
图15 Android各系统版本的用户量占比
这种现况对用户的系统安全带来了很大的负面影响。一方面,用户不能享受到新的系统中更完善的安全机制;更重要的是,系统漏洞的延迟修复会使得用户长期暴露在危险的、易受到攻击的状态下。
从积极的意义上来看,目前国内外一些研发实力较强的厂商能够快速响应系统漏洞,及时发布更新版本。遗憾的是,考虑到我国智能手机基数巨大,依然有大量的用户被直接暴露在危险之中。
事实上,2015年Android系统漏洞大规模爆发,无论是绝对数量还是增长数量都是历年之最,预计在2016年内Android系统的漏洞数量也依然会保持在高位。造成这种现况的核心原因并不是Android系统自身变得更差,而是因为大量的安全人员把目光放在了Android系统上。长期来看,越来越多研究人员的关注必然会进一步的提高系统的整体安全性。但在中短期内,系统漏洞的批量爆发加之部分用户不能及时获得安全更新同时也会提升整个Android生态的安全风险。
第三章 2015年iOS系统漏洞
2015年注定是iOS安全史上不平凡的一年,除了在应用层发生的XcodeGhost事件外,在系统安全方面也发生了很多令人难忘的事件。
3.1 iOS系统漏洞综述
2015年iOS系统漏洞呈现爆发式增长,全年漏洞总量达654个,同比上涨128%。无论是从绝对数量上还是从漏洞增长率,都位居2009年以来的首位。
2015年iOS的系统漏洞量上涨主要原因是关注移动安全的研究人员越来越多,很多以前被忽略的系统攻击被发现并从中找到了漏洞提交给Apple修复。相信2016年iOS系统漏洞的数量依然会保持在一个较高的水准。
漏洞16.png
图16 iOS系统漏洞数量趋势
iOS系统漏洞中,拒绝服务、代码执行、信息泄露的占比最高,分别为18%、17%、16%。
漏洞17.png
图17 iOS系统漏洞类别占比
在2015年,除了iOS越狱相关的漏洞以外,苹果公司操作系统的漏洞数量也比往年增加了很多。特别是在CVE(通用漏洞披露)的数量上超过了很多IT公司,因此很多媒体开始批评苹果公司系统的安全性。实际上,苹果公司比其他厂商更加重视安全方面的问题,针对安全研究人员提交的漏洞都会认真审核修复和帮助申报CVE。 iOS用户并不需要过度恐慌iOS的安全性问题,只要及时升级iOS系统到最新版本,即能够防御绝大多数的漏洞攻击。另一方面,由于苹果操作系统的分层安全机制,能直接对用户安全构成威胁的漏洞就更少了。
3.2 典型iOS系统漏洞
目前iOS系统漏洞主要应用于越狱,然而由于苹果操作系统的安全机制,完成Untethered Jailbreak(完美越狱)需要多个漏洞的配合,典型的越狱漏洞组合利用流程是:沙箱逃逸完成文件注入,签名绕过,最后通过利用内核漏洞完成内核代码修改彻底关闭iOS的安全机制。
1. 文件注入漏洞
在越狱前,需要通过文件注入漏洞,把目标文件加载到iPhone设备上。DDI(DeveloperDiskImage race condition,by comex),被广泛应用于近几次完美越狱当中。该漏洞主要通过race condition,在检查签名之后、挂载之前,将正常的dmg替换掉,从而实现了文件的注入。在最新的iOS 9完美越狱上,使用了一种全新的文件注入方式,直接在沙箱内通过IPC完成了对任意目录的文件注入。
2. 沙箱任意代码执行漏洞
2015年,CVE-2014-4492漏洞细节披露,其服务端存在于networkd进程,通过IPC实现沙箱与该进程通讯,该服务中的通讯处理函数没有对xpc_data对象进行类型校验,进而直接调用xpc_data_get_bytes_pointer,通过传入其他类型数据混淆,以及fake object构造,最终可以控制PC并执行任意代码。
该漏洞能如此顺利利用,得益于苹果系统自身另外两个弱点:一是Heap创建的地址相对固定,能够让攻击者通过Heap Spary将攻击内容创建在几乎准确的某个位置上;二是dyld_share_libray_cache在不同进程的image base是一样的,让攻击者无需忌讳ASLR直接构建攻击ROP garget。
值得一提的是,这类漏洞能在非越狱设备上直接通过沙箱App触发,给用户带来极大的风险。
3. 内核漏洞
在越狱过程中内核漏洞的主要目标是将漏洞利用转化成稳定的任意读写能力,然后对内核代码进行修改,从内核关闭iOS的安全机制。
虽然iOS内核有诸多安全机制:SMAP、DEP、KASLR , 但只有少数堆溢出漏洞能独立利用并绕过这些安全机制。2015年越狱的漏洞都属于这种类型,但是这些漏洞是需要在完成沙箱逃逸和签名绕过后才能触发,不会直接造成安全威胁。最近数次完美越狱(iOS7.1.2~iOS9.0)的内核漏洞都是从开源驱动模块IOHIDFamily中找到的。
用于iOS8.1.2越狱的CVE-2014-4487漏洞,存在于IOHIDFamily- IOHIDLibUserClient中,是典型的堆溢出漏洞,漏洞模型是:能用IOMalloc创建任意Size的Buffer,并释放到任意Size的kalloc.zone(iOS内核堆内存快速分配机制)。iOS kalloc.zone freelist是LIFO,这样释放到比原本自身Size要大的kalloc.zone然后使用创建较大Size kalloc zone的OOL Mach Msg,这样便能覆盖到较小Size kalloc.zone原相邻位置的元素,完成buffer overflow的转化。在iOS8通过buffer overflow修改vm_map_copy的kdata实现内核任意读。获取到内核kaslr image base后,再进一步转化相邻对象成IOUserClient SubClass重写getExternalTrapForIndex虚函数,进一步转化成任意读写。
用于iOS9越狱的CVE-2015-6974漏洞,存在于IOHIDFamily- IOHIDLibUserClient,典型的UAF漏洞,在释放IOService SubClass(C++ object)后没有将指针置空。释放该对象后,用户态还能通过IOHIDResourceUserClient调用该函数的虚函数,而且能控制参数。然后通过Heap Feng Shui创建对象再释放地址,进一步泄露内核基础和控制vtable找到合适的gadget转化成任意读写能力。
苹果为了破坏堆溢出系列利用做了不少努力:先是屏蔽了mach_port_kobject(CVE-2014-4496) , mach_port_space_info(CVE-2015-3766),这两个接口在利用过程中可以用于判断page的边界,屏蔽后会影响Heap Feng Shui的稳定性。随后在iOS9.0大幅修改了vm_map_copy对象,使得构造任意size释放和任意地址读更加困难。此外,加入KPP机制等,总体来讲内核变得越来越安全。
3.3 iOS漏洞展望
2015年,随着iOS系统漏洞的持续增长,XcodeGhost事件的发酵,我们可以看到iOS系统上仍然存在着很多被忽略的攻击面。比如在非越狱的情况下,沙箱App可以通过漏洞获取root代码执行权限,窃取用户隐私和其他第三方App数据等等。
我们可以大胆预测,2016年iOS系统安全注定会是不平凡的一年:会有更多的iOS内核漏洞利用及iOS 9.2和9.3的越狱发布;类似Android上的StageFright漏洞也可能在iOS系统上出现,我们也可能看到更多类似“Airdrop-eaque”攻击的再次披露,使得攻击者在一定范围内在任意设备上发送和安装恶意应用。
但是攻防永远是相对的,在2016年苹果全球开发者大会上将推出新的iOS 10操作系统,一定会带来更新更坚固的安全机制。安全研究者在新的一年也一定会投入更多的精力到iOS系统安全研究上,相信在和苹果公司的“互动”下,iOS系统的安全性也会更上一个台阶。
* 作者:阿里移动安全(企业账号),转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)
新闻时间:2016.03.08
新闻正文:
第一章 2015年应用漏洞
1.1 业界公开的应用漏洞类型和分布
2015是不平凡的一年,各界媒体对移动应用的漏洞关注度也越来越高,漏洞的产生不仅带来用户设备与信息的安全影响,也给企业带来业务或声誉上的损失。
阿里聚安全每周对国内外50家著名安全公司、媒体、漏洞平台的态势进行分析,国内外移动安全事件和资讯的关注依然是围绕操作系统和移动应用的技术风险展开,其中国内更加关注移动应用的漏洞风险。以下数据结论来自于阿里聚安全对业界风险态势的统计。
1. 行业分布
根据公开的漏洞数据统计,产生漏洞的应用所占行业比例与用户设备中安装的比例相似,应用工具类APP所产生的漏洞占比最高,达54%;游戏类应用漏洞占比最低,为2%,原因是大部分用户手机中安装的游戏应用较少,且游戏类应用更新迭代速度快、漏洞不易被深入挖掘。
漏洞1.png
图1 2015年公开应用漏洞的行业分布
2. 漏洞类型
移动应用是连接用户与业务的桥梁,在智能设备中与用户直接交互,并通过通信链路传输业务请求到后端服务器。安全研究者从移动应用为入口,对应用进行漏洞挖掘及业务安全分析,数据显示大部分高风险漏洞爆发在服务端环节。
在2015年公开的漏洞数据中,71%的漏洞集中在移动业务网关、服务器端,攻击者把移动应用作为入口进行分析,而漏洞产生及修复需要在服务器端完成。现阶段大量业务从传统的PC端扩展到移动端,在服务器上运行业务逻辑也是较为安全和低成本的实现方式,也印证了以上数据。但正因为业务逻辑是在服务端处理,如果不对作为入口的客户端进行强有效的安全校验,客户端很容易被黑客作为突破口,用于挖掘服务端的业务风险漏洞。阿里聚安全的安全组件提供移动应用访问网络的加签、加密功能,可以从攻击行为上避免被黑客篡改数据包、挖掘服务端的漏洞。
移动应用本身引起的漏洞占总比25%,其中应用的拒绝服务漏洞占客户端漏洞的四分之一。从漏洞详情来看,代码执行漏洞相比去年单一的Webview远程命令执行有了更多的诠释,如代码中预留的指令被执行。诸如以上的逻辑类漏洞,往往需要在特定的业务场景中考虑被绕过及攻击的风险。在软件开发生命周期中融入安全流程,是规避此类漏洞的最佳方式。在代码实现功能前,通过安全评审确保业务逻辑不会被绕过、确保用户数据流向的准确性和安全性。
漏洞2.png
图2 2015年应用漏洞类型分布
1.2 移动应用漏洞分析
为分析移动应用各行业的漏洞情况,我们在第三方应用市场分别下载了18个行业 的Top10应用共计180个,使用阿里聚安全漏洞扫描引擎对这批样本进行漏洞扫描。18个行业的Top10应用中,97%的应用都有漏洞,总漏洞量15159个,平均每个应用有87个漏洞,且23%的Top10应用都有高风险漏洞。
1. 18个行业Top10应用的漏洞
Webview远程代码执行漏洞量占比最高,达21%,Webview远程代码执行漏洞引起的主要原因是调用了Webview的addJavaScriptInterface方法,该方法的安全风险只在安卓API 17及更高版本中才被Google修复。由于API 17以下的机型在市场上仍占20%,故很多开发者为了兼容性还将Android应用支持的最小版本设置在API 17以下,导致该漏洞量一直不降反升。
漏洞3.png
图3行业Top10应用的漏洞数量
行业Top10 Android应用的15159个风险漏洞中,23%属于高危漏洞、64%属于中危漏洞,低危漏洞仅占13%。
漏洞4.png
图4 Top10 Android应用漏洞的风险分布
在所有漏洞中26%是触及了安全红线,触及红线的漏洞 容易被攻击者利用,阿里聚安全建议开发者尽快修复以免影响移动业务的安全。
高危漏洞、中危漏洞、低危漏洞中,触及红线漏洞的占比依次为17%、16%、88%。低危漏洞中触及红线的漏洞占比最大,如拒绝服务漏洞,被利用后会造成应用拒绝服务,但其修复成本低,建议开发者尽快扫描验证并修复。
漏洞5.png
图5 Top10触及安全红线的漏洞情况
2. 重点行业漏洞分析
18个行业中,旅游类应用的漏洞量最多,占所有行业总漏洞量的13%,电商、游戏、金融等与用户财产息息相关的行业,漏洞数量相对少一些,分别占所有行业总漏洞量的6%、5%、和4%。
金融类Top10 Android应用虽然漏洞总量排名靠后,但其高危漏洞量占比高达34%,位居行业内第一,值得重视。
漏洞6.png
图6 18个行业Top10 Android应用的漏洞量
1)电商行业Top10 Android应用漏洞
电商类Top10应用共有851个漏洞,平均每个应用含85个漏洞,其中约27%是Webview远程代码执行高危漏洞,可导致恶意应用被植入、通讯录和短信被窃取、手机被远程控制等严重后果。
电商类Top10Android应用的851个漏洞中,约27%是高危漏洞,比18个行业的高危漏洞均值高17%,且电商类应用与用户资金密切相关,开发者可参考阿里聚安全提供的多种方案进行修复,确保用户利益和企业信誉不受影响。
漏洞7.png
图7 电商类Top10应用的漏洞类别分布
2)游戏行业Top10 Android应用漏洞
游戏类Top10 Android应用有788个漏洞,平均每个应用含79个漏洞。其中29%是Webview远程代码执行高危漏洞。
游戏类Top10 Android应用的788个漏洞中,约19%是高危漏洞,比18个行业的高危漏洞均值低17%,在18个APP行业中高危漏洞相对较少。游戏类应用更新迭代频率高,资金,用户下载量大,存在的漏洞风险亦不容忽视。
漏洞8.png
图8 游戏类Top10应用的漏洞类别分布
3)金融行业Top10 Android 应用漏洞
金融类Top10 Android 应用有669个漏洞,平均每个含67个漏洞,其中22%是Webview远程代码执行高危漏洞。
金融类Top10 Android 应用的669个漏洞中,约34%是高危漏洞,比18个行业的高危漏洞均值高48%,在18个APP行业中高危漏洞占比最高。由于金融类应用与用户财产息息相关,存在的漏洞隐患给用户财产带来巨大风险。
漏洞9.png
图9 金融类Top10 Android 应用的漏洞类别分布
1.3 典型应用漏洞
由于Android系统本身的开放性,相较2014年的Webview远程命令执行漏洞,2015年研究者通过研究移动应用在系统中的运行机制,发现了更多新的Android 应用通用漏洞类型,这些漏洞可以通过代码规则进行发现匹配、在开发阶段进行漏洞规避。
1. Android通用拒绝服务漏洞
2015年1月,国内安全厂商的研究人员发现一个Android通用型的拒绝服务漏洞,恶意攻击者可以利用该漏洞使应用崩溃无法正常运行。在漏洞公布时几乎影响市场上所有的Android应用,在漏洞公布初期,每个应用平均有10个以上的漏洞点。
漏洞产生原因是Android API的getStringExtra等getXXXExtra类函数在获取值时,如果获取到自定义的序列化类,就会抛出类未定义的异常,导致应用崩溃。而对于该漏洞的修复也比较简单、几乎不影响业务代码逻辑,只需要加入try catch捕获异常即可。
阿里聚安全漏洞扫描引擎具备动态fuzz功能,能够精准发现该漏洞。
2. 端口开放引起的远程控制风险
如今市场上越来越多的移动应用为了满足业务需求,如进行位置信息交换、或接收其它应用及服务器传输的业务指令,因此在应用运行时开启了可被访问的端口,通过该端口接收数据到本地。一旦端口访问控制不严谨、被攻击者恶意利用,应用可能接收被伪造的协议指令,预留的业务功能被进一步恶意利用。如2015年爆发的各种SDK后门事件中,开放端口是远程控制的重要途径。
2015年10月国内安全研究者发现的WormHole漏洞,指出百度的MoPlus SDK存在采集用户及设备信息,以及添加联系人、拨打电话和发送短信等敏感功能代码,由于应用运行时开启了本地的TCP端口(40310),使得攻击者可以通过向该端口发送请求来获取敏感信息、执行代码中预留的敏感功能。
3. 寄生兽漏洞
“寄生兽”漏洞是一种代码劫持漏洞,但由于该漏洞的利用条件较苛刻,因此影响面也非常有限。在满足可劫持的网络下载环境、可篡改的应用公共存储区、或文件解压不进行合法校验等条件下,可以达到劫持代码、执行恶意程序的目的,一旦利用成功则是高风险的漏洞。
漏洞原理是Android应用在运行时使用DexClassLoader动态加载和反射调用具有某些特定功能的单独apk或jar文件,以实现插件机制做到无缝升级和功能扩展,函数DexClassLoader第二个参数为目标odex路径,若应用未对odex路径下的缓存文件做保护,则可能在中间人攻击、文件替代等环境下被执行代码。
通过分析恶意代码的执行环境和条件,阿里聚安全的漏洞扫描引擎从攻击路径的角度来发现应用是否存在该漏洞。根据扫描结果,目前市场上受该漏洞影响的应用较少。
1.4 应用安全事件
1. XcodeGhost——编译器后门
2015年9月14日,国内安全研究者发现大量知名的iOS应用同时向某第三方服务器发送大量请求,数亿级的用户信息存在泄漏风险。阿里移动安全通过分析这类iOS应用的样本,于9月17日紧急向开发者发布了安全公告,将该病毒命名为XcodeGhost,公告包含样本细节、检查和修复措施。由于使用了非官方下载、被恶意篡改的iOS应用编译软件Xcode导致。安全公告发布后该接收敏感信息的第三方服务器已紧急关闭,但随后阿里移动安全研究者发现仍有攻击者通过网络劫持的方式、“截胡”用户的敏感信息,影响并未停止。
据统计,使用该恶意Xcode开发的iOS应用达4300+,甚至包含了市场中下载量排名前十的应用,包括但不仅限于微信、网易云音乐、铁路12306等日常工具类软件、甚至银行应用。随后苹果官方发布公告确认了XcodeGhost的不良影响,并且在官方应用商城AppStore中下架了所有受影响的应用。该事件堪称已知影响用户数规模最大,载入移动安全史册。
事件根源是由于开发者为了更便利快速地下载到iOS应用的开发工具Xcode,通过非官方渠道、或p2p下载工具进行下载,这种行为使得恶意攻击者有机可乘:往Xcode中的编译库中插入恶意代码,导致通过其编译的iOS应用被种植了后门程序(XcodeGhost)。后门程序具备向攻击者服务端上传敏感信息、接收控制指令、执行打开网页、发送短信、拨打电话等功能。
漏洞10.jpg
图10 XcodeGhost的危害
2. SDK安全事件风波–SDK后门
2015年由第三方SDK引起的安全事件层出不穷,引起了业界震荡及对移动端应用安全的关注。
9月22日,安全研究者发现手游中常用的游戏图形渲染组件Unity3D、Cocos2d-x,也被发现非官方下载渠道的版本包含与XcodeGhost的相类似的功能。此外,有米、多盟、艾德思奇、万普等SDK也被指出可采集用户隐私信息,并遭到苹果商城AppStore的下架,影响应用数上千。其中部分SDK甚至同时影响Android和iOS端,具备全平台兼容能力。有的SDK在发布到苹果商城前,关闭了采集数据的功能 “开关”,因此审核时躲过了苹果商城审核员的检查,在AppStore上架成功、用户安装运行后再远程打开“开关”,实时采集用户隐私数据或执行其它业务指令——“开关”行为也因此被苹果商城审核员列入黑名单。
3. WormHole漏洞——“百度全家桶”
2015年11月,百度系列应用被爆存在“WormHole”漏洞,可被利用远程执行敏感操作:打电话、发短信、获取用户隐私信息等。而产生源头是在于百度的Moplus SDK,百度及旗下大部分产品中均集成,因此被网友称为“百度全家桶”。WormHole 漏洞其实是基于百度的广告端口存在身份验证和权限控制缺陷而产生的,而此端口本来是用于广告网页、升级下载、推广应用的用途。但Moplus代码中预留的各类敏感代码(操作通讯录、电话、短信等)使得WormHole一旦被利用则影响巨大,因为这些APP的用户数量覆盖上亿。
1.5 应用漏洞的发展趋势
1. 漏洞的关注逐渐从应用漏洞转向业务逻辑漏洞
Android市场各行业Top10应用平均每个应用有87个漏洞。大量应用仍包含多种类型的漏洞,居高不下,是由于开发者的安全意识不足:如认为移动端漏洞较难影响正常业务运营,或认为漏洞利用成本较高、需要劫持或具备一定的触发条件。
但从业界采集的漏洞信息来看,大部分的高危漏洞却集中在需人力研究分析的设计缺陷、认证授权等逻辑漏洞类型上。这类漏洞一旦触发能够直接影响用户数据和业务服务器的正常运行流程,导致大量的资损、信息泄漏事件发生。虽然漏洞的分析成本较高,但利用效果更好,平衡攻击成本与收益来看,未来会有更多的业务逻辑漏洞被挖掘发现甚至产生安全事件。
2. 用户隐私信息泄漏将是业务移动化的最大风险
阿里聚安全对国内外市场中的应用进行漏洞扫描,发现国外市场的漏洞同样不计其数,但国外的移动应用业务更关注信息泄漏。从2015年国外媒体的报道中,不论是苹果AppStore还是Google Play,都会非常在意用户隐私数据的存储传输问题,但市场不会因为应用存在漏洞而直接惩罚下架,但一旦触碰到隐私数据则难辞其咎。
国外媒体也甚为关注信息的明文存储及传输问题,如AFNetWorking网络库SDK,曾因未强校验服务端HTTPS证书问题而被媒体指责。如今用户的使用习惯已经移动化,信息泄漏将是移动化的最大风险,是未来长久的话题。
3. 开发者需兼顾开发环境的潜在风险
2015年的应用安全大事件中,开发软件、第三方SDK等开发环境引起的问题已经使大量用户深受其害,并引发了业界舆论。移动应用开发者在关注自身应用是否具有安全风险漏洞的同时,还需要更多兼顾开发环境的潜在风险。由于移动应用存在发版速度慢、修复周期长的问题,各厂商如何快刀切除和修复、动态更新自身的安全性将是未来需要持续关注的难题。开发者可使用阿里聚安全的加固服务,来提升恶意攻击者的分析成本、保护应用安全。
第二章 2015年Android系统漏洞
2.1 Android系统漏洞综述
2015年Android系统漏洞整体呈现爆发式增长。其中,Application Framework & Libraries的漏洞总量达130个,同比上涨1082%。无论是从绝对数量上还是从漏洞增长率来看,都位居2009年以来的首位。同时,Linux Kernel中也依然存在很多影响Android系统安全的提权漏洞,例如通用型提权漏洞CVE-2015-3636和很多位于设备驱动中的提权漏洞如CVE-2015-8307/CVE-2015-8680等。
2015年Android的系统漏洞量涨幅迅速,主要原因是关注移动安全的研究人员越来越多。随着移动安全的重要性愈发增强,我们相信2016年Android系统漏洞的数量依然会保持在一个较高的水位。
漏洞11.png
图11 Application Framework & Libraries漏洞增长趋势
在2015年Application Framework & Libraries漏洞中,占比最高的三类漏洞是代码执行、溢出和拒绝服务漏洞,分别占比26%、23%和20%。其中,由媒体库引发的代码执行漏洞数量最多,约占全部代码执行漏洞的40%。而在Linux Kernel中,除了Kernel通用代码中的漏洞外,设备驱动依然是安全漏洞的重灾区。
漏洞12.jpg
图12 Application Framework & Libraries漏洞类别占比
2.2 典型Android系统漏洞
1. 代码执行漏洞
普通用户往往认为只要是从正规渠道下载的应用就不会受到安全威胁。然而,经过2015年Android系统安全漏洞的爆发式增长,这种认知已然过时。以Stagefright漏洞为例,攻击者只要知道攻击对象的手机号码,就可以在用户无感知的状态下通过彩信主动发起远程攻击。
Stagefright是Android多媒体框架中的一个核心组件,在Android 2.2版本引入,从Android 2.3起成为Android默认的多媒体框架中的一部分。在Android 5.1前的所有版本上都存在Stagefright漏洞。Stagefright是一个非常复杂的系统库,支持对MPEG4/MP3等多个多媒体文件格式的解析。作为Android多媒体框架的核心组件,针对Stagefright的攻击向量超过11种,包括浏览器/MMS等等。
由于Stagefright库运行在MediaServer进程中,攻击者一旦成功利用Stagefright漏洞发动攻击,就能够获得MediaServer进程所具有的权限;进一步的,攻击者可以再结合其他漏洞提权到Root权限,从而彻底控制攻击对象。事实上,从PC时代开始,类似于多媒体文件之类的复杂文件格式解析就是安全漏洞的重灾区。从Stagefright漏洞开始,2015年披露了一系列和多媒体文件解析相关的系统安全漏洞,约占全部代码执行漏洞的40%。
多媒体文件解析相关漏洞并不是2015年内唯一一类高危的远程攻击漏洞。在2015年4月,阿里安全研究人员还发现了一个存在于wpa_supplicant组件中的缓冲区溢出漏洞,并命名为“Wifi杀手”。在手机开启了WLAN直连功能时,攻击者只要在手机Wifi的覆盖范围之内,就有可能在用户不知情的状态下通过远程发送恶意代码获得用户手机上的执行权限。
Wifi杀手漏洞影响面很广,所有在1.0到2.4版本之间且默认配置了CONFIG_P2P选项的wpa_supplicant组件都受到影响。而作为用户日常使用的一项重要功能,很多厂商在出厂时默认开启了WLAN直连功能,这也进一步的增加了Wifi杀手的危害程度。
2. 本地提权漏洞
从2013年的put_user漏洞,到2014年的TowelRoot所使用的通用漏洞,再到2015年的Pingpong漏洞,基本上每年都会爆出来至少一个“通杀”所有Android机型的通用型提权漏洞。
Pingpong是国内安全研究人员所提出的一个位于Kernel之中的提权漏洞,影响了Android 4.3之后的所有的系统版本。事实上,存在漏洞的代码在Android 4.3以下的版本中同样也是存在的。但在Android 4.3之前的版本中,普通应用是没有权限创建触发该漏洞所必需的Socket,因此得以幸免。
值得一提的是,Android系统的演化整体是朝着权限控制越来越严格前进的,而与Pingpong漏洞相关的这一项权限的放开是为数不多的“反例”。从Android 4.3版本开始(包括到最新的Android 6.0),init.rc改变了/proc/sys/net/ipv4/ping_group_range的值,使得这一项Kernel配置从先前的“1 0”变成了“0 2147483647”。
有意思的是,这一改变的主要目的是为了实现一个不需要特权的ping程序,本质上还是为了加强系统的权限管控,但最终反而为Pingpong漏洞的利用创造了条件。与之相对应的是,同样存在漏洞代码的一些Linux桌面/服务器发行版和Android 4.3之前版本一样,由于没有放开对应的Socket权限而得以免受Pingpong漏洞的危害。
Pingpong漏洞是根植于Linux Kernel中的提权漏洞,其覆盖面很广。除此之外,设备驱动也是近年来容易产生提权漏洞的一个常见领域。我们在对某厂商2015年手机内核进行审核的过程中也发现了很多的此类漏洞。这一类漏洞也是近几年中导致Android系统被“一键Root”的一个重要因素。
另一方面,从2014年起,Android系统用户态漏洞在大量研究人员的关注下呈现出爆发趋势。以CVE-2015-1528为例,这是国内安全研究人员发现并上报给Google的一个系统提权漏洞,攻击者可以通过这个漏洞获得System权限。
具体而言,当GraphicBuffer对象通过Binder接受特定的跨进程指令时,没有对指令的有效性进行校验,从而导致在进行堆分配时存在整数溢出漏洞。此后,在对这一块内存区域进行操作时,就会导致堆内存遭到破坏。受限于Android系统的权限控制,需要反复利用这个漏洞,经过三个步骤才能最终提权到System权限,如下图所示。
漏洞13.png
图13 提权到System权限的流程
该漏洞并不是Android系统上第一个由于未检测Binder传递过来的命令参数而产生的漏洞,在2014年也曾披露出和Binder相关的漏洞。由于受到用户态漏洞缓解技术的影响,这些漏洞的利用往往更为复杂,需要用到ROP等利用技术。目前,恶意软件和一键Root工具大多还是直接使用Kernel漏洞用以提权。但随着Android系统权限的持续收窄,未来Android系统上将需要多个漏洞配合才能完成Root的提权工作。
2.3 Android安全生态和漏洞展望
在Google公司的主导下,Android系统一直保持了快速更新的节奏。在2014年底正式推出Android 5.0之后,2015年9月又推出了Android 6.0,新的Android系统在权限控制和漏洞缓解技术上的应用更加完善,这对保护终端用户的手机安全具有积极意义。
具体的,Android从版本4.3起引入了SELinux作为对整个系统权限控制的重要补充。在Android 4.3上是Permissive模式,只是记录违反了权限控制的日志,并不是真正阻断违反权限控制的操作。从Android 4.4起,SELinux改为Enforce模式,System分区去除了包含“s”bit位的本地程序,这也导致了在4.4版本之后的Root持久化工具被迫采用Daemon模式。在Android 5.0上,SELinux对权限的控制进一步收紧,从而导致了Root持久化工具必须在系统启动后Patch SELinux Policy之后才能生效。随着64位Android机型的逐渐普及,新版本的Android系统中Kernel集成了PXN特性 ,位于用户态地址空间的代码不能在特权模式下运行,使得Kernel漏洞的提权难度大幅增加。
漏洞14.png
图14 安卓系统版本的权限控制
但相对于苹果iOS系统,新的Android系统的普及速度缓慢,2015年国内真正使用上Android 6.0系统的用户极少。这在很大程度上与Android产业链过长密切相关。在一个新的Android版本正式发布之后,还需要经过芯片厂商和终端厂商的适配工作才能到达用户手中。在一些客观因素的制约下(例如研发成本限制),用户要经过漫长的等待后才能获得新的系统推送,部分机型在发布后甚至就不再进行更新。
漏洞15.png
图15 Android各系统版本的用户量占比
这种现况对用户的系统安全带来了很大的负面影响。一方面,用户不能享受到新的系统中更完善的安全机制;更重要的是,系统漏洞的延迟修复会使得用户长期暴露在危险的、易受到攻击的状态下。
从积极的意义上来看,目前国内外一些研发实力较强的厂商能够快速响应系统漏洞,及时发布更新版本。遗憾的是,考虑到我国智能手机基数巨大,依然有大量的用户被直接暴露在危险之中。
事实上,2015年Android系统漏洞大规模爆发,无论是绝对数量还是增长数量都是历年之最,预计在2016年内Android系统的漏洞数量也依然会保持在高位。造成这种现况的核心原因并不是Android系统自身变得更差,而是因为大量的安全人员把目光放在了Android系统上。长期来看,越来越多研究人员的关注必然会进一步的提高系统的整体安全性。但在中短期内,系统漏洞的批量爆发加之部分用户不能及时获得安全更新同时也会提升整个Android生态的安全风险。
第三章 2015年iOS系统漏洞
2015年注定是iOS安全史上不平凡的一年,除了在应用层发生的XcodeGhost事件外,在系统安全方面也发生了很多令人难忘的事件。
3.1 iOS系统漏洞综述
2015年iOS系统漏洞呈现爆发式增长,全年漏洞总量达654个,同比上涨128%。无论是从绝对数量上还是从漏洞增长率,都位居2009年以来的首位。
2015年iOS的系统漏洞量上涨主要原因是关注移动安全的研究人员越来越多,很多以前被忽略的系统攻击被发现并从中找到了漏洞提交给Apple修复。相信2016年iOS系统漏洞的数量依然会保持在一个较高的水准。
漏洞16.png
图16 iOS系统漏洞数量趋势
iOS系统漏洞中,拒绝服务、代码执行、信息泄露的占比最高,分别为18%、17%、16%。
漏洞17.png
图17 iOS系统漏洞类别占比
在2015年,除了iOS越狱相关的漏洞以外,苹果公司操作系统的漏洞数量也比往年增加了很多。特别是在CVE(通用漏洞披露)的数量上超过了很多IT公司,因此很多媒体开始批评苹果公司系统的安全性。实际上,苹果公司比其他厂商更加重视安全方面的问题,针对安全研究人员提交的漏洞都会认真审核修复和帮助申报CVE。 iOS用户并不需要过度恐慌iOS的安全性问题,只要及时升级iOS系统到最新版本,即能够防御绝大多数的漏洞攻击。另一方面,由于苹果操作系统的分层安全机制,能直接对用户安全构成威胁的漏洞就更少了。
3.2 典型iOS系统漏洞
目前iOS系统漏洞主要应用于越狱,然而由于苹果操作系统的安全机制,完成Untethered Jailbreak(完美越狱)需要多个漏洞的配合,典型的越狱漏洞组合利用流程是:沙箱逃逸完成文件注入,签名绕过,最后通过利用内核漏洞完成内核代码修改彻底关闭iOS的安全机制。
1. 文件注入漏洞
在越狱前,需要通过文件注入漏洞,把目标文件加载到iPhone设备上。DDI(DeveloperDiskImage race condition,by comex),被广泛应用于近几次完美越狱当中。该漏洞主要通过race condition,在检查签名之后、挂载之前,将正常的dmg替换掉,从而实现了文件的注入。在最新的iOS 9完美越狱上,使用了一种全新的文件注入方式,直接在沙箱内通过IPC完成了对任意目录的文件注入。
2. 沙箱任意代码执行漏洞
2015年,CVE-2014-4492漏洞细节披露,其服务端存在于networkd进程,通过IPC实现沙箱与该进程通讯,该服务中的通讯处理函数没有对xpc_data对象进行类型校验,进而直接调用xpc_data_get_bytes_pointer,通过传入其他类型数据混淆,以及fake object构造,最终可以控制PC并执行任意代码。
该漏洞能如此顺利利用,得益于苹果系统自身另外两个弱点:一是Heap创建的地址相对固定,能够让攻击者通过Heap Spary将攻击内容创建在几乎准确的某个位置上;二是dyld_share_libray_cache在不同进程的image base是一样的,让攻击者无需忌讳ASLR直接构建攻击ROP garget。
值得一提的是,这类漏洞能在非越狱设备上直接通过沙箱App触发,给用户带来极大的风险。
3. 内核漏洞
在越狱过程中内核漏洞的主要目标是将漏洞利用转化成稳定的任意读写能力,然后对内核代码进行修改,从内核关闭iOS的安全机制。
虽然iOS内核有诸多安全机制:SMAP、DEP、KASLR , 但只有少数堆溢出漏洞能独立利用并绕过这些安全机制。2015年越狱的漏洞都属于这种类型,但是这些漏洞是需要在完成沙箱逃逸和签名绕过后才能触发,不会直接造成安全威胁。最近数次完美越狱(iOS7.1.2~iOS9.0)的内核漏洞都是从开源驱动模块IOHIDFamily中找到的。
用于iOS8.1.2越狱的CVE-2014-4487漏洞,存在于IOHIDFamily- IOHIDLibUserClient中,是典型的堆溢出漏洞,漏洞模型是:能用IOMalloc创建任意Size的Buffer,并释放到任意Size的kalloc.zone(iOS内核堆内存快速分配机制)。iOS kalloc.zone freelist是LIFO,这样释放到比原本自身Size要大的kalloc.zone然后使用创建较大Size kalloc zone的OOL Mach Msg,这样便能覆盖到较小Size kalloc.zone原相邻位置的元素,完成buffer overflow的转化。在iOS8通过buffer overflow修改vm_map_copy的kdata实现内核任意读。获取到内核kaslr image base后,再进一步转化相邻对象成IOUserClient SubClass重写getExternalTrapForIndex虚函数,进一步转化成任意读写。
用于iOS9越狱的CVE-2015-6974漏洞,存在于IOHIDFamily- IOHIDLibUserClient,典型的UAF漏洞,在释放IOService SubClass(C++ object)后没有将指针置空。释放该对象后,用户态还能通过IOHIDResourceUserClient调用该函数的虚函数,而且能控制参数。然后通过Heap Feng Shui创建对象再释放地址,进一步泄露内核基础和控制vtable找到合适的gadget转化成任意读写能力。
苹果为了破坏堆溢出系列利用做了不少努力:先是屏蔽了mach_port_kobject(CVE-2014-4496) , mach_port_space_info(CVE-2015-3766),这两个接口在利用过程中可以用于判断page的边界,屏蔽后会影响Heap Feng Shui的稳定性。随后在iOS9.0大幅修改了vm_map_copy对象,使得构造任意size释放和任意地址读更加困难。此外,加入KPP机制等,总体来讲内核变得越来越安全。
3.3 iOS漏洞展望
2015年,随着iOS系统漏洞的持续增长,XcodeGhost事件的发酵,我们可以看到iOS系统上仍然存在着很多被忽略的攻击面。比如在非越狱的情况下,沙箱App可以通过漏洞获取root代码执行权限,窃取用户隐私和其他第三方App数据等等。
我们可以大胆预测,2016年iOS系统安全注定会是不平凡的一年:会有更多的iOS内核漏洞利用及iOS 9.2和9.3的越狱发布;类似Android上的StageFright漏洞也可能在iOS系统上出现,我们也可能看到更多类似“Airdrop-eaque”攻击的再次披露,使得攻击者在一定范围内在任意设备上发送和安装恶意应用。
但是攻防永远是相对的,在2016年苹果全球开发者大会上将推出新的iOS 10操作系统,一定会带来更新更坚固的安全机制。安全研究者在新的一年也一定会投入更多的精力到iOS系统安全研究上,相信在和苹果公司的“互动”下,iOS系统的安全性也会更上一个台阶。
* 作者:阿里移动安全(企业账号),转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)
赞赏
看原图
赞赏
雪币:
留言: