zoukankan      html  css  js  c++  java
  • RC4弱密码套件检测

    一、漏洞分析

    事件起因

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

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

    攻击方法和模式

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

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

    漏洞原理和细节

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

     

    状态转换(来自《Attacking SSL when using RC4》)

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

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

    RC4的初始化语句不能正确地配合状态和关键信息,并且保存K个最低有效位存储内部状态;
    RC4初始状态具有固定的非混合q LSB;
    第一个明文字节流的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 -connectyinxiang.com: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的修复

    打开配置文件

    $ sudo vi /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_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersDES56/56]"Enabled"=dword:00000000
    [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersNULL]"Enabled"=dword:00000000
    [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersRC240/128]"Enabled"=dword:00000000
    [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersRC256/128]"Enabled"=dword:00000000
    [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersRC440/128]"Enabled"=dword:00000000
    [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersRC456/128]"Enabled"=dword:00000000
    [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersRC464/128]"Enabled"=dword:00000000
    [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsPCT1.0Server]"Enabled"=dword:00000000
    [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsSSL2.0Server]"Enabled"=dword:00000000
    [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsSSL3.0Server]"Enabled"=dword:00000000
    [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsSSL3.0Client]"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_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersRC4128/128]
    "Enabled"=dword:00000000
    ·[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersRC440/128]
    ·"Enabled"=dword:00000000
    ·[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersRC456/128]
    ·"Enabled"=dword:00000000

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

    WindowsRegistry Editor Version 5.00
    [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersRC4128/128]"Enabled"=dword:00000000
    [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersRC440/128]"Enabled"=dword:00000000
    [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELCiphersRC456/128]"Enabled"=dword:00000000

    本文版权属于NSTRT团队,由团队成员zyx编写。如果你觉得这篇文章有用,可以分享给自己的朋友,同样希望更多的人也关注我们的微信公众号trt917和微博 NSTRT团队,我们会定期分享一些信息安全相关知识,希望能够对大家有所帮助。

  • 相关阅读:
    3.4函数重载和默认参数
    命名空间
    Pandas中DataFrame数据合并、连接(concat、merge、join)之concat
    使用python脚本进行数据清洗(1)
    python操作hive 安装和测试
    Microsoft Visual C++ 14.0 is required.
    hive传递参数与调用
    log1p和expm1
    github高速下载的方法
    group_concat()
  • 原文地址:https://www.cnblogs.com/pshell/p/7942059.html
Copyright © 2011-2022 走看看