LibreSSLとは
LibreSSLは、TLS/SSLプロトコルを実装したオープンソースの
ライブラリです。OpenSSLから派生し、セキュリティ強化を主な目的として開発されました。OpenBSDプロジェクトによって管理されており、同プロジェクトの標準TLS
ライブラリとして利用されています。
誕生の背景
LibreSSLは、2014年4月に発覚したOpenSSLの重大な脆弱性「ハートブリード」を契機として誕生しました。この脆弱性をうけ、OpenBSDプロジェクトはOpenSSLのソースコードを徹底的に見直し、より安全な実装を目指すためにフォークを決断しました。
プロジェクトは、libressl.orgドメインを2014年4月11日に取得し、同月22日にはプロジェクト名を発表しました。初期の段階で、コードの監査によって90,000行以上の
C言語コードが削除され、これは主に古いコードや、使われていないシステムをサポートするためのものでした。
当初、LibreSSLはOpenBSD 5.6でのOpenSSLの置き換えを目的としていましたが、その安定性から他のプラットフォームへのバックポートも実施され、広く利用されるようになりました。現在では、LibreSSLプロジェクトは外部からの継続的な経済的支援を必要としています。
OpenSSLとの関係
LibreSSLは、OpenSSL 1.0.1ブランチからフォークされました。OpenSSLのバグ修正に関する情報がLibreSSLに共有されなかったという出来事がありましたが、GoogleがOpenSSLの新たなフォークとしてBoringSSLを発表した際には、情報共有が積極的に行われ、LibreSSLの要請に応じてGoogleによるコミットがISC
ライセンスで再
ライセンスされました。テオ・デ・ラートはBoringSSLを歓迎し、他プラットフォーム向けのLibreSSL Portableを発表しました。
対応プラットフォーム
LibreSSLは、2014年7月11日にポータブル版2.0.0が公開され、2.1.4以降ではWindowsにも対応しています。macOS High Sierra以降、現行のmacOS Venturaでは、OpenSSLに代わってLibreSSLが標準インストールされています。
OpenSSLからの主な変更点
LibreSSLは、OpenSSLからフォークされた際に、セキュリティとコードの品質を向上させるために多くの変更が加えられました。
メモリ管理
メモリの呼び出しは、OpenSSL独自の方式から標準
ライブラリ(strlcpy、calloc、asprintf、reallocarrayなど)を使用するように変更されました。これにより、メモリデバッガ、ASLR、NXビット、スタックカナリアなどの機能を利用して、バッファオーバーフローなどのメモリ関連の脆弱性を検出しやすくなりました。
また、CVSログから、二重解放の可能性が修正されていることが確認できます。
積極的なセキュリティ対策
LibreSSLでは、コンパイルオプションやフラグ(-Wall, -Werror, -Wextra, -Wuninitialized)がデフォルトで有効化されており、潜在的な問題を早期に修正することが可能です。また、コードの可読性を高めるために、Kernel Normal Form、スペースによる整形、改行などが行われ、不要なラッパーやマクロが除去されました。これらの変更により、コードの正当性の検証やセキュリティ監査が容易になっています。さらに、
2038年問題にも対応済みです。
暗号化関連の強化
LibreSSLでは、擬似乱数生成器による乱数のシード生成がより安全な方法に改良されています。また、新しい暗号アルゴリズムであるChaChaやPoly1305、そして楕円曲線暗号のbrainpool(512ビットまで)に対応しています。
脆弱なプロトコルの無効化
SSL 3.0の脆弱性であるPOODLEに対応するため、バージョン2.1.1以降ではSSL 3.0がデフォルトで無効化されました。
コードの除去
ハートブリードへの対策として、LibreSSLではHeartbeat拡張機能が削除されました。また、他の
オペレーティングシステムや
ハードウェアアーキテクチャ(クラシックなMac OS、NetWare、OS/2、OpenVMS、16-bitのWindowsなど)のサポートも廃止されました。さらに、不要または安全ではないプリプロセッサマクロ、
アセンブリ言語、
C言語、
Perlの古いデモファイルも削除されています。
NSAによる
バックドアの存在が疑われているDual_EC_DRBGは、これを必要とするFIPS 140-2標準とともにサポートが廃止されました。
その他、MD2、SSL 2.0、ケルベロス認証、J-PAKE、SRPといった使われていないプロトコルや安全でないアルゴリズムのサポートも廃止されました。
その他
OpenSSLでは報告されているにもかかわらず長年修正されていないバグが多く存在しましたが、LibreSSLではこれらのバグも修正されています。
関連項目
Transport Layer Security
TLS実装の比較
OpenSSL
OpenBSD
OpenSSH
外部リンク
公式ウェブサイト
LibreSSL source code (OpenGrok)
OpenSSL Valhalla Rampage(コードの見直しに関する情報をまとめているブログ)