数週間前にOpenSSLで発見されたHeartbleedセキュリティ脆弱性に対して,OpenBSDグループの出した答がLibreSSLだ。LibreSSLはOpenSSLを全面的にリファクタおよびコード削減することにより,セキュアで安定したコードベース,以前から存在するバグの修正,現代的なプログラミングプラクティスの導入,ポータビリティの再設計などを目指す。OpenBSDの開発者であり,カナダのアルバータを本拠とする非営利団体OpenBSD Foundationではディレクタを務めるBob Beck氏がBSDCan 2014 in Ottawaで,過去30日間の開発状況について説明した。
LibreSSLでは,OpenBSDのような完成度の高いオペレーティングシステムを対象にするとともに,OpenSSLを"公約数"的なCで記述せざるを得ない原因となったVisual C 1.52などの古いコンパイラや,旧式のOSのサポートを排除することにより,”健全な"開発モデルの適用を目標とする。それと同じ線に沿って,プラットフォーム依存コードをプラットフォーム対応層にカプセル化し,すべてのプラットフォームでその使用を強いるという,OpenSSHがポータビリティのために採用したのと同じアプローチによって,"スパゲッティのように入り乱れた#ifdef #ifndef
”を回避したいとも考えている。
LibreSSL開発の当初1か月間では,使用されないコードや,古くなって使用頻度の低いオペレーティングシステムのサポートなどが取り除かれた。中でも注目すべきなのは,EBCDICやDOS, 旧MacOS(OS X以前のもの), Win16を始めとする多くのWindowsバージョン, VMSなどのサポートが削除されたことだ。Heartbleedについても,その機能自体が取り除かれた。
OpenSSLのセキュリティ問題を解決する上で最も重要な変更点として,Bob Beck氏は次のものを挙げている。
- OpenSSLのカスタムメモリコール(malloc, calloc, realloc, snprintf, strlcat等)をすべて,標準ライブラリのコールに置き換えた。
- 乱数発生器に対する不適切なシード設定を,カーネル自体がエントロピー生成用に提供している機能に依存するよう修正した。
- BrainpoolやChaCha, poly1305, ANSSI FRP256v1などのアルゴリズムをベースとした新しい乱数スイート。
- FIPS標準のサポートはライブラリ開発上の障害となる上に危険であると判断されたため,バックドアの存在が疑われた必須機能のDual_EC_DRBGアルゴリズムとともに廃止された。
- OpenSSL Request Trackerに直接関連する多数のバグが修正された。これらはOpenSSLではまだ修正されていないものだ。
最初の1週間のコード削減作業のみで,90,000行以上のC言語コードが削除された。この徹底したリファクタリングのすべてにおいて,8,000以上のアプリケーションを含むOpenBSDポートツリーを対象としたAPI互換性テストが行われている。
OpenSSLのHeartbleed脆弱性の発見が発端となって,このライブラリの状態に対する激しい議論がインターネット中に起こった。批判の背後にあるおもな理由は,プロジェクトの運営方法,APIとソースの品質,不可解だという印象,そしてドキュメントだ。
LibreSSLが開発されることになった出発点がHeartbleed脆弱性にあることは間違いない。しかしBob Beck氏は,HeartbleedだけがOpenSSLの問題点なのではないと言う。それよりも重要なのは,OpenSSLの使用しているmallocを置き換えたことだ。解放されないメモリ,LIFOリサイクルスキームの結果生じる解放バッファの再利用,malloc/freeが実行時に置き換え可能であることなど,mallocにはさまざまな問題があった。さらに悪い点として氏が指摘するのは,プロジェクトの管理方法だ。新機能の実装を優先するあまり,バグフィックスのために送られてきたパッチを適用せず,"バグトラッカでバグが何年間も腐っていた”のだ。さらに氏が言うには,OpenSSLのコードが不自然であったために,Valgrindのようなツールでもアロケータの問題を指摘することができなかったことが,問題をますます複雑にしていた。
LibreSSLは1.0.1gブランチを起点にOpenSSLライブラリからフォークして,OpenBSD内部で運用されるセキュリティガイドラインに沿って開発が進められている。
OpenSSLとのAPIレベルの互換性を維持しながら,当面はOpenBSD 5.6などPOSIXベースのシステムをターゲットとする。リファレンスプラットフォーム用が安定バージョンに到達したならば,そこで初めて,他のプラットフォームへの移植を開始する予定だ。
LibreSSLでは次のような理由から,今後数年間の資金提供を積極的に求めている。
- コードベースの主要部分をいくつか書き直す開発者への支援。
- ポートツリーを通じた変更の追跡作業,修正内容の上位へのプッシュなどを行う,ポータビリティ/移植作業担当者への支援。
- OpenBSDやOpenSSHなど関連プロジェクトに影響を与えることなく,ライブラリの更新作業を迅速化。
OpenBSD FoundationではLinux Foundationのスポンサーシップを要請しているが,そのコミットメントはまだ得られていない。