近期XcodeGhost事件沸沸扬扬,大家都很关注此事的影响、后果和解决方案,可是这件事情的根源究竟是什么?还有没有未被发现的其他类似安全隐患?未来如何防止同类攻击的发生?本文作者是启明星辰VP,资深安全人士,他试图从应用开发者角度来剖析这一切。
先来看两个事件回顾:
2004年,某著名网络游戏公司遭到入侵,经过详细排查后,攻击者是通过渗透韩国的游戏开发商网络,从而将后门植入该网络游戏公司的服务器,受感染服务器高达数百台。
2010年6月,一种新型的病毒被检测出来,该病毒可以通过西门子公司的SIMATIC WinCC监控与数据采集(SCADA)系统渗透入钢铁、汽车、电力、运输、 水利、化工、石油等核心工业领域,这就是著名的震网(Stuxnet)病毒。
(震网病毒)
上述两个事件与XcodeGhost的相似之处在于,攻击者都是利用了开发/设计/监控环境的安全漏洞,最终达成了对生产/消费环境的渗透。
入侵者利用哪些点进行攻击?
我们知道,随着厂商和用户安全意识的提高,生产环境大量使用物理/逻辑隔离手段,而消费环境则可能使用严格的审核机制甚至完全封闭的生态环境, 这使得直接攻击生产/消费环境的难度大幅度上升,而厂商和消费者往往也会产生自满情绪,认为已经一劳永逸的解决了信息安全威胁。
但是攻击者并不会按照防御者规定的方式作战,他们总是能找到最容易突破的位置,采用一些事先无法想到的手段,突破禁制,达成目的。
不幸的是,在此次事件中,开发环境恰好是那个最容易被突破的环节。
一家应用软件公司要想发布应用程序,必须要搭建开发环境,包括代码编辑器、编译器、调试器、模拟器、第三方库、其他资源等等,如下图所示:
程序员在自己的工作电脑上写出代码、通过编译上传到公司的服务器,进行数字签名后,发布到应用市场(如APP Store或者Google Play等),在整个过程中,存在着多个可能被入侵者利用的点:
1、入侵者可以替换或者修改开发环境,使得应用程序中被加入非授权代码,这就是本次XcodeGhost的攻击原理。
2、入侵者也可以通过替换或修改第三方的库或者组件,实现类似的功能。
例如,入侵者可以修改并发布一个游戏引擎,嵌入恶意代码。
3、入侵者可以直接攻击程序员的电脑,从而直接修改/替换特定的应用程序的代码,这样虽然没有XcodeGhost的传播范围广,恶意代码却会更加精准有针对性,也更难以被发现。
例如上文所说针对网络游戏公司的攻击。
4、入侵者可以盗取应用软件公司的数字签名证书,以及发布用的账号,从而在官方的应用商店发布非授权的应用,或者利用应用软件公司的证书来签名企业应用等等。
5、入侵者也可以通过感染开发环境的其他资源,实现攻击。
例如某大型银行,因为开发者使用了从互联网上下载的图片作为资源,而本地的安全防御措施及管理措施都仅仅针对可执行文件,并没有检查该图片资源文件,使得被感染图片成功上传到官网,导致了大规模的钓鱼挂马事件。
那么,为什么会出现以上的漏洞呢?
世界应该是完美的才对啊?抱歉,真实世界并非是完美无缺的。
1、移动应用开发成本大,安全标准让路。
随着移动互联网的进一步升温,大量公司涌入移动应用开发,各家应用供应商的竞争也非常激烈。应用软件的开发工期和按时发布的压力很大,在这种情况下,对安全的考量往往要为软件功能和发布时间让路。在良好的开发流程中,对软件开发环境、测试及代码审核、应用软件的发布和管理都有较为严格的规定,但是严格的管理流程会带来额外的成本开销,在发布压力较大的情况下,往往会在安全标准上做出让步。
2、人才培养的缺失,危机暗伏
同时,由于移动互联网行业发展速度太快,人才培养远远跟不上行业需求,部分缺少良好安全训练的软件工程师直接上岗,他们编写的代码存在大量的安全问题。部分问题可以通过测试修复bug解决,但是很多的漏洞隐藏在已经发布的软件中。
例如现在的健康应用中,大多数都没有认证校验措施,未来这些数据如果用于医疗急救,一旦被篡改就可能造成严重的后果。
由于移动互联网是新兴行业,在过去的几年中尚未成为黑色产业重点关注的区域,因此应用公司和开发人员也产生了移动互联网安全问题不严重的心理 误区,加上对封闭生态环境(如苹果的应用商店)的迷信,一味依赖手机厂商提供的安全措施,造成了一旦厂商的安全措施被从其他方向绕过,就被势如破竹地打穿所有防线的后果。
实际上,上一个十年的经验告诉我们,任何一种独立的安全措施都不能简单地防范所有的安全威胁,必须是完整构建的安全体系才有能力和各种高级威胁进行对抗。这一点,微软想必已经深有体会,但是苹果和谷歌及其大量的应用供应商,还需要至少几年的时间去慢慢学习。
除了本次暴露的XcodeGhost,还有没有类似的其它安全隐患?
如前文所说,通过开发环境进行攻击并非首创,而安卓的开发环境比苹果更加复杂和开放 ,根据0xid西雅图小组的跟踪分析,在安卓的开发环境中同样存在各种信息安全问题,有些甚至更加严重。
本次事件中,除了Xcode之外,Unity和 Cocos2dx这两个游戏开发平台,也受到了不同程度的污染,这就进一步影响到了安卓和Windows。
那么,未来如何防止同类攻击的发生呢?
人的懒惰和侥幸心理是天性,因此,必须要采用严格的管理和规范来对抗它们,在国际标准ISO27001和SSE CMM中,均有对应用软件开发环境和第三方组件使用的安全性要求,应用开发商应该要做到:
1、应该有严格的开发环境隔离措施。开发、测试和运行环境严格分开,经过授权的人才能访问各个不同环境,并在其中进行完整性和一致性检查。严控开发环境与互联网的交互接口,采用合适的安全防御措施保护开发测试和运行环境。
2、对开发环境使用的软件进行控制,确保均来自可信的来源。开发环境应使用正版软件,并设置软件白名单,禁止安装白名单以外的应用。
3、向开发人员提供足够的安全培训。开发人员应该经过安全意识、安全技能、安全规章制度的培训,从而有意识、有能力、有意愿写出更加安全和健壮的代码。
4、加强对代码的审核和对应用的安全测试,确保其中没有恶意的逻辑。通过在测试中增加安全性测试,以及对关键代码进行评审,必要时委托第三方专业公司进行安全检查,从而发现代码中的疏忽或者是恶意的后门。
5、严格管理软件发布的流程,并随时监控在互联网上流转的应用,及时发现问题并及时处理。软件发布应由专人管理,并进行审计记录,保管好发布账号和签名证书,实时监控互联网上流转的应用镜像,有可能的情况下通过软件自动进行校验,一旦发现问题及时的处置和报警,将损害降到最低。