
Um pacote Zeek que detecta quando certificados intermediários eMudhra comprometidos são usados em TLS 1.2 e versões anteriores.
Este é um pacote Zeek para detectar conexões que usam certificados de CA intermediários da eMudhra com chaves privadas comprometidas/amplamente conhecidas.
Para mais informações, consulte, por exemplo, a entrada original no Bugzilla ou https://emudhra.we-have-a-problem.com/.
Observe que esta detecção só funciona para conexões que usam TLS 1.2 e versões anteriores. No TLS 1.3, os certificados são criptografados e o Zeek não sabe quais certificados trafegam pela rede.
A CA eMudhra emitiu vários certificados de CA intermediários com chaves privadas ECDSA muito fracas (por exemplo, uma chave que é o número 4).
Assim, isso permite que qualquer pessoa crie trivialmente certificados assinados por qualquer um dos certificados de CA afetados. Segundo o conhecimento atual, há 8 chaves afetadas, 6 das quais estão em certificados que eram confiáveis para a PKI da web.
Embora os principais navegadores web tenham imediatamente deixado de confiar nos certificados de CA intermediários afetados, dispositivos que não são tão facilmente atualizáveis estarão em risco de aceitar esses certificados maliciosos por períodos potencialmente significativos.
Para contexto detalhado e uma linha do tempo, consulte esta entrada no Bugzilla.
Este pacote faz correspondência com o Subject Public Key Info (SPKI) dos certificados de CA intermediários afetados. O SPKI é a parte do certificado que contém as chaves comprometidas - portanto, isso também detectará quaisquer cross-signs potencialmente desconhecidos, ou quaisquer outros certificados que possam ser criados com as mesmas chaves.
Lista de SPKIs:
| Intermediário | 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
ou carregue os scripts diretamente:
zeek -r trace.pcap /path/to/emudhra-weak-keys/scripts
O pacote verifica cada certificado que é analisado pelo Zeek em relação à lista.
Todos os tipos de aviso estão sob EMudhraWeakKeys::
| Aviso | Observação |
|---|---|
Compromised_Intermediate_Cert | Certificado intermediário afetado visto na conexão |
Compromised_Intermediate_Cert_Established | Certificado afetado visto, handshake concluído |
Compromised_Intermediate_Issuer | Certificado com um emissor afetado visto na conexão |
Compromised_Intermediate_Issuer_Established | Emissor afetado visto, handshake concluído |
Os resultados vão para notice.log; nenhum log adicional é criado.
Por padrão, os avisos _Cert são emitidos uma vez por endereço IP de servidor por dia,
e os avisos _Established são emitidos uma vez por endereço IP de cliente por dia.
Observe que os avisos Compromised_Intermediate_Cert sinalizam que
um certificado comprometido estava presente na conexão, enquanto os
avisos Compromised_Intermediate_Issuer correspondem apenas à string do emissor
dos certificados; este é um sinal mais fraco.
Além disso, os avisos Established rastreiam apenas se o handshake foi concluído; isso
não significa necessariamente que quaisquer dados foram trocados. Alguns clientes podem concluir o handshake
mesmo que a verificação do certificado falhe, e só abortar depois.
O script verifica tanto as cadeias de certificados do cliente quanto do servidor. É improvável que você veja esses certificados em certificados de cliente (caso veja - por favor, entre em contato conosco e nos avise).
Os certificados também são verificados em protocolos não-TLS suportados pelo Zeek (RDP, Kerberos). Certificados transferidos como arquivos (por exemplo, baixados via HTTP) não são verificados.
O intervalo de supressão de notificações pode ser alterado via EMudhraWeakKeys::suppression_interval.
Há muitas outras opções que podem ser usadas para, por exemplo, alterar a lista de chaves comprometidas. Consulte o arquivo do script para mais detalhes.
Nota: Este pacote foi criado com a ajuda do Claude Opus 5.5. Todo o código e texto foi revisado, editado e verificado manualmente.