
Пакет Zeek, который обнаруживает использование скомпрометированных промежуточных сертификатов eMudhra в TLS 1.2 и ниже.
Это пакет для Zeek, предназначенный для обнаружения соединений, использующих промежуточные CA-сертификаты eMudhra со скомпрометированными/общеизвестными закрытыми ключами.
Для получения дополнительной информации см., например, исходную запись в Bugzilla или https://emudhra.we-have-a-problem.com/.
Обратите внимание, что это обнаружение работает только для соединений, использующих TLS 1.2 и ниже. В TLS 1.3 сертификаты шифруются, и Zeek не знает, какие сертификаты передаются по сети.
CA eMudhra выпустил несколько промежуточных CA-сертификатов с очень слабыми закрытыми ключами ECDSA (например, ключ, представляющий собой число 4).
Таким образом, это позволяет любому тривиально создавать сертификаты, подписанные любым из затронутых CA-сертификатов. По состоянию на сегодня известно о 8 затронутых ключах, 6 из которых находятся в сертификатах, которым доверяла веб-PKI.
Хотя основные веб-браузеры немедленно перестали доверять затронутым промежуточным CA-сертификатам, устройства, которые не так легко обновить, будут подвержены риску принятия этих вредоносных сертификатов в течение потенциально значительных периодов времени.
Подробную предысторию и хронологию см. в этой записи Bugzilla.
Этот пакет сопоставляет Subject Public Key Info (SPKI) затронутых промежуточных CA-сертификатов. 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 отслеживают только факт завершения рукопожатия; это
не обязательно означает, что были переданы какие-либо данные. Некоторые клиенты могут завершить рукопожатие
даже если проверка сертификата не удалась, и прервать соединение только после этого.
Скрипт проверяет цепочки сертификатов как клиента, так и сервера. Маловероятно, что вы увидите эти сертификаты в клиентских сертификатах (если увидите — пожалуйста, сообщите нам об этом).
Сертификаты также проверяются в протоколах, отличных от TLS, которые поддерживает Zeek (RDP, Kerberos). Сертификаты, передаваемые как файлы (например, загруженные через HTTP), не проверяются.
Интервал подавления уведомлений можно изменить через EMudhraWeakKeys::suppression_interval.
Есть множество других параметров, которые можно использовать, например, для изменения списка скомпрометированных ключей. Подробности см. в файле скрипта.
Примечание: Этот пакет был создан с помощью Claude Opus 5.5. Весь код и текст были проверены, отредактированы и верифицированы вручную.