Chr*_*yer 56 ssl httpd vulnerability apache-2.2 apache-2.4
最近,Diffie-Hellman 中的一个新漏洞(非正式地称为“logjam”)已经发布,为此页面已汇总,建议如何应对该漏洞:
我们为正确部署 Diffie-Hellman for TLS 提供了三个建议:
- 禁用导出密码套件。尽管现代浏览器不再支持导出套件,FREAK 和 Logjam 攻击允许中间人攻击者诱骗浏览器使用导出级加密,然后可以解密 TLS 连接。出口密码是 1990 年代政策的残余,该政策阻止了强大的加密协议从美国出口。没有现代客户依赖导出套件,禁用它们几乎没有缺点。
- 部署(临时)椭圆曲线 Diffie-Hellman (ECDHE)。椭圆曲线 Diffie-Hellman (ECDH) 密钥交换避免了所有已知的可行密码分析攻击,并且现代 Web 浏览器现在更喜欢 ECDHE,而不是原始的有限域 Diffie-Hellman。我们用来攻击标准 Diffie-Hellman 组的离散对数算法没有从预计算中获得如此强大的优势,并且单个服务器不需要生成唯一的椭圆曲线。
- 生成一个强大的、独特的 Diffie Hellman 组。数百万台服务器使用几个固定组,这使它们成为预计算和潜在窃听的最佳目标。管理员应该为每个网站或服务器使用“安全”素数生成唯一的、2048 位或更强大的 Diffie-Hellman 组。
根据上述建议,我应该采取哪些最佳实践步骤来保护我的服务器?
BE7*_*77Y 82
从您链接的文章 中,推荐了三个步骤来保护自己免受此漏洞的侵害。原则上,这些步骤适用于您可能与 SSL/TLS 一起使用的任何软件,但在这里我们将处理将它们应用于 Apache (httpd) 的具体步骤,因为这是有问题的软件。
- 禁用导出密码套件
在我们将在下面的 2. 中进行的配置更改中进行处理(!EXPORT
接近SSLCipherSuite
行尾是我们将如何禁用导出密码套件)
- 部署(临时)椭圆曲线 Diffie-Hellman (ECDHE)
对于这一点,你需要在你的Apache配置文件编辑一些设置-即SSLProtocol
,SSLCipherSuite
,SSLHonorCipherOrder
有一个“最佳实践”的设置。类似以下内容就足够了:
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder on
Run Code Online (Sandbox Code Playgroud)
注意:至于使用哪个SSLCipherSuite
设置,这一直在变化,最好查阅诸如this之类的资源以检查最新的推荐配置。
3. 建立一个强大的、独特的 Diffie Hellman Group
为此,您可以运行
openssl dhparam -out dhparams.pem 2048
.
请注意,这会在生成参数时给服务器带来大量负载 - 您始终可以通过在另一台机器上生成参数并使用scp
或类似方法将它们传输到相关服务器上以供使用来解决这个潜在问题。
要dhparams
在 Apache 中使用这些新生成的,请从Apache 文档:
要生成自定义 DH 参数,请使用 openssl dhparam 命令。或者,您可以将RFC 2409 第 6.2 节中的以下标准 1024 位 DH 参数附加到相应的 SSLCertificateFile 文件:
(强调我的)
然后是标准的 1024 位 DH 参数。由此我们可以推断,自定义生成的 DH 参数可以简单地附加到相关SSLCertificateFile
的问题中。
为此,请运行类似于以下内容的程序:
cat /path/to/custom/dhparam >> /path/to/sslcertfile
或者,根据您最初链接的文章的Apache 小节,如果您不想更改证书文件本身,您也可以指定您创建的自定义 dhparams 文件,因此:
SSLOpenSSLConfCmd DHParameters "/path/to/dhparams.pem"
在任何与您的特定 SSL/TLS 实现相关的 Apache 配置中 - 通常在conf.d/ssl.conf
或conf.d/vhosts.conf
但这将根据您配置 Apache 的方式而有所不同。
值得注意的是,根据此链接,
在 Apache 2.4.7 之前,DH 参数始终设置为 1024 位且用户不可配置。这已在 mod_ssl 2.4.7 中得到修复,Red Hat 已使用 httpd-2.2.15-32.el6 向后移植到其 RHEL 6 Apache 2.2 发行版中
在 Debian Wheezy 上,将 apache2 升级到 2.2.22-13+deb7u4 或更高版本,并将 openssl 升级到 1.0.1e-2+deb7u17。上面的 SSLCipherSuite 不能完美运行,而是按照此博客使用以下内容:
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-DSS-AES128-SHA256:DHE-DSS-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!DHE-RSA-AES128-GCM-SHA256:!DHE-RSA-AES256-GCM-SHA384:!DHE-RSA-AES128-SHA256:!DHE-RSA-AES256-SHA:!DHE-RSA-AES128-SHA:!DHE-RSA-AES256-SHA256:!DHE-RSA-CAMELLIA128-SHA:!DHE-RSA-CAMELLIA256-SHA
Run Code Online (Sandbox Code Playgroud)
您应该根据您的发行版检查您的 Apache 版本是否晚于这些版本号,如果不是 - 尽可能更新它。
一旦您执行了上述步骤来更新您的配置,并重新启动 Apache 服务以应用更改,您应该通过在SSLLabs和与此特定漏洞相关的文章上运行测试来检查配置是否符合要求。