Malwarebytesは8月30日(米国時間)、「Everything you need to know about the Heartbleed vulnerability - Malwarebytes Labs|Malwarebytes Labs」において、2014年にOpenSSLに発見された脆弱性「Heartbleed」について、その仕組みや影響を説明するとともに、依然としてHeartbleedが残ったままのシステムが存在していることなどを指摘した。

Heartbleedは発見当初、多くの関係者に強い衝撃を与えた。OpenSSLは安全な通信を実現するための基盤技術として広く使われていたにもかかわらず、実装上の問題で情報漏洩が可能な状態にあったからだ。Heartbleedが発覚してから、OpenSSLの実装を調査する取り組みが進められ、好ましくない実装になっている部分が多いという指摘も出るようになった。

Heartbleedが実際にどのような脆弱性だったのかを解説するドキュメントは多く公開されているが、Malwarebytesが今回公開した記事はその辺りがわかりやすくまとまっている。特に、次の図はHeartbleedがどのような問題であるかが端的に示されている。故意に長いデータを返すように要求することで、本来必要なデータ以外のデータも取得できてしまっていることが示されている。

  • Heartbleedセキュリティ脆弱性の概要 - 資料: Malwarebytes提供

    脆弱性「Heartbleed」の概要 - 資料: Malwarebytes

MalwarebytesはHeartbleedを表現するため、次のソースコードサンプルも掲載している。C言語が使う場合、こちらのほうが端的でわかりやすいかもしれない。

memcpy(bp, pl, payload);

payloadのチェックが適切に行われていなかったために、範囲を超えたデータコピーが実施できていたことが示されている。Malwarebytesでは修正コードのサンプルとして次のようにpayloadのチェックするコードを掲載している。

if (1 + 2 + payload + 16 > s->s3->rrec.length) return 0; /* silently discard per RFC 6520 sec. 4 */

Heartbleedは範囲チェックを行っていないため、本来アクセスしてはいけないメモリ上のデータにアクセスできる実装になっていた点に問題がある。この問題はすぐに修正されたものの、長期にわたってこの問題を抱えたままのサーバが存在し続けることになるのではないかという懸念も指摘されていた。

Heartbleedの発見から5年が経過したことになるが、当初の予想通り、依然としてHeartbleedを抱えたままのサーバが使われ続けている。今後も脆弱な状態のサーバが残り続けることが予想される。

Heartbleedにまつわる事象はオープンソース・ソフトウェアの開発と持続可能性について多くの示唆に富んだものだった。重要なオープンソース・ソフトウェアの開発に適切な投資を行っていくことや健全で持続可能なエコシステムを構築することが、業界全体にとって重要であることを示されることになったインシデントだった。Malwarebytesの記事はこのインシデントがもたらしたこうした意識の変化などについても端的に説明している。