TakayukiKoyama Geek Blog

Create, Entertain, Experience

OpenSSLの欠陥について調べてみた

昨日のWBSでもやってましたが、OpenSSLを使ったシステムでも被害が出ているらしい。

暗号化ソフトに重大な欠陥:ワールドビジネスサテライト:テレビ東京

OpenSSL:三菱UFJニコス、タイムラグを狙われる - 毎日新聞

そもそもSSLとは

 SSLは、ユーザPC(クライアント)と企業サーバ(サーバ)間などのインターネット上の通信で他人には知られると困るIDやパスワードなどを暗号化する技術。SSLを利用することでインターネット上のデータを盗み取っても、盗んだ人には理解できない文字の羅列になっているから安心、だから使いましょうということで広く使われている。

参考サイト

SSL のまとめ - SSLサーバ証明書 | シマンテック

で、OpenSSLとは

 SSLで暗号化通信をするためには、データを送る側でデータを暗号化して、受け取る側で復号化する必要がある(いわゆるプロトコル)。その機能を実装したオープンソースがOpenSSLで、無償で利用することができるため広く使われている。

OpenSSL: The Open Source toolkit for SSL/TLS

OpenSSL - Wikipedia

何が問題なのか

 今月、「Heartbleed(ハートブリード)」というOpenSSLのバグ(脆弱性)が発表された。

その原因は「Heart bleed(心臓からの出血)」と呼ばれる暗号化ソフト「OpenSSL」の欠陥です。世界中でこの欠陥による被害が出るなど、影響が拡大しています。 WBSより引用

 WBSの説明はちょっと分かりにくかったが、通常クライアントとサーバはハートビート(≠ハートブリード)という生存確認(通信できることを確認)のやりとりをするが、その真似をして悪意あるPCが通信をするとサーバのメモリ上にあるデータを送り返してしまい、IDやパスワードを見ることができるらしい。

 これだけの説明だと、本当にそんな脆弱性があるのかと疑問が湧いたのでWikipediaを確認した。

このバグは生存確認信号の発信毎にアプリケーションメモリーを64キロバイトずつ露出することが出来た[14]。このバグは不適切なハートビート要求をサーバーに送信し、サーバーが返信する際に実行される。サーバーは通常は受け取った情報と同じ大きさのデータのバッファー(塊)を返信するが、バグにより境界検査が欠けていたので、バグがあるバージョンのOpenSSLはハートビート要求の大きさの妥当性を確認しない。その結果、攻撃者はサーバーのメモリを好きな大きさで見ることが出来る[15]。 ハートブリード - Wikipediaより引用

 だそうだ。いまいちピンと来ないが、OpenSSLのプログラムにバグがあって、ハートビートの要求を送信するとサーバからは同じサイズのデータを送り返すが、ハートビートで送られてきたデータをサーバが検査できていないために、ハートビートのデータを大きくすれば同じ大きさのデータを抜きだすことができるということだろうか。

 で、サーバ側としてはメモリにあるデータを外に出すことは想定してないので、復号済みの生データ(IDやパスワード)が置かれているため、抜き出したIDやパスワードはそのまま使えてしまうということなのだろう。

 このハートブリードから考えられる大きな問題はユーザ側がパスワードを変更するだけでは解決しないことだろう。サーバ側がOpenSSLのアップデートをしなければ、また情報が抜き取られてしまうのだから。

サーバ側(お店側)は具体的にどう対処すればいいのか?

 WBSの番組に登場した専門家は適切にアップデートしなさいと言っているが、どうアップデートしたらいいのかを分かりやすく説明しているサイトなりを紹介すべきではないだろうか。ということで対応策が書かれたサイトを紹介する。

 対応方法は2択

脆弱性の対策済みバージョンのOpenSSLに更新する(1.0.1g以降に更新)

・ハートビートを使用しない(-DOPENSSL_NO_HEARTBEATS オプションで再コンパイル

参考サイト

[ESET] OpenSSLの脆弱性(Heartbleed:ハートブリード)に関する注意喚起 | ウイルス・セキュリティニュース | キヤノンITソリューションズ

開発者向けサイト

opensslのバージョン確認とアップデート(Heartbleed対応) - Qiita

OpenSSLの脆弱性(Heartbleed Bug)対応をしてみた | 本日も乙

 なにはともあれ、サーバにアクセスして、OpenSSLのバージョンを確認するコマンドを叩きましょう。

$ openssl version

 この結果が1.0.1~1.0.1f,1.0.2-beta~1.0.2-beta1になっていたら対策が必要。

 『DOPENSSL_NO_HEARTBEATS オプションで再コンパイル』の具体的な手順を書いたサイトがなかった。[make install]のオプションに付けるのか、[./configure]のオプションにつけるのか、OpenSSLの本買わないと分からない。まあ、更新してしまえば良い話なんだろうけど...

ユーザがサイトの安全性を確認したいとき

 サーバ管理者ではなく、ユーザとしてWEBサービスを利用したいときにサーバがハートブリードではないか確認したいときは下記のサイトにURLを入れると確認することができるので、サービスの利用に不安なときは使ってみるといいかもしれない。

Test your server for Heartbleed (CVE-2014-0160)

ユーザ側としてアカウントをどう管理するか

については、WBSの最後にコツが紹介されているので、そちらを見てもらうということで。

「パスワード設定のコツ」 ワールドビジネスサテライト:テレビ東京ビジネスオンデマンド

まあでも、そのコツも解読プログラムに組み込まれたら、解けちゃうような気はするけど。

広告を非表示にする