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:

[claudio@ssl_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!
[claudio@ssl_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:

[claudio@ssl_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:

[root@certs_test certs]# cd /etc/pki/tls/certs [root@certs_test certs]# [root@certs_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

[claudio@ssl_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
[claudio@ssl_test ~]$

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