OpenSSL CCS 注入漏洞修复方案

关于 OpenSSL CCS 漏洞

在昨天(2014-06-05) OpenSSL 发布了关于漏洞 CVE-2014-0224 的安全公告,并发布了已修复此漏洞的最新 OpenSSL版本。由于此漏洞是 OPenSSL ChangeCipherSpec 设计缺陷造成,被称为 CCS 注入漏洞。攻击者可以发起中间人攻击并利用此漏洞篡改或监听SSL加密传输的数据。

受影响的OpenSSL版本包括:

OpenSSL 1.0.1 through 1.0.1g

OpenSSL 1.0.0 through 1.0.0l

all versions before OpenSSL 0.9.8y

未影响版本:

OpenSSL 1.0.1h

OpenSSL 1.0.0m

OpenSSL 0.9.8za

检测漏洞

 可通过在线工具

https://www.trustasia.com/tools/ccs-checker/

检测SSL服务端是否存在这个漏洞

应对措施

 Windows环境下的apache及nginx等使用openssl的webserver直接重新下载最新的webserver版本就可解决。

Linux环境下

    Nginx:使用ldd nginx指令检查是否有的libssl.so和libcrypto.so的调用,如果用,直接升级openssl就可以了,如果没有,那么需要重新编译Nginx

    Apache:

          如果你的apache是使用管理安装的,那么直接使用包管理升级openssl就可以了。

          如果你的apache是自己编译的,那么您需要检查apache的编译参数,看有没有指定自己的openssl目录;

                  如果没有那么也可以直接使用包管升级openssl。

                  如果您编译安装的时候使用了自己的openssl目录而非系统的openssl,那请升级对应目录的openssl或重新编译apache.

    升级openssl:对于使用包管理安装的openssl直接使用包管理升级就可以了,升级后版本号可能不在安全的版本号之只,但是它们是被打过补丁的,是安全的。

从源码编译安装openssl:从openssl下载自己希望使用的openssl版本的最新文件。编译时请加上参数shared以打开共享库。完成后需按自己的环境来安装。

 其他受影响的WebServer:

建议到官方更新不受此漏洞影响的版本

漏洞分析

    SSL握手过程中 两端会发起 ClientHello 和 ServerHello 握手消息。

在握手过程中双方会协商一些会话参数,如协议版本、加密套件、会话密钥等
SSL协议中 允许双方在握手阶段通过使用ChangeCipherSpec(CCS) 来修改连接的加密策略

按照标准,CCS消息应该是在 握手加密参数协商完成之后  最终确认消息发送之前 来发送。
但 Openssl没有这么设计,它允许 CCS消息在 加密参数协商完成之前发送.

中间人攻击可以利用这点 在 一个SSL握手过程中向客户端和服务端分别发送一个 CCS包并
用长度为零的预主密钥来协商会话密钥,这样攻击者就可以知道会话密钥 并可以篡改或
截获SSL通信数据