`

关于SSL/TLS最新漏洞“受戒礼”

001 
阅读更多
一、漏洞分析

事件起因

2015
326日,国外数据安全公司Imperva的研究员Itsik MantinBLACK HAT ASIA 2015发表论文《Attacking SSL when using RC4》阐述了利用存在了13年之久的RC4漏洞——不变性弱密钥(《Weakness in the Key Scheduling Algorithm of RC4,FMS 发表于2001年)进行的攻击,并命名为受戒礼攻击(Bar Mitzvah Attack)。

直到20153月,还有约30%的网络通信是由RC4进行保护的。通过受戒礼攻击,攻击者可以在特定环境下只通过嗅探监听就可以还原采用RC4保护 的加密信息中的纯文本,导致账户、密码、信用卡信息等重要敏感信息暴露,并且可以通过中间人(Man-in-the-middle)进行会话劫持。

攻击方法和模式

攻击者嗅探监听大量的SSL链接,可以判断第一个加密消息包含SSL的完成消息和HTTP请求,都是具有可预测的信息的。然后等待一个不变性弱密钥的链接 到来,当获取到一个弱密钥链接时候就可以提取出LBS。当弱密钥使用的时候,明文和密钥会进行异或,攻击者可以看到生成的密文模式。

攻击者同样也进行DNS投毒,将所有的链接链接到一个恶意的主机,主机进行中间人攻击,能够有效地进行大量用户的嗅探监听和会话劫持。

漏洞原理和细节

根据《Attacking SSL when using RC4》中的阐述,漏洞的成因主要在于不变性弱密钥是RC4密钥中的一个L型的图形,它一旦存在于RC4的密钥中,在整个初始化的过程之中保持状态转换的 完整性。这个完整的部分包括置换过程中的最低有效位,在由RPGA算法处理的时候,决定伪随机输出流的最低有效位。这些偏差的流字节和明文进行过异或,导 致密文中会泄露重要明文信息。


 

状态转换


 
这种模式发生在LSBsa single LSB, 2 LSBs 等的不同数字时候,导致不同种类的RC4弱密钥。

如果一个q-class指代LSB的数字)的密钥被使用,那么会发生以下的问题:

 

RC4的初始化语句不能正确地配合状态和关键信息,并且保存K个最低有效位存储内部状态;

 

RC4初始状态具有固定的非混合qLSB

 

第一个明文字节流的30-50字节的q个最低有效位遵守显著概率确定模式;

 

第一个明文字节流的30-50字节的q个最低有效位有显著概率暴露。

 

SSL在很多加密套件中使用RC4进行加密。在握手环节产生RC4密钥用来加密上行数据流和下行数据流。上行数据流中用来加密客户端– 服务器的数 据流,下行数据流中用来加密服务器 – 客户端的数据流。加密是有状态的,使用第一个密钥流加密第一个字节的信息,之后的密钥流加密下一条消息(想CBC 模式一样)。由于串加密毁灭了最低有效位的确定性,所以不变性弱密钥只能利用于被保护的第一个100字节。

 

SSL的握手结束消息是每个方向(上行和下行)的第一条加密消息,且结束消息固定使用了36个字节,所以还有64个字节留给攻击者使用。



 
二、安全检测

在线检测:服务器测试:https://www.ssllabs.com/ssltest/index.html

 



 
浏览器测试:https://www.ssllabs.com/ssltest/viewMyClient.html

 



 
本地检测:(针对服务器,需要在linux服务器下安装openssl


 

 

$ openssl s_client connect yourhost:443 cipher RC4

 



 

如果能够查看到证书信息,那么就是存在风险漏洞
如果显示sslv3 alerthandshake failure,表示改服务器没有这个漏洞。

 

三、修补方式

 

服务器

 

对于NGINX的修补

 

修改nginx配置文件中的 ssl_ciphers

 

ssl_ciphers"ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";

 

ssl_prefer_server_ciphers on;

 

重新加载:

 

$sudo/etc/init.d/nginx reload

 

对于apache的修复

 

打开配置文件

 

$sudovi/etc/httpd/conf.d/ssl.conf

 

修改配置

 

SSLCipherSuite
HIGH:MEDIUM:!aNULL:!MD5;!RC4
$sudo /etc/init.d/httpd restart

 

对于TOMCAT的修复

 

server.xml SSL connector加入以下内容:

 

SSLEnabled="true"sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2"ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_RC4_128_SHA"

 

tomcat例子:

 

<connector port="443"maxhttpheadersize="8192" address="127.0.0.1"enablelookups="false" disableuploadtimeout="true"acceptCount="100" scheme="https" secure="true"clientAuth="false" SSLEnabled="true"sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_RC4_128_SHA"keystoreFile="mydomain.key"
keystorePass="password"
truststoreFile="mytruststore.truststore"truststorePass="password"/>;

 

对于IIS修补

 

将下面的内容保存为fix.reg,并双击运行来修改注册表:

 

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\DES56/56]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\NULL]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC240/128]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC256/128]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC440/128]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC456/128]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC464/128]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\PCT1.0\Server]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL2.0\Server]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL3.0\Server]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL3.0\Client]"DisabledByDefault"=dword:00000001

 

客户端浏览器

 

对于chrome浏览器的修补

 

@linux

 

关闭浏览器,在terminal中直接输入命令运行

 

$ google-chrome–cipher-suite-blacklist=0x0004,0x0005,0xc011,0xc007

 

@windows

 

快捷图标->右键->在目标后面加入引号内的内容“–cipher-suite-blacklist=0×0004,0×0005,0xc011,0xc007”

 

重启浏览器生效

 

@macos

 

terminal种输入:

 

/Applications/GoogleChrome.app/Contents/MacOS/GoogleChrome--cipher-suite-blacklist=0x0004,0x0005,0xc011,0xc007

 

对于firefox(全平台)

 

在地址栏输入about:config回车,搜索框输入rc4,双击value的值就可以改成false并且禁止rc4相关的ssl传输,如下图:

 



 

 

对于IE(只在windows平台)

 

参考解决办法:https://www.sslshopper.com/article-how-to-disable-ssl-2.0-in-iis-7.html

 

运行->regedit->对下面键值进行设置:

 

·[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4128/128]
"Enabled"=dword:00000000
·[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC440/128]
·"Enabled"=dword:00000000
·[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC456/128]
·"Enabled"=dword:00000000

 

或者将将下面内容保存为fix.reg,然后双击运行fix.reg进行注册表修改:

 

WindowsRegistryEditorVersion5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4128/128]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC440/128]"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC456/128]"Enabled"=dword:00000000

 

 

 

 

  • 大小: 85.3 KB
  • 大小: 24.9 KB
  • 大小: 66.9 KB
  • 大小: 58.8 KB
  • 大小: 90 KB
  • 大小: 242 KB
  • 大小: 213.3 KB
  • 大小: 40 KB
分享到:
评论

相关推荐

    .net中为 SSL/TLS 安全通道建立信任关系

    .net 中为 SSL/TLS 安全通道建立信任关系 在 .NET 中,建立 SSL/TLS 安全通道时,需要建立信任关系,以确保数据的安全传输。在本文中,我们将讨论如何在 .NET 中建立 SSL/TLS 安全通道的信任关系,并解决常见的调试...

    基于SSL/TLS协议的FTP客户端和服务器端

    **基于SSL/TLS协议的FTP客户端和服务器端** 在当今的网络环境中,数据安全尤为重要,尤其是在文件传输过程中。FTP(File Transfer Protocol)虽然方便,但其明文传输的特性使得数据容易被窃取或篡改。为了解决这个...

    Windows Server CVE-2016-2183 SSL/TLS协议信息泄露漏洞修复脚本

    Windows Server 合规漏洞修复,修复Windows Server CVE-2016-2183 SSL/TLS协议信息泄露漏洞修复脚本,基于Windows PowerShell, 兼容Windows Server 2016/2019,防止Sweet32 生日攻击

    解决 SSL/TLS协议信息泄露漏洞(CVE-2016-2183) ps1 文件

    解决 SSL/TLS协议信息泄露漏洞(CVE-2016-2183) ps1 文件

    Netty和SSL/TLS应用例子

    在Netty中,我们可以使用`SslContext`来创建SSL/TLS上下文,这是所有SSL/TLS操作的基础。对于服务器端,我们通常需要创建一个`ServerSslContext`,它会使用服务器的证书和私钥。对于客户端,我们则需要创建一个`...

    Implementing SSL / TLS Using Cryptography and PKI 1st Edition (无水印,数字版)

    - 定期更新和打补丁:确保使用的SSL/TLS实现是最新的,并且修补了已知的安全漏洞。 - 使用最新版本的TLS:建议使用TLS 1.2或1.3,因为它们提供了更高的安全性和性能。 - 禁用SSL和旧版本的TLS:为避免安全风险,应...

    JAVA实现的SSL/TLS双向认证源代码

    Java提供的SSL(Secure Sockets Layer)和TLS(Transport Layer Security)协议是确保数据安全的重要工具。本篇将深入探讨如何使用Java实现SSL/TLS双向认证,以及涉及到的相关工具和步骤。 首先,让我们理解什么是...

    ssl/tls安全协议

    SSL/TLS(Secure Socket Layer/Transport Layer Security)安全协议是互联网上用于保护数据传输的协议标准,它为网络通信提供加密处理,确保数据在传输过程中不被窃取或篡改。该协议广泛应用于Web浏览器和其他需要...

    关于SSL/TLS的认识

    每个版本都有不同的安全特性,随着技术的发展,旧版本可能存在的漏洞被发现,因此建议使用最新版本。 加密套件定义了加密算法的组合,包括对称加密算法(如AES)、非对称加密算法(如RSA)、散列函数(如SHA-256)...

    ssl_android.zip_TLS_android_android ssl_application_ssl/tls

    1. **使用最新的SSL/TLS版本**:始终保持应用使用最新版本的SSL/TLS,避免已知的安全漏洞。目前推荐使用TLS 1.2或更高版本。 2. **禁用不安全的协议和密码套件**:移除不再安全的SSL/TLS协议(如SSLv3)和密码套件...

    IISCrypto 解决SSL/TLS协议信息泄露漏洞的工具

    **IISCrypto:SSL/TLS协议安全配置工具** ...IISCrypto 是一款专为Windows服务器(如Windows 2008、2012、2016)设计的实用工具,用于解决SSL(Secure Sockets Layer)和TLS(Transport Layer Security)协议的安全问题...

    netty实现SSL/TSL双向加密认证示例

    在本文中,我们将深入探讨如何使用 Netty 实现 SSL/TLS(Secure Sockets Layer/Transport Layer Security)双向加密认证。SSL/TLS 是互联网上广泛采用的安全通信协议,确保数据在网络传输过程中保持私密性和完整性。...

    XEP-0035: SSL/TLS Integration.pdf

    《XEP-0035: SSL/TLS Integration》是XMPP(Extensible Messaging and Presence Protocol)标准框架下关于SSL/TLS整合的一份文档。该文档由Robert Norris撰写,并于2003年11月5日发布,但随后在同一天被撤销,因为其...

    tls.rar_ tls protocol_TLS_ssl_ssl/tls_tls pdf

    8. **TLS/SSL的安全挑战**:如BEAST、CRIME、POODLE等攻击方法,以及对弱加密套件的利用,都是SSL/TLS协议面临的安全威胁。 9. **证书管理**:了解如何获取、安装和管理SSL/TLS证书,以及处理证书过期、吊销等问题...

    scapy-ssl_tls-1.2.3.4.zip

    Scapy-ssl_tls库的使用不仅限于解码,还可以用于模拟服务器和客户端进行交互,进行SSL/TLS协议的深度分析,甚至进行安全漏洞的检测。结合Scapy的其他功能,可以实现更复杂的网络协议操作,例如修改或重放特定的SSL/...

    ssl_tls协议RFC5246文档_ssl_ssl标准文档_

    RFC5246文档是SSL/TLS协议的最新版本,正式名为“Transport Layer Security (TLS) Protocol Version 1.2”。本文将深入探讨SSL/TLS协议的核心概念、工作流程以及其在RFC5246中的规定。 SSL/TLS协议的主要目标是提供...

    ESP8266 MQTT SSL/TLS 阿里物联网套件 百度天工 Onenet等MQTT服务器(注意:是固件)

    ESP8266 MQTT SSL/TLS 阿里物联网套件 百度天工 Onenet等MQTT服务器固件详解 ESP8266是一款低功耗、高性能的Wi-Fi微控制器,常用于IoT(物联网)应用。在这个场景中,我们关注的是ESP8266如何通过MQTT协议安全地...

    Understanding SSL/TLS

    ### 理解 SSL/TLS:安全加密与网络信任 #### 一、SSL/TLS 是什么? SSL(Secure Sockets Layer)与 TLS(Transport Layer Security)是两种用于保护互联网通信安全的技术标准。这两种协议主要用于在客户端(如...

    Implementing SSL TLS Using Cryptography and PKI.pdf

    - **测试与监控**: 对SSL/TLS连接进行彻底测试,并定期监控其性能和安全性,确保没有漏洞或配置错误。 综上所述,SSL/TLS通过结合先进的加密技术和可靠的PKI基础设施,为网络通信提供了一层强大的安全保障。了解...

Global site tag (gtag.js) - Google Analytics