如何检查服务器是否不易受到 Logjam 的攻击?

信息安全 tls openssl diffie-hellman
2021-08-25 02:36:03

作为对Logjam的回应,我想证明我已经强化了我的服务。我知道 DH 参数必须至少为 2048 位并且是自生成的。但我无法找到一种方法来实际检查除 HTTPS 站点之外的其他内容。我可以在这里做)我也想检查我的其他受 SSL 保护的服务:

  • 邮件(Postfix 和 Dovecot)
  • SSH
  • VPN
  • 任何其他

openssl s_client -starttls smtp -crlf -connect localhost:25做到了但结果是:

CONNECTED(00000003) depth=3 C = SE, O = ME, OU = Also ME, CN = Me again verify error:num=19:self signed certificate in certificate chain

verify return:0 Server certificate

-SNIPED SOME VALUES-

--- SSL handshake has read 6118 bytes and written 466 bytes

--- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384 Server public key is 2048 bit Secure Renegotiation IS supported Compression:

NONE Expansion: NONE SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: 6EAA8A5B22E8C18E9D0E78A0B08447C8449E9B9543601BC53F57CB2059597754
    Session-ID-ctx: 
    Master-Key: <MASTERKEY>
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1432213909
    Timeout   : 300 (sec)
    Verify return code: 19 (self signed certificate in certificate chain)
--- 250 DSN

如何测试 DH 参数?我应该注意什么才能知道我是否处于危险之中?

3个回答

进行冒烟测试:(从OpenSSL 博客中窃取。(在此处存档。))

openssl s_client -connect www.example.com:443 -cipher "EDH" | grep "Server Temp Key"

密钥应至少为 2048 位,以提供与 RSA-2048 相当的安全余量。今天,使用短于 1024 位的密钥的连接可能已经遇到了麻烦。(注意:您需要 OpenSSL 1.0.2。早期版本的客户端不显示此信息。)

(如果连接立即失败,则服务器根本不支持临时 Diffie-Hellman(OpenSSL 中的“EDH”,其他地方的“DHE”),您可以免受 Logjam 的影响。)

[...]

最后,验证导出密码是否已禁用:

$ openssl s_client -connect www.example.com:443 -cipher "EXP"

连接应该失败。

换句话说:

  • 获取 OpenSSL 1.0.2。
  • -cipher "EDH"选项添加到您的连接字符串。
  • 如果在服务器上启用了导出密码,则假设存在漏洞
  • 如果出现 512 位(或小于 2048 位的任何内容),则假设存在漏洞。

因此,我决定在新帖子中对“StackzOfZtuff”答案发表评论,因为您实际上可以使用此方法更详细地剖析密钥交换。这个答案是从 superuser.com 上的这篇文章中复制的(非常感谢 Thomas Pornin):

使用带有 -msg 选项的 openssl 会产生我们关心的信息

openssl s_client -connect mail.example.com:143 -starttls imap -cipher EDH -msg

这显示了完整的 TLS ServerKeyExchange 消息,例如

<<< TLS 1.2 Handshake [length 030f], ServerKeyExchange 0c 00 03 0b 01 00 ff ff ff ff ff ff ff ff c9 0f da a2 21 68 c2 34 c4 c6 62 8b 80 dc 1c d1 29 02 4e 08 8a 67 cc 74 02 0b be a6 3b 13 9b 22 51 4a

根据 Thomas Pornin 的说法,您可以这样阅读(我逐字复制了以下内容):

  • 0c 00 03 0b:长度为 0x00030B 字节的“ServerKeyExchange”(即“0c”)类型的消息。
  • 第一个元素是作为大整数的 DH 模数,具有两个字节长度的标头。在这里,长度被编码为 01 00,这意味着一个在 0x0100 字节上编码的整数。那是 256 个字节,所以模数的长度在 2041 到 2048 位之间。
  • 随后是模数字节,以无符号大端顺序排列。在这种情况下,该模数的最高字节是 ff ff ff ff.... 然后模数的长度正好为 2048 位。

使用这种方法,您还可以确保您的服务器不使用 RFC 3526 中预定义的 DH 组(我使用 Ubuntu 14.04 的 Apache2.4.7 仍然可以使用,尽管http://httpd.apache.org/docs/2.4/ mod/mod_ssl.html声明此版本应使用添加到 PEM 编码的 SSLCertificateFile 的 DH 参数)。

来自发现漏洞的人

另一个在线测试

这两个给了我矛盾的答案。我认为链接一中的研究人员报告说,如果您的网站可以通过任何方式进行配置以使其被利用,则该网站很容易受到攻击。第二个链接显示更务实的地方,“它现在很脆弱吗?” 信息。