OpenSSL に脆弱性が見つかった件で、この脆弱性に関する詳細を解説するサイト (heartbleed.com) をセキュリティ企業の Codenomicon 社が公開しています。
そこで、同サイトに掲載された Q&A の中から特に重要そうな部分を簡単に抜粋して翻訳してみました。あと、文末で OpenSSL のバージョン確認とアップデート方法についても簡単に解説しています。
今回の脆弱性に関して詳しくは下記の記事などをあわせてご覧ください。(2014年 4月 15日 リンクを2件追加しました)
- JVNVU#94401838 : OpenSSL の heartbeat 拡張に情報漏えいの脆弱性
- OpenSSLの重大バグが発覚。インターネットの大部分に影響の可能性 : TechCrunch Japan
- OpenSSLに脆弱性、クライアントやサーバにメモリ露呈の恐れ : ITmedia エンタープライズ
- 巷を賑わすHeartbleedの脆弱性とは?! : Mobage Developers Blog
- 重大バグ「ハートブリード」、シスコとジュニパーの機器にも : WSJ.com
Why it is called the Heartbleed Bug?
Bug is in the OpenSSL's implementation of the TLS/DTLS (transport layer security protocols) heartbeat extension (RFC6520). When it is exploited it leads to the leak of memory contents from the server to the client and from the client to the server.
なんで、「Heartbleed Bug」 って呼ばれてるの?
TLS / DTLS(トランスポート・レイヤー・セキュリティー) の heartbeat 拡張 (RFC6520) に見つかった不具合だからですよ。悪用されるとメモリー上のデータが漏洩する可能性があります。
補足
「Heartbeat」 → 「心臓の鼓動」 / それにバグがあって情報が漏洩するから 「Heartbleed」 → 「心臓からの出血」 って感じ。命名したのは heartbleed.com を立ち上げた Codenomicon 社 (の中の人) です。
これは SSL/TLS プロトコル仕様自体の欠陥なの? いいえ、これはあくまで OpenSSL ライブラリの実装ミスです。Is this a design flaw in SSL/TLS protocol specification?
No. This is implementation problem, i.e. programming mistake in popular OpenSSL library that provides cryptographic services such as SSL/TLS to the applications and services.
どのバージョンの OpenSSL が影響を受けるの?What versions of the OpenSSL are affected?
Status of different versions:
- OpenSSL 1.0.1 through 1.0.1f (inclusive) are vulnerable
- OpenSSL 1.0.1g is NOT vulnerable
- OpenSSL 1.0.0 branch is NOT vulnerable
- OpenSSL 0.9.8 branch is NOT vulnerable
Bug was introduced to OpenSSL in December 2011 and has been out in the wild since OpenSSL release 1.0.1 on 14th of March 2012. OpenSSL 1.0.1g released on 7th of April 2014 fixes the bug.
- OpenSSL 1.0.1 ~ 1.0.1f には脆弱性があります。
- OpenSSL 1.0.1g で問題は修正されました。
- OpenSSL 1.0.0 にはこの脆弱性は影響しません。
- OpenSSL 0.9.8 にはこの脆弱性は影響しません。
補足
OpenSSL 1.0.2-beta1 も脆弱性の対象。beta2 で修正されるとのこと。
How can OpenSSL be fixed?
Even though the actual code fix may appear trivial, OpenSSL team is the expert in fixing it properly so latest fixed version 1.0.1g or newer should be used. If this is not possible software developers can recompile OpenSSL with the handshake removed from the code by compile time option -DOPENSSL_NO_HEARTBEATS.
どうすれば脆弱性を修正できますか?
OpenSSL 1.0.1g を使ってください。もしそれができない場合は、-DOPENSSLNOHEARTBEATS
オプションを付けて再コンパイルすることもできます。
Can I detect if someone has exploited this against me?
Exploitation of this bug leaves no traces of anything abnormal happening to the logs.
この脆弱性を悪用されたか調べることはできるの?
無理です。この脆弱性を悪用された場合でもサーバにはログが残りません。
OpenSSL のバージョン確認とアップデート方法
最後に参考までに OpenSSL のバージョン確認とアップデート方法を簡単に解説。CentOS 6 の場合の例です。
まずは下記のようにして OpenSSL のバージョンを確認できますので、稼働中の OpenSSL が脆弱性の対象バージョンかを確認しましょう。
# openssl version
例えば下記のように表示されたら、脆弱性のあるバージョンなので、アップデートしましょう。OpenSSL 1.0.1 ~ 1.0.1f には脆弱性があります。
# openssl version OpenSSL 1.0.1e 11 Feb 2013
リポジトリに落ちてきていれば、
# yum update openssl
で最新バージョンへアップデートされるはず。ダメな場合はソースからインストールしましょう。下記からお目当てのバージョンのファイルを探します。
あとはファイルを落としてきて、インストールします。
# cd /usr/local/src # wget http://www.openssl.org/source/openssl-1.0.1g.tar.gz # tar zxvf openssl-1.0.1g.tar.gz # cd openssl-1.0.1g # ./config # make # make install
上記の場合、オプション指定をしていないので、/usr/local/ssl/ にインストールされます。インストールするディレクトリを指定したい場合は下記のようにします。
(省略) # ./config --prefix=/usr/local/openssl # make # make install
あとは下記のように今回インストールした新しいバージョンにシンボリック・リンクを張ります。念のため旧バージョンのファイルは名前を変えてバックアップしておきます。
# cd /usr/bin/ # cp /usr/bin/openssl /usr/bin/openssl.old # rm -f /usr/bin/openssl # ln -s /usr/local/ssl/bin/openssl
バージョンチェックして下記のようになれば完了と。
# openssl version OpenSSL 1.0.1g 7 Apr 2014