LibreSSL
読み:リブレ-エスエスエル
外語:LibreSSL

 SSL/TLSのオープンソースによる実装の一つ。OpenSSLの派生改良版で、今後の主流になると見込まれている。
目次

概要
 LibreSSLは、OpenSSLの全面的なリファクタリングを実施し、コードベースのモダン化とクリーンナップを通じセキュリティの改善を図ることを目的として、The OpenBSD Projectによりフォークされたコードベースである。
 LibreSSLはOpenSSLからの置き換えが想定され、次の4つから構成されている。
 当時最新だったOpenSSL 1.0.1ブランチがベースで、以降、OpenBSDプロジェクトではLibreSSLが標準のTLSライブラリとなった。

特徴

ライセンス
 OpenSSLと同様に、Apache License 1.0と4条項BSDライセンスという、宣伝条項を含むライセンスと、ISCライセンス、パブリックドメインが混在する。
 OpenSSLからライセンスは変更できないのでGPL非互換なのは従来同様であるが、Linuxはじめ様々なOSが対応している。

対応プラットフォーム

標榜
 LibreSSLの最初のゴールは、次としている。
 簡単には、OpenSSLプロジェクトが怠慢で今までしてこなかった必要なことを、代わりにする、という宣言である。
 「怖いことじゃない」というのは、後に詳細するスライドで書かれているように、OpenSSLのコードが怖すぎる(≒ヤバい)ので、そうではない方向を目指すという意味である。

由来
 2014(平成26)年4月、世界はOpenSSLの「Heartbeat拡張」がもたらしたセキュリティホールCVE-2014-0160(心臓出血)で震撼した。
 OpenBSDプロジェクトでもOpenSSLを用いていたため、OpenSSLのソースを調査、結果として(バグだらけであまりにも酷いので)OpenBSDプロジェクト指揮下での全面的な刷新が必要と判断、OpenSSL本流よりフォークされLibreSSLと命名され、改善が開始された。
 OpenBSDプロジェクトによる調査で、フォークまでする決断にいたった理由として、Bob Beck氏によるスライドが公開されている
 ここに「The code was too horrible. Nobody wanted to work with it.」「(意訳: このコードはヤベェ、誰もこんなのに関わりたくねェ)、「RUN AWAY!!!」(意訳: 逃げろ!!!)などとあるようにコードが汚すぎて外部の参加者がみな逃げ出すような代物だったこと、およびバグ管理システムに記録されたバグを修正することなく放置していることを理由としている。
 スライドではHeartbeat拡張のバグの件にも振れ、最後に「eek!」(意訳: キャーッ!)とあるような悪手の結論であることを述べているが、いずれにせよHeartbeat拡張のバグは、LibreSSLフォークの理由ではなく、単なる切っ掛けの一つでしかない。

改善の傾向
 OpenSSLは歴史あるソフトウェアなので、既に不要なコードが大量に存在する。
 LibreSSLでは、古くて既に使われていない処理や、古くてもうあまり使われない処理などを一気に削除した。
 ちなみに、LibreSSL開発開始のきっかけとなったCVE-2014-0160(心臓出血)への抜本的な対応としてOpenBSDプロジェクトの取った選択は、「Heartbeat拡張の削除」だった。
 加えて、OpenSSLには報告されていながら長年放置されたままのバグも多くあるが、これらはLibreSSLにて積極的に修正されている。
 また、以前よりNSAによるバックドアとして知られていた疑似乱数生成アルゴリズム「Dual_EC_DRBG」も、LibreSSLで除去された。再びNSAからの横槍が入らない限りは、LibreSSLはOpenSSLとは比較にならない安全性を持つと言える。

安全の考え方
 OpenSSLからLibreSSLに変更したからといって、必ずしも絶対安全とは限らない。世の中に絶対はない。
 OpenSSLにあるセキュリティホールが未修正のまま残っていることもあり、また修正の手違い等で、OpenSSLにはないセキュリティホールを新たに埋め込んでしまう可能性もある。
 OpenBSDプロジェクトでは、バグも脆弱性もないコードを作ることなどできない、という前提で開発が進められており、しかし何よりもセキュリティを重視している。この折り合いを付けるため、セキュリティホールになりにくいCの関数を作ったりして、少しでもセキュリティが向上するようにするという開発方針を取っている。
 その上で、「脆弱性のあるコードをリリースしてしまった(失敗)」→「指摘する人がいる」→「それをすぐ修正する人がいる」→「すぐに修正されたコードがリリースされる」という動きがオープンソースの良さであり、OpenBSDプロジェクトではこれが達成されている。上にも書かれたように、OpenSSLではこれがなく、脆弱性が長く放置されていたのが欠点だったのである。

状況
 LibreSSLの開発第一段階はまずOpenBSDでの動作が優先されていた。これは、元々は「OpenBSD用のまともなOpenSSL」として開発に着手されたためであるが、後に様々なプラットフォームに対応するようになった。
 LibreSSLの開発第二段階となると、他のプラットフォームへの移植性なども考慮し始め、「LibreSSL Portable」としてリリースされた。元々OpenBSDの主張では、LinuxではセキュアなRNG(乱数生成器)は無理だ、との主張であったので、これは大きな譲歩であるとも言える。これは2.0.0が初版である。Linux、Solaris、Mac OS X、FreeBSDでテスト済みとされた。また2.1.4以降はWindowsにも対応した。

変更点

コードの削除
 古いコードを中心に、躊躇なく削除されている。
 フォークの切っ掛けとなったバグ「Heartbeat拡張」という、そもそも要らない機能の丸ごと削除をはじめとして、古い環境に対応させるために追加されたコード、古い暗号やハッシュアルゴリズム(MD2、SSL 2.0、ケルベロス認証など)の削除、そして、バックドアでありセキュリティホールそのものである「Dual_EC_DRBG」も無事に削除された。
 また、SSL 3.0も遂に陥落したことから、いずれSSL 3.0も削除されるものと思われる。

ヴァルハラ送り
 具体的には、次のようなレガシー環境の処理が削除されている
 北欧神話やクトゥルー神話などを持ち出して、EBCDICやVMSは神話の時代の代物であることを強調している。

メモリー
 OpenSSLではメモリー制御に独自処理が目立つが、LibreSSLでは標準Cライブラリにある関数のうちセキュアなもの(OpenBSDが提唱したstrlcpyなど)に置き換えが進められている。
 標準関数で一元化することで、ASLRNXビット、カナリアといった手法で、バッファーオーバーフローの検出が容易に可能になる。

疑似乱数生成アルゴリズム
 疑似乱数生成アルゴリズムも、「Dual_EC_DRBG」の削除をはじめとして改良されている。
 乱数のシード生成処理の改良の他、新しい暗号アルゴリズムも追加された。

履歴
 各バージョンごとに分離し、かつ新しいものを上として記述する。

再検索