
PCAP et signatures Suricata pour détecter les tentatives d'exploitation d'OpenSSL CVE-2022-3602, incluant le trafic client/serveur malveillant et des exemples légitimes de certificats punycode.
PCAP ou ça n'est pas arrivé
À la suite de la vulnérabilité récemment divulguée dans OpenSSL v3.0 jusqu'à v3.0.6 (CVE-2022-3602), nous avons examiné à quoi ressemble une tentative d'exploitation « sur le fil ». Ce dépôt contient des PCAP de divers scénarios d'exploitation, ainsi que des règles de détection pour Suricata.
Est également inclus un PCAP contenant l'échange d'un certificat légitime avec une adresse e-mail encodée en punycode dans le subject alternative name. Nous avons utilisé ce pcap pour tester si les règles ne déclenchent pas de faux positifs sur les certificats qui n'ont qu'un subject alternative name court, au lieu d'un très long que nous attendrions dans une tentative d'exploitation.
Nous avons utilisé les ressources suivantes pour créer des fichiers PCAP contenant du trafic qui déclenche le bug OpenSSL CVE-2022-3602 :
| PCAP | Description |
|---|
| spookyssl-windowscrash.pcap | Créé à l'aide du PoC Windows Crash de DataDog |
| spookyssl-malicious_client.pcap | Créé à l'aide du PoC malicious_client de DataDog |
| spookyssl-malicious_server.pcap | Créé à l'aide du PoC malicious_server de DataDog |
| not-spookyssl-certificate.pcap | Certificat punycode légitime (non malveillant) |
La signature Suricata suivante a été écrite pour détecter le bug OpenSSL CVE-2022-3602 :
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;)
Pour décomposer les correspondances de contenu :
|2b 06 01 05 05 07 08 09| -- Détecte le type-id: 1.3.6.1.5.5.7.8.9 (id-pkix.8.9) (id-on-SmtpUTF8Mailbox)|06 03 55 1d 1e| -- Détecte Extension Id: 2.5.29.30 (id-ce-nameConstraints) (extension nameConstraints)"xn--" -- Détecte le punycode, en combinaison avec la taille de la valeur punycode à l'aide d'un mot-clé byte_test :
byte_test:2,>=,500,-6,relative;Nous vérifions également explicitement les petites valeurs punycode, auquel cas la signature ne doit pas se déclencher en utilisant :
content:!"|81|"; distance:-6; within:1;Les signatures réseau ne fonctionneront pas pour les sessions utilisant TLSv1.3 car les certificats sont alors chiffrés.
Vous pouvez également voir un paquet de réinitialisation dans le spookyssl-windowscrash.pcap en raison du crash du client.
