メインメニューを開く

LibreSSLは、TLS/SSLプロトコルのオープンソースによる実装である。TLSの実装にOpenSSLを利用していたOpenBSDの開発者が、2014年4月に明らかとなったOpenSSLのハートブリード脆弱性を受けて独自にフォークしたものである[3][4][5][6][7]。OpenSSLのコードを見直し、よりセキュアな実装とすることを目的としている[8]

LibreSSL
開発元 The OpenBSD Project
最新版 2.8.3 (2018年12月15日(6か月前) (2018-12-15[1]) [±][±]
最新評価版 なし[±]
リポジトリ https://cvsweb.openbsd.org/src/lib/libtls/, https://cvsweb.openbsd.org/src/lib/libssl/, https://cvsweb.openbsd.org/src/lib/libcrypto/
プログラミング言語 C言語アセンブリ言語
対応OS OpenBSD, FreeBSD, NetBSD, Linux, HP-UX, Solaris, macOS, Microsoft Windows[2]
種別 ライブラリ
ライセンス Apache License 1.0、4条項BSDライセンス, ISCライセンスパブリックドメイン
公式サイト www.libressl.org
テンプレートを表示

LibreSSLはOpenSSL 1.0.1ブランチからフォークしたものであり、OpenBSDプロジェクトの標準TLSライブラリとして利用されている[9]

目次

歴史編集

OpenSSLのハートブリード脆弱性が明らかとなった後、OpenBSDプロジェクトではOpenSSLのソースコードの監査を新たに行った。その結果、OpenSSLをフォークし、OpenBSDプロジェクト自身によって管理する必要があると判断した[3]。libressl.orgドメインの取得は2014年4月11日、プロジェクト名の発表は同月22日であった。

コードの見直しの最初の一週間で、C言語によるコードのうち90000行以上が削減された[8][10]。削減されたのは、古く使われていないコードや、古かったり現在となってはほとんど使われていないシステムのサポートのためのコードである。当初LibreSSLはOpenBSD 5.6においてOpenSSLを置き換えることを目的としていたが、安定版を他のプラットフォーム向けにもバックポートして公開することとした[11][12]。2014年4月現在、LibreSSLプロジェクトでは外部からの継続的な経済的な支援を求めている[10]

6月5日、いくつかのOpenSSLのバグが公開された。いくつかのプロジェクトにはあらかじめバグの詳細が伝えられていた[13]が、LibreSSLには伝えられていなかった。OpenBSDプロジェクトのテオ・デ・ラートは、OpenSSLの開発者がこの情報を意図的にOpenBSDおよびLibreSSLプロジェクトに伝えなかったとして非難している[14]

6月20日、GoogleによってOpenSSLの新たなフォークとしてBoringSSLが発表された。Googleは、バグ修正に関する情報をLibreSSLと相互にやり取りすることを表明している[15][16]ほか、LibreSSL側の要請に応じてGoogle自身によるコミットを従来のライセンスだけでなくISCライセンスで再ライセンスしている[15][17]。6月21日、テオ・デ・ラートはBoringSSLを歓迎する旨を表明し、他プラットフォーム向けのLibreSSL Portableの概要を発表した[18]。6月20日にはLinux向けの、7月8日にはOS XおよびSolaris向けのポートの準備が開始された[19][20]

7月11日、ポータブル版のLibreSSL 2.0.0が公開された[21][22]。また、2.1.4以降はWindowsにも対応している。[23]

OpenSSLからの変更点編集

メモリ関係編集

LibreSSLでは、メモリ呼び出しがOpenSSLで用いられていた独自のものから標準ライブラリによるもの( strlcpycallocasprintfreallocarray など)に変更されている[24][25]。これにより、詳細なメモリデバッガを用いたり、ASLRNXビットスタックカナリアによってプログラムのクラッシュを観察することでバッファオーバーフローを検出することが可能となる。

CVSログからは、潜在的な二重解放の可能性が修正されていることもわかる[26]

積極的な対策編集

潜在的な問題を早期に修正できるよう、安全のために設計されたコンパイルオプションやフラグ (-Wall, -Werror, -Wextra, -Wuninitialized) が既定で有効化されている。コードの可読性の向上(Kernel Normal Form、スペースによる整形、改行)や不要なラッパーやマクロの除去により、プログラムの正当性の検証やセキュリティ監査が容易となっている。

2038年問題にも対応済みである。

暗号化編集

擬似乱数生成器による乱数のシード生成も、より安全となるよう改良されている[27][28]

また、新しい暗号アルゴリズム(ストリーム暗号であるChaChaメッセージ認証コードであるPoly1305)、楕円曲線暗号(512ビットまでのbrainpool[29])にも対応している。

脆弱なプロトコルの無効化編集

SSL 3.0における脆弱性であるPOODLEの報告をうけて、10月16日リリースのバージョン2.1.1よりSSL 3.0を既定で無効化した[30]

コード除去編集

ハートブリードへの対応としてLibreSSLから除去された最初の機能は、Heartbeat拡張そのものであった[31]。また、他のオペレーティングシステムハードウェアアーキテクチャのサポート(バージョン9までの「クラシックな」Mac OSNetWareOS/2OpenVMS、16-bitのWindowsなど)、不要あるいは安全ではないと考えられるプリプロセッサマクロ、アセンブリ言語C言語Perlのための古いデモ・ドキュメントファイルも除去されている。

NSAによるバックドアが存在すると疑われている[32]Dual_EC_DRBG英語版は、これを必要とするFIPS 140-2英語版標準と共にサポートが廃止された。

MD2SSL 2.0ケルベロス認証Password Authenticated Key Exchange by Juggling英語版 (J-PAKE)、Secure Remote Password protocol英語版 (SRP)といった使われていないプロトコル、安全ではないアルゴリズムのサポートも廃止されている。

その他編集

OpenSSLに対する批判の一つに、報告されているにもかかわらず長年修正されずに放置されているバグの数が挙げられる。LibreSSLではこれらのバグの修正も行っている[33]

脚注編集

  1. ^ LibreSSL: Releases” (2018年12月15日). 2018年12月21日閲覧。
  2. ^ LibreSSL Releases”. 2015年3月22日閲覧。
  3. ^ a b Unangst, Ted (2014年4月22日). “Origins of libressl”. flak. 2014年8月4日閲覧。
  4. ^ Kemer, Sean Michael (2014年4月22日). “After Heartbleed, OpenSSL Is Forked Into LibreSSL”. eWeek. 2014年8月4日閲覧。
  5. ^ Not Just a Cleanup Any More: LibreSSL Project Announced”. Slashdot (2014年4月22日). 2014年8月4日閲覧。
  6. ^ Beck, Bob (2014年5月17日). “LibreSSL: The first 30 days, and what the Future Holds Slides”. 2014年8月4日閲覧。
  7. ^ M, Constantine (2014年5月17日). Soulskill: “30-Day Status Update On LibreSSL”. Slashdot. 2014年8月4日閲覧。
  8. ^ a b Seltzer, Larry (2014年4月21日). “OpenBSD forks, prunes, fixes OpenSSL”. Zero Day. ZDNet. 2014年8月4日閲覧。
  9. ^ Hessler, Peter (2014年4月15日). “OpenBSD has started a massive strip-down and cleanup of OpenSSL”. OpenBSD Journal. 2014年8月4日閲覧。
  10. ^ a b Brodkin, Jon (2014年4月22日). “OpenSSL code beyond repair, claims creator of "LibreSSL" fork”. Ars Technica. 2014年8月4日閲覧。
  11. ^ McCallion, Jane (2014年4月22日). “Heartbleed: LibreSSL scrubs "irresponsible" OpenSSL code”. PC Pro. 2014年8月4日閲覧。
  12. ^ Larabel, Michael (2014年5月9日). “OpenBSD Affirms That LibreSSL Will Be Portable”. Phoronix. 2014年8月4日閲覧。
  13. ^ oss-sec: Re: OpenSSL seven security fixes”. Seclists.org. 2014年8月4日閲覧。
  14. ^ 'Re: new OpenSSL flaws' - MARC”. Marc.info (2014年6月5日). 2014年8月4日閲覧。
  15. ^ a b Langley, Adam (2014年6月20日). “BoringSSL (20 Jun 2014)”. ImperialViolet. 2014年8月4日閲覧。
  16. ^ Goodin, Dan (2014年6月20日). “Google unveils independent “fork” of OpenSSL called “BoringSSL””. Ars Technica. 2014年8月4日閲覧。
  17. ^ Sing, Joel (2014年6月21日). “OpenBSD — lib/libssl/src/crypto/evp evp_aead.c e_chacha20poly1305.c”. 2014年8月4日閲覧。
  18. ^ Raadt, Theo de (2014年6月21日). “Boringssl and such”. https://marc.info/?l=openbsd-tech&m=140332790726752&w=2 2014年8月4日閲覧。 
  19. ^ Beck, Bob (2014年6月20日). “OpenBSD — lib/libcrypto/crypto getentropy_linux.c”. 2014年8月4日閲覧。
  20. ^ Beck, Bob (2014年7月8日). “OpenBSD - lib/libcrypto/crypto getentropy_osx.c getentropy_solaris.c”. 2014年8月4日閲覧。
  21. ^ Index of /pub/OpenBSD/LibreSSL” (2014年7月11日). 2014年8月4日閲覧。
  22. ^ Beck, Bob (2014年7月11日). “First release of LibreSSL portable is available”. Marc.info. 2014年8月4日閲覧。
  23. ^ LibreSSL 2.1.4 released” (2015年3月4日). 2015年3月4日閲覧。
  24. ^ Orr, William (2014年4月23日). “A quick recap over the last week”. OpenSSL Valhalla Rampage. 2014年8月4日閲覧。
  25. ^ OpenBSD LibreSSL CVS Calloc Commits”. 2014年8月4日閲覧。
  26. ^ OpenBSD LibreSSL CVS Double Free Commits”. 2014年8月4日閲覧。
  27. ^ OpenBSD LibreSSL CVS Insecure Seeding”. 2014年8月4日閲覧。
  28. ^ OpenBSD LibreSSL CVS Kernel Seeding”. 2014年8月4日閲覧。
  29. ^ RFC 5639
  30. ^ LibreSSL 2.1.1 released.”. LibreSSL (2014年10月16日). 2014年10月21日閲覧。
  31. ^ OpenBSD LibreSSL CVS OPENSSL_NO_HEARTBEAT”. 2014年8月4日閲覧。
  32. ^ Perlroth, Nicole (2013年9月10日). “Government Announces Steps to Restore Confidence on Encryption Standards”. The New York Times. http://bits.blogs.nytimes.com/2013/09/10/government-announces-steps-to-restore-confidence-on-encryption-standards/ 2014年8月4日閲覧。 
  33. ^ OpenBSD LibreSSL CVS Buffer Release (#2167 bugfix) Commit” (2014年4月10日). 2014年8月4日閲覧。

関連項目編集

外部リンク編集