Heartbleed検知スクリプトのバグについて

Heartbleed

以下の記事を読みました。
Bugs in Heartbleed detection scripts.

ちょうど昨日、Heartbleedの検知スクリプトをいくつか読んでブログまで書いたので非常に興味深い内容でした。

この記事の内容を簡単に箇条書きします。

  • Nessus、Metasploit、NmapなどいろいろなところからHeartbleedを検知する手段(スクリプト)がリリースされているが、そのほとんどにバグがある。
  • 実際は脆弱性がある(脆弱性が存在する可能性がある)のに、ないと判定してしまう。
  • 実際にいろいろなスクリプトを使って検証していた時に、スクリプトによって判定結果が違うことに気付いた。そこでスクリプトの処理を見たところバグを見つけた。
  • Jared Staffordさんが書いたPoCには、“quick and dirty demonstration” と書いてある。
  • このPoCが他の検知スクリプトに流用されていった。
  • バグ1:TLS Version Support
    • 検知スクリプトでは TLSv1.1が指定されているが、これ以外(TLSv1.0やTLSv1.2)しかサポートしていないサーバだと、このHeartbeatリクエストを捨ててしまう。
    • リクエストが捨てられてしまった場合、検知スクリプトでは脆弱性なしと判定している。
  • バグ2:TLS Cipher Suite Support
    • 現在318種類のCipher suite がIANAに登録されている。
    • 多くの検知スクリプトでは51種類しか使用していなかった。
    • この51種類以外しかサポートしていないサーバは、このリクエストを捨ててしまう。
    • リクエストが捨てられてしまった場合、検知スクリプトでは脆弱性なしと判定している。
    • クライアントが実際にその318種類に対応している必要はない。脆弱性を引き起こすのは、暗号化が起きる前なので。
  • バグ3:Payload Detection
    • レスポンスを受け取るまでに5秒以上かかると、脆弱性なしと判定している。
  • PoCは脆弱性をデモするには素晴らしいものだが、実際のシステムに脆弱性があるかどうかを確かめるために使用すべきではない。
  • 修正スクリプトはこちら(Hut3 Cardiac Arrest (compatible with Python 2.7))。

SSLに詳しい人がこのスクリプトを見れば、最初の2つのバグはすぐに気付きそうなものですが、意外と気付かれないんですね。それから この記事の最後にも書かれていますが、実際のシステムを検証する時に使用するプログラムは内容に問題がないか入念にチェックしないといけないことを強く感じました。

[最終更新日: 2014年4月16日]

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*