防止 Tomcat 服务器上出现 Logjam 的推荐措施真的消除了弱 DH 密钥的所有风险吗?

信息安全 tls 阿帕奇 脆弱性 雄猫 僵局
2021-08-21 12:43:32

任何人都可以验证此修复程序可以防止Apache Tomcat的Logjam漏洞吗?

我对它的有效性持怀疑态度,因为它没有提到如何在 Tomcat 中实现用户定义的 2048 位 DH 参数文件,但它的密码列表确实使用了“DHE”密码。昨天提到了“SSLDHParametersFile”设置,但它被删除了,可能是由于这个错误,它说 Tomcat 只能处理 1024 位 DH 密钥长度。但我不是这方面的专家,可能会在这里混淆。

目前,WeakDH 网站说您应该将此密码列表添加到Connector文件中server.xml(对于 JSSE)来修复它:

ciphers="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"

3个回答

所以我想我已经正确地解释了你的问题。如果没有,请在评论中开火。

令人困惑的是,diffie hellman 中有几个因素:您是否在椭圆曲线上进行操作,您有什么大小的组(让我们假设“强”和“不强”)以及您是否生成临时私钥/公钥对。

logjam 的问题在于:如果您有一个普通的旧组 DHE 变体,那么如果您可以说服服务器降级到导出(弱变种)级别强度,那么在您破解生成的秘密之前进行一些预计算一个会话在几分钟内。

这是以能够将尺寸变量降级为更小的变量为条件的——如果你可以在普通的旧 DHE 变体上做到这一点,那么你就在做生意。

这需要密码套件包含DHE_..._EXPORT_...在其中,例如TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA. 现在这有一堆其他问题,比如 40 位 DES 等等,但基本上,可能会有一些服务器支持 DHE 的 EXPORT 变体,具有更好的对称密码。或者,如果被说服,他们实际上可能正在协商 40 位 DES。

关键是执行降级攻击。您提供的密码套件列表不允许导出密码。

可以关闭 DH 的所有非 EC 变体。但是,这可能会限制客户端支持。你是否可以如此限制真的取决于你。但是“DHE”本身就很好,除非那里有出口。确保禁用导出密码,并在您链接的答案中遵循 Thomas 的建议。


现在继续SSLDHParametersFile- 在 DHE 中,组的素数和生成器实际上可以提前固定 - 短暂的位是在该组中选择的私钥。这样,通过设置参数,您可以控制服务器使用的大小组。

例如,它的输出可能是:

openssl dhparam 2048 -text
<snip>
    PKCS#3 DH Parameters: (2048 bit)
    prime:
        00:bd:90:31:72:a5:bf:eb:96:b0:0e:1c:1e:3f:ff:
        cd:0a:e2:fc:14:72:50:19:f8:6d:e9:25:3c:3d:21:
        3b:3c:e3:93:9b:2e:a1:b5:98:dc:25:88:9c:9e:55:
        1a:78:36:a8:10:67:f2:f1:37:e7:6b:c7:b8:39:85:
        a7:ec:aa:e9:2f:4e:10:17:fd:72:e1:22:2e:ab:97:
        4b:bf:7b:a2:68:6d:94:a8:ae:df:e0:fb:66:ad:79:
        02:9c:09:ba:47:60:40:12:a8:27:46:ba:8f:a9:8b:
        bd:f5:d2:4e:67:0c:7a:49:f3:9d:80:98:50:4d:8c:
        72:38:47:91:4b:54:1f:3b:74:b5:81:30:c7:89:71:
        b0:87:8a:82:66:b0:06:f6:2e:a6:2b:e8:18:51:23:
        2d:09:d9:0a:87:03:7b:85:8a:27:c6:bd:fa:e9:16:
        70:b3:bf:ad:77:d5:55:72:22:e7:7c:6b:4e:31:2c:
        86:91:7a:51:11:ac:23:9d:5f:3d:f1:f2:83:02:98:
        72:a2:a4:c5:a8:26:40:25:02:59:00:80:22:37:ac:
        38:95:07:76:f5:31:3d:19:f6:81:36:6c:14:fa:d8:
        46:10:e1:b4:fa:5f:e2:9d:2f:a1:78:47:5d:9c:f9:
        ac:0c:06:83:dc:f4:2d:81:17:d4:34:1b:6f:c2:c7:
        2c:0b
    generator: 2 (0x2)

很明显,从您的示例错误来看,听起来还不能在 Tomcat 中使用这些参数文件。我不是 Tomcat 方面的专家,所以,我真的不能说,如果您指示密码套件不允许导出,OpenSSL 应该默认为 1024 位 DH 组,这对于现在来说已经足够了。

然后,当补丁可用时,您可以根据需要升级您的 DH 参数。

作为对 awnser 的补充,我列出了我的实践:


目前我不允许与 tomcat 直接通信,但使用 nginx 设置反向代理连接。

并让 nginx 完成所有 SSL 位。主要优点是可以使用更好的 DH 密钥和密码支持来设置 nginx。作为奖励,如果有人试图通过溢出注入“破解”我的 tomcat。它可能只会到达 nginx 代理而不是 tomcat 本身。(因此攻击者要击败另一层)

禁用任何 CBC 模式密码和 SSL 协议,仅在 server.xml 中启用 TLS 1.1 和 1.2 协议。

Mozilla 对允许的密码也有很好的指南。https://wiki.mozilla.org/Security/Server_Side_TLS