浅谈“脆弱的SSL加密算法“
一:漏洞名称:
弱加密算法、脆弱的加密算法、脆弱的SSL加密算法、openssl的FREAK Attack漏洞
描述:
脆弱的SSL加密算法,是一种常见的漏洞,且至今仍有大量软件支持低强度的加密协议,包括部分版本的openssl。其实,该低强度加密算法在当年是非常安全的,但时过境迁,飞速发展的技术正在让其变得脆弱。黑客可利用SSL弱加密算法漏洞进行SSL中间人攻击,即强迫服务器和用户之间使用低强度的加密方式,然后再通过暴力破解,窃取传输内容。强度较弱的加密算法将不能较好的保证通信的安全性,有被攻击者破解的风险。对于linux中openssl的FREAK Attack漏洞,该漏洞是由于OpenSSL库里的s3_clnt.c文件中,ssl3_get_key_exchange函数,允许客户端使用一个弱RSA秘钥,向SSL服务端发起RSA-to-EXPORT_RSA的降级攻击,以此进行暴力破解,得到服务端秘钥。此问题存在于OpenSSL版本0.9.8zd之前, 或1.0.0p之前的1.0.0,或1.0.1k之前的1.0.1。
检测条件:
1.已知Web网站开放443端口(https)。
2.开启了SSL协议。
检测方法:
1.对于windows中的检测方法:通过加密算法检测工具,与网站系统进行加密算法枚举通信,探测系统存在的加密算法及位数情况。利用SSLciphercheck软件,通过CMD下运行,进行协议探测进行检测命令:“sslciphercheck.exe -h ip地址或者域名 -p 443”,或者是利用web扫描工具,如WVS,APPscan等进行扫描检测,相关检测截图:
2.对于linux下的openssl的FREAK Attack漏洞,检测如下:https远程检查方法(看一个网站是脆弱的RSA弱密钥攻击,你可以使用OpenSSL命令):openssl s_client -connect www.fbi.gov:443 -cipher EXPORT,如果你看到”alert handshake failure”这句话就说明该网站是安全的:
3.RedHat系列检查命令:rpm -qa|grep openssl
4.Debian\Ubuntu系列检查命令: dpkg -l|grep openssl
5、使用Nmap查看端口的服务版本,包括SSL服务版本
nmap -sV --reason -PN -n --top-ports 100 www.example.com
6、使用Nmap检测证书信息、弱加密、SSLv2
nmap --script ssl-cert,ssl-enum-ciphers -p
漏洞修复:
以下为针对脆弱的SSL加密算法漏洞的修复建议,其中包括IIS、apache、和windows本身的一些安全建议方法:
1.对于linux中openssl的FREAK Attack漏洞,如果因为生产环境无法直连外网或是变更配置管理等原因而不便更新补丁,可以采取以下临时修复方法:
- 禁用出口级弱加密算法在命令行使用:openssl ciphers MEDIUM。
- 禁止apache服务器使用出口级加密算法:vi /etc/httpd/conf.d/ssl.conf;增加如下配置:SSLCipherSuite HIGH:!aNULL:!MD5:!EXP;需要重启apache服务:/etc/init.d/httpd restart。
- 关于nginx加密算法:1.0.5及以后版本,默认SSL密码算法是HIGH:!aNULL:!MD5;0.7.65、0.8.20及以后版本,默认SSL密码算法是HIGH:!ADH:!MD5;0.8.19版本,默认SSL密码算法是:ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM;0.7.64、0.8.18及以前版本,默认SSL密码算法是ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;低版本的nginx或没注释的可以直接修改域名下ssl相关配置为ssl_ciphers HIGH:!aNULL:!MD5;需要nginx重新加载服务:/etc/init.d/nginx reload
2.对于IIS中SSL,修复方案为:
- 在 IIS 管理器中,双击本地计算机,然后右键单击所需的某个网站、目录或文件,然后单击“属性”。
- 在“目录安全性”或“文件安全性”选项卡的“安全通信”下面,单击“编辑”。
- 在“安全通信”框中,选中“需要安全通道 (SSL)”复选框。
- 如果需要使用 128 位加密,请选择“要求 128 位加密”复选框。
- 单击“确定”。
3.对于Apache的修复方案为:
1.禁用它只需几分钟的时间。例如,在Apache v2中,你只需要改变默认设置:
SSLProtocol all
To
SSLProtocol all -SSLv2
2.如何建立一个仅使用SSLv2的服务器:
可以这样建立一个仅使用SSLv2协议及其密码算法的服务器:
httpd.conf
SSLProtocol -all +SSLv2
SSLCipherSuite SSLv2:+HIGH:+MEDIUM:+LOW:+EXP
3.如何建立一个仅接受强加密请求的SSL服务器:
如下设置为仅使用最强的七种密码算法:
httpd.conf
SSLProtocol all
SSLCipherSuite HIGH:MEDIUM
4.如何建立一个仅接受强加密请求的SSL服务器,而又允许对外浏览器使用更强的加密:这个功能被称为以服务器为网关的加密(Server Gated Cryptography [SGC]), 在README.GlobalID文档中有详细说明。 简单地说就是:服务器拥有一个由来自Verisign的一个特殊的CA证书签发的服务器身份证, 从而在对外浏览器上实现强加密。 其过程如下:浏览器使用对外密码进行连接,服务器返回其全局ID身份证, 浏览器校验后在后继HTTP通讯产生之前提升其密码组。 现在的问题是:如何允许这样的提升,而又强制性地使用强加密。 换句话说就是:浏览器必须在开始连接时就使用强加密,或者提升到强加密, 但是维持对外密码是不允许的。以下巧妙地解决了这个问题:
httpd.conf
# 允许在初始握手阶段使用所有的密码,
# 以允许对外服务器通过SGC功能提升密码组
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
<Directory /usr/local/apache2/htdocs>
# 但是最终会拒绝所有没有提升密码组的浏览器
SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128
</Directory>
5.如何建立接受所有类型密码的SSL服务器,但对特定的URL实施强加密:显然,不能使用服务器全局设置SSLCipherSuite,它会限制密码为强类型。 但是,mod_ssl允许重配置针对目录的密码组,并自动进行一个带有服从新配置的SSL参数的重协商。 因此,其解决方案成了:
httpd.conf
# 在一般情况下的处理是宽松的
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
<Location /strong/area>
# 但对于https://hostname/strong/area/ 及其以下的内容
# 要求强密码
SSLCipherSuite HIGH:MEDIUM
</Location>
具体详细方案,可参考:http://www.winet.cn/apache/sitemap.php
4.对于windos系统中,禁用SSL弱加密算法修复方案:
1.windows server 2003注册表可能与以下的不同。解决方案:Windows Server 2008 支持下列协议:•SSL 2.0 •SSL 3.0•TLS 1.0。Windows Server 2008 R2 和 Windows 7 支持下列协议:•SSL 2.0 •SSL 3.0•TLS 1.0•TLS 1.1•TLS 1.2,对于服务器或客户端体系结构,可以禁用这些协议。这意味着可以省略该协议,或将其禁用。如果要禁用SSL-V2.0,采用如下方案:
SSL 2.0 的服务器计算机上的注册表位置如下所示:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server
(1)若要启用 SSL 2.0,请执行以下步骤:
1.在客户端计算机上,将 DisabledByDefault DWORD 值设置为 00000000。
2.在服务器计算机上,将启用的 DWORD 值设置为 0xffffffff。
3.重新启动计算机。
(2)若要禁用 SSL 2.0,请执行以下步骤:
1.在客户端计算机上,将 DisabledByDefault DWORD 值设置为 00000001。
2.在服务器计算机上,将启用 DWORD 值设置为 00000000。
3.重新启动计算机。
2.SCHANNEL 键部分、 方法或任务包含一些介绍如何修改注册表的步骤。但是,如果不正确地修改了注册表,可能会出现严重的问题。因此,请确保仔细按照下列步骤操作。为增加保护,对其进行修改之前备份注册表。然后,您可以在出现问题时还原注册表。:
SCHANNEL 键位置:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
以下为常见的SCHANNEL键子项,包含弱加密算法的一些禁用方法:
(1)56/128 SCHANNEL\Ciphers\RC4 子项:RC4 64/128,若要允许此密码算法,更改到已启用值的 DWORD 值数据 0xffffffff.否则,更改到的 DWORD 值数据 0x0.如果您不配置启用值,默认情况下启用。
(2)56/128 SCHANNEL\Ciphers\RC2 子项:RC4 56/128,56 位 RC4 引用此注册表项。若要允许此密码算法,更改到已启用值的 DWORD 值数据 0xffffffff.否则,更改到的 DWORD 值数据 0x0.如果您不配置启用值,默认情况下启用。
(3)SCHANNEL\Ciphers\RC2 56/56 子项:RC2 56/128,56 位 RC2 引用此注册表项。若要允许此密码算法,更改到已启用值的 DWORD 值数据 0xffffffff.否则,更改到的 DWORD 值数据 0x0.如果您不配置启用值,默认情况下启用。
(4)SCHANNEL\Ciphers\RC4 40/128 子项:DES 56,56 位 DES 作为指定 FIPS 46-2 中引用此注册表项。FIPS 140-1 加密模块验证计划下,它的 Rsabase.dll 和 Rsaenh.dll 文件中的实现进行验证。若要允许此密码算法,更改到已启用值的 DWORD 值数据 0xffffffff.否则,更改到的 DWORD 值数据 0x0.如果您不配置启用值,默认情况下启用。
(5)SCHANNEL\Ciphers\RC2 40/128 子项:RC4 40/128,这指的是 40 位 RC4。若要允许此密码算法,更改到已启用值的 DWORD 值数据 0xffffffff.否则,更改到的 DWORD 值数据 0x0.如果您不配置启用值,默认情况下启用。
(6)SCHANNEL\Ciphers\NULL 子项:RC2 40/128,40 位 RC2 引用此注册表项。若要允许此密码算法,更改到已启用值的 DWORD 值数据 0xffffffff.否则,更改到的 DWORD 值数据 0x0.如果您不配置启用值,默认情况下启用。
(7)SCHANNEL\Hashes\SHA 子项:MD5,若要允许此哈希算法,将启用值的 DWORD 值数据更改为默认值 0xffffffff.否则,更改到的 DWORD 值数据 0x0.有效地禁用此算法时,不允许以下:•SSL_RSA_EXPORT_WITH_RC4_40_MD5,•SSL_RSA_WITH_RC4_128_MD5,•SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5,•TLS_RSA_EXPORT_WITH_RC4_40_MD5,•TLS_RSA_WITH_RC4_128_MD5,•TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5。
(8)SCHANNEL/KeyExchangeAlgorithms 子项:SHA,此注册表项是指安全哈希算法 (sha-1),指定 FIPS 180-1 中。FIPS 140-1 加密模块验证计划下,它的 Rsabase.dll 和 Rsaenh.dll 文件中的实现进行验证。若要允许此哈希算法,将启用值的 DWORD 值数据更改为默认值 0xffffffff.否则,更改到的 DWORD 值数据 0x0.有效地禁用此算法时,不允许以下: •SSL_RSA_WITH_RC4_128_SHA,•SSL_RSA_WITH_DES_CBC_SHA,•SSL_RSA_WITH_3DES_EDE_CBC_SHA,•SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA,•SSL_RSA_EXPORT1024_WITH_RC4_56_SHA,•TLS_RSA_WITH_RC4_128_SHA,•TLS_RSA_WITH_DES_CBC_SHA,•TLS_RSA_WITH_3DES_EDE_CBC_SHA,•TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA,•TLS_RSA_EXPORT1024_WITH_RC4_56_SHA。
其他补充:
可以结合这篇文章一起来学习:浅谈“POODLE信息泄露漏洞”
浅谈“脆弱的SSL加密算法“相关推荐
- 脆弱的SSL加密算法
一. 漏洞描述 脆弱的SSL加密算法也叫弱加密算法, openssl 的 FREAK Attack 漏洞.有两三年的年头了,CVE 是 CVE-2015-0204,网站或软件支持低强度的加密协议,包括 ...
- 脆弱的SSL加密算法问题
0x00:漏洞介绍 脆弱的 SSL 加密算法也可以叫它 openssl 的 FREAK Attack 漏洞.有两三年的年头了,CVE 是 CVE-2015-0204,网站或软件支持低强度的加密协议,包 ...
- 浅谈 HTTPS 和 SSL/TLS 协议的背景与基础
来自:编程随想 >> 相关背景知识 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 大致了解 HTTP 和 ...
- 浅谈“POODLE信息泄露漏洞”
一:漏洞名称: POODLE信息泄露漏洞 描述: POODLE即Padding Oracle On Downgraded Legacy Encryption.是安全漏洞(CVE-2014-3566) ...
- Android应用安全开发之浅谈加密算法的坑
<Android应用安全开发之浅谈加密算法的坑> 作者:阿里移动安全@伊樵,@舟海 阿里聚安全,一站式解决应用开发安全问题 Android开发中,难免会遇到需要加解密一些数据内容存 ...
- 【技术分享】Android应用安全开发之浅谈加密算法的坑
<Android应用安全开发之浅谈加密算法的坑> 作者:阿里移动安全@伊樵,@舟海 阿里聚安全,一站式解决应用开发安全问题 Android开发中,难免会遇到需要加解密一些数据内容存到 ...
- Android安全开发之浅谈加密算法的坑
Android安全开发之浅谈加密算法的坑 作者:伊樵.舟海@阿里聚安全 Android开发中,难免会遇到需要加解密一些数据内容存到本地文件.或者通过网络传输到其他服务器和设备的问题,但并不是使用了加密 ...
- 浅谈在游戏陪玩开发中常见的几种加密算法及实现
前言 数字签名.信息加密是游戏陪玩开发前后端都经常需要使用到的技术,应用场景包括了用户登入.交易.信息通讯.oauth 等等,不同的应用场景需要游戏陪玩开发时使用到不同的签名加密算法,或者需要搭配不一 ...
- 浅谈HTTPS以及Fiddler抓取HTTPS协议
原文 浅谈HTTPS以及Fiddler抓取HTTPS协议 最近想尝试基于Fiddler的录制功能做一些接口的获取和处理工作,碰到的一个问题就是简单连接Fiddler只能抓取HTTP协议,关键的登录请求 ...
最新文章
- C++ - emplace_back 和 push_back 的区别
- 按键精灵_按键精灵——办公常用脚本集锦
- 【Nginx】Auth 认证
- rest api如何创建_REST:创建资源
- 热敏电阻温度特性曲线_热敏电阻与体温计的应用关系
- 使用vue的sync修饰符进行子父组件的数据绑定
- pyqt5 发送键盘信号_Python教程 | Pyqt5实战教程之操作交互处理,原来这么简单!...
- 【辨异】entice, tempt, lure, seduce, induce
- 机器学习- 吴恩达Andrew Ng Week6 知识总结 Machine Learning System Design
- CSharp中委托(一)委托、匿名函数、lambda表达式、多播委托、窗体传值、泛型委托
- linux清除所有后台程序,Linux查看和关闭后台运行程序的方法
- 流程图用什么软件做?好用的流程图软件盘点
- Ansible的安装和全面介绍
- sublime主题选择
- 【北交所周报】IPO上会5过5;四成个股实现上涨,硅烷科技涨56%,成单周涨幅最大个股;...
- 应届生求职面试真的有那么难吗
- 12级软件测试课程博客汇总
- 安卓中关于图片的类型
- Qt creator学习笔记(一)认识Qt
- 北京市财政局数据备份设备购置建设项目招标公告7,977,038.00万元