2010年可以被认为是现代移动安全的元年。在此之前,移动平台的主要威胁是Symbian上泛滥了六年之久的恶意代码和系统漏洞。这一年,苹果发布了iOS 4,Google也接连发布了Android 2.1、2.2和2.3,智能手机真正成熟并普及起来。也是在这一年,第一个Android恶意代码FakePlayer出现,Android的root漏洞利用代码Exploid被公开,跨平台手机网银木马Zitmo被发现,手机游戏的盗版和破解已经如火如荼。还是在这一年,iOS越狱在美国被承认合法,顶级学术会议开始出现对Android安全的各类研究,乌云平台的白帽子们开始报告移动应用的漏洞,国内的创业团队和IT巨头也逐渐将目光投向这个新兴领域。
在这个领域,无论是技术上还是商业上,新的平台与老的思路不断交融,出现了许多值得记住的事件、公司和人物。今天,我们就从这个角度出发,回顾移动平台恶意代码、软件漏洞和软件版权问题走过的路。
移动恶意代码
iOS的第一个蠕虫Ikee是2009年11月在澳大利亚被发现的。它攻击越狱后的iOS设备,利用越狱后ssh服务的默认密码是“alpine”来传播自身。2010年8月,第一个公认的Android恶意代码FakePlayer在俄罗斯被发现,主要行为是发送扣费短信。其实早在2010年初,Android上就出现了广告件和敲诈件。
王心凌音乐节观众大喊退票 前三季度结婚登记同比减少94.3万对 网信办将核实调查瑞士卷事件
2010年12月29日,Android平台第二个木马Geinimi(“给你米”)出现,这也是第一个国产Android恶意代码。这个很早期的家族将之后一年内的主流攻击技术一次到位地进行了实现:在攻击上,实现了远程控制、拦截删除短信、回传短信、拨打电话、安装软件等,在对抗上,采用了代码混淆、代码加密、入口点代码变形、TCP层直接通信等技术。移动平台简单便捷的软件开发,让攻击者得以充分发挥想象力,并快速地将想法实现。
从2011年起至今,Android恶意代码的数量开始出现指数级增长。产生这一局面的原因包括:
重打包(repackaging)技术的出现以及随后自动化工具的完善,使得在Android上自动化海量制造病毒成为可能;Android软件开发门槛极低,直到2014年,依然有完全由新手在短期内制造蠕虫的事件出现,并被巨头和媒体夸大炒作;Smali这一Dalvik汇编工具的出现,使得对Android二进制代码进行自动化混淆、变形、变换的难度降低,加大了对抗难度;国内用户没有养成,(限于政策原因)也不可能养成从官方市场下载应用软件的习惯,而没有门槛、没有技术、没有安全意识的第三方市场、软件下载站和玩家论坛为恶意代码传播提供了便利;手机销售渠道的不规范,诞生了刷机这一灰色产业,进一步成为恶意代码新的传播途径。
与PC和Symbian时代的历史不同,从一开始,Android恶意代码就体现出完全的逐利性。这与地下产业链分工的逐渐成熟有很大关系。在国内,手机恶意代码的获利可以分为两个阶段。2012年之前,以向SP号码发送扣费短信订阅增值服务为主,攻击者与SP随后进行分成。2012年后,国家部门整顿SP的不规范行为,逐渐转为以软件推广、广告推送为主,并开辟了水货刷机、行货预装等新渠道。同样,由于个人信息贩 卖的“产业”发展并不成熟,窃取短信、通话记录、软件信息等行为虽然也时有出现,但并不是主要的威胁。
在西方国家,由于产业环节的缺失,手机金融和手机支付成为攻击者更看重的目标。手机网银相关的木马中,最著名的是Zitmo。2010年9月25日,Zitmo的Symbian和BlackBerry版本被发现;2011年,又发现了Android和Windows Mobile版本。它通过钓鱼感染用户的手机,与Zeus协作,拦截银行发送至手机的mTANs(短信验证码)。到2012年底,Zitmo在欧洲竟感染了超过3万用户、盗走3600万欧元!
在智能手机时代,攻击者只需编写短短数行代码,就能做到阅读短信、拦截短信、以用户身份发送短信等。然而直到今天,国内外的银行、支付平台、金融机构和其他各类在线服务商,始终将短信看作一种安全的身份认证因素。这种不合理的假设体现了传统行业的因循守旧和对新平台安全特性的极度不适应。
2012年起,Google开始注重Android框架层的安全性增强。当年2月,他们还宣布了名为Bouncer的项目,对Google Play的软件进行动态沙盒分析,寻找其中的恶意代码。到2013年,业界已经可以明显感觉到 Google Play上恶意代码数量得到了较好的控制,国外用户遭遇Android恶意代码的情况相对减少,这一问题的“前沿技术发展”基本转到国内。最典型的代表是我在2014年1月发现的Oldboot家族,作为Android平台第一个真正的引导区病毒,它通过渠道刷机的方式进入Android系统的boot分区,由于该分区的特点,普通杀毒软件甚至没有权限扫描到样本文件,即便是提取后能检出,也无法通过常规方法予以清除。
再来看iOS平台。自从Ikee被发现后,这个系统上只出现过几个针对越狱后设备的间谍件和广告件。唯一一个针对非越狱设备的iOS恶意代码是2012年7月出现的FandAndCall,其主要恶意行为是搜集和回传通讯录、批量发送短信推广自身。它甚至躲过了苹果的应用审核流程,进入了App Store。
但是到2014年上半年,iOS平台一下子就出现了三个新的恶意代码。它们都基于Cydia Substrate框架实现,针对越狱后设备 。其中,AdThief通过替换14种广告库的推广ID攫取其他开发者的广告推广收益;Unflod通过监 听网络数据盗取用户的Apple ID和密码;AppBuyer在盗取Apple ID和密码的基础之上进一步模拟iTunes协议从App Store购买软件实现“软件推广”。这三个新的恶意代码攻击来源和攻击目标均位于国内,AdThief更是感染了超过75000台iOS设备。
移动恶意代码的出现与泛滥,给安全产业带来的新的方向。2010年开始,传统安全厂商的目光开始转向Android。到现在,国内的腾讯、百度、360、金山网络(猎豹)等巨头均已推出以杀毒为核心功能的Android安全产品,获得数以亿计的用户,阿里也正在进行Android反病毒引擎的自主研发。
在硅谷,围绕Android反病毒的华人创业团队成绩斐然。2013年2月,Trustgo通过在Android杀毒引擎上取得的傲人成绩最终被百度收购;而Trustlook和VirusThreat则围绕APT和大数据关联分析等主题开始了新一轮征程。
移动系统和软件漏洞
先来看iOS的系统安全问题。从发布的第一天起,iOS就和“越狱”这个词绑在了一起。传统的越狱,一是为了解除iOS硬件设备对移动运营商的锁定;二是为了绕过iOS对普通应用软件的签名要求和沙箱限制,以安装第三方应用软件、实现更复杂的软件功能甚至直接对系统功能进行定制修改。这种行为本质是用户对自己设备自由控制权的追求,因此,在EFF的推动下,2010年美国开始承认iOS越狱的合法性。然而,传入国内后,iOS越狱更多地与软件盗版联系到一起。
早期iOS系统的安全设计并不完善。2007年7月10日,也就是iOS 1.0发布11天以后,对其的越狱就已经出现了,甚至比第一台iOS设备出现的时间还早。同年,天才黑客George Hotz第一个完成了对iPhone的解锁。越狱工具JailbreakMe在3.0版中利用了Safari移动版对PDF文件做渲染时的一个漏洞,实现了访问一个网址就能越狱的效果(如图所示)。
苹果随后修复了这一漏洞,从此开始了与越狱社区一轮又一轮的技术对抗。从2.0到6.0,iOS系统的越狱均在系统正式发布后九天之内就出现。到iOS 7.0,由于各类防御机制和及时的补丁修复,用户等了95天才迎来evasi0n7的发布。
过去几年,拒绝服务、信息泄露、远程代码执行、XSS、锁屏绕过等漏洞在iOS系统上也屡见不鲜(如下图所示)。比如,2013年8月出现的CoreText渲染引擎问题就影响了iOS 6中的Safari和其他使用了WebKit的应用软件,导致国内微博、微信等出现收到特殊消息就再也无法打开软件的事件。
在iOS系统漏洞方向,国内的Keen Team在2013年两次夺得代表业内漏洞研究最高水平的Pwn2Own比赛大奖,展现了他们对iOS和Safari安全研究的顶级水准。美国佐治亚理工大学王铁磊博士对iOS漏洞利用技术的研究结果也已经多次发表在顶级学术会议上。
与iOS相比,Android有着更加开放的系统设计和产业生态,加上设备占有率越来越高,这个“接地气”的系统上出现的漏洞始终引人注目。
Android的第一个root出现在2008年11月5日,针对 第一台Android手机HTC G1,用户root自己手机的主要目的是对系统进行定制(如图5所示)。除了root,另一种定制系统方法是对bootloader进行解锁,然后直接刷入第三方ROM。因此,漏洞不仅存在于操作系统,还会出现在bootloader中。
2010~2012年,在Android中出现了不少通用的root漏洞,利用代码也被公开。比如2010年7月的Exploid、2011年2月的Zimperlich、5月的GingerBreak、2012年8月的Mempodroid,以及RageAgainstTheCage、Zergrush等。它们针对的是系统版本从 2.1到4.0。这一时期出现的许多恶意代码都包含了这些root漏洞利用代码,它们以此获得root权限,将自身安装成系统预装软件等。
2012年6月,Google发布Android 4.1,之后逐步引入完整ASLR、PIE、SELinux、nosetuid、FORTIFY_SOURCE等安全机制,这些通用漏洞逐渐告一段落。然而,2014年,Android上再次出现了两个新的通用提权漏洞,一是Android Bug 12504045(这个漏洞在地下世界知道多年之后才被公开);二个是CVE-2014-3153(就是Towelroot使用的Linux futex漏洞)。目前还未发现利用它们的恶意代码,但相信已不久远。
除了root漏洞,Android的框架层也曾出现各类问题,比如CVE-2013-6271锁屏绕过等。其中最有名、影响最大的莫过于2013年的Master Key系列漏洞和2014年的FakeID漏洞(请关注《程序员》2014年9月刊《详解Android假ID签名漏洞》),它们最初都由一家名为Bluebox的新创公司发现。通过这四个漏洞,攻击者可以伪造Android安全模型中最基本的应用签名,进一步绕过Android的权限模型,开展各类攻击。这些漏洞影响当时几乎所有版本的Android,而原理与利用代码在各手机厂商推送安全更新前就已经被彻底公开,从而导致绝大的安全问题。2013年8月,我们就发现国内一个应用市场上所有的软件都利用了第一个Master Key漏洞。值得一提的是,第二个Masker Key漏洞是Marvell中国的安全团队“安卓安全小分队”(后改名“鲇鱼”)所发现。
除了操作系统,iOS和Android的应用软件中存在的安全漏洞也不少,具体可以参考我此前在《程序员》发表的几篇文章 。除了常见的数据存储、数据传输、旁路泄露等,在Android上出现过一类极具平台特色的问题:应用间通信接口暴露导致的权限重委派(permission re-delegation)和能力泄露。早期这类问题存在于几乎过半的应用软件中,甚至在不少Android预装软件中都有发现。比如,2012年11月,蒋旭宪博士发现Android预装短信应用中存在接口暴露,任何第三方软件既不需要相关权限,也不需要调用相关系统API,即可本地构造出接收到的短信。一周后,我们在国内发现利用了这一漏洞的新病毒,它们给恶意代码检测模型带来的例外情况。
即便普遍存在,iOS和Android应用软件漏洞至今仍未引起开发者的充分重视。这也许与其攻击面和攻击后果有关。绝大部分情况下,要利用这类漏洞,需要目标设备安装了有漏洞的软件,然后往目标设备上安装另一个软件进行本地攻击。这已经够难了,即便如此,攻击成功最多也就是获得一个用户的账户或数据。与此相比,绝大部分传统的服务器端漏洞或Web系统漏洞既可以随时扫描和攻击,也可以一次性获得系统所有用户的数据。
然而例外总是存在。比如addJavaScriptInterface远程代码执行的问题,可以导致对普通应用的远程攻击。Android中JavaScript接口问题其实早在几年前就已经被业内所知,Google和其他安全公司已经在文档中多次强调说明。然而,2013年,国内许多流行软件(尤其是绝大部分手机浏览器)中基本还是存在这个漏洞,让人扼腕叹息。从2014年新出现的UXSS等问题来看,WebView的特性和漏洞给普通应用带来的安全问题可以还会长期发展下去。
设备制造商中,三星是重视安全的典范。他们从2013年初主推的KNOX解决方案对其设备中的Android做了大量安全加固,其中一部分将从2014年底开始并入Android上游主干。
随着移动平台系统和软件漏洞的不断出现,国内也陆续出现了一些第三方的创业团队和新产品。其中一些颇具中国特色,比如“一键root”类产品。这种工具通常集成各类已知或独立发现的root提权漏洞,对流行的手机型号进行适配,并将root过程全自动化,并装入root管理工具。这类产品提供了更稳定的技术方案,节省了用户寻找root方案的时间,降低了技术门槛,因而颇受欢迎。对用户而言,利用root权限除了可以进一步定制手机系统(尤其是精简预装软件等),还可以赋予安全软件更高的权限,使其与高级恶意代码至少拥有相同的权限。到2013年底,国内此类产品已经超过10种,其中KingRoot被腾讯收购,百度、360等也先后推出了相关产品。
另一类新出现的业务是对移动应用的安全审计,有两种模式。一是以乌云众测为代表的众包模式。2010年至今,白帽子们在乌云报告了超过300个Android和iOS软件漏洞。2014年起,移动应用成为此类众包的热门目标。另一种模式是以上海墨贝为代表的移动应用渗透测试团队提供的专业服务,与众包相比,可以更全面地评估软件的安全性。2013年开始,甲方互联网企业开始逐渐重视这个方向的问题,例如当年腾讯TSRC曾进行移动客户端产品的漏洞奖励专项活动。但是目前无论是众包平台还是这些互联网巨头的安全中心,对移动应用漏洞的威胁评估仍处于粗糙原始的水准。
软件版权攻防
在移动平台,当第三方应用开始出现、应用市场兴起,盗版、破解、篡改、重新分发等也随之兴起。在国内,这个问题甚至形成了庞大的产业链,成为所有开发者不得不重视的一个威胁。
技术上看,这类攻击的实现与普及,往往与系统架构设计、系统安全机制、产业生态环境、用户习惯等紧密相关,防御机制也依赖于这些因素。因此,这些情况一旦发生大的变动,可能导致攻防情况的急剧变化。最大的一次挑战来自Android 4.4推出的ART运行时环境,它将在Android 5发布时取代Dalvik虚拟机,从而导致各类基于Dalvik运行时修改或动态加载机制的保护方案几乎完全失效。
在iOS上,2010年左右,随着iPhone在国内用户的增长,软件盗版分发开始兴起,尤其是针对收费游戏的DRM移除。苹果对所有App Store中的应用采用了账户和设备相关的DRM签名机制,通过内存dump,攻击者们可以提取出解密后的代码,制作成新的软件包进行分发。安装此类盗版游戏,也是国内普通用户越狱的一个主要目的。2011年11月,当App Store支持国内银行卡用人民币购买后,短期内越狱用户数下降比例甚至与一次iOS新版本发布时相当。
国内攻击者在此类盗版行为上最大的创新是,2012年底,“快用助手”等工具实现了不越狱安装盗版软件的技术。它们完全模拟了本地iTunes协议,通过PC欺骗iOS设备,使其认为同步过来的软件已经购买并获得了合法授权。到目前,已经有超过六个工具采用了这一技术。
到2013年,iOS游戏和应用的版权问题已经包括:应用内购买的破解,主要是软件对收买收据未作云端验证情况下的中间人攻击,这也是另一个不需要越狱的攻击;应用代码和配置文件修改;网络数据传输的中间人攻击和双向欺诈;应用的关键内存定位、内存修改;基于调试的代码实时修改;软件购买分发DRM记录破解等。而地下产业链已经发展到热门游戏的本地存档记录或者自动化内存补丁工具都可以在淘宝上买到。
Android应用的版权问题则更具中国特色。由于众所周知的原因,2012年起,国内用户无论从系统服务框架支持上还是网络环境上,均无法直接从Google Play下载软件,更遑论付费购买软件或者应用内支付。除了广告,国内开发者更习惯于使用第三方支付平台或者在线增值服务的方式实现license机制获利。因此,对Android软件的盗版更多转为传统的通过修改代码实现license破解。直到2012年底左右,随着市场秩序的逐渐规范,国内的多个应用市场才开始与国外开发者商谈版权、引入正版软件,成为新的正版分发渠道。
在传统PC时代,盗版者获利的主要方式包括植入恶意代码(收益大但风险高)、给在线分发平台带来用户(风险低但收益小)。对Android软件,盗版者们基于重新打包技术找到了一种新的中间方法来盈利:植入广告。我们在2010年开始观察到这一问题,延续至今仍未有任何减弱的迹象。
另一方面,由于系统的开发兼容性,以及高比例root用户的存在,从2011年起,Android平台还出现了许多强大的游戏修改工具。其中的代表包括金手指、八门神器、葫芦侠、烧饼修改器、叉叉助手等,名字都非常接地气,其中一些也有推出iOS版本。软件加速、内存自动搜索定位、内存锁定等PC时期非常流行的外挂技术在2011年就已经全部出现在Android上。GameCIH是其中最早的一款,其作者正是大名鼎鼎的计算机病毒CIH的作者陈盈豪。
面对这种严峻形势,国内主流手机游戏厂商很早就成立了专门的产品安全团队,成为最早应对移动安全的甲方公司。另一方面,这也催生了一个新的产业:应用加固。
技术上来看,应用加固是直接对应用软件的安装包进行加壳、混淆等,实现反重打包、反逆向分析、反修改破解、反调试、反内存dump、反数据篡改等。在Android上,主要基于Dalvik层和Linux/ARM层的代码动态加载、代码自修改、代码内存解密、代码混淆和变形、Linux反调试、代码完整性自校验、自定义加载器、自定义虚拟机等小众技术来实现。这些思路和类似产品早在20世纪末在PC平台就已经非常流行。但是在Android上国内第一个看准这个机会的是梆梆,这个成立于2010年10月的团队由来自Symantec等公司的研发和市场人员组成,六个月后就获得了千万美元级别的B轮融资。这导致爱加密、娜迦等更多创业公司的出现。最终,2013年,腾讯、360和百度在运营第三方应用市场时也看到开发者的这一需求,推出了自己的加固服务;阿里则很早就在旗下产品中使用了内部的方案。
应用加固技术的发展,给其他安全方向带去了额外的影响。比如,这些加固技术、工具或在线服务,直接被攻击者用于保护其恶意代码免于被分析和检测。事实上,早在2010年的Geinimi就采用了Google在Android SDK中提供的混淆工具ProGuard,成为这后来很大一部分Android恶意代码的标准做法。2013年6月出现的所谓史上最复杂的Android木马Obad.a,则进一步使用了ProGuard的商业版保护工具DexGuard对代码、资源、字符串、清单文件等进行了全面的加密或混淆。2013年底,被梆梆加固过的恶意代码开始陆续被国内外安全公司发现,目前甚至有国外反病毒公司对梆梆加固过的软件一律报为危险,严重性可见一斑。由于国内企业对此类产品普遍推行免费使用的互联网模式,使原本技术含量极高的技术变得人人均可无门槛地获得。到2014年,已经有相当大一部分Android恶意代码使用了商业级加固方案,移动恶意代码快速步入在PC时期很长时间才来临的艰难脱壳时期。
未来五年?
我们很难估计在接下来五年、三年甚至一年,移动安全领域会发生什么样的变化。然而,审看往事,我们可以观察到技术和商业发展的一些规律,从而做出基本的趋势预判,这也正是探究历史的目的之一。
在移动安全这个快速发展的方向上,我们可以看到两个鲜明的特点:一方面,新的平台架构、新的产业环境、新的攻击方法、目标和手段层出不穷,既导致用户需求不断变化,也要求安全研发必须紧跟前沿发展;另一方面,攻防的技术思路和产业假设并未发生显著变化,攻击者依然需要寻求各种方式传播恶意代码并稳定获利,恶意代码继续使用漏洞绕过权限、利用保护技术对抗分析,恶意代码分析检测、漏洞挖掘、软件加固的技术框架依然如故。
除了传统攻击之外,恶意代码将向三个方向继续发展:第一,与PC平台威胁一样逐渐成为高级持续威胁(APT)的一部分,更加隐蔽并搜集关联信息;第二,与反病毒方围绕静态分析、动态分析、自动判定、特征检测、查杀清除这几个话题展开更深度的技术对抗;第三,与PC平台以及智能家居、穿戴设备、智能汽车等物联网设施关联从而产生对真实世界的威胁。
对系统通用组件(比如WebView/WebKit、第三方库等)的漏洞挖掘将继续深入,对框架层和软件层的漏洞利用将被用于真实的大规模攻击;随着手机成为新的计算和通信中心,上层应用软件数据的攻击价值将进一步凸显。
软件加固保护的需求将随着产业生态环境的成熟和用户习惯的变化而逐渐减小,随着系统架构的不断演进和各类运行环境的变化,这些技术方案将一次又一次陷入系统兼容性的困境中。
而在商业上,我们从前面的案例中已经看到,互联网巨头和传统安全厂商在这个方向反应并不够迅捷,拥有先发优势的创业团队完成了早期技术引领和市场定义。资本市场上,对安全企业的投资局势一直不错,多起移动安全方向并购案的出现使得投资方和创业团队有了较好的退出保障。安全厂商已经意识到,在移动安全的技术对抗上,只有积累了深厚的安全经验,才能推出更有特点的、真正解决问题的产品。这种良好的商业环境,促进了技术的演进、扩展了技术人员的发展空间。接下来几年里,这个方向在国内将依然是创业、并购和巨头发力的热门选择,而安全研发人员将成为其中最重要的角色之一。
我不觉得这是什么值得调查的事情,就算这个段子是假的,生活当中也处处在发生类似这样的真实的事情。