
PCAPs e assinaturas Suricata para detetar tentativas de exploração do OpenSSL CVE-2022-3602, incluindo tráfego malicioso de cliente/servidor e exemplos legítimos de certificados punycode.
PCAPs ou não aconteceu
Na esteira da vulnerabilidade recentemente divulgada no OpenSSL v3.0 até v3.0.6 (CVE-2022-3602), investigamos como uma tentativa de exploração aparece 'na rede'. Este repositório contém PCAPs de vários cenários de exploração, bem como regras de detecção para Suricata.
Também está incluído um PCAP contendo a troca de um certificado legítimo com um endereço de e-mail codificado em punycode no subject alternative name. Usamos este pcap para testar se as regras não geram falsos positivos em certificados que possuem apenas um subject alternative name curto, em vez de um muito longo que esperaríamos em uma tentativa de exploração.
Usamos os seguintes recursos para criar arquivos PCAP contendo tráfego que aciona o bug CVE-2022-3602 do OpenSSL:
| PCAP | Descrição |
|---|
| spookyssl-windowscrash.pcap | Criado usando o PoC de crash do Windows da DataDog |
| spookyssl-malicious_client.pcap | Criado usando o PoC malicious_client da DataDog |
| spookyssl-malicious_server.pcap | Criado usando o PoC malicious_server da DataDog |
| not-spookyssl-certificate.pcap | Certificado punycode legítimo (não malicioso) |
A seguinte assinatura Suricata foi escrita para detectar o bug CVE-2022-3602 do 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 detalhar as correspondências de conteúdo:
|2b 06 01 05 05 07 08 09| -- Detecta o 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) (extensão nameConstraints)"xn--" -- Detecta punycode, em combinação com o tamanho do valor punycode usando uma palavra-chave byte_test:
byte_test:2,>=,500,-6,relative;Também verificamos explicitamente valores punycode pequenos; nesse caso, a assinatura não deve ser acionada usando:
content:!"|81|"; distance:-6; within:1;As assinaturas de rede não funcionarão para sessões que usam TLSv1.3, pois os Certificados são então criptografados.
Você também pode ver um pacote de reset no spookyssl-windowscrash.pcap devido ao crash do cliente.
