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
检测漏洞
您可通过在线工具检测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通信数据。