
OpenSSL CVE-2014-0160 脆弱性の有無をサーバーでテストするための、Ruby で書かれたシンプルなツールです。
このツールを使用して引き起こされる可能性のある損害について、私は一切の責任を負いません。このツールは、特定の脆弱性を確認し、高トラフィック下での潜在的なユーザー関連データ漏洩を測定するために、プライベートサーバーをチェックする目的で作成されました。内部セキュリティ監査用のツールとして公開されています。
必要なもの:
これらの前提条件をインストールするには、まずお使いのプラットフォーム用の Ruby をダウンロードしてインストールしてください。次に、コマンド gem install bundler で Bundler をインストールし、プロジェクトのルートディレクトリで bundle install を実行してプロジェクトの依存関係を取得してください。
コマンドラインの概要は ruby src/run.rb <ホスト> [<ポート>] です。
サーバーが脆弱でない場合、出力は次のようになります:
Host server:443 seems safe
対照的に、脆弱な場合の出力は、メモリから取得された約 64 KiB のデータを16進ダンプとして表示し、機密情報の漏洩が発生したかどうかを確認できるようにします。
Host server:443 is vulnerable! Heartbeat response payload : 00000000 d4 03 03 53 4a 84 a9 00 01 02 03 04 05 06 07 08 |...SJ...........| 00000010 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 |................| 00000020 19 1a 1b 00 01 a6 00 00 00 01 00 02 00 03 00 04 |................| 00000030 00 05 00 06 00 07 00 08 00 09 00 0a 00 0b 00 0c |................| 00000040 00 0d 00 0e 00 0f 00 10 00 11 00 12 00 13 00 14 |................| 00000050 00 15 00 16 00 17 00 18 00 19 00 1a 00 1b 00 1c |................| 00000060 00 1d 00 1e 00 1f 00 20 00 21 00 22 00 23 00 24 |....... .!.".#.$| 00000070 00 25 00 26 00 27 00 28 00 29 00 2a 00 2b 00 2c |.%.&.'.(.).*.+.,| 00000080 00 2d 00 2e 00 2f 00 30 00 31 00 32 00 33 00 34 |.-.../.0.1.2.3.4| ....
RFC 6520 および 6066 によると、Heartbeat メッセージの最大サイズは、Maximum Fragment Length 拡張の使用有無に応じて、、
、
、
または
バイトのいずれかでなければなりません。
RFC 6520 より引用:
HeartbeatMessage の全長は、2^14 または RFC 6066 で定義されているようにネゴシエートされた max_fragment_length を超えてはなりません (MUST NOT)。
RFC 6066 より引用:
この拡張の "extension_data" フィールドには以下のものを含めるものとします (SHALL):
enum{ 2^9(1), 2^10(2), 2^11(3), 2^12(4), (255) } MaxFragmentLength;
その値は、望ましい最大フラグメント長です。このフィールドに許可される値は、2^9、2^10、2^11、2^12 です。
つまり、盗まれたデータの最大チャンクサイズは約 16 KiB になるはずです。しかし、OpenSSL はこの制約を守らず、Heartbeat メッセージのペイロード長フィールドの最大値、すなわち 65535 (0xFFFF) を使用することを許可しています。