heartbleed_0

写真拡大

OpenSSLのバグによってパスワードや暗号鍵などが大量に流出している可能性がある。自分自身と自分のサイトを保護する方法を紹介する

「Heartbleed」はウェブ・コミュニケーションを安全にするOpenSSLと呼ばれる暗号化ソフトの中に長く発見されずに潜んでいたバグだ。その発見が遅れたため、ウェブの2/3に及ぶトラフィックが過去2年間に渡って盗聴や攻撃の危険にさらされていたことになる。Heartbleedは一般的なウェブ・ユーザーにとってなじみのある脆弱性でない。そのため、それがなぜそれほど重大なのか、またデータを安全にしておくためには何ができるかについて、ここでなるべく分かりやすく紹介したい。

Heartbleedとは

簡単にいうと、ブラウザとウェブサイト間の暗号化通信に関する脆弱性だ。攻撃者は理論的にはこのバグを悪用することで、銀行やEコマース・サイトなどの安全な通信が必要なサイト上で使用されるセキュアな接続を解読し、パスワードなどの重要な情報を盗み取ることができる。

もう少し技術的な説明をするとHeartbleedは、SSLとして知られているウェブ・コミュニケーションを安全にするための基礎的な暗号のプロトコルの、OpenSSLインプリメンテーションにおける欠陥だ。

SSLとは何か

SSL(Secure Socket Layer)とは、通常のhttp通信に「s」を追加する暗号化プロトコルだ(ちなみに暗号通信を利用するセキュアなウェブサイトにアクセスするとアドレスの前にhttpsが表示される)。SSLは、ユーザーがネット・バンキングやショッピング、Gmailなどでのメールの閲覧、その他の安全な通信が必要なサイトに接続している際に他者がその通信内容を盗み取ることを防いでくれる。

OpenSSLとは?

OpenSSLは、SSLとその後継プロトコル、TLS(Transport Security Layer)のオープンソース・インプリメンテーションだ。Apacheとnginxのウェブサーバーのデフォルトの暗号化ライブラリーであり、2つを合わせると4月時点で現在アクティブなウェブサイトの2/3以上に使われているとNetcraftのデータは示している(参考:Ars Technica)。つまりOpenSSLはインターネットの広大な範囲に渡って、安全性の必要なウェブ・コミュニケーションを保護するために利用されているのだ。

Heartbleedに戻ろう。それは正確にはどういった仕組みなのだろうか

正式には「CVE-2014-0160」として知られているHeartbleedは、OpenSSLの中で最近発見されたバグだ。本来外部の侵入から守られているはずのセキュアな情報を、攻撃によってウェブサーバーから読み取ることを可能にしてしまう。このバグは、セキュリティ・プロトコルの再ネゴシエーション(renegotiation)なしで繰り返し安全な通信チャンネルを開いておくことを可能にする、「heartbeat」という名で知られるOpenSSLエクステンションに影響する。

実際にこのバグは、悪意あるユーザーからの、ウェブサーバー上のメモリ・データへのデータ要求を許可してしまう。このデータには、そのサイトのSSL暗号鍵やユーザー・パスワード、その他の機密情報が含まれているかもしれない。Codenomiconの研究者たちはHeartbleedというウェブサイトを立ち上げてこのバグに関する情報を共有している(このバグを発見したのもこのCodenomiconとグーグルのエンジニアだ)。

Heartbleedバグを悪用すれば、インターネット上の誰もが、脆弱性のあるバージョンのOpenSSLソフトウェアを搭載するサーバーのメモリーを読み取れてしまいます。これによって、サービスプロバイダーが特定され、トラフィックを暗号化するために使われるキーが危険にさらされ、実際のコンテンツを含むユーザ名やパスワードなども盗まれる可能性があります。結果的に攻撃者にサーバーとのやり取りを盗聴されたり、サービスとユーザからデータを直接盗まれたり、ユーザやサービスになり済ますこともできてしまうのです。

なぜHeartbleedは特に危険なのか?

いくつかの理由がある。まず最も明白なのは、ウェブサーバーが脆弱性の結果機密データをリークしてしまう可能性があることだ。Heartbleedバグを悪用すればサーバーのアクティブメモリー(これは64KB単位になる)を読み取ることができてしまう。その時にサーバーが行っている処理によっては、そのメモリはユーザー名やパスワード、あるいはクレジットカード番号を含んでいるかもしれないのだ。

さらにHeartbleedは攻撃者にサーバーの秘密鍵を与えてしまう。この秘密鍵は本来そのオーナーだけが機密情報にアクセスできることを保証するものだ。この鍵が悪用されればサーバーのオーナーになりすまし、暗号化された通信も解読することができてしまう。

その上Heartbleedサイトによれば、このバグが悪用されてもそれに気付くことが非常に難しいようだ。つまり被害にあってもその事実に気付かない可能性がある。

最後に、このHeartbleedバグはおよそ2年間も放置されていた。かなりの期間、悪用される危険性にさらされていたといえる。万一悪用した者がいたとすると、彼らは長期間にわたりサーバーの暗号化されたトラフィックを記録することもできたはずだ。彼らが暗号鍵も手に入れていれば、過去の情報を好き放題に解読することができてしまう。

Gmailのようにperfect forward secrecyを使っているサイトは、「過去を遡る暗号解読(retrospective decryption)」から守られているようだ。ただ、このperfect forward secrecyはウェブであまり広く使われていない。

自分のサイトがHeartbleedによる被害にあったかどうか分かるだろうか?

残念ながら分からない。しかし自身のサイトにこの脆弱性があるかどうかはテスト可能だ。

自分のサイトを保護するために何を行えばいいのか?

自分のサイトにこの脆弱性があることが確認できれば、OpenSSLはOpenSSLversion 1.0.1gにアップグレードすることを推奨している。このバージョンではHeartbleedバグはパッチによって修正されている。何らかの理由でアップグレードすることができなければ、応急処置としてOpen SSL heartbeat supportを無効にすればとりあえず大丈夫だ。

だが仮にバグをパッチできたとしても、過去に被害にあったかどうかまでは分からない。

インターネット・ユーザとして自分を守るためにできることは?

これをきっかけに自分のパスワードをすべて一新することをまずおすすめしたい。自分には影響がないと思っていても、自分がよく使うサイト(例えばYahooなど)が被害にあった可能性は十分にあり得る。セキュリティー企業Fox-ITのロナルド・プリンズは、Heartbleedを利用してYahooからユーザ名やパスワードを読み取ることができたとツイートし、自身のブログでそれを詳細に裏付けている。その後Yahooはサーバーをパッチしており、現時点ではYahoo.comはHeartbleedから守られている。

Heartbleedが悪用された形跡はあるのか?

それが分からないのだ。セキュリティーの専門家達によれば、このバグが悪用された際にもサーバーのログには何も変わった記録が残されないという。したがって、悪用されてどこかが攻撃されたとしても、我々には分からない。

ロゴ画像提供:Codenomicon

Lauren Orsini
[原文]