QA@IT

OpenSSL の OCSP リクエストに関わる脆弱性について

5905 PV

OpenSSL の OCSP リクエストに関わる脆弱性について教えて下さい。
  ご参考:サイバートラスト社様
   https://www.cybertrust.ne.jp/news/20160926-openssl-ocsp-request.html

上記の脆弱性について、各サーバに影響が無いか確認したいと考えています。
一先ず、サーバのopenssl versionを確認したところ”OpenSSL 1.0.1e-fips"でした。

ご参考サイトでは以下の記載がありました。
 ※1.0.1g 以前のバージョンは明示的に OCSP ステープリングを有効にしている場合を除き、本脆弱性の影響を受けません。
OCSP ステープリングが何なのか分からず、確認を行っているのですがお恥ずかしながら良く意味がわかりませんでした。
こちらはWikiや他サイトを見た限りですと、HTTP(Apache)を使用していなければ特に気にしなくても良いように見えるのですが、
認識としてはあっていますでしょうか?

回答

一先ず、サーバのopenssl versionを確認したところ”OpenSSL 1.0.1e-fips"でした。

話が違ってしまってすみませんが、OpenSSL 1.0.1eというバージョン番号を見るとどきっとします。
OpenSSL 1.0.1 から 1.0.1f にはより深刻なハートブリード脆弱性(CVE-2014-0160)があるので非常に危険ですね。ただおそらくバージョン番号が古いだけで、実際にはパッチが当たっている可能性もあるので、バージョン番号だけでは何ともいえないですが。ハートブリードの方は2年半も前の話でsaverさんはきっとすでに対応済みとは思いますが、念のため。

 ※1.0.1g 以前のバージョンは明示的に OCSP ステープリングを有効にしている場合を除き、本脆弱性の影響を受けません。
OCSP ステープリングが何なのか分からず、確認を行っているのですがお恥ずかしながら良く意味がわかりませんでした。

「OCSP ステープリング」(OCSP ホチキス止め?)では何のことか分かりにくいですが、実際にはTLS拡張機能のうちのCertificate Status Requestのことです。問題になっている脆弱性はこれを悪用するのでOCSP Status Request extension unbounded memory growth (CVE-2016-6304)とされています。

「OCSP ステープリング」の機能があればハンドシェイク中にクライアントからサーバーに証明書のステータスを返せと要求できます。これがない場合はクライアントは証明書のステータスを確認するために、別途CA(認証局)からCRL(証明書失効リスト)をダウンロードしておくか、CAにOCSPで個別の証明書のステータスを問い合わせる必要があります。ハンドシェイクはクライアントとサーバー間の通信ですが、クライアントとCA間の通信が別途必要になるということです。

クライアントはハンドシェイクの際に行う証明書の検証時に証明書のステータス(有効・無効)を確認する必要がありますが、それを知っているのはCAであり、有効期限切れ以外は、いつ失効するかわからないので、原理上はいちいち現時点のステータスをCAにきかないとならないわけです。ただ実際のPKIの仕組みではいちいちCAにきくという形ではなく、CA側から定期的にCRLを発行する形をとります。

OCSPはある証明書が失効している(CRLに載っている)かどうかをCAに問い合わせるためのもので、CRLが使えない人のために、CRLを補完する仕組みです。CRLを落としてきてローカルに持っている人やリモート参照可能な人はCRLを見ることになり、そうでない人はOCSPでCAにききにいくことになります。

「OCSP ステープリング」はOCSPでCAにききにいく部分をサーバーが代行してくれるっていう感じです。クライアントからサーバーにOCSP応答をリクエストすると、サーバーは自分がキャッシュしているOCSP応答を返します。これがあるとクライアントとCA間の通信は不要になるというわけです(ただ完全に不要になるわけではないでしょうけど)。

問題になっている脆弱性(CVE-2016-6304)はこの機能を悪用して、クライアントからサーバーに巨大なデータを含むリクエストを繰り返し送りつけると、サーバーがメモリを食いつぶしてしまうというような感じなんじゃないかと思います。

ただどのソフトウェアがOpenSSLを使っていて、かつ「OCSP ステープリング」に対応しているかを完全に把握していないと、それが有効になっているかどうかも調べられないので、脆弱性の影響の有無もはっきりしないということになると思います。(注)一般的なケースではソフトウェアが「OCSP ステープリング」に対応していなくても脆弱性の影響を受けますが、ここでいっているのは「1.0.1g 以前のバージョン」の場合の影響に関してです。

こちらはWikiや他サイトを見た限りですと、HTTP(Apache)を使用していなければ特に気にしなくても良いように見えるのですが、
認識としてはあっていますでしょうか?

脆弱性の公表元ではOpenSSL Server、NginxとApacheが影響を受けることを確認しているようです。OpenSSL Serverはテスト用ということで度外視できるとして、少なくともNginxとApacheについては気にしなければならないということになります。

他に何があるかはよくわからないですね。SSL/TLSはHTTP以外でも使われているので、HTTPだけでよいかという話もあります。「OCSP ステープリング」は上で述べた通り、特にHTTP限定の話ではなく、それ以外のものにも影響するはずです。なので何を気にしなければならないかはいえても、それを使用していなければ大丈夫だとは言いにくいです。そのあたりは自己責任でということになると思います。

編集 履歴 (1)

blunder3様
ご返信が遅れて申し訳ありません。確認に手間取りました。
ハートブリード脆弱性についてはパッチが当たっていることを確認しました。
また、NginxとApacheを使用しているサーバ以外ではOpneSSLを使用していないことが確認出来ました。

NginxとApacheを使用しているサーバでは以下のコマンドで「OCSP ステープリング」が
無効になっていることを確認しました。
$openssl s_client -connect localhost:443 -tls1 -status | head

OCSP response: no response sent

参考にさせて頂いたサイト様
http://blog.mylibs.jp/archives/173

「OCSP ステープリング」の解説までありがとうございました。

taka-areabejapa様
情報ありがとうございます。
サイトの拝見をさせて頂き、「OCSP ステープリング」の理解が深まりました。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。