安全软件OpenSSL最近爆出名为“心脏流血”的重大安全漏洞,波及大量的网站,震惊了整个业界。而苹果则称旗下的iOS和OS X系统及服务均未受影响,那它究竟是如何躲过这一劫的呢?
2011年,苹果告诉开发者,它将弃用包括OpenSSL在内的OS X通用数据安全架构(以下简称“CDSA”)。它称OpenSSL已经不合时宜。近三年后,OpenSSL被发现存在重大安全漏洞,大量的服务提供商及其用户遭受影响,而苹果则安然无事。
苹果2011年6月宣布放弃使用OpenSSL的计划时,它并不知道Heartbleed(“心脏流血”)漏洞的存在,因为当时它还未出现。然而,该公司知道OpenSSL(libcrypto)存在其它问题。苹果是在逾10年前开始在CDSA内使用该安全工具包的。
苹果在Mac OS X研发早期加入了对CDSA和OpenSSL的支持。2004年,该公司建议Mac开发者采用CDSA,称CDSA“可通过减少与架构相连的、妨碍信息加密的库的数量,来提升系统的整体性能”。
苹果10年前在Mac安全文件中指出,“CDSA是Open Group组织采用的开源安全架构,充当技术标准。”苹果自行开发了CDSA的开源版本,并将它发布到苹果的开源网站上。该API提供一系列的安全服务,其中包括精细的访问权限、用户身份认证、加密和安全数据存储。
然而,至少到了2006年,苹果开始着眼未来开发全新的信息加密API,旨在使用更少的代码,加快运行速度,以及支持多个处理器的同时使用。这些特性不仅仅是后来的Mac所必需的,对于iOS系统也至关重要。
该公司开发精简的现代安全架构的另一个原因是,它要符合联邦信息处理标准(FIPS)才能够向美国**机关出售设备。随着iPhone和后来的iPad销量开始井喷,苹果打造强劲的安全机构替换过时的CDSA变得更加迫切。
第一步是开发Common Crypto——支持核心加密算法的低能级C架构,苹果先是在2007年将它应用于OS X 10.5 Leopard,后在2011年引至iOS 5。
到2011年,苹果做好了弃用CDSA的准备。它在全球开发者大会(WWDC)上向开发者指出,该机构基于Open Group标准,除了苹果外鲜有公司支持,其功能很多都无人使用。这使得苹果要处理大量复杂的外部问题,且得不到任何的跨平台益处。
“CDSA有它的标准编程接口,它很复杂,不符合苹果标准的编程惯例。”该公司在Mac安全文件中向开发者指出,“iOS 从未纳入CDSA,OS X和iOS均拥有自己的、远没有那么复杂的高等级安全API。”
开发自有安全软件意味着苹果和它的开发者将不再受到外部开发问题和OpenSSL开源项目相关问题的影响。尽管在业内占据重要地位,且被广泛使用,OpenSSL要依靠捐赠来维持运营,而且它的团队就只有4个核心开发者。
“虽然OpenSSL在开源社区中是常用软件,”苹果在其文件中称,“它在版本之间并不能带来稳定的API。因此,尽管OS X有提供OpenSSL库,但不建议使用。OpenSSL从未引入iOS系统。我们强烈反对应用使用OS X OpenSSL库。”
“如果你的应用依赖于OpenSSL,你应当自行编制OpenSSL,静态地将已知OpenSSL版本连接你的应用。在OS X和iOS上使用OpenSSL都是可行的。但除非你是想要维持对现有开源项目的源码兼容性,否则你还是应该使用另外的API。”
苹果担忧OpenSSL缺乏稳定API的原因是,它在给该开源软件包更新或者填补安全漏洞的时候会遇到麻烦,会影响到连接旧版OpenSSL的第三方应用。而弃用OpenSSL转用自有软件意味着苹果在管理自家平台时拥有更大的控制权。
苹果OS X软件的各种漏洞实际上与苹果的外部软件有关,包括开源软件包和诸如Adobe Flash的第三方商业部件。
苹果弃用OpenSSL的时机颇为幸运。就在苹果正式弃用OpenSSL半年后,Heartbleed漏洞不小心被引入OpenSSL,具体是通过旨在维持安全连接的Heartbeat特性进入。存在漏洞的Heartbeat特性嵌入了2012年3月推出的OpenSSL版本,默认开启。
正当苹果在该漏洞被引入之前积极建议Mac和iOS的开发者使用其它的安全软件,行业的其它成员则一直在采用免费提供的最新OpenSSL版本。
两年多以后,谷歌的一个研究人员发现,OpenSSL Heartbeat功能存在漏洞,可能会导致个人信息泄露。受Heartbleed影响的客户端软件也存在被恶意服务器控制的风险。4月1日将该漏洞公诸于众之前,谷歌在内部秘密解决该问题,没有通知包括美国**在内的任何人。
在接下来的一周,各家公司在是否公布Heartbleed漏洞上展开了一番争斗,安全公司们希望借此良机扩大自己的知名度,而那些受影响的公司则彻夜赶工解决漏洞问题,避免遭到知悉的第三方的攻击。
苹果及它的Mac和iOS用户并未受到Heartbleed影响。不过就在几周前,该公司自家的代码存在类似的安全漏洞。该漏洞也与SSL安全证书相关,名为“GoToFail”。苹果的代码与OpenSSL一样都是开源,但这并不能防止漏洞的出现。
由于先给iOS打补丁(在GoToFail公诸于众之前),隔了3天才给OS X发放补丁,苹果遭到了大量的谴责。
相比之下,在Heartbleed事件中,各方花费了一个星期才协调好漏洞的公布问题。包括Facebook在内的一些公司在Heartbleed公开之前获得了爆料,因而能够及时修复问题,而包括思科、Dropbox、Juniper、Twitter、Ubuntu、雅虎在内的知名公司则跟公众一样几天后才知悉。