如何修复Apache(httpd)中的'logjam'漏洞


56

最近,已经发布了Diffie-Hellman中的一个新漏洞,非正式地称为“ logjam”,为此页面已汇总在一起,建议如何应对该漏洞:

对于正确部署TLS的Diffie-Hellman,我们有三点建议:

  1. 禁用导出密码套件。即使现代浏览器不再支持导出套件,但FREAK和Logjam攻击仍允许中间人攻击者诱骗浏览器使用导出级加密,然后可以解密TLS连接。出口密码是1990年代政策的残余,该政策阻止了从美国出口强大的密码协议。没有现代客户依赖导出套件,禁用它们几乎没有什么缺点。
  2. 部署(临时)椭圆曲线Diffie-Hellman(ECDHE)。椭圆曲线Diffie-Hellman(ECDH)密钥交换避免了所有已知的可行密码分析攻击,现代Web浏览器现在更喜欢ECDHE,而不是原始的有限域Diffie-Hellman。我们用来攻击标准Diffie-Hellman组的离散对数算法不能从预计算中获得那么强的优势,并且各个服务器不需要生成唯一的椭圆曲线。
  3. 生成一个强大的,独特的Diffie Hellman组。数百万个服务器使用了几个固定组,这使它们成为预计算和潜在窃听的最佳目标。管理员应使用“安全”素数为每个网站或服务器生成唯一的2048位或更高的Diffie-Hellman组。

根据上述建议,应采取哪些最佳实践步骤来保护服务器安全?


Answers:


82

您链接文章中,建议采取三个步骤来保护自己免受此漏洞的侵害。原则上,这些步骤适用于您可以与SSL / TLS一起使用的任何软件,但是在这里,我们将处理将其应用于Apache(httpd)的特定步骤,因为这是有问题的软件。

  1. 禁用导出密码套件

处理了我们将在下面的2.中进行的配置更改(!EXPORTSSLCipherSuite行的结尾处是如何禁用导出密码套件)

  1. 部署(星历)椭圆曲线Diffie-Hellman(ECDHE)

对于这一点,你需要在你的Apache配置文件编辑一些设置-即SSLProtocolSSLCipherSuiteSSLHonorCipherOrder有一个“最佳实践”的设置。如下所示就足够了:

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

注意:作为该SSLCipherSuite设置使用,这是一直在变,这是一个好主意,咨询资源,如这一个检查最新的推荐配置。

3.产生一个强大的,独特的Diffie Hellman组

为此,您可以运行

openssl dhparam -out dhparams.pem 2048

请注意,这会在生成参数的同时给服务器带来巨大的负载-您始终可以通过在另一台计算机上生成参数,然后使用scp或类似方法将其传输到有问题的服务器上来解决此潜在问题。

要使用dhparamsApache中新生成的这些内容,请参阅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"

无论哪种Apache配置与您的特定SSL / TLS实施相关-通常在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

您应该检查Apache版本是否晚于这些版本号,具体取决于您的发行版;如果不是,请-尽可能对其进行更新。

完成上述步骤以更新配置,并重新启动Apache服务以应用更改后,应通过在SSLLabs和与该特定漏洞相关的文章上运行测试来检查配置是否符合要求。


1
至于通过生成参数给服务器带来的负载,您始终可以在另一台计算机上生成它们,只需将文件scp甚至复制粘贴到目标服务器即可。无需在生产服务器中生成参数。
Erathiel

2
更改配置后,您可能还要确保在SSLLabs.com上进行检查。
user2428118

2
在Apache / 2.2.22(Ubuntu 12.04)中是否可以解决此漏洞?我将dhparams.pem附加到certificate.crt上,但是weakdh.org/sysadmin.html仍然抱怨
2015年

2
@tersmitten这是一个完全独立的问题。
迈克尔·汉普顿

