这是一个 Zeek 软件包,用于检测使用 eMudhra 中间 CA 证书(其私钥已泄露或为众所周知的弱密钥)的连接。
更多信息请参见原始 Bugzilla 条目 或 https://emudhra.we-have-a-problem.com/。
请注意,此检测仅适用于使用 TLS 1.2 及以下版本的连接。在 TLS 1.3 中,证书是加密的,Zeek 无法得知哪些证书在网络上传输。
eMudhra CA 签发了若干中间 CA 证书,其 ECDSA 私钥非常弱(例如私钥就是数字 4)。
因此,任何人都可以轻易创建由任何受影响的 CA 证书签名的证书。据目前所知,共有 8 个受影响的密钥,其中 6 个位于曾受 Web PKI 信任的证书中。
虽然主流网页浏览器已立即不再信任受影响的中间 CA 证书,但那些无法及时更新的设备可能会在相当长的时间内面临接受这些恶意证书的风险。
有关详细背景和时间线,请参见此 Bugzilla 条目。
此软件包匹配受影响中间 CA 证书的主体公钥信息(SPKI)。SPKI 是证书中包含已泄露密钥的部分——因此这也能检测到任何可能未知的交叉签名,或任何其他可能使用相同密钥创建的证书。
SPKI 列表:
| 中间证书 | SPKI SHA-256 |
|---|---|
| EM EV TLS CA - G3B (eMudhra BV) | E0254C7FCDC265E2F0F8A428DABB75AB4AE039B4872D62F5EE57F0877D5A8A41 |
| EM OV TLS CA - G3B (eMudhra BV) | 43BFFA19D6EF651451F6841E019931E96F6F2EAEFF28AB4B6F1CE4576DE2717B |
| EM DV TLS CA - G3B (eMudhra BV) | EBED6475C2C2D80FCB199F3FE8DD6E6B3CE60B77EB15D4E42C3DEC0C6F5B5105 |
| EM EV TLS CA - G3C (eMudhra Inc) | 5C0660A2B164910D8FF589C18E14552E9E0EC237DCEFE2CB736D41A4811F81A0 |
| EM OV TLS CA - G3C (eMudhra Inc) | 63ECEFEE431D49523BC1136C4E72D0206A477086CAF606CD5CF025686C109CF8 |
| EM DV TLS CA - G3C (eMudhra Inc) | 49DD353DC2B919A3770645117D0E60C16115E7D1BC259EEFE734B00EA434FE5F |
| EM OV CS CA - G3B (eMudhra BV) | EC4FFA1AD0AC88081314B7AAFFEF6A91F97CD57291BB5BA686C5415F5EB4F6B6 |
| EM OV CS CA - G3C (eMudhra Inc) | 92C063D67E8F14DB71D288E11266FFDAF69CBF115F7BAB14F3BC2F68D25E0E30 |
zkg install corelight/emudhra-weak-keys
或直接加载脚本:
zeek -r trace.pcap /path/to/emudhra-weak-keys/scripts
此软件包会将 Zeek 解析的每个证书与该列表进行比对。
所有通知类型均位于 EMudhraWeakKeys:: 下
| 通知 | 观察结果 |
|---|---|
Compromised_Intermediate_Cert | 在连接中看到受影响的中间证书 |
Compromised_Intermediate_Cert_Established | 看到受影响的证书,握手已完成 |
Compromised_Intermediate_Issuer | 在连接中看到签发者受影响的证书 |
Compromised_Intermediate_Issuer_Established | 看到受影响的签发者,握手已完成 |
结果写入 notice.log;不会创建额外的日志。
默认情况下,_Cert 通知对每个服务器 IP 地址每天发出一次,_Established 通知对每个客户端 IP 地址每天发出一次。
请注意,Compromised_Intermediate_Cert 通知表示连接中存在已泄露的证书,而 Compromised_Intermediate_Issuer 通知仅匹配证书的签发者字符串;这是一个较弱的信号。
此外,Established 通知仅跟踪握手是否完成;这并不一定意味着交换了任何数据。某些客户端即使证书验证失败也可能完成握手,然后才中止。
该脚本会检查客户端和服务器证书链。你不太可能在客户端证书中看到这些证书(如果你看到了——请联系我们并告知我们)。
Zeek 支持的非 TLS 协议(RDP、Kerberos)中的证书也会被检查。作为文件传输的证书(例如通过 HTTP 下载的证书)不会被检查。
通知抑制间隔可通过 EMudhraWeakKeys::suppression_interval 更改。
还有许多其他选项可用于例如更改受损密钥列表。更多详情请参阅脚本文件。
注意: 此包是在 Claude Opus 5.5 的帮助下创建的。 所有代码和文本均已人工审查、编辑和验证。