CVE-2014-0224 OpenSSL CCS Injection

提供: セキュリティ
2015年5月16日 (土) 16:59時点におけるDaemon (トーク | 投稿記録)による版 (FreeBSD)

移動: 案内検索
スポンサーリンク

0.9.8za未満、1.0.0m未満の1.0.0系、1.0.1h未満の1.0.1系のOpenSSL では、SSL/TLSハンドシェイクの Change Cipher Spec メッセージの処理が不適切なため、 OpenSSL と OpenSSL のコミュニケーションにおいて、zero-length マスターキーの使用によって、中間者攻撃(Man-In-The-Middle attack)を許します。その結果、"CCS Injection"脆弱性として知られる偽装されたTLSハンドシェイクを通じて、セッションの乗っ取りや、センシティブ情報を奪われます。つまり、この脆弱性によって、暗号通信の内容を通信経路で、盗聴や改ざんされる恐れがあります。

読み方

OpenSSL
おーぷんえすえすえる
CCS Injection
しーしーえす いんじぇくしょん
Change Cipher Spec
ちぇんじ さいふぁー すぺっく

概要

SSL/TLSハンドシェイクは、暗号化通信で使用する暗号鍵を生成するため、鍵情報の交換を行い、その後に、 Change Cipher Spec メッセージをサーバからクライアントへ、クライアントからサーバへ送信されます。 OpenSSLでは、鍵情報交換前に、Change Cipher Spec メッセージを受信した場合、空の鍵情報を使用して暗号鍵を生成します。

クライアントの偽装が可能という指摘がありましたが、危険がないということがわかりました。

このOpenSSLの問題は、OpenSSLのライブラリを使用しているソフトウェア全般に影響があります。 Apache が nginx のようなWebサーバ、SMTP, POP, IMAP プロトコルを扱うメールサーバ、チャットサービス、SSL VPN(Virutal Private Network)などです。

サーバのOpenSSLが1.0.1系のときに、クライアントがどのバージョンのOpenSSLであっても影響を受けます。

影響を受けるプロトコル

  • SSL 3.0
  • TLS 1.0
  • TLS 1.1
  • TLS 1.2

影響を受けるバージョンと修正されたバージョン

Linuxのディストリビューションによって、下記以外のバージョンであっても修正されているものがあります。

影響を受けるバージョンと修正されたバージョン
OpenSSLのバージョンの分類 CVE-2014-0224の影響を受けるバージョン 修正済バージョン サーバが影響を受けるか クライアントが影響を受けるか
0.9.8系 0.9.8y 以前すべて 0.9.8za x o
1.0.0系 1.0.0 - 1.0.0l 1.0.0m x o
1.0.1系 1.0.1 - 1.0.1g 1.0.1h o o

影響を受けた痕跡の確認

OpenSSLの場合、痕跡が残りません。

IDS等での検知

ChangeCipherSpecの送信の順番を確認すれば、検知できる可能性があります。

証明書や秘密鍵の扱い

CVE-2014-0160 OpenSSL Heartbleedとは違い、秘密鍵の再作成や証明書の再発行は、不要です。

対処方法

  • 0.9.8za、1.0.0m、1.0.1hのOpenSSLへバージョンをアップグレードします。
  • OSを再起動します。
    • OpenSSLのライブラリをロードしているシステムに対して、修正版を適切に読み込ませるためです。

FreeBSD

FreeBSDは、8,9,10系がサポートされています。FreeBSDは、freebsd-update でアップデート可能です。

$ sudo freebsd-update fetch
$ sudo freebsd-update install
$ sudo reboot

参考情報は、 http://www.freebsd.org/security/advisories/FreeBSD-SA-14:14.openssl.asc です。

Ubuntu

$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo reboot
Ubuntu 14.04 LTS
libssl1.0.0 1.0.1f-1ubuntu2.2
Ubuntu 13.10
libssl1.0.0 1.0.1e-3ubuntu1.4
Ubuntu 12.04 LTS
libssl1.0.0 1.0.1-4ubuntu5.14
Ubuntu 10.04 LTS
libssl0.9.8 0.9.8k-7ubuntu8.18

参考情報は、 http://www.ubuntu.com/usn/usn-2232-1/ です。

CentOS

RedHat系は、openssl-1.0.1e-16.el6_5.14 で修正されています。

$ sudo yum update openssl
$ sudo reboot

参考までに6.5系のx86_64の対応パッケージを列挙します。

Red Hat Enterprise Linux Server EUS (v. 6.5.z) x86_64

  • openssl-1.0.1e-16.el6_5.14.i686.rpm
  • openssl-1.0.1e-16.el6_5.14.x86_64.rpm
  • openssl-debuginfo-1.0.1e-16.el6_5.14.i686.rpm
  • openssl-debuginfo-1.0.1e-16.el6_5.14.x86_64.rpm
  • openssl-devel-1.0.1e-16.el6_5.14.i686.rpm
  • openssl-devel-1.0.1e-16.el6_5.14.x86_64.rpm
  • openssl-perl-1.0.1e-16.el6_5.14.x86_64.rpm
  • openssl-static-1.0.1e-16.el6_5.14.x86_64.rpm

参考情報は、 https://rhn.redhat.com/errata/RHSA-2014-0625.html です。

テストプログラム

この脆弱性のスキャン方法には、以下の方法があります。

ccsinjection の使い方

$ curl -o ./ccsinjection.c \
https://gist.githubusercontent.com/rcvalle/71f4b027d61a78c42607/raw/b44892562a3062c8e2451915d233f50849bb0924/ccsinjection.c
$ make ccsinjection
$ ./ccsinjection localhost

脆弱性の問題ない場合

$ ./ccsinjection localhost
127.0.0.1: Not Vulnerable

脆弱性の問題がある場合

$ ./ccsinjection localhost
127.0.0.1: Vulnerable

SSL/TLS ハンドシェイクプロトコル

ハンドシェイクプロトコル
クライアント サーバ
ClientHello
Server Hello

Certificate
ServerKeyExchnage(Option)
CertificateRequest(Option)
ServerHelloDone

Certificate

ClientKeyExchange
CertificateVerify(Option)
ChangeCipherSpec
Begin new CipherSpec
Finished

ChangeCipherSpec

Begin new CipherSpec
Finished

Application Data ←→ Application Data

Change Cipher Specプロトコルとは

Change Cipher Specプロトコルは、通信に使用する暗号アルゴリズムを変更することを相手に通知するためのプロトコルです。 クライアントは、 ClientKeyExchangeメッセージ、または、 ClientVerifyメッセージの後に、ChangeCipherSpecメッセージを送信します。 サーバは、クライアントから受信した鍵交換メッセージの処理が正常に終了した後で、ChangeCipherSpecメッセージを送信します。

関連項目




スポンサーリンク