OpenSSL の脆弱性 (Heartbleed Bug) に関する Q&A

OpenSSL に脆弱性が見つかった件で、この脆弱性に関する詳細を解説するサイトが公開されていますが、Q&A の中から特に重要そうな部分だけ簡単に抜粋して翻訳してみました。

OpenSSL - Heartbleed BugOpenSSL に脆弱性が見つかった件で、この脆弱性に関する詳細を解説するサイト (heartbleed.com) をセキュリティ企業の Codenomicon 社が公開しています。

そこで、同サイトに掲載された Q&A の中から特に重要そうな部分を簡単に抜粋して翻訳してみました。あと、文末で OpenSSL のバージョン確認とアップデート方法についても簡単に解説しています。

今回の脆弱性に関して詳しくは下記の記事などをあわせてご覧ください。(2014年 4月 15日 リンクを2件追加しました)

Heartbleed Bug

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 社 (の中の人) です。

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.

これは SSL/TLS プロトコル仕様自体の欠陥なの? いいえ、これはあくまで 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 が影響を受けるの?
  • OpenSSL 1.0.1 ~ 1.0.1f には脆弱性があります。
  • OpenSSL 1.0.1g で問題は修正されました。
  • OpenSSL 1.0.0 にはこの脆弱性は影響しません。
  • OpenSSL 0.9.8 にはこの脆弱性は影響しません。
この脆弱性は 2011年 12月から存在し、2012年 3月 14日に OpenSSL 1.0.1 がリリースされて以来、初めて発見、公表されました。2014年 4月 7日にリリースされたOpenSSL 1.0.1g でこの脆弱性は修正されています。

補足
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

関連エントリー

記事をここまで御覧頂きありがとうございます。
この記事が気に入ったらサポートしてみませんか?