Heartbleed zero day (CVE-2014-0160) OpenSSL: Consigli utili su come correre ai riapri

Come ben sapete tra ieri ed oggi è scoppiata la bomba “Heartbleed” e a sganciarla è stato un’ingegnere che lavora presso Google: Neel Mehta.

Heartbleed è il nome che è stato dato a una pericolosissimo bug scovato sul sistema di criptazione OpenSSL che permette di entare in possesso della chiave privata con cui sono stati firmati i certificati SSL/TLS.

Considerato che openssl viene utilizzato dai demoni web, mail, VPN, ecc..si può capire l’enorme serietà del bug, milioni di dati personali (password, documenti, conversazioni, email) sono a rischio di divulgazione non autorizzata.

Maggiori informazioni sono reperibili sul sito creato ad hoc: Heartbleed.com

Per testare la vurnerabilità dei propri sistemi è disponibile uno script in python scaricabile da QUI o un sito ragguingibile da QUI

Versioni OpenSSL

OpenSSL 1.0.1 alla 1.0.1f (inclusa): VULNERABILI
OpenSSL 1.0.1g : NON vunerabile
OpenSSL 1.0.0: NON vulnerabile
OpenSSL 0.9.8: NON vulnerabile

 

Test vulnerabilità sistema pre-patch

Testiamo il sistema tramite lo script python precedentemente indicato:

[[email protected]_test ~]$ python heartbleed.py www.mio_apache_ssl_test.it    <-- script rinominato heartbleed.py
Trying SSL 3.0...
Connecting...
Sending Client Hello...
Waiting for Server Hello...
 ... received message: type = 22, ver = 0300, length = 81
 ... received message: type = 22, ver = 0300, length = 4746
 ... received message: type = 22, ver = 0300, length = 525
 ... received message: type = 22, ver = 0300, length = 4
Sending heartbeat request...
 ... received message: type = 21, ver = 0300, length = 2
Received alert:
  0000: 02 0A                                            ..

Server returned error, likely not vulnerable
Trying TLS 1.0...
Connecting...
Sending Client Hello...
Waiting for Server Hello...
 ... received message: type = 22, ver = 0301, length = 58
 ... received message: type = 22, ver = 0301, length = 4746
 ... received message: type = 22, ver = 0301, length = 525
 ... received message: type = 22, ver = 0301, length = 4
Sending heartbeat request...
 ... received message: type = 24, ver = 0301, length = 16384
Received heartbeat response:
  0000: 02 40 00 D8 03 01 53 43 5B 90 9D 9B 72 0B BC 0C  [email protected][...r...
  0010: BC 2B 92 A8 48 97 CF BD 39 04 CC 16 0A 85 03 90  .+..H...9.......
  0020: 9F 77 04 33 D4 DE 00 00 66 C0 14 C0 0A C0 22 C0  .w.3....f.....".
  0030: 21 00 39 00 38 00 88 00 87 C0 0F C0 05 00 35 00  !.9.8.........5.
....
...
....
  3fd0: C6 E8 E3 CC AA 16 E7 AA E3 3A CF 8E 0C 6D 9E 77  .........:...m.w
  3fe0: 3D 30 16 DC D1 5C AF A0 72 1D 27 67 1F 6E 33 B7  =0...\..r.'g.n3.
  3ff0: 77 9F 56 57 10 F3 9F 35 FA 4B E7 A7 39 EC ED 49  w.VW...5.K..9..I

WARNING: server returned more data than it should - server is vulnerable!
[[email protected]_test ~]$

 

Adesso passiamo alla parte più importante…

Patch del sistema

La prima azione da fare è quella di aggiornare il pacchetto openssl del proprio sistema.
Sono già disponibili le patch sui repository ufficiali delle varie distribuzioni linux.

CentOS ha rilasciato per la release 6.5 la versione openssl-1.0.1e-16.el6_5.4.0.1 scaricabile da yum:

[[email protected]_test ~]# yum update
openssl                    x86_64   1.0.1e-16.el6_5.7          updates   1.5 M

Le release precedenti alla versione 6.5 non sono affette dal problema (CVE ufficiale qui)

Dopo aver aggiornato il sistema è importare eseguire 2 operazioni:

  1. Revoca dei vecchi certificati SSL/TLS
  2. Creazione dei nuovi certificati

Per revocare i certificati su CentOS basta eseguire i seguenti comandi:

[[email protected]_test certs]# cd /etc/pki/tls/certs
[[email protected]_test certs]#
[[email protected]_test certs]# openssl ca -keyfile server.key -cert server.crt -revoke server.crt
Using configuration from /etc/pki/tls/openssl.cnf
Adding Entry with serial number CE059B06EC6817D2 to DB for /C=IT/ST=Roma/L=Roma/O=Example S.r.l/OU=Example S.r.l/CN=www.example.it/[email protected]
Revoking Certificate CE059B06EC6817D2.
Data Base Updated

Per creare i certificati invece vi rimando al mio vecchio post: CLICCA QUI

Questa procedura è stata testata su CentOS 6.5 ma può essere eseguita su qualsiasi distro linux apportando le modifiche appropriate (directory certificati e gestore pacchetti su tutte).

Test vulnerabilità sistema post-patch

[[email protected]_test ~]$ python heartbleed.py www.mio_apache_ssl_test.it
Trying SSL 3.0...
Connecting...
Sending Client Hello...
Waiting for Server Hello...
 ... received message: type = 22, ver = 0300, length = 86
 ... received message: type = 22, ver = 0300, length = 4727
 ... received message: type = 22, ver = 0300, length = 525
 ... received message: type = 22, ver = 0300, length = 4
Sending heartbeat request...
Unexpected EOF receiving record header - server closed connection
No heartbeat response received, server likely not vulnerable
Trying TLS 1.0...
Connecting...
Sending Client Hello...
Waiting for Server Hello...
 ... received message: type = 22, ver = 0301, length = 58
 ... received message: type = 22, ver = 0301, length = 4727
 ... received message: type = 22, ver = 0301, length = 525
 ... received message: type = 22, ver = 0301, length = 4
Sending heartbeat request...
Unexpected EOF receiving record header - server closed connection
No heartbeat response received, server likely not vulnerable
Trying TLS 1.1...
Connecting...
Sending Client Hello...
Waiting for Server Hello...
 ... received message: type = 22, ver = 0302, length = 58
 ... received message: type = 22, ver = 0302, length = 4727
 ... received message: type = 22, ver = 0302, length = 525
 ... received message: type = 22, ver = 0302, length = 4
Sending heartbeat request...
Unexpected EOF receiving record header - server closed connection
No heartbeat response received, server likely not vulnerable
Trying TLS 1.2...
Connecting...
Sending Client Hello...
Waiting for Server Hello...
 ... received message: type = 22, ver = 0303, length = 58
 ... received message: type = 22, ver = 0303, length = 4727
 ... received message: type = 22, ver = 0303, length = 527
 ... received message: type = 22, ver = 0303, length = 4
Sending heartbeat request...
Unexpected EOF receiving record header - server closed connection
No heartbeat response received, server likely not vulnerable
[[email protected]_test ~]$

Concluse queste operazioni il sistema non è più vulnerabile dal bug, quindi non resta che sperare di non essere stati attaccati precedentemente!