两会在即,系统安全是信息系统的重中之重,近期针对网络系统做了个漏洞扫描,报告出现了部分“SSL Version 2 and 3 Protocol Detection”的漏洞情况,CVSS2和CVSS3都给出了7+的评分,属于高危漏洞。漏洞修复过程虽然不是很复杂但是因大部分的互联网应用基本都会涉及该漏洞,故将问题分析及修复方案简要整理成文,以供分享查阅。
漏洞扫描概要:
SSL Version 2 and 3 Protocol Detection
简述:The remote service encrypts trafficusing a protocol with known weaknesses.
说明:The remote service accepts connectionsencrypted using SSL 2.0 and/or SSL 3.0. These versions of SSL are affected byseveral cryptographic flaws, including: - An insecure padding scheme with CBCciphers. - Insecure session renegotiation and resumption schemes. An attackercan exploit these flaws to conduct man-in-the-middle attacks or to decryptcommunications between the affected service and clients. Although SSL/TLS has asecure means for choosing the highest supported version of the protocol (sothat these versions will be used only if the client or server support nothingbetter), many web browsers implement this in an unsafe way that allows anattacker to downgrade a connection (such as in POODLE). Therefore, it isrecommended that these protocols be disabled entirely. NIST has determined thatSSL 3.0 is no longer acceptable for secure communications. As of the date ofenforcement found in PCI DSS v3.1, any version of SSL will not meet the PCISSC's definition of 'strong cryptography'.
解决方案:Consult the application's documentationto disable SSL 2.0 and 3.0. Use TLS 1.1 (with approved cipher suites) or higherinstead.
问题分析:
众所周知,网站的网络信息传输协议主要是用http和https,而HTTPS则是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性,即由 HTTP 加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。
https的SSL/TLS 系列中有五种协议:SSL v2,SSL v3,TLS v1.0,TLS v1.1和TLS v1.2。其中只有 TLS v1.2 提供了现代的加密算法,而SSL 2.0和/或SSL 3.0加密存在加密漏洞具有CBC密码的不安全填充方案、不安全的会话重新协商和恢复方案,攻击者可以利用这些漏洞进行中间人攻击或解密受影响的服务与客户端之间的通信。
尽管SSL / TLS具有选择协议最高支持版本的安全方法(因此只有在客户端或服务器没有更好支持的情况下才使用这些版本),但是许多Web浏览器均以不安全的方式实施此操作,从而使攻击者能够降级连接(例如在POODLE攻击中)。因此,建议完全禁用这些协议并仅启用TLS v1.2协议。
但是其中要注意一点TLS默认会使用RC4算法,且默认情况下RC4 对于所有应用都是开启的。简单介绍下RC4(又名ARC4 或者ARCFOUR )是应用最广泛的流加密算法,应用在安全套接字层(SSL)(用来保护网络上传输的数据)和WEP(无线网络数据保护)上。但是我们想,如果用RC4来进行网络数据传输的加密和解密,客户端和服务器端要公用一个密钥,如果黑客在使用客户端,它就可以获取客户端的密钥,那么就可以通过获取网络数据流通过密钥解密出相关信息。所以,在启用TLS v1.2的同时也禁用 RC4等低阶对称式的加密算法,启用3DES、AES128和AES256高阶对称加密算法或者RSA证书文件等非对称加密方式;
解决方案:
扫描建议也给出了方案,即关闭SSLv3及以下版本协议启用TLS1.1及以上协议。分析了漏洞产生的原因,那么要定位哪些地方会用到https,网站的转发和部署主要有IIS、apache或者nginx等转发组件,故这里主要整理了这三个工具的修复方案:
IIS是微软自身的工具,可以直接通过禁用注册表方式处理,通过加固方式解决,已整理了附件加固脚本(参考下文附录);
Apache增加配置禁用协议:修改配置文件/etc/apache2/mods-availabl/ssl.conf把全部SSLProtocol开头的改成如下: SSLProtocolall -SSLv2 -SSLv3
Nginx配置增加协议说明:ssl on; ssl_certificate server.cer;ssl_certificate_key server.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
网上有些朋友说通过修改注册表加固了但是复扫漏洞还存在是因为可能使用到了其他网络发布服务,比如这里的apache、nginx,以及weblogic等,只要找到对应的配置就可以针对性的修复了,以上已亲测验证可行。
总结:
系统的漏洞是层出不穷,但是是不是每一个高危漏洞是否值得修复,还是需要好好斟酌的,有些会涉及到组件或者中间件的依赖可以通过防火墙或者网络隔离等方式处理,有些在操作系统内核的补丁,更新会有不明确的兼容性问题,所以在修复漏洞的过程中还是要全面评估产生的逻辑“病理”才好“对症下药”,但是药吃多了也可能出现副作用,不是吗?
文章来源:微信公众号(思快奇)
参考阅读:
CSDN:常见的几种SSL/TLS漏洞及攻击方式
百度百科:https、RC4算法
附录:
IIS加固脚本(也可以使用IISCrypto工具处理)
WindowsRegistry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\Multi-ProtocolUnified Hello]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\Multi-ProtocolUnified Hello\Server]
"Enabled"=dword:00000000
"DisabledByDefault"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\PCT1.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\PCT1.0\Server]
"Enabled"=dword:00000000
"DisabledByDefault"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL2.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL2.0\Client]
"Enabled"=dword:00000000
"DisabledByDefault"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL2.0\Server]
"Enabled"=dword:00000000
"DisabledByDefault"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL3.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL3.0\Client]
"Enabled"=dword:00000000
"DisabledByDefault"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL3.0\Server]
"Enabled"=dword:00000000
"DisabledByDefault"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS1.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS1.0\Client]
"Enabled"=dword:00000000
"DisabledByDefault"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS1.0\Server]
"Enabled"=dword:00000000
"DisabledByDefault"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS1.1]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS1.1\Client]
"Enabled"=dword:00000000
"DisabledByDefault"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS1.1\Server]
"Enabled"=dword:00000000
"DisabledByDefault"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS1.2]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS1.2\Server]
"Enabled"=dword:ffffffff
"DisabledByDefault"=dword:00000000
RC4算法禁用脚本
WindowsRegistry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\AES128/128]
"Enabled"=dword:ffffffff
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\AES256/256]
"Enabled"=dword:ffffffff
[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\RC2128/128]
"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\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
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC464/128]
"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\TripleDES 168]
"Enabled"=dword:ffffffff