さまざまなメディアで既報の通り 、オープンソースのSSL/TLS実装ライブラリ「OpenSSL」に重大な脆弱性が発見されました。これはSSL/TLSの暗号化によって保護されている情報が、特殊な環境下でなくても盗まれてしまう可能性がある脆弱性です。
この脆弱性は、本ライブラリのTLS 1.2に追加された拡張機能「Heartbeat」と呼ばれる「SSLの死活を監視する機能」の不備に起因することから、そしてもしかするとその重大さからか「Heartbleed(心臓出血)」と呼ばれるようになりました。
今回は、このHeartbleed脆弱性に関する問題をいったん整理してみようと思います。この脆弱性については、発見者であるフィンランドのセキュリティ企業、Codenomiconが公開しているウェブページ(英文)もありますので、ご興味ある方はこちらもご参照ください。
何が起きたのか
この脆弱性は、インターネット上で標準的に利用される暗号通信プロトコルである「SSL/TLS」を実装した、非常に多くのウェブサイトで利用されているオープンソースの暗号ソフトウェアライブラリのOpenSSLに存在した脆弱性です。
このOpenSSLが実際に著名サイトを含めどれだけ広範囲なウェブサイトで使用されていたか、そして本脆弱性を突いた攻撃で実際にどういう被害が出たか、などといった報道もあれこれとされていますので、すでに色々とご覧になった方も多いと思います。
なお、標準でこのOpenSSLを利用するウェブサーバは、Apacheとnginx(エンジンエックス)です。OpenSSLを利用しない一部のウェブサーバ(IBMやMicrosoft、Oracle)もあるにはありますが、どちらも非常に人気の高いソフトウェアで、この2つを6割以上のウェブサイトが使用していると言われています。
ウェブサーバ、ウェブサーバ用OS以外にも、メールサーバであったり、ロードバランサのようにSSL証明書の秘密鍵をメモリ内に保持するシステムであったり、果ては家庭用ルータやモデムといった機器であったりと、OpenSSLを利用している装置は他にも多々あります。こうした諸々についても、本脆弱性の影響を受ける可能性はゼロではありません。
また身近なところでAndroidでも、4.1.1を含む4.1.X系や4.2.2の一部が影響を受ける可能性があるという話もあります。4.1.2以降ではHeartbeat機能は無効化されているはずなのですが、この話が事実なら、一部そうではない実装の端末が存在するという事かと思われます。
先にも述べましたが、この脆弱性は拡張機能である「Heartbeat」機能の処理における不備が原因で、プログラム上のミスによる欠陥ではないかと考えられています。そしてこの機能は、2012年3月14日にリリースされたバージョン1.0.1から、2014年4月7日にリリースされた本脆弱性対策済みの1.0.1gより以前のバージョンである1.0.1fまで、そしてベータ版である1.0.2beta~1.0.2beta1に搭載されています。
困ったことにこれらのバージョンでは、SSLで通信しているシステムのメモリ内にある、クリアされずメモリ上に残っていた情報を最大64Kバイトの単位で何度でもくり返し取得可能なのです。