1. 前言
在当今数字化时代,网络安全至关重要。SSL/TLS 协议作为保障网络通信安全的重要手段,广泛应用于各类网络应用中。然而,如同任何技术一样,SSL/TLS 也并非绝对安全,存在着一些可能被攻击者利用的漏洞。本文将深入分析 SSL/TLS 密码套件中常见的漏洞种类及其原因,并详细介绍相应的修复方法,旨在帮助读者更好地理解和应对这些安全风险,确保网络通信的安全性和可靠性。
2. SSL/TLS密码套件漏洞的常见种类和原因
2.1 SSL/TLS 协议信息泄露漏洞(CVE-2016-2183)
使用nmap对某个域名做密码学套件的扫描。扫描结果如下:
可以看到:
过时的用 TLSv1.0 和 TLSv1.1 协议依旧支持,同时压缩算法部分有TLS_RSA_WITH_3DES_EDE_CBC_SHA(rsa 2048)被标记为-C,表示存在潜在风险。同时服务器警告 64 - bit 块密码 3DES 容易受到 SWEET32 攻击。
2.2 SSL/TLS 服务器瞬时 Diffie-Hellman 公共密钥过弱漏 洞
使用nmap对某个域名做密码学套件的扫描。扫描结果如下:
扫描结果显示`Diffie - Hellman Key Exchange Insufficient Group Strength`,即服务器在使用Diffie - Hellman密钥交换时,所使用的组强度不够。这种情况可能导致服务器容易受到被动窃听攻击。攻击者可能通过分析网络流量,利用Diffie - Hellman密钥交换的弱点,获取到加密通信中的敏感信息,从而破坏通信的保密性和完整性。
2.3 OpenSSL 拒绝服务漏洞(CVE-2016-8610)
OpenSSL 是一种开放源码的 SSL 实现,用来实现网络通信的高强度加密,现 在被广泛地用于各种网络应用程序中。OpenSSL 在 SSL/TLS 协议握手过程的 实现中,允许客户端重复发送类型为 SSL3_RT_ALERT 级别为 SSL3_AL_WARNING 的内容未定义警告包,且 OpenSSL 在实现中遇到该未定 义警告包时仍选择忽略并继续处理接下来的通信内容(如果有的话)。攻 击者可以容易的利用该缺陷在一个消息中发送大量此未定义内容的警告 包,使服务或进程陷入无意义的循环,从而导致服务进程占掉 100 的 CPU 使用率。
检测方法:
通过socket发送如下数据
rb'\x16\x03\x01\x01"\x01\x00\x01\x1e\x03\x01\xcca\xdbg\\U\xb3\xdb\xc9\x
187\x02|\x03M2s\x12\xdc\x10\xe6\xe4\xa0\xab\x85\x81\xe5fM\xd0<i\x00\x0
0\x88\xc00\xc0,\xc0(\xc0$\xc0\x14\xc0\n\x00\xa3\x00\x9f\x00k\x00j\x009\x0
08\x00\x88\x00\x87\xc02\xc0.\xc0*\xc0&\xc0\x0f\xc0\x05\x00\x9d\x00=\x00
5\x00\x84\xc0\x12\xc0\x08\x00\x16\x00\x13\xc0\r\xc0\x03\x00\n\xc0/\xc0+\
xc0\'\xc0#\xc0\x13\xc0\t\x00\xa2\x00\x9e\x00g\x00@\x003\x002\x00\x9a\x0
0\x99\x00E\x00D\xc01\xc0-\xc0)\xc0%\xc0\x0e\xc0\x04\x00\x9c\x00<\x00/\x
00\x96\x00A\xc0\x11\xc0\x07\xc0\x0c\xc0\x02\x00\x05\x00\x04\x00\x15\x00
\x12\x00\t\x00\xff\x01\x00\x00m\x00\x0b\x00\x04\x03\x00\x01\x02\x00\n\x
78
004\x002\x00\x0e\x00\r\x00\x19\x00\x0b\x00\x0c\x00\x18\x00\t\x00\n\x00\
x16\x00\x17\x00\x08\x00\x06\x00\x07\x00\x14\x00\x15\x00\x04\x00\x05\x0
0\x12\x00\x13\x00\x01\x00\x02\x00\x03\x00\x0f\x00\x10\x00\x11\x00#\x00\
x00\x00\r\x00
\x00\x1e\x06\x01\x06\x02\x06\x03\x05\x01\x05\x02\x05\x03\x04\x01\x04\x
02\x04\x03\x03\x01\x03\x02\x03\x03\x02\x01\x02\x02\x02\x03\x00\x0f\x00\
x01\x01'
如果收到响应
rb'\x16\x03\x01\x00\x04'
则表示漏洞存在。
相关资料:
https://www.openssl.org/source/ https://security.360.cn/cve/CVE-2016-8610/ https://access.redhat.com/errata/RHSA-2017:1414
https://access.redhat.com/errata/RHSA-2017:1413
3. 应用系统的架构
ISO 7 层架构和 TCP/4 层架构有不同的含义和应用场景,主要区别如下:
3.1 层次结构
ISO 7 层架构
从下到上依次为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
物理层负责处理物理介质上的信号传输,如网线、光纤等;数据链路层关注的是在相邻节点间可靠地传输数据帧;网络层负责将数据包从源节点路由到目标节点;传输层提供端到端的可靠或不可靠的数据传输服务;会话层建立、维护和管理会话;表示层处理数据的表示形式,如加密、压缩等;应用层是用户与网络交互的接口,包括各种应用程序。
TCP/IP 4 层架构
由网络接口层、网络层、传输层和应用层组成。
网络接口层对应于 ISO 模型中的物理层和数据链路层的功能,主要负责网络接入和数据链路的相关操作;网络层负责 IP 寻址和路由选择;传输层提供 TCP(可靠传输)和 UDP(不可靠传输)等服务;应用层包含各种应用协议和应用程序,如 HTTP、FTP 等。
3.2 功能重点
ISO 7 层架构
更注重对网络通信过程中从物理介质到应用程序的全方位、精细化的功能划分和描述。
每个层次都有其明确的功能和接口规范,有利于不同厂商的设备和软件在各个层次上进行标准化的开发和集成。例如,在表示层可以通过统一的标准来实现数据的加密和解密操作,使得不同系统之间能够正确地处理和理解数据的表示形式。
TCP/IP 4 层架构
更侧重于互联网环境下的实际应用和网络通信的核心功能。
它简化了层次结构,突出了网络层的 IP 协议和传输层的 TCP、UDP 协议的重要性。网络层的 IP 协议实现了全球范围内的寻址和路由,传输层的 TCP 和 UDP 则满足了不同应用场景下对数据传输可靠性和效率的要求。例如,在设计一个简单的 Web 应用时,主要关注的是应用层的 HTTP 协议、传输层的 TCP 协议以及网络层的 IP 协议,而对底层的物理层和数据链路层细节通常不需要过多考虑。
3.3 在阿里云服务器配置中的应用
ISO 7 层架构应用
在一些复杂的企业级应用场景中,可能会涉及到对各个层次的精细配置和管理。例如,在配置服务器的网络安全时,可能需要在不同层次上设置访问控制。在物理层可以通过限制服务器机房的物理访问来保护设备;在数据链路层可以设置 MAC 地址过滤;在网络层可以配置防火墙规则进行 IP 地址过滤;在传输层可以通过配置 SSL/TLS 协议来保障数据传输的安全;在会话层可以管理用户会话的超时和权限;在表示层可以对数据进行加密存储和传输;在应用层可以对不同的应用程序设置用户权限和访问规则。
TCP/IP 4 层架构应用
在阿里云服务器配置中,通常更关注网络接口层的网络接入方式(如以太网、无线等),网络层的 IP 地址分配和路由设置,传输层的协议选择(如 TCP 或 UDP)以及应用层的应用程序部署和配置。例如,在配置一个 Web 服务器时,会在网络接口层确保网络连接正常,在网络层为服务器分配一个公网 IP 地址并设置正确的路由,在传输层选择 TCP 协议来保障 HTTP 请求的可靠传输,在应用层安装和配置 Web 应用程序相关的软件(如 Apache、NGINX 等)。
用户客户端访问应用服务器,一个常见的途径步骤是首先访问WAF,再到NGINX,最后到服务器。
所以我们在修复SSL/TLS密码套件漏洞时,要首先了解这是什么架构。
以阿里云为例,如果阿里云上看到负载均衡的监听器管理的配置如下
说明目前负载均衡配置的是tcp4层协议,需要在服务器上修改协议版本配置。参考4.3的方法可以修复漏洞
其实我们建议尽量把负载均衡升级(新建一个新的7层协议),需要重新配置负载均衡,并且修改域名映射。当然,这需要影响业务,需要应用维护人员协商时间去操作,并且配合测试,动作比较大。那如果是在7层协议的情况下,用户需要找到最外层的设备,如果是WAF,建议采用4.1方法;如果是Nginx,建议采用4.2的方法。
4.修复方法
4.1 修改WAF配置
从阿里云的WAF使用说明中可以看到 只有通过CNAME接入方式接入域名时,您可以在接入域名配置向导的配置监听任务中,自定义允许WAF使用的加密套件类型(如下图所示)。自定义加密套件类型后,WAF只监听支持指定加密套件的客户端的请求。
参考资料:
WAF支持的加密套件类型_Web应用防火墙(WAF)-阿里云帮助中心
4.2 修改NGINX配置
NGINX关闭低版本tls协议 禁用 tls1.0 tls1.1等协议
配置示例:
# 位于 Nginx 配置文件 (通常是 /etc/nginx/nginx.conf 或者在特定站点的配置文件中 /etc/nginx/sites-available/your-site) 中
server {
listen 443 ssl;
server_name your-domain.com;
ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/private.key;
# 启用 TLSv1.2 和 TLSv1.3,禁用 TLSv1 和 TLSv1.1
ssl_protocols TLSv1.2 TLSv1.3;
# 使用安全的加密套件
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;
# 其他 SSL 配置
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_dhparam /path/to/dhparam.pem;
# 其他 Nginx 配置
location / {
proxy_pass http://your_backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
在这个配置中,ssl_protocols TLSv1.2 TLSv1.3; 明确地禁用了 TLSv1 和 TLSv1.1。
ssl_ciphers 指定了一些安全的加密套件。
ssl_prefer_server_ciphers on; 配置 Nginx 使用服务器优选的加密套件。
确保你已经生成了 dhparam.pem 文件,可以通过以下命令生成:
openssl dhparam -out /path/to/dhparam.pem 2048
完成配置后,重启 Nginx 以应用更改:
sudo systemctl restart nginx
注意!这里可能有坑!我按上面的设置,通过检测工具(SSL Server Test (Powered by Qualys SSL Labs)),发现还是没有禁用tls1.1,后来折腾好久,才发现原因,是这台服务器不止一个网站,有别的vhost文件在用着tls1.1,如果想要禁用tls1.1,必须是整个服务器的nginx配置里都禁用tls1.1
4.3 服务器tomcat配置修改
修改conf下面的server.xml
<Connector 这一段里面增加如下两个配置:
配置1:
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_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"
配置2:
sslEnabledProtocols="TLSv1.2"
配置完成的配置文件截图如下:
最后重启tomcat,就发现生效了。
参考资料:
TLSv1.2版本_mb65051f41d96ac的技术博客_51CTO博客
4.4 windows服务器本地修复
4.4.1 下载一键式优化加密套件工具
天威诚信工具ITrusIIS.exe下载地址 http://www.itrus.cn/soft/ITrusIIS.exe
运行后点击“最佳配置”,然后去除红线这条后点“应用”
4.4.2 可能的报错解决
调整后如果打开浏览器报“无法访问此网页”,按如下方法修改注册表可以解决
禁用HTTP/2
检查以下目录
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters]
“EnableHttp2Tls”=dword:00000000
“EnableHttp2Cleartext”=dword:00000000
没有就添加上面两值
参考资料:
https://blog.csdn.net/qiaowei361/article/details/121416614
小威开讲啦 | 如何修复 POODLE SSLv3 安全漏洞 (CVE-2014-3566)
4.5 升级opensll
对于 OpenSSL 拒绝服务漏洞(CVE-2016-8610),建议方法是升级OPENSSL。但是需要注意这里的版本范围
参考资料:
OpenSSL 安全漏洞(CVE-2016-8610)修复详情步骤-CSDN博客
5.最后
本文深入分析 SSL/TLS 密码套件中常见的漏洞种类和修复方法。 通过对 SSL/TLS 密码套件漏洞的分析以及应用系统架构的阐述,我们明确了修复的方向和方法。根据架构的实际情况,修复的方法可以是修改 WAF、NGINX 配置、服务器端的 tomcat 设置以及针对 Windows 服务器的特定配置修复。修复后要及时验证是否已经修复成功。