
PCAPs y firmas de Suricata para detectar intentos de explotación de OpenSSL CVE-2022-3602, incluyendo tráfico malicioso de cliente/servidor y ejemplos legítimos de certificados punycode.
PCAPs o no sucedió
Tras la reciente vulnerabilidad divulgada en OpenSSL v3.0 hasta v3.0.6 (CVE-2022-3602), hemos investigado cómo se ve un intento de explotación 'en el cable'. Este repositorio contiene PCAPs de varios escenarios de explotación, así como reglas de detección para Suricata.
También se incluye un PCAP que contiene el intercambio de un certificado legítimo con una dirección de correo electrónico codificada en punycode en el nombre alternativo del sujeto. Usamos este pcap para probar si las reglas no generan falsos positivos en certificados que solo tienen un nombre alternativo de sujeto corto, en lugar de uno muy largo que esperaríamos en un intento de explotación.
Hemos utilizado los siguientes recursos para crear archivos PCAP que contienen tráfico que activa el error CVE-2022-3602 de OpenSSL:
| PCAP | Descripción |
|---|
| spookyssl-windowscrash.pcap | Creado usando el PoC de Crash de Windows de DataDog |
| spookyssl-malicious_client.pcap | Creado usando el PoC de malicious_client de DataDog |
| spookyssl-malicious_server.pcap | Creado usando el PoC de malicious_server de DataDog |
| not-spookyssl-certificate.pcap | Certificado punycode legítimo (no malicioso) |
La siguiente firma de Suricata fue escrita para detectar el error CVE-2022-3602 de OpenSSL:
alert tls any any -> any any (msg:"FOX-SRT - Exploit - Possible SpookySSL Certificate Observed (CVE-2022-3602)"; \
flow:established; \
content:"|2b 06 01 05 05 07 08 09|"; fast_pattern; \
content:"|06 03 55 1d 1e|"; content:"xn--"; \
content:!"|81|"; distance:-6; within:1; byte_test:2,>=,500,-6,relative; \
classtype:attempted-user; threshold:type limit,track by_src,count 1,seconds 3600; \
reference:url,www.openssl.org/news/secadv/20221101.txt; \
reference:url,https://github.com/fox-it/spookyssl-pcaps; \
metadata:ids suricata; \
metadata:created_at 2022-11-02; sid:21004268; rev:3;)
Para desglosar las coincidencias de contenido:
|2b 06 01 05 05 07 08 09| -- Detecta el type-id: 1.3.6.1.5.5.7.8.9 (id-pkix.8.9) (id-on-SmtpUTF8Mailbox)|06 03 55 1d 1e| -- Detecta Extension Id: 2.5.29.30 (id-ce-nameConstraints) (extensión nameConstraints)"xn--" -- Detecta punycode, en combinación con el tamaño del valor punycode usando una palabra clave byte_test:
byte_test:2,>=,500,-6,relative;También verificamos explícitamente valores punycode pequeños, en cuyo caso la firma no debería activarse usando:
content:!"|81|"; distance:-6; within:1;Las firmas de red no funcionarán para sesiones que usen TLSv1.3, ya que los Certificados están cifrados en ese caso.
También puedes ver un paquete de reset en el spookyssl-windowscrash.pcap debido al bloqueo del cliente.
