SSL/TLS 服务器瞬时 Diffie-Hellman 公共密钥过弱 漏洞修复

问题描述

写在前面:在用漏扫设备做漏扫时扫到的一个中危,在Windows下主要跑在5986端口的WinRM服务。
Windows远程管理(WinRM)服务是Windows Server 2003 R2以上版本中一种新式的方便远程管理的服务。通过WinRM服务,便于在日常工作中远程管理服务器,或通过脚本同时管理多台服务器,来提高工作效率。winrm默认使用5985/5986端口通信,5985是http协议,5986是https协议。
安全套接层(Secure Sockets Layer,SSL),一种安全协议,是网景公司(Netscape)在推出Web浏览器首版的同时提出的,目的是为网络通信提供安全及数据完整性。SSL在传输层对网络连接进行加密。传输层安全TLS(Transport LayerSecurity),IETF对SSL协议标准化(RFC 2246)后的产物,与SSL 3.0差异很小。当服务器SSL/TLS的瞬时Diffie-Hellman公共密钥小于等于1024位时,存在可以恢复纯文本信息的风险。


https://www.openssl.org/blog/blog/2015/05/20/logjam-freak-upcoming-changes/
https://weakdh.org/sysadmin.html
https://en.wikipedia.org/wiki/DiffieE28093Hellman_key_exchange#Security

解决办法

  • http服务器相关配置
    首先生成大于1024bit(例如2048bit)的dhkey
openssl dhparam -out dhparams.pem 2048

然后在对应服务器中配置
Apache2.4.8及以后版本
使用如下配置命令配置(http.conf中或者对应的虚拟主机配置文件中添加)
SSLOpenSSLConfCmd DHParameters "{path to dhparams.pem}"
Apache2.4.7版本、Apache2.2.31版本及以后版本,redhat debian等大多发行版中最新Apache2.2.x通过把dhparams.pem的内容直接附加到证书文件后,Apache2.4.7之前2.4.x版本、Apache2.2.31之前版本dhparam默认为1024bit 无法修改nginx使用如下命令配置(在对应的虚拟主机配置文件nginx.conf中server字段内添加)

ssl_dhparam {path to dhparams.pem}
  • 如果服务器配置无法修改,例如Apache2.2.31之前版本,可以禁用DHE系列算法,采用保密性更好的ECDHE系列算法,如果ECDHE不可用可以采用普通的 RSA。
  • Windows下直接关闭Windows RM服务
    打开services.msc,找到Windows Remote Management (WS-Management)服务,停止服务,并将启动类型改为禁用,这时候在看5986端口已经没有在监听了。

Windows Remote Management (WS-Management).png

添加新评论