3
您可以始终通过“ nice”命令运行密钥生成。因此,可以将其表示为:nice 19 openssl dhparam -out dhparams.pem 2048。这将工作更长的时间,但只会消耗未使用的cpu时间。
Znik 2015年

1

基于Winni Neessen的补丁,我已经发布了针对Apache / 2.2.22(Debian Wheezy,也许在Ubuntu上也可以使用)的修复程序:https ://flo.sh/debian-wheezy-apache2-logjam-fix/-thx 。供您反馈。


3
这比解决方案更像是骇客的骇客。将最新的nginx放在您的apache前面作为反向代理会容易得多,而且不依赖于3rd-party-apache。
那边的那个人

6
我们为什么要相信这些二进制文件?
CVn 2015年

2
您不必信任二进制文件。您可以花一些时间按照说明的步骤很容易地自己重新编译apache2.2.x。这将进一步提高您的安全性,因为这样您的设置便具有唯一的主键。
2015年

建议人们不要抱怨补丁可以解决开源软件中的问题。
Florian Heigl 2015年

@FlorianHeigl我什至不知道该说些什么...
BE77Y

-7

与其采用上述“黑客”的复杂方法,不如考虑改用nginx作为主要的Web服务器软件(而不仅仅是缓存或代理)。在安全性方面,显然比现有的Apache引擎更符合当前标准。通过使用nginx存储库,它为您提供了比apache更最新的稳定Web服务器引擎。

我完全切换了。为我节省了很多有关TLS的耗时问题解决程序,并且-对于我们的配置-同时还释放了很多RAM。实际上,与我已经习惯的无数httpd / apache的配置复杂性相比,我发现使用nginx令人耳目一新。可能是个口味问题,我转身之前对httpd / apache rewrite / config / maintenance变得非常流利,而且它比我想象的要容易。可在线获取有关nginx config的适当最新信息,其用户群庞大,活跃且支持友好。 https://news.netcraft.com/wp-content/uploads/2018/11/wpid-wss-top-1m-share.png


3
nginx的设置为允许导出密码会正好为脆弱的僵局攻击作为Apache服务器设置为允许导出密码。另外,该问题要求在Apache中提供解决方案。
CVn 2015年

2
实际上,解决方案:要么切换到为您绝对需要更新版本的软件提供更多最新软件包的发行版(而不仅仅是反向移植的错误修复程序,例如Debian或CentOS),要么自己构建软件包从源代码(这并不困难)并使用包管理器进行安装,或者从源代码进行普通的旧安装(也并不困难,但需要更多的工作来管理)。对于一个问“如何减轻Y软件中的漏洞X?”的问题,回答“用Z软件替换Y软件”通常不是一个有用的答案。
CVn 2015年

1
从Apache升级到Nginx不是升级,而是替代。向后移植是一种可能。如果您在Apache解决方案上投入了大量工作,则完全将其丢弃并替换为其他解决方案也需要大量工作。这个问题仍然是围绕Apache而非Nginx的解决方案。我不会花更多时间争论这个问题;发布答案时,请确保他们按照页面顶部的要求回答问题。如果您想发布一个鼓励人们从Apache切换到Nginx的答案,请务必这样做,但是要提出一个允许Nginx的问题。
CVn 2015年

1
因此,正确配置软件以使其免受已知攻击的威胁是“复杂的黑客攻击途径”吗?我通过简单的apache配置在ssllabs.com上获得了A +,您只需要花点时间并做一些研究,以了解如何正确配置您正在使用的软件,而这里没有黑客……
Chazy Chaz

1
@朱利叶斯-不赞成投票的人更多是因为您对所提问题的答案缺乏价值,而不是任何反对nginx vs apache的人。碰巧的是,由于我的偏爱,我只使用了nginx-但是正是我回答了这个问题。对于“如何解决(任何问题)”,“切换到其他软件”不是可接受的答案。更不用说,您也完全错过了真正的漏洞所在–它是在diffie-hellman密钥交换中,而不是apache(或nginx或sshd或...)
BE77Y
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.