
Un paquete de Zeek que detecta cuándo se utilizan certificados intermedios de eMudhra comprometidos en TLS 1.2 y versiones anteriores.
Este es un paquete de Zeek para detectar conexiones que utilizan certificados de CA intermedios de eMudhra con claves privadas comprometidas/conocidas públicamente.
Para más información, véase, por ejemplo, la entrada original de Bugzilla o https://emudhra.we-have-a-problem.com/.
Tenga en cuenta que esta detección solo funciona para conexiones que utilizan TLS 1.2 y versiones anteriores. En TLS 1.3, los certificados están cifrados y Zeek no sabe qué certificados viajan por la red.
La CA de eMudhra emitió varios certificados de CA intermedios con claves privadas ECDSA muy débiles (por ejemplo, una clave que es el número 4).
Por lo tanto, esto permite a cualquiera crear trivialmente certificados firmados por cualquiera de los certificados de CA afectados. Según el conocimiento actual, hay 8 claves afectadas, 6 de las cuales están en certificados que eran de confianza para la PKI web.
Aunque los principales navegadores web dejaron inmediatamente de confiar en los certificados de CA intermedios afectados, los dispositivos que no se actualizan con la misma facilidad estarán en peligro de aceptar estos certificados maliciosos durante períodos de tiempo potencialmente significativos.
Para obtener antecedentes detallados y una cronología, véase esta entrada de Bugzilla.
Este paquete compara con el Subject Public Key Info (SPKI) de los certificados de CA intermedios afectados. El SPKI es la parte del certificado que contiene las claves comprometidas, por lo que esto también detectará cualquier firma cruzada potencialmente desconocida, o cualquier otro certificado que pueda crearse con las mismas claves.
Lista de SPKI:
| Intermedio | 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
o cargue los scripts directamente:
zeek -r trace.pcap /path/to/emudhra-weak-keys/scripts
El paquete comprueba cada certificado que Zeek analiza contra la lista.
Todos los tipos de aviso están bajo EMudhraWeakKeys::
| Aviso | Observación |
|---|---|
Compromised_Intermediate_Cert | Certificado intermedio afectado visto en la conexión |
Compromised_Intermediate_Cert_Established | Certificado afectado visto, handshake finalizado |
Compromised_Intermediate_Issuer | Certificado con un emisor afectado visto en la conexión |
Compromised_Intermediate_Issuer_Established | Emisor afectado visto, handshake finalizado |
Los resultados se registran en notice.log; no se crea ningún registro adicional.
De forma predeterminada, los avisos _Cert se emiten una vez por dirección IP de servidor al día,
y los avisos _Established se emiten una vez por dirección IP de cliente al día.
Tenga en cuenta que los avisos Compromised_Intermediate_Cert indican que
un certificado comprometido estuvo presente en la conexión, mientras que los
avisos Compromised_Intermediate_Issuer solo coinciden con la cadena del emisor
de los certificados; esta es una señal más débil.
Además, los avisos Established solo rastrean si el handshake finalizó; esto no
significa necesariamente que se haya intercambiado algún dato. Algunos clientes pueden finalizar el handshake
incluso si la verificación del certificado falla, y solo abortar después.
El script comprueba tanto las cadenas de certificados del cliente como las del servidor. Es poco probable que veas estos certificados en certificados de cliente (si los ves, por favor ponte en contacto con nosotros y avísanos).
Los certificados también se comprueban en protocolos que no son TLS y que Zeek admite (RDP, Kerberos). Los certificados transferidos como archivos (p. ej., descargados vía HTTP) no se comprueban.
El intervalo de supresión de avisos se puede cambiar mediante EMudhraWeakKeys::suppression_interval.
Hay muchas otras opciones que se pueden usar para, por ejemplo, cambiar la lista de claves comprometidas. Consulta el archivo del script para más detalles.
Nota: Este paquete se creó con la ayuda de Claude Opus 5.5. Todo el código y el texto fueron revisados, editados y verificados manualmente.