OpenSSLの”Heartbleed”バグ、Androidでは4.1.1のみ影響する可能性のエントリで簡単に紹介したところだけれど、もう少し踏み込んで、何が原因なのか・今どうなっているのか・何をすべきなのかをまとめてみました。
1.Heartbleedとは何か?
Heartbleedとは、OpenSSLの拡張機能である”Heartbeat”という機能の欠陥を突くものです。INTERNET Watchの説明を借りると、
Heartbeatは、実際の通信が発生していない間もTLSセッションの接続を維持するための拡張機能だ。という感じ。
Heartbeatの仕組みは、ブラウザーから送信されてきたペイロードサイズ64KBの“Heartbeat要求”をOpneSSLがメモリ上に書き込んだ後、それを格納したメモリ上の先頭位置から64KB分のデータを取り出して“Heartbeat応答”として返すというものだ。書き込むデータと取り出すデータのサイズは本来は同じサイズでなければならないわけだが、そのチェック機能がOpenSSLの特定のバージョンで抜けていた。
そのため、宣言されているペイロードサイズが64KBだが実際のペイロードサイズは例えば1KBのHeartbeat要求を送信すると、返ってくるHeartbeat応答は、実際のペイロードサイズ1KBに加えて、メモリ上でそれに隣接する場所に格納されていた他のデータも合わせた64KB分のデータになるのだという。「1KB持ち込んで64KB持ち帰ることが、この脆弱性を使うとできてしまう。この作業を繰り返すと、メモリ内の情報を不正に取得することができる状況が発生する」。
“Heartbleed”で秘密鍵を盗むのは難易度高、攻撃活動も現状では少数 -INTERNET Watch
文字で説明してもわかりにくいですよね。
出典:OpenSSLで露見した脆弱性、「心臓出血」の影響はどこまで及ぶ - ITpro
INTERNET Watchの説明文を読んだ後にこの図を見ればかなり理解が深まると思います。
図中の”65535文字”というのが”ペイロードサイズ64KB”のこと。
欠陥のあるOpenSSLを利用しているサイトが生存確認(Heartbeat要求)を受け取ると、受け取った要求のサイズを確認して同じサイズを返信(Hearbeat応答)しなければいけないのに、チェックをせずペイロードサイズ64KBをメモリから返信してしまうためにメモリの情報が漏れてしまうというのがHeartbleedです。
つまり、Heartbleedにより、OpenSSLを利用しているプログラムが使用しているメモリ領域の情報は全て奪われてしまうということになります。
2.どういう情報が漏洩した可能性があるのか?
Heartbleedによりメモリ領域の情報が漏洩するということは、メモリ領域に何が含まれていたのかを確認すればいいことになります。メモリ領域に存在する情報の例は以下の通りです。
- ユーザーがSSL通信で入力した各種情報
・住所
・氏名
・電話番号
・クレジットカード情報
・アカウント名
・パスワードなど - サイトの秘密鍵
ユーザーが入力し送信した情報が漏れてしまった可能性があります。
また、サイトの秘密鍵が漏洩してしまった可能性もあります。(INTERNET Watchの記事によれば、秘密鍵の搾取は簡単ではないが可能であることが証明されているとのこと)
サイトの秘密鍵が漏洩すると、SSL通信が解読されるほか、サイトになりすますことも可能になります。
3.どういう対策をとればいいのか?
まず、サイト運営者は、一刻も早くHeartbleedに対応した”1.0.1g”にアップデートする必要があります。そして、秘密鍵が漏れてしまった可能性を考慮し、現行証明書の失効・証明書の再発行の対応が必要でしょう。過去の通信を盗聴されないようにする対策も必要になるでしょう。
ユーザーは、サイト運営側が上記の対応をとったとアナウンスがあってから、アカウントが悪用されることが無いよう、アカウントのパスワードを変更する必要があります。(ただしフィッシングメールには十分注意しましょう)
また、クレジットカード情報を含む個人情報が漏洩した可能性がありますが、今すぐクレジットカードを失効する必要は無いと思います。毎月の請求をきちんと確認し、見に覚えが無い取引があった場合はクレジットカード会社に問い合わせればいいと思います。
Symantecによれば、
Alexa による上位 1,000 の Web サイトはすべて、この脆弱性に対応済みです。Alexa の上位 5,000 まで含めても、脆弱性を残している Web サイトは 24 件のみでした。Alexa の上位 50,000 の Web サイトすべてを対象にしても、Heartbleed に対して脆弱なのは 1.8% にすぎません。このデータを見たところ、一般的なユーザーが頻繁に利用する Web サイトは Heartbleed の影響を受けません。ということで、この世の終わりというほどではないと考えられます。
シマンテックの監視によると、脆弱な Web サイトに対するスキャンは広く行われていますが、そのスキャンのほとんどは研究者によるもののようです。Heartbleed 脆弱性に関して、攻撃者が実行している大量スキャンは比較的少数しか確認されていません。攻撃者は特定のサイトを標的にしている可能性もありますが、幸い人気のあるサイトは現時点で影響を受けていません。
サイト側は情報が漏洩したか確認する手段がないという点がネックですが…
4.その他
サーバー向けの情報が多数を占めますが、JPCERT/CCによれば、OpenSSL が組み込まれている製品やソフトウエアも本脆弱性の影響を受ける可能性がありますので、製品やソフトウエアの開発元の情報をご確認ください。とのこと。
これを受けて、Android 4.1.1に影響があるとエントリを書きましたが、キャリアやメーカーによりカスタムされた一部のAndroid 4.2.2にも影響があるとのことです。
some versions of Android 4.2.2 that have been customized by the carriers or hardware manufacturers have also been found to be susceptible.ということで、Androidユーザーの方は、信頼できるスキャンアプリを利用してOS自体に影響がないか、Heartbleedの影響を受けるアプリはないか確認することをおススメします。
Vicious Heartbleed bug bites millions of Android phones, other devices - Ars Technica
Bluebox Heartbleed Scanner - Google Play
<追記>
Heartbeatリクエストはサーバーから送信することも可能なので、悪質なSSLサーバーに接続すると端末内メモリの情報を盗まれる可能性があります。
<追記ここまで>
また、OpenVPNもOpenSSLを利用していますので、対策が必要になるでしょう。
- OpenSSLの脆弱性 – Heartbleed について - OpenVPN.JP
OpenSSLを利用しているものはないか、今一度再確認したいところです。