OpenSSL的过去、现在和未来
极少有什么事物在其发展历程中有确定的转折点——那种唯一的日子,人们可以明确指出并感叹:“这就是所有的一切都改变了的那天!”
作者:迈克尔·米莫索,前TechTarget安全频道主编
译者:nana
对OpenSSL而言,那一天是2014年4月7日,“心脏滴血”进入安全词典的日子。心脏滴血是历史悠久的加密库中的一个高危漏洞。OpenSSL应用广泛,成千上万的商业和自用软件项目都有应用。心脏滴血的爆出意味着,这个全互联网范围的漏洞能泄露足够的内存供黑客挖掘出从登录凭证到加密密钥的任何东西。
对全世界的服务器管理员来说那是非常糟糕的一天,对维护OpenSSL的小团队而言那同样是地狱般的一天。就像现实世界中的自然灾害,人们总是要到一场地震或是一阵飓风撕裂整座城镇才会意识到一直以来平和的生活是建立在多么脆弱的基础之上。这种情况显然适用于OpenSSL,因为心脏滴血让人们注意到:尽管这个加密库看起来似乎无处不在,它却几乎没有资金支持,而且很可悲地处于维护人手不足状态。
“两年前与现在简直就是天壤之别。在两年前,除了我们最忠实的用户社区,我们几乎不为人所知。没人知道我们的存在。”史蒂夫·马奎斯 ,处理OpenSSL商业合同的公司实体“OpenSSL基金会”之共同创始人、总裁兼业务经理如此说道。“OpenSSL到处都在用:成百上千的厂商使用它;每台智能手机使用它。每个人都理所当然地使用它;大多数公司甚至都没提及其产品中使用了OpenSSL。”
心脏滴血令科技界认识到:全世界的商业交易安全和隐私,以及全球通信的现状都是不健康的。心脏滴血事发不久,核心基础设施计划(CII:Core Infrastructure Initiative)成立,联合Linux基金会、微软、脸书、亚马逊、戴尔、谷歌和其他大型科技公司共同支持各种各样的开源项目。OpenSSL是第一批受益者,拿到了足够钱聘用史蒂夫·汉森和安迪·波利亚科夫博士作为其首批专职工作人员。汉森博士是一位广为人知的OpenSSL坚实维护者,是这个开源项目的无名英雄,他与其他志愿者一起处理漏洞报告、代码审查和修改等事务。
现在,随着稳定的资金注入,汉森和波利亚科夫有了坚实的后盾,可以按路线图进行OpenSSL代码库的清理,为关键改动设立规程,并制定这些改动间沟通协调的方式。艰苦的重构正在进行,由于是传输层安全(TLS)状态机关键性的彻底检修,超级重要的项目有可能在今年夏天得见天日——正好赶上老牌安全代码安全审计机构NCC Group加密服务对当前OpenSSL代码的审计结果。NCC Group之前刚刚完成对磁盘加密软件TrueCrpyt的代码安全审计。
“心脏滴血事件发生之前的OpenSSL某种程度上就是一团糟;一个兄弟在维护而其他一些人在周边不断加进新的东西。”约翰霍普金斯大学教授,密码学专家马修·格林说。“年复一年,OpenSSL累积了太多晦涩难懂的东西。代码质量实在太低,没人有兴趣进行重构。关于OpenSSL的真相就是:它就是一堆低级代码,插在每台想进行安全通信的机器的关键通路上。”
“它紧挨着网络协议栈,这意味着有大量数据要经过它,而这些数据未必都是友好的。OpenSSL就像当年的UNIX或TCP/IP协议栈;很关键,但不成熟,而且80年代以后就没人再愿意看它一眼。”
有了CII的资金支持和广泛的关注,所有这一切都在改变。里奇·萨尔茨,现OpenSSL开发团队成员,阿卡迈公司工程师,一直都是OpenSSL项目的长期贡献者。他还记得以往那些无奈的时光。由于没有足够的资源及时处理补丁的审核事宜,萨尔茨发往OpenSSL进行审核的补丁程序往往一直滞留在寂寞无人理的荒芜状态。
年复一年,OpenSSL累积了太多晦涩难懂的东西。代码质量实在太低,没人有兴趣进行重构。”——马修·格林
萨尔茨说:“以前,有可能你抛出一个补丁,三个月后才有点反应。现在不同了,有了明确的发展路径,确定的关键度分级,还有了高级别漏洞出现时供人协调各项事务的规程。我们有了可以使项目健康发展并让社区更多地参与进来的策略与流程。这真是一件非常棒的事。”
肯尼斯·怀特,安全研究员,开发加密审计项目(Open Crypto Audit Project)负责人。他表示,OpenSSL不是唯一一个摇摇欲坠的项目。
“即使对Linux或网络安全了解甚深的优秀技术人员也没有领会到整个协议栈的脆弱程度,不止是OpenSSL,而是整个协议栈。”怀特说。随着心脏滴血、贵宾犬(poodle)、FREAK和其他漏洞贯穿一系列技术,怀特希望大家能够开始严肃对待协议栈安全问题。
“你的代码里到处都是DNS或libcurl传输库一样的东西。协议栈中有太多人们觉得是可靠成熟的代码库其实依然只靠一个或两个人在维护。从全球网络来看,我们整个基础设施的根基中有很大一部分是建立在太多层的信任之上。如果你掀开那些遮蔽物,你会发现,真的有太多层的遗留问题需要仔细审查。”
对OpenSSL的关注,暴露出了一些简单而残酷的事实,比如糟糕的代码结构。目前,已有成千上万行代码经过代码整理工具的调整,去除了令人难以忍受的混乱缩进,创立了干净整洁统一协调的代码风格,既便于阅读也有利避免偶然的错误。
怀特说:“有些项目包含有集成关联钩子,要是没遵循结构,你就检查不出来。这听起来有点傻,但这正是代码检查失败的原因。它就是个小小的脚注,微不足道的小小片段,但非常危险,因为这些钩子自动挂上了项目中每一份源代码文件。”
正在进行的OpenSSL大变脸有望将开发团队拖入复杂而又忙碌的时间。当务之急是TLS状态机的重写,这个东西,像大多数OpenSSL代码库一样,一直以来都是个拼凑堆砌起来的货。“TLS状态机是个大工程。”萨尔茨说,“其整个机制,我们能说的最亲切友好的部分,就是这玩意儿是有机成长的。它开始于安全套接层协议第二版(SSL v2),从那里成长,然后一发不可收拾。这是我们的主要战场之一,OpenSSL的很多漏洞都是从这儿来的。”
萨尔茨和格林指出,3月初发现的FREAK漏洞就是由状态机的脆弱性和复杂性引起的。有些SSL客户端,包括OpenSSL,含有FREAK(分解RSA出口级密钥)漏洞。攻击者能利用该漏洞迫使客户端降级到易破解的512位弱RSA密钥,然后利用中间人攻击威胁加密通信的安全性。
它将会以一种前所未有的协同方式进行。”——肯尼斯·怀特
“OpenSSL和TLS是很复杂的协议。”格林说,“他们必须在适当的时候知道添加进来的是什么,并拒绝其他东西的进入。这成千上万行代码都需要打碎重来,分解整理成可管理的代码段而不是搅和成意大利面似的一团乱麻。这些年来他们加进了太多意大利面式代码,还从没人手握手术刀介入剔除这些毒瘤。现在,总算有人来设计正确的状态机了。”
同时,代码重分解涉及到对该库其他关键部分的精细检查,比如内存管理、提供加密函数接口的EVP库、OpenSSL输入输出抽象层,还有完整的测试工具的构建——这将使很多分析工作能够以一种自动的方式重复进行。OpenSSL代码重分解和后续的安全审计还涉及到大量计算的问题。
“它将会以一种前所未有的协同方式进行。”怀特说。“可以绝对肯定的是,这是一段时间内最雄心勃勃的安全项目之一。我们抱负远大。”
尽管有种种缺陷,OpenSSL还是个可靠的加密库,用怀特的话说就是“身经百战”的,而且它的核心库经过这么些年几乎没怎么改动过。
“讽刺的是, OpenSSL在加密功能上好得令人惊叹。”格林说,“它令人惊艳,但却是以凌乱的方式令人惊艳,有些像能奏出协奏曲却不会收拾自己的房间的音乐神童。加密代码出奇的好,但是高层的东西邋遢得像是没中心脏滴血的解析包。”
受核心基础设施计划支持的OpenSSL审计正在进行中,第一组结果在今年夏天就将陆续出炉。就像TrueCrypt,OpenSSL开发者们对检查过程中将会暴露出来的漏洞很是好奇;同样地,与它的文件加密表亲类似,他们双手合十祈祷OpenSSL里没有潜藏的后门。
“我担心的是漏洞的全部类型。”怀特说,“源代码审计很有用,但我们并没有对源代码进行审计,而是对编译好的二进制文件进行审计。令我担心的是那类系统性问题,而不是像打地鼠游戏那样打掉一个又冒一个永远在做重复劳动无用功的事。有这么多人盯着,再加上密码学工程师的才干智慧,他们将会交出有意思的漏洞根本就是必然的。奥卡姆剃刀定律(编者注:这个原理称为“如无必要,勿增实体”,即“简单有效原理”)适用于这类事情。漏洞更有可能存在于被遗忘的代码或深奥晦涩不常用的选项里,而不是蓄意造成的。”
我们显然将审计当成了高级质量保证的来源。”——里奇·萨尔茨
尽管审计会给开发者带来价值,却只是某一时刻的快照,不解决持续性问题。这也是为什么测试工具的开发和加诸到OpenSSL身上的持续性关注这种东西最让工程师们兴奋激动的原因。
“我们显然将审计当成了高级质量保证的来源。”萨尔茨说,“对社区和我们而言真正有价值的东西,将是那些相当擅长干这个的人们努力打破旧事物。我们没有专职的测试团队,而我们想要证明这个东西运行良好,想证明如果我给你一个1兆字节的证书,它不会令你失望。”
在OpenSSL持续从核心基础设施计划接收资金援助的同时,个人捐款减少到了心脏滴血被揭露前的水平。
“心脏滴血漏洞曝光前的几年,我们每年能收到2000美元上下的捐款,如今我们又回到了那时的水平。”马奎斯说,“我们很珍视这些捐款,因为这表现出个人认为OpenSSL是如此重要。也挺有意思的是我们从那些视隐私为生命的部分世界中收获了多少加密对他们而言是多么重要的留言。”
(回复“众人之眼”可阅读《众人之眼--开源软件的真实状况》)
---
要闻/干货/原创/专业 关注“安全牛”
点击“阅读原文”获取更多资讯
长按此图片 识别二维码