关于 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通信数据。