最近「Heartbleed問題」やOpenSSLといった言葉を耳にします。具体的にはどのような問題が発生するのでしょうか? また対策は?
A
インターネットでの暗号化通信に使われるソフトウェアが「OpenSSL」。「Heartbleed」とは、「OpenSSL」に見つかった脆弱性です。つまり、暗号化しても情報が漏えいする可能性が指摘されたのです。
インターネットで情報を安全にやりとりする場合には暗号化通信が使われます。今回、問題となった「OpenSSL」は暗号化通信に用いるライブラリ(ソフトウェア)です。オープンソースとして提供されており、ほぼすべてのUnix系OSで動作し広く利用されています。
OpenSSLは、暗号化技術であるSSL/TSLプロトコルによって、通信経路で傍受されても、内容が漏洩したり、改ざんされたりするのを防いでいます。例えば、Webブラウザでの通信で使われる「HTTPS」通信もOpenSSLで動作する暗号化通信技術で、これによってオンラインバンキングや通販の決済などを安全に利用できるのです。
2年間見つからなかった「Heartbeat」の脆弱性
しかし、2014年4月、OpenSSLへの「heartbeat拡張機能」の実装に大きな問題が公表されました。「heartbeat拡張機能」とは、サーバーとクライアントの接続状態を維持するために用意された機能ですが、ここに深刻な脆弱性「CVE-2014-0160」が見つかったのです。
これが「Heartbleed」問題と呼ばれているものです。外部からの要求に対して必要以上にデータを送信してしまい、メモリ上にあるデータが漏洩してしまう問題で、あたかも「心臓の鼓動=heartbeat拡張機能」によって「血液が漏れ出る様子」に重ね合わせて「Heartbleed」と表現されたのです。
それでは、どれくらいの量のデータが出血(漏洩)してしまうのでしょうか。Heartbleedの脆弱性を突いて1度の要求で取得できるデータは64kB程度なのですが、大量の要求を繰り返すことで、サーバーの秘密鍵をはじめ、秘匿性の高い情報(クレジットカード番号やユーザーID/パスワード)を盗み出される可能性があり、実際に一部でそういった被害も確認されています。
しかも、OpenSSLは以前から重要な場面で広く使われていたこともあり、深刻な脆弱性はないと一般的に考えられていました。ところが、2年間にもわたって脆弱性が存在したままの状態で使い続けられていたことも問題となったのです。過去に成功した攻撃があったかどうかは、ログからは判断できないため、脆弱性が見つかった場合は、証明書の再発行やパスワードの変更など、影響が及ぶ範囲が広がる恐れがあることから大きな騒ぎに発展したのです。
アップデートで修正可能だが、証明書の再発行などが必要な場合も
企業側の抜本的な対策はOpenSSLをバージョンアップすること。影響を受けるのは、OpenSSL 1.0.1から1.0.1fとOpenSSL 1.0.2-betaから1.0.2-beta1を使用している場合です。対策の施された「OpenSSL 1.0.1g」にアップデートを行うことでHeartbleed問題を解決できます。
システム検証の関係ですぐにOpenSSLのバージョンアップができない場合はOpenSSLの「-DOPENSSL_NO_HEARTBEATS」オプションを有効にして OpenSSL を再コンパイルし、Hartbeat機能を無効にする方法もあります。
脆弱性があるOpenSSLを利用していた場合は、念のため、サーバー証明書を再発行して古い証明書を失効させるようにしましょう。パスワードが漏洩した可能性に配慮し、ユーザーにアナウンスを行った上で、パスワードの変更を求めるなど、必要に応じて対策を取る必要があります。また利用しているサービスやアプライアンス製品などが、脆弱性を含むOpenSSLを利用していた場合は、提供者の指示に従い、対応を行ってください。