英文原文:LibreSSL, OpenSSL Replacement: The First 30 Days
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 目前已经完成的一些工作:
新项目启动后的一周内,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 项目正在募捐,希望在未来数年实现如下目标:
OpenBSD 基金会已经向 Linux 基金会发送赞助请求,不过 Linux 基金会尚未表示赞助意向。