ECサイトなどをはじめ広く利用されているオープンソースの暗号通信ソフト「OpenSSL」に2012年から存在していた重大な脆弱性が2014年4月7日に見つかり騒ぎになっている(関連記事)。SSL通信実現のためによく使われるOpenSSLで暗号化処理をしているサイトが、約2年間危険な状態におかれていたからだ。

OpenSSLの脆弱性とは何か

 今回見つかった脆弱性は、通信相手が存在しているかを確認する機能(HeartBeat:心臓鼓動=生存確認)で見つかった。暗号化したデータを相手に送受信するメインの機能ではないため、やり取りしているデータが第三者に直接閲覧されるわけではない。この欠陥は、HeratBeatという機能での脆弱性のため、恐らくはしゃれの意味を込めて「Heartbleed:心臓出血」と呼ばれる。

 生存確認では、相手が送りつけてきたデータをそのまま返送する取り決めになっている。そのときに送ったデータの長さを詐称することで、実際に送ったデータの長さ以上のデータを返送させることができた。そのため、メモリー上にある、攻撃者側が送ったデータが格納されている領域以外のデータまでも攻撃者に渡してしまう。その結果、例えば他の人とのやり取りデータや暗号化に使用する秘密鍵などを取得されてしまうのだ(図1)。

図1●OpenSSLの「Heartbleed」による脆弱性をついた情報不正取得の原理

 例えると、窓口に書類を提出して判子を押して戻してくれるという手続きの際に、書類の裏に両面テープを貼っておくことで、作業机に置いてある別の書類までがくっついて戻ってくることを狙うイメージだ。(ただし、この攻撃の場合、入手できるのは実物ではなくデータのコピーだが)多くの人は「なんだそれ!」と思うほどレベルの低い欠陥である。誰かがバックドアとして使うためにわざと脆弱性を仕込んだのではないかという噂もあるくらいだ。