OpenSSL

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索
OpenSSL
OpenSSL logo.png
開発元 The OpenSSL Project
最新版

1.1.0c - 2016年11月10日(27日前) (2016-11-10[1]
1.0.2j - 2016年9月26日(2か月前) (2016-09-26[1]

1.0.1u - 2016年9月22日(2か月前) (2016-09-22[1][±]
最新評価版 1.1.0 Beta 2 - 2016年4月19日(7か月前) (2016-04-19[2][±]
プログラミング言語 C言語アセンブリ言語
対応OS マルチプラットフォーム
種別 セキュリティライブラリ
ライセンス Apache License 1.0形式
四条項BSDライセンス形式
公式サイト www.openssl.org
テンプレートを表示

OpenSSLは、SSLプロトコル・TLSプロトコルの、オープンソースで開発・提供されるソフトウェアである。中心となっているライブラリC言語で書かれている)は基本的な暗号化関数と様々なユーティリティ関数を実装している。様々なコンピュータ言語でOpenSSLライブラリを利用できるようにするラッパーもある。OpenSSLはEric A. YoungとTim HudsonによるSSLeay1998年12月に開発者がRSA Securityに異動したため開発は終了されている)を基にしている。

OpenSSLが利用可能なプラットフォームは、ほぼ全てのUnix系SolarisLinuxMac OS XBSDを含む)、OpenVMS、そしてWindowsである。IBMによってSystem i (iSeries/AS400) に移植されたバージョンもある。

メジャーバージョンアップ履歴[編集]

サポート期限[編集]

  • OpenSSL 0.9.8 : 2015年12月31日にサポート終了[3]
  • OpenSSL 1.0.0 : 2015年12月31日にサポート終了[3]
  • OpenSSL 1.0.1 : 2016年12月31日[4]
  • OpenSSL 1.0.2 : 2019年12月31日(LTS)[4]
  • OpenSSL 1.1.0 : 2018年8月31日[4]

暗号化アルゴリズム[編集]

OpenSSLは以下の暗号化アルゴリズムをサポートする。

プロトコル
SSL 2.0、3.0、TLS 1.0、1.1、1.2、DTLS 1.0、1.2
暗号方式
BlowfishCamelliaDESRC2RC4RC5SEEDIDEAAES
ハッシュ関数方式
MD5MD2SHA-1SHA-2MDC-2英語版
公開鍵暗号方式
RSA暗号DSADiffie-Hellman鍵共有

FIPS 140-2の承認[編集]

OpenSSLは、アメリカ国立標準技術研究所Cryptographic Module Validation Program英語版によるコンピュータセキュリティ標準であるFIPS 140-2において承認された初めてのオープンソースプログラムである。最初の承認は2006年1月に行われた。同年7月には「承認されたモジュールによる外部のプログラムとの相互作用に関し疑問が提示された」[5]ため、いったんは撤回されたものの、翌2007年に再び承認が行われた[6][7]

ライセンス[編集]

OpenSSLは"OpenSSL License"と"SSLeay License"のデュアルライセンス下で公開されている[8]。OpenSSL LicenseはApache License, Version 1.0であり、SSLeay Licenseは宣伝条項付きの四条項BSDライセンスである。一般にデュアルライセンスではユーザーは2つのライセンスのうち片方を選択できるが、OpenSSLの説明書きによると、両方のライセンスが適用されることを意味している。

OpenSSL Licenseは、Apache License Version 2.0ではなくApache License Version 1.0であるため、「この製品はOpenSSLツールキットを利用するためにOpenSSLプロジェクトによって開発されたソフトウェアを含む。(This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit[9])」という一文を再頒布の際に含めなければならないという規定が含まれ、GNU General Public License (GPL) と非互換である[10]。ただしThe OpenSSL Projectの見解では、多くのLinuxBSDディストリビューションにおいて、OpenSSLはオペレーティングシステムの一部をなしているためGPLの制限は適用されないとしている[11]。中には、"OpenSSL exception"を追加してシステムで動かせるようにしているプロジェクトもある。GNU Wgetclimm英語版プロジェクトがそのような例である[12][13]

バグによる脆弱性[編集]

Debianの弱い鍵[編集]

ValgrindをOpenSSLに対しても適用可能とするために、Debianディストリビューションに含まれるOpenSSLにパッチを適用したが、この際に誤って擬似乱数生成器が正しく動作しなくなり、生成される暗号鍵が予測可能なものとなってしまった[14]

このバグは2006年9月17日にリリースされたDebian (OpenSSL 0.9.8c-1) から含まれており、バグが判明してDebianから発表されたのは2008年5月13日であった[15]。Debian系以外のシステムを含め、問題となったDebian上で生成した鍵を使用している場合は、脆弱性のないOpenSSLで鍵を再生成する必要がある[14]

このバグは、Debian 4.0 (etch) ではOpenSSLの0.9.8c-4etch3以降で、Debian 5.0 (lenny) では0.9.8g-9で修正されている[15]

Heartbleed[編集]

Heartbleedバグのロゴ

2014年4月7日に、OpenSSLの1.0.2-betaや1.0.1系列で、TLSのheartbeat拡張[16]について、メモリの扱いにバグがあると発表された[17] 。このバグを利用することで、ハートビート1回ごとに64キロバイトのメモリを読み取ることが可能となる[17]。この問題のCVE番号はCVE-2014-0160である[18]

この脆弱性は2011年12月31日から存在し、OpenSSL 1.0.1がリリースされた2012年3月14日以降、脆弱性のあるOpenSSLが広く使われている[19][20]。サーバ側のメモリを読むことで、機密情報にアクセスが可能となり、場合によっては秘密鍵を盗まれて[19]暗号化が無力となり、中間者攻撃を仕掛けることが可能となる。

ユーザーに関する非公開の情報、たとえばセッションクッキーやパスワードも漏れうるため、他者になりすますことも可能となってしまう[21]。脆弱性が判明した段階で、認証局から証明を受けたHTTPSサーバのうち、ざっと17%から半分程度が影響するものと見られている[22]

基本的な対策はハートビートを使用しない(-DOPENSSL_NO_HEARTBEATS オプションを付けて再コンパイルする)か、脆弱性を修正したバージョン(1.0.1g以降)への更新となる[17]

CCS Injection Vulnerability[編集]

2014年6月6日に、過去10年以上に渡るすべてのOpenSSLのバージョンについて、ChangeCipherSpecメッセージの処理の不正な順序による挿入によって攻撃者の意図する弱い暗号へ強制変更させた通信として開始されるという攻撃方法が発見され、CCS Injection脆弱性 (CCS Injection Vulnerability, CVE-2014-0224) として公開された[23]

この脆弱性は過去のOpenSSLのほとんどのバージョンに存在し、通信開始手順の途中で不正な信号を送ると、該当する通信で使われる一時的な暗号鍵が、第三者でも予想できてしまうというものである。

また、脆弱性発見の経緯が、発見者により公開されている[24]

DROWN攻撃[編集]

Decrypting RSA with Obsolete and Weakened eNcryptionと名付けられた攻撃手法の略称[25]

脆弱性の概要は、SSLv2を使用可能にしていると攻撃者は、同じ秘密鍵を共有するSSLv2が有効なサーバにプローブを送信することで、新しいプロトコルであるTLSを使ったクライアントとサーバ間の接続を復号化することができる[26]。 想定される影響は、遠隔の攻撃者に、SSLv2 をサポートしているサーバの暗号通信を解読される可能性がある。SSLv2 をサポートしており、TLS 通信で SSLv2 と同一の証明書を使用している場合、TLS の暗号通信であっても、同様の影響を受ける可能性がある[27]。 この攻撃に対処したパッチは、1.0.1sまたは1.0.2.g[28]である。 SSLv2自体は、2011年から非推奨[29]となっている。

フォーク[編集]

LibreSSL[編集]

OpenBSDプロジェクトでは、前述のハートブリード問題をうけて、OpenSSL 1.0.1gをベースとしてフォークしたLibreSSLを2014年4月に立ち上げた[30]。これは、OpenBSDで利用されているOpenSSLライブラリを置き換えることを目的としており、OpenSSLのコードの見直しを行いよりセキュアな実装とすることを目指している。

既に、OpenBSDにおいて不要なコードや、古いシステムのサポートのためのコードの削除を行い、90000行以上のソースコードの削減を行っている[31]

2014年7月11日に、LibreSSL 2.0.0がリリースされた[32][33]

BoringSSL[編集]

Googleも、OpenSSLをフォークしたBoringSSLの立ち上げを2014年6月に発表した[34]>[35]。Googleでは、OpenSSL、LibreSSL双方の開発者と協力していくとしている。

脚注[編集]

[ヘルプ]
  1. ^ a b c OpenSSL: Newslog”. 2016年11月10日閲覧。
  2. ^ OpenSSL: Newslog”. 2016年4月19日閲覧。
  3. ^ a b Mark J Cox (2016年1月25日). “(openssl-announce) Forthcoming OpenSSL releases” (英語). The OpenSSL Project Team. 2016年12月7日閲覧。 “support for 1.0.0 and 0.9.8 releases ended on 31st December 2015 and are no longer receiving security updates”
  4. ^ a b c https://www.openssl.org/policies/releasestrat.html Release Strategy
  5. ^ NIST recertifies open source encryption module
  6. ^ Validated FIPS 140-1 and FIPS 140-2 Cryptographic Modules 2007”. アメリカ国立標準技術研究所 (2007年). 2013年6月24日閲覧。
  7. ^ FIPS 140-2 Validation Certificate (PDF)”. アメリカ国立標準技術研究所 (2007年). 2013年6月24日閲覧。
  8. ^ OpenSSL: Source, License
  9. ^ http://www.openssl.org
  10. ^ Licenses - Free Software Foundation
  11. ^ OpenSSL: Frequently Asked Questions
  12. ^ WGET 1.10.2 for Windows (win32)
  13. ^ climm - Download!
  14. ^ a b DebianのOpenSSLに脆弱性、「弱い鍵」が破られる恐れ @IT、2008年5月20日(2014年4月12日閲覧)。
  15. ^ a b DSA-1571-1 openssl – predictable random number generator”. Debian (2008年5月13日). 2012年12月3日閲覧。
  16. ^ Seggelmann, R. et al. (2012年2月). “Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) Heartbeat Extension”. RFC 6520. Internet Engineering Task Force (IETF). 2014年4月8日閲覧。
  17. ^ a b c OpenSSL.org (2014年4月7日). “OpenSSL Security Advisory [07 Apr 2014]”. 2014年4月9日閲覧。
  18. ^ [1]
  19. ^ a b Codenomicon Ltd (2014年4月8日). “Heartbleed Bug”. 2014年4月8日閲覧。
  20. ^ Goodin, Dan (2014年4月8日). “Critical crypto bug in OpenSSL opens two-thirds of the Web to eavesdropping”. Ars Technica. 2014年4月8日閲覧。
  21. ^ Why Heartbleed is dangerous? Exploiting CVE-2014-0160”. IPSec.pl (2014年). 2014年4月8日閲覧。
  22. ^ Mutton, Paul (2014年4月8日). “Half a million widely trusted websites vulnerable to Heartbleed bug”. Netcraft Ltd.. 2014年4月8日閲覧。
  23. ^ CCS Injection Vulnerability”. lepidum.co.jp (2014年6月6日). 2014年6月6日閲覧。
  24. ^ CCS Injection脆弱性(CVE-2014-0224)発見の経緯についての紹介 - CCS Injection
  25. ^ https://drownattack.com/drown-attack-paper.pdf DROWN: Breaking TLS using SSLv2
  26. ^ http://japan.cnet.com/news/service/35078777/ HTTPSサイトの3割に影響する「DROWN」脆弱性見つかる--OpenSSLはパッチ公開
  27. ^ http://jvn.jp/vu/JVNVU90617353/ JVNVU#90617353 SSLv2 の暗号通信を解読可能な脆弱性 (DROWN 攻撃)
  28. ^ https://www.openssl.org/news/vulnerabilities.html#2016-0800 CVE-2016-0800 (OpenSSL advisory) [High severity] 1st March 2016
  29. ^ http://tools.ietf.org/html/rfc6176
  30. ^ OpenBSD has started a massive strip-down and cleanup of OpenSSL”. OpenBSD journal (2014年4月15日). 2014年6月22日閲覧。
  31. ^ OpenBSD forks, prunes, fixes OpenSSL”. ZDNet (2014年4月21日). 2014年6月22日閲覧。
  32. ^ Index of /pub/OpenBSD/LibreSSL” (2014年7月11日). 2014年7月11日閲覧。
  33. ^ Beck, Bob (2014年7月11日). “First release of LibreSSL portable is available”. Marc.info. 2014年7月11日閲覧。
  34. ^ Google unveils independent “fork” of OpenSSL called “BoringSSL””. Ars Technica (2014年6月21日). 2014年6月21日閲覧。
  35. ^ BoringSSL”. Adam Langley's Weblog (2014年6月20日). 2015年9月22日閲覧。

関連項目[編集]

外部リンク[編集]