OpenSSL 在数周前爆发 Heartbleed 漏洞之后, OpenBSD 小组发起了 LibreSSL 项目。 LibreSSL 的目标是对 OpenSSL 进行全面的清理和重构、提供更安全更稳定的代码基、把长期遗留的 bug 去除、引入先进的编程实践并对可移植性进行重新设计。OpenBSD 开发者 Bob Beck 和 OpenBSD 基金会主席(OpenBSD 基金会是非营利组织,总部位于加拿大的艾伯塔)在最近于渥太华召开的 BSDCan 2014 大会上介绍了该项目最近一个月的研发进度。
LibreSSL 的目标是引入“更加明智的”开发模型,即仅针对 OpenBSD 这样成熟的操作系统进行开发,而不像 OpenSSL 那样需要支持 Visual C 1.52 这种最原始的 C 语言编译器或者其他古老的 OS。LibreSSL 希望避开那堆“由#ifdef 和#ifndef 缠绕在一起的乱麻”,为此,该项目将所有涉及平台依赖的代码都封装到一个“平台兼容层”,强制所有平台跟这个兼容层对话。这是学习了 OpenSSH 实现平台兼容性的思路。
LibreSSL 在开发一个月以来移除了原项目中没用的代码和对现在基本没人用的老操作系统的支持,这包括 Ebcdic、DOS、MacOS Classic(OS X 的前身)、Win16 及其他老旧的 Windows 版本、VMS 等。当然, Heartbleed 相关的代码也已经被移除。
对于 OpenSSL 中最需要解决的安全问题,Bob Beck 列举了 LibreSSL 目前已经完成的一些工作:
- 所有 OpenSSL 专有的内存请求方式(malloc、calloc、realloc、snprintf、strlcat 等)都替换为标准库的请求方式
- 之前的随机数生成器的种子获取方式有缺陷,现在改用内核自带的功能来实现熵生成
- 添加了基于 Brainpool、ChaCha、poly1305 和 ANSSI FRP256v1 算法的几个新的加密套件
- 移除了对 FIPS 标准的支持——该标准被认为是有害的,并且不利于库的开发,而且该标准所默认使用的 Dual_EC_DRBG 算法被怀疑为有后门
- 修复了很多报告给 OpenSSL Request Tracker 的 bug ,而这些 bug 目前在 OpenSSL 里尚未修复
新项目启动后的一周内,LibreSSL 研发团队移除了OpenSSL 项目中超过90000 行的C 代码。所有这些密集的重构都在OpenBSD ports 分支下经过了严格的API 兼容性测试,测试覆盖的应用数量超过8000 个。
OpenSSL Heartbleed 漏洞在互联网上激起了热烈的讨论。很多批判指向了OpenSSL 项目运转的方式、API 和源代码的质量、难以测试、以及糟糕的文档。
这就是为什么OpenBSD 小组要启动LibreSSL 项目。根据Bob Beck 的描述, Heartbleed 并非是 OpenSSL 面临的唯一问题。上述提到的 malloc 方法一直存在很多问题,如不会释放内存——当年在 OpenSSL 引入重用空闲内存的 LIFO 回收机制造成了运行时可以从 malloc 获取之前在内存当中的信息。更糟糕的一点是,OpenSSL 的项目团队总是将实现新特性的优先级放在修复 bug 之前,很多 bug 在 bug tracker 里面无人理睬,多年都没有修复。而且,OpenSSL 的代码自成体系,连 Valgrind 这样的工具都抓不到 allocator 出现的问题。
LibreSSL基于OpenSSL 1.0.1g 的代码库做分支,后续开发将遵循OpenBSD 项目的安全准则。LibreSSL 的目标是跟OpenSSL 的API 完全兼容,目标操作系统为OpenBSD 5.6 以及其他基于POSIX 的系统。在OpenBSD 上运行稳定之后,研发团队会着手其他平台的移植工作。
LibreSSL 项目正在募捐,希望在未来数年实现如下目标:
- 有足够的资金支持几名开发者完成代码基主要部分重写的工作
- 有足够的资金支持兼容性 / 移植工作,即跟踪 ports tree 的相关变更并将变更推送至上游
- 在不影响 OpenBSD、OpenSSH 和其他相关项目研发进度的情况下保持 LibreSSL 项目的开发速度
OpenBSD 基金会已经向 Linux 基金会发送赞助请求,不过 Linux 基金会尚未表示赞助意向。
评论