几个月前,OpenSSL 的“Heartbleed”安全漏洞波及整个互联网,令人怵目惊心。事后,公众开始关注 OpenSSL 项目并给予资金援助。目前 OpenSSL 项目发展迟缓,并且存在很多急需解决的问题。近日,OpenSSL 官方网站公布了 OpenSSL 项目的路线图,旨在通过详细的项目计划来解决目前 OpenSSL 存在的问题。
OpenSSL 是目前移动互联网上应用最广泛的安全传输方法(基于 SSL 即安全套接层协议)。它为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及 SSL 协议,并提供了丰富的应用程序供测试或其它目的使用。
官方首先总结了 OpenSSL 项目目前存在的一些问题:
- 未解决的 Bug
在 RT(Bug 追踪系统)中有很多的 Bug 未得到解决,并且其中一部分已经存在了很多年。另外有小部分 Bug 虽然已经解决,但未更新到系统中。 - 不完善 / 错误的文档
OpenSSL 的文档比较乱,有的部分文档不完整或者有错误,有的部分甚至都没有文档。 - 复杂的库
不管是从维护的角度还是从用户的角度,OpenSSL 库和程序都很复杂。公开的 API 中包含了很多内部功能。之前代码被移植到了很多平台,但是现在很多平台已经不在支持范围之内,所以有些代码是可以简化的。另外对 FIPS 的支持更复杂。复杂的代码不利于维护,并且也不易于定位漏洞代码。目前的内存管理部分代码已经是问题和漏洞的多发地了。 - 不一致的编码风格
过去的几年里有不少的开发者参与了 OpenSSL 项目的开发,这使得 OpenSSL 有多种代码风格,混乱的代码让维护变得更加困难。 - 缺少代码审查
没有也不重视代码审查。 - 没有清晰的发布计划
OpenSSL 的新特性发布毫无规律,并且没有相关计划。用户根本不知道新版本的规划以及什么时候可以使用新的特性、什么时候会结束对某个版本的支持。OpenSSL 团队目前仍维护着很多的发布版本,这也耗费了较多的开发精力。 - 没有清晰的平台支持计划
OpenSSL 支持很多平台,对每一个平台的支持都会对应一个“ifdef”条件语句,这种方式有很多问题:
- 代码混乱且很难维护
- 代码依然对一些不被大规模使用的遗留平台提供支持
- 实际上开发团队并没有处理如此多的平台,代码库的支持和测试仅仅只有几个平台,通常是 Linux, FreeBSD 和 Windows。
- 没有安全的发布策略
发布时没有通知对此感兴趣的组织和安全专家。
OpenSSL 团队已经意识到目前项目存在的问题,接下来将重点解决这些问题。下面是博客中提到的解决方案以及目标:
- 处理积压的 Bug
- 管理所有新提交的 Bug 并及时响应。(现在开始)
- 减少 RT 中积压的 Bug。(正在进行)
- 文档完善
一年之内为所有公开且未过时的 API 提供完整的文档。可能需要引入一个文档系统,另外需要处理一些公开但未被使用的 API。 - 复杂的库
- 审查并修订公共 API,以降低其复杂度。 (一年之内)
- 提供一份平台支持计划文档:见下文。(三个月之内)
- 审查并重构 FIPS 代码,增加其准确性,避免外界因素的影响。(一年之内)
- 审查和重构内存管理代码。(六个月之内)
- 不一致的代码风格
- 为项目制定一套清晰的编码规范。规范将覆盖代码布局、平台依赖、单元测试和可选代码。(三个月之内)
- 根据规范重构代码(规范定义后的三个月之内)
- 代码审查
- 所有新提交的代码必须被熟悉相关代码的团队成员审查通过并将审查者提出的问题都解决才能提交。(三个月之内)
- 引入代码审查系统。(六个月之内)
- 审计
外部人员审计当前代码库。(依据外部人员数量) - 静态 / 动态分析
使用合适的分析工具定期对代码进行审查。(六个月之内) - 发布策略
制定一个发布策略,以确定版本的迭代周期,确定某个版本的支持时间以及生命周期。
在版本发布方面有以下几个目标:
- 在不引入其他问题的情况下发布安全补丁
- 如果某个发布版本中出现了 Bug,应该尽快发布修正版本
- 在 OpenSSL 中加入二进制兼容特性
- 不希望维护太多分支,这可能意味着 0.9.8 版本的生命期的结束。
- 平台战略
- 确定优先支持的平台:Linux 和 FreeBSD。
- 列出将会被开发团队支持的二级平台。
- 平台相关的代码将从主代码库中移除
- 没有被大规模使用的平台支持代码将被移除
- 安全策略
撰写安全策略文档,包括以下问题:
- 如何修复安全问题
- 新版本发布之前向谁以及提供什么样的通知 (两个月之内)
最后,OpenSSL 团队也列出了规划中的一些新特性:
- IPv6 支持
- AEAD 更新 (API 审查、Poly/ChaCha 支持、/dev/crypto 操作聚合)
- 新的加密算法的支持,如 CCM
- 扩展 SSL_CONF 支持
- DANE 支持
- 安全级别
- OCB
- FIPS 代码审查和重构
- 对新兴平台的支持,如 ARMv8、POWER
- 为两个主要的线程内建 MT 支持,POSIX 线程和 Win32
评论