CVE-2014-0224 OpenSSL CCS Injection
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 です。
テストプログラム
この脆弱性のスキャン方法には、以下の方法があります。
- rcvalle チェックツール
- Nessus, OpenSSL 'ChangeCipherSpec' MiTM Vulnerability
- www.tenable.com/plugins/index.php?view=single&id=74326
- SSL Server Test
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 | |
Certificate ClientKeyExchange |
→ | |
← | ChangeCipherSpec Begin new CipherSpec | |
Application Data | ←→ | Application Data |
Change Cipher Specプロトコルとは
Change Cipher Specプロトコルは、通信に使用する暗号アルゴリズムを変更することを相手に通知するためのプロトコルです。 クライアントは、 ClientKeyExchangeメッセージ、または、 ClientVerifyメッセージの後に、ChangeCipherSpecメッセージを送信します。 サーバは、クライアントから受信した鍵交換メッセージの処理が正常に終了した後で、ChangeCipherSpecメッセージを送信します。
関連項目
ツイート