SSL/TLS协议信息泄露漏洞(CVE-2016-2183)【原理扫描】处理
一、概述
SSL/TLS协议信息泄露漏洞(CVE-2016-2183)漏洞说明:
SSL全称是Secure Sockets Layer,安全套接字层,它是由网景公司(Netscape)设计的主要用于Web的安全传输协议,目的是为网络通信提供机密性、认证性及数据完整性保障。如今,SSL已经成为互联网保密通信的工业标准。SSL最初的几个版本(SSL 1.0、SSL2.0、SSL 3.0)由网景公司设计和维护,从3.1版本开始,SSL协议由因特网工程任务小组(IETF)正式接管,并更名为TLS(Transport Layer Security),发展至今已有TLS 1.0、TLS1.1、TLS1.2,TLS1.3这几个版本。TLS, SSH, IPSec协商及其他产品中使用的DES及Triple DES密码存在大约四十亿块的生日界,这可使远程攻击者通过Sweet32攻击,获取纯文本数据。
风险级别:中
该漏洞又称为SWEET32(https://sweet32.info)是对较旧的分组密码算法的攻击,它使用64位的块大小,缓解SWEET32攻击OpenSSL 1.0.1和OpenSSL 1.0.2中基于DES密码套件从“高”密码字符串组移至“中”;但OpenSSL 1.1.0发布时自带这些,默认情况下禁用密码套件。该问题在新的openssl版本中已解决。
远程主机支持使用提供中等强度加密的SSL密码。Nessus将中等强度视为使用密钥长度至少为64位且小于112位的任何加密,或使用3DES加密套件的任何加密。请注意,如果攻击者位于同一物理网络上,那么绕过中等强度加密就容易得多。对于windows,该漏洞影响了很多的服务,包括常见的3389,80,443,25等。
【升级建议】
OpenSSL 1.0.2用户应升级到1.0.2i
OpenSSL 1.0.1用户应升级到1.0.1u
OpenSSL 1.1.0及以后版本不受影响
二、升级处理
1、官方地址:https://www.openssl.org/source/;最新的稳定版本是1.1.1系列,且是TLS版本;之前旧版本(包括1.1.0, 1.0.2, 1.0.0 and 0.9.8)不在支持维护;
下载地址:https://www.openssl.org/source/openssl-1.1.1i.tar.gz
2、linux直接升级
openssl version -a //确认当前版本,备份证书文件和秘钥文件 mv /usr/bin/openssl /usr/bin/openssl.old /备份执行文件 mv /usr/include/openssl /usr/include/openssl.old cd /usr/local/src/ wget https://www.openssl.org/source/openssl-1.1.1h.tar.gz tar zxvf openssl-1.1.1h.tar.gz cd ./openssl-1.1.1h/ ./config --prefix=/opt/openssl --openssldir=/usr/local/ssl //预编译,到指定安装路径,生成Makefile文件,-t参数可测试编译情况,--prefix:指定安装目录;--openssldir:指定openssl配置文件路径;加shared还可指定创建动态链接库 make //编译,如果编译失败,可执行./make clean,或者编译前用./make test测试编译情况而不直接编译 make install //编译成功后安装
./config --prefix=/opt/openssl --openssldir=/usr/local/ssl ,注意这两个路径,后续会用到
注意:编译失败可能需要更新zlib(http://www.zlib.net/)和gcc,注意提示
gcc -v //确定当前gcc版本,按需升级
cat /usr/lib64/pkgconfig/zlib.pc //确定当前zlib版本,按需升级
或尝试yum upgrade zlib zlib-devel gcc* -y //update升级包保留旧版本,upgrade升级后删除旧版本,如果不跟具体包名,update级所有包同时也升级软件和系统内核(升级环境可能会导致生成事故),upgrade 升级后,只升级所有包,不升级软件和系统内核。这不同于ubuntu环境,update 是同步 /etc/apt/sources.list 和 /etc/apt/
sources.list.d 中列出的源的索引,以变upgrade时获取到最新的软件包进行安装,在执行 upgrade 之前要执行 update才能从最新软件包更新。
3、替换原有旧openssl文件:
1)/usr/local/bin:
ln -sf /opt/openssl/bin/openssl /usr/bin/openssl
ln -s /opt/openssl/include/openssl /usr/include/openssl
2)配置文件/usr/local/ssl:备份
3)库文件检查:/usr/local/lib64 //根据实际的环境库文件位置配置,有的为usr/local/ssl/lib,注意具体位置。如不放心,整个库文件夹备份。
4)验证:ldconfig -v|grep ssl //确定链接库
5)版本验证:openssl version
如果执出现openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory错误,即缺少相关库依赖,请检查以下库文件,执行:
ln -s /opt/openssl/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1 ln -s /opt/openssl/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1 ldconfig -v|grep ssl //确定链接库正常 echo "/usr/local/lib64" >> /etc/ld.so.conf //将新的库文件地址写入记录so库的配置文件,更新动态链接库数据 再次验证:openssl version