您的位置:

CVE-2016-2183漏洞分析

一、漏洞简介

CVE-2016-2183是OpenSSL库中存在的一种TLS加密套件缺陷,由于该加密套件中使用了一个弱随机数生成器,攻击者可以利用此缺陷预测随机数的值,从而成功绕过SSL/TLS连接的加密措施,实现中间人攻击。该漏洞影响了OpenSSL 1.0.2版本之前的版本,而1.0.2版本及以后的版本中已经修复了该漏洞。

二、漏洞危害

由于该漏洞可以被用于中间人攻击,攻击者可以在不被发现的情况下窃取用户的敏感信息。同时,该漏洞还可以被用于篡改HTTPS流量,因此攻击者可以在不被用户察觉的情况下修改网页内容,欺骗用户产生误解或者进行更为危险的攻击。

三、漏洞成因

该漏洞的成因在于OpenSSL库中某些加密套件中使用了弱随机数生成器。由于SSL/TLS连接需要随机数,因此在TLS连接的过程中需要生成伪随机数。而该加密套件中使用的随机数生成器并非真正的随机数,而是通过某种算法对系统时间等量进行哈希,从而生成伪随机数。

因此,由于该算法的随机性太弱,攻击者可以预测伪随机数的值,从而在SSL/TLS连接中使用预测到的伪随机数进行加密操作,进而绕过了SSL/TLS连接的加密措施。攻击者可以在中间人攻击中,将自己伪装成服务器与客户端进行通信,并通过预测随机数的方式解密从客户端传来的加密数据,然后在攻击者与真正的服务器之间进行篡改并再次加密,发送给客户端。因此,用户有可能收到篡改后的数据,而不会意识到其中的问题。

四、漏洞修复

该漏洞已经被OpenSSL 1.0.2版本及以后的版本中进行了修复,修复方法是将加密套件中的随机数生成器更换为安全的随机数生成器。由于该漏洞主要影响OpenSSL 1.0.1及之前的版本,因此用户需要及时更新自己的OpenSSL库版本。

五、代码示例

    SSL_CTX* ctx = SSL_CTX_new(SSLv23_server_method());
    SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3|SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1);
    SSL_CTX_set_cipher_list(ctx, "AES128-SHA");
    SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF);
    SSL_CTX_set_tmp_rsa_callback(ctx, tmp_rsa_cb);
    SSL_CTX_set_tmp_dh_callback(ctx, tmp_dh_cb);
    SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, nullptr);