Heartbleed: cos'è e quali sono le opzioni per mitigarlo?


204

Questa è una domanda canonica sulla comprensione e la correzione del problema di sicurezza Heartbleed.

Che cos'è esattamente CVE-2014-0160 AKA "Heartbleed"? Qual è la causa, quali sistemi operativi e versioni di OpenSSL sono vulnerabili, quali sono i sintomi, esistono metodi per rilevare un exploit di successo?

Come posso verificare se il mio sistema è interessato? In che modo è possibile mitigare questa vulnerabilità? Dovrei preoccuparmi che le mie chiavi o altri dati privati ​​siano stati compromessi? Di quali altri effetti collaterali dovrei preoccuparmi?


14
La mitigazione di Heartbleed implica molto più che nuove chiavi . (Link alla mia risposta sulla sicurezza delle informazioni StackExchange)
scuzzy-delta

Ti sento, ma penso che l'AEAA abbia trattato in modo abbastanza esauriente quello che segue.
MadHatter

Sono d'accordo: è un'ottima risposta, ma heartbleed.com fa di tutto per sottolineare che ci sono considerazioni al di là di nuove coppie di chiavi, come forzare la modifica delle password e invalidare la sessione.
scuzzy-delta

1
@ scuzzy-delta - buon punto. Ho reso la mia risposta CW ora, quindi sentiti libero di modificarla / migliorarla con quelle informazioni.
SEE

3
Il miglior esempio di ciò che è - (non sorprende) XKCD: xkcd.com/1354
Wayne Werner

Risposte:


118

Innanzitutto , prima di andare fuori di testa, assicurati di capire se questa vulnerabilità si applica effettivamente a te. Se hai un server, ma in realtà non hai mai avuto applicazioni che utilizzano TLS, questa non è una cosa prioritaria da risolvere. Se, d'altra parte, hai mai avuto applicazioni abilitate per TLS, beh, allora sei pronto per una sorpresa. Continuare a leggere:

Che cos'è esattamente CVE-2014-0160 alias "Heartbleed"?

È un gran casino, ecco cos'è. In breve, una vulnerabilità sfruttabile in remoto è stata scoperta nelle versioni OpenSSL da 1.0.1 a 1.0.1f attraverso le quali un utente malintenzionato può leggere determinate parti della memoria di sistema. Tali parti sono quelle che contengono tra l'altro dati sensibili come chiavi private, chiavi già condivise, password e dati aziendali di alto valore.

Il bug è stato scoperto in modo indipendente da Neel Mehta di Google Security (21 marzo 2014) e dalla società finlandese di test di sicurezza IT Codenomicon (2 aprile 2014).

Qual è la causa?

Bene, codice errante in OpenSSL. Ecco il commit che ha introdotto la vulnerabilità, ed ecco il commit che ha risolto la vulnerabilità. Il bug è apparso nel dicembre del 2011 ed è stato corretto oggi, 7 aprile 2014.

Il bug può anche essere visto come un sintomo di un problema più grande. I due problemi correlati sono (1) quale processo è in atto per garantire che il codice errante non sia introdotto in una base di codice e (2) perché i protocolli e le estensioni sono così complessi e difficili da testare. L'articolo (1) è un problema di governance e di processo con OpenSSL e molti altri progetti. Molti sviluppatori semplicemente resistono a pratiche come la revisione del codice, l'analisi e la scansione. Il punto (2) è in discussione nel WG TLS dell'IETF. Vedi complessità Heartbleed / protocollo .

Il codice errante è stato inserito in modo pericoloso?

Non speculerò sul fatto che questo sia stato davvero un errore o forse un po 'di codice inserito per conto di un cattivo attore. Tuttavia, la persona che ha sviluppato il codice per OpenSSL afferma che è stato involontario. Vedi l' uomo che ha introdotto un grave difetto di sicurezza "Heartbleed" nega di averlo inserito deliberatamente .

Quali sistemi operativi e versioni di OpenSSL sono vulnerabili?

Come accennato in precedenza, qualsiasi sistema operativo che sta utilizzando o un'applicazione collegata a OpenSSL da 1.0.1 a 1.0.1f.

Quali sono i sintomi, esistono metodi per rilevare un exploit di successo?

Questa è la parte spaventosa. Per quanto ne sappiamo, non esiste un modo noto per rilevare se questa vulnerabilità è stata sfruttata o meno. È teoricamente possibile che presto saranno rilasciate firme IDS in grado di rilevare questo exploit, ma al momento della stesura di queste, quelle non sono disponibili.

Ci sono prove che Heartbleed è stato attivamente sfruttato in natura già nel novembre 2013. Vedi il Wild 's Heart di EFF : le agenzie di intelligence stavano usando Heartbleed nel novembre 2013? E Bloomberg riferisce che l'NSA aveva armato l'exploit poco dopo l'introduzione della vulnerabilità. Vedere NSA ha detto di sfruttare bug Heartbleed per intelligenza per anni . Tuttavia, la US Intelligence Community nega le affermazioni di Bloomberg. Vedi IC ON THE RECORD .

Come posso verificare se il mio sistema è interessato?

Se stai mantenendo OpenSSL sul tuo sistema, puoi semplicemente emettere openssl version:

$ openssl version
OpenSSL 1.0.1g 7 Apr 2014

Se la distribuzione è mantenere OpenSSL, allora probabilmente non può determinare la versione di OpenSSL a causa di tornare patch utilizzando opensslcomandi o le informazioni del pacchetto (ad esempio, apt-get, dpkg, yumo rpm). Il processo di back patching utilizzato dalla maggior parte (tutte?) Delle distribuzioni utilizza solo il numero di versione di base (ad esempio "1.0.1e"); e non include una versione di sicurezza efficace (ad esempio "1.0.1g").

C'è una domanda aperta su Super User per determinare la versione di sicurezza efficace per OpenSSL e altri pacchetti quando i pacchetti vengono sottoposti a backpatch. Sfortunatamente, non ci sono risposte utili (oltre a controllare il sito web della distro). Vedere Determinare la versione di sicurezza effettiva di fronte al backpatching ?

Come regola generale: se hai mai installato una delle versioni interessate e hai mai eseguito programmi o servizi collegati a OpenSSL per il supporto TLS, sei vulnerabile.

Dove posso trovare un programma per verificare la vulnerabilità?

A poche ore dall'annuncio Heartbleed, diverse persone su Internet avevano pubblicizzato applicazioni Web accessibili al pubblico che presumibilmente potevano essere utilizzate per controllare la presenza di questa vulnerabilità su un server. Al momento della stesura di questo documento, non ne ho esaminato nessuno, quindi non pubblicizzerò ulteriormente le loro domande. Possono essere trovati relativamente facilmente con l'aiuto del tuo motore di ricerca preferito.

Come viene mitigata questa vulnerabilità?

Eseguire l'aggiornamento a una versione non vulnerabile e reimpostare o proteggere nuovamente i dati vulnerabili. Come notato sul sito Heartbleed , i passaggi di risposta appropriati sono in generale:

  1. Patch sistemi vulnerabili.
  2. Rigenera nuove chiavi private.
  3. Invia nuovo CSR alla tua CA.
  4. Ottieni e installa un nuovo certificato firmato.
  5. Chiavi e cookie di sessione non validi
  6. Reimposta password e segreti condivisi
  7. Revoca i vecchi certificati.

Per un'analisi e una risposta più dettagliate, vedere Cosa dovrebbe fare un operatore del sito Web in merito all'exploit di Heartbleed OpenSSL? sullo scambio dello stack di sicurezza.

Dovrei preoccuparmi che le mie chiavi o altri dati privati ​​siano stati compromessi? Di quali altri effetti collaterali dovrei preoccuparmi?

Assolutamente. Gli amministratori di sistema devono presumere che i loro server che hanno utilizzato versioni vulnerabili di OpenSSL siano effettivamente compromessi e rispondano di conseguenza.

Poco dopo la divulgazione della vulnerabilità, Cloudfare ha offerto una sfida per vedere se la chiave privata di un server potesse essere recuperata in pratica. La sfida è stata vinta in modo indipendente da Fedor Indutny e Ilkka Mattila. Vedi The Heartbleed Challenge .

Dove posso trovare maggiori informazioni?

Link dump, per chi cerca maggiori dettagli:


Una cronologia piuttosto dettagliata degli eventi di divulgazione è disponibile nella cronologia di divulgazione Heartbleed: chi sapeva cosa e quando .


Se sei un programmatore e sei interessato a vari trucchi di programmazione come il rilevamento di un attacco Heartbleed attraverso il msg_cbcallback di OpenSSL , allora consulta l' Advisory Security 2014047 di OpenSSL .


42
+1 per SHUT. GIÙ. IL TUO. SERVER. * - Se fai QUALSIASI cosa in cui SSL è davvero importante, spegnilo fino a quando non risolvi il problema. Inoltre, non dimenticare di installare nuovi certificati (con nuove chiavi ) dopo aver patchato i tuoi server - riutilizzare le tue vecchie chiavi (che potrebbero essere state compromesse) sconfigge l'intero scopo di correggere la vulnerabilità ...
voretaq7

29
ANCHE - riavvia tutti i servizi che si collegano alle librerie OpenSSL. Aggiornare OpenSSL senza riavviare i demoni è buono come non aggiornarlo affatto.
EEAA

14
In effetti, dopo qualsiasi tipo di patch maggiore (come OpenSSL), considero una buona regola riavviare il computer per assicurarsi di non perdere nulla.
voretaq7,

5
Uno dei tester è stato aperto: github.com/FiloSottile/Heartbleed
Riking

3
@EEAA, "spegni i tuoi server" non significa che devi togliere energia. Significa spegnere (o riconfigurare per disabilitare ssl / tls) apache, o qualunque servizio stia facendo il servizio.
psusi,


36

Ubuntu 12.04, 12.10 e 13.10

Ubuntu ha rilasciato USN-2165-1 , in cui si afferma che i pacchetti aggiornati sono ora disponibili negli archivi. Esegui i seguenti due comandi per afferrare la correzione.

sudo apt-get update
sudo apt-get upgrade

Ubuntu 14.04

Ho caricato un pacchetto Debian contenente la nuova versione (1.0.1g) su un PPA che ho impostato per questo scopo. Questi tre comandi aggiungeranno il mio PPA al tuo sistema, aggiorneranno l'elenco dei pacchetti disponibili e aggiorneranno tutto:

sudo add-apt-repository ppa:george-edison55/openssl-heartbleed-fix
sudo apt-get update
sudo apt-get upgrade

Nota: il PPA fornisce anche pacchetti per Ubuntu 12.04 e 13.10, nel caso in cui si preferisca effettivamente eseguire la nuova versione (1.0.1g) anziché semplicemente utilizzare le versioni patchate negli archivi.

Ubuntu 10.04

Questa è una versione LTS, la versione del server è ancora supportata e riceve aggiornamenti di sicurezza. Ma la vulnerabilità di cuore non ha influito sul pacchetto openssl di un'installazione standard di ubuntu 10.04, perché la versione è precedente alla 1.0.1.

La versione desktop ha raggiunto la fine del ciclo di vita e deve essere aggiornata / reinstallata.

Ubuntu 13.04 e altre versioni obsolete

Ubuntu 13.04 ha avuto un ciclo di supporto molto breve che potresti non aspettarti. Ha già raggiunto la fine del ciclo di vita e non riceve più aggiornamenti di sicurezza. Dovrebbe essere stato aggiornato a lungo. Se qualcuno lo sta ancora utilizzando, esegui l'upgrade ora, da zero o può essere aggiornato in modo non distruttivo a 13.10 seguendo questa semplice procedura: http://www.tecmint.com/upgrade-ubuntu-13-04-raring-ringtail -to-ubuntu-13-10-saucy-salamander / Dopo l'aggiornamento il sistema riceve la patch heartble dal 13.10.

Per tutte le altre versioni di Ubuntu obsolete, in pratica significa che è necessaria una nuova installazione.

Verificare che la patch sia stata applicata

Fondamentalmente, esegui openssl version -ae assicurati che la data di costruzione sia il 7 aprile 2014 o successiva, ma vedi di più qui .

Reboot

Il modo migliore per assicurarsi che tutti i servizi dipendenti da OpenSSL siano riavviati è riavviare .


Non posso parlare per altre versioni, ma sembra che ci sia una patch disponibile per la precisione (12.04). Anche se non posso dire con certezza che questo risolve la vulnerabilità, è stato almeno compilato dopo il commit rilevante ( Mon Apr 7 20:31:55 UTC 2014).
Calrion,

@Calrion: una patch per OpenSSL o il pacchetto Debian per OpenSSL? OpenSSL è già stato corretto ed è stata rilasciata una nuova versione.
Nathan Osman,

cosa accadrà alle connessioni esistenti durante l'apertura di openssl? saranno lasciati cadere?
pdeva,

2
Dipende dal server Web che stai utilizzando e dal modo in cui aggiorni. Detto questo, non mi preoccuperei di eliminare le connessioni esistenti poiché utilizzano la versione vulnerabile.
Nathan Osman,


14

RedHat 6.5 e CentOS 6.5

Questi sono vulnerabili. L'erratum RHSA-2014-0376 di RedHat afferma che sono disponibili librerie con patch e che chiunque sia interessato dovrebbe effettuare l'upgrade al più presto.

Al momento in cui scriviamo, CentOS non aveva ancora una versione fissa, ma il post di Karanbir Singh su CentOS-annuncio afferma che hanno prodotto una versione aggiornata di openssl ( openssl-1.0.1e-16.el6_5.4.0.1, nota le ultime quattro cifre che sono importanti) che ha il TLS sfruttabile comando disabilitato e che può essere applicato in modo sicuro poiché verrà sovrascritto da una versione fissa al momento del rilascio.

La versione fissata temporaneamente non sembra essere ancora arrivata su tutti i mirror, ma si trova nel repository principale su http://mirror.centos.org/centos/6/updates/x86_64/Packages/ (e similmente per i686).

Modifica : come dice Iain, ora sembra esserci una versione completamente patchata per C6.5, e sembra che sia stato spostato in fretta negli specchi. Una scala l'ha yum updatepresa per i miei server; lo è openssl-1.0.1e-16.el6_5.7.

Versioni di RH6 e C6 precedenti alla 6.5

Questi non sono vulnerabili. Secondo questo advisory di Red Hat ,

Questo problema non ha influito sulle versioni di openssl fornite con Red Hat Enterprise Linux 5 e Red Hat Enterprise Linux 6.4 e precedenti.

Il post di Karanbir Singh su CentOS-annuncio è altrettanto chiaro sul controllo delle versioni:

All'inizio di oggi, siamo stati informati di un grave problema in openssl come spedito in CentOS-6.5



13

Debian Wheezy

Debian ha rilasciato DSA-2896-1 e le librerie patchate sono disponibili qui . Uno script di shell è disponibile qui .

1. Patch

Il repository Apt-get è stato aggiornato, quindi ora le librerie con patch sono disponibili tramite apt-get update && apt-get upgrade

apt-get upgrade libssl1.0.0 openssl

In alternativa (non consigliato) i pacchetti possono essere aggiornati manualmente:

wget http://security.debian.org/pool/updates/main/o/openssl/libssl1.0.0-dbg_1.0.1e-2+deb7u5_amd64.deb
wget http://security.debian.org/pool/updates/main/o/openssl/openssl_1.0.1e-2+deb7u5_amd64.deb
wget http://security.debian.org/pool/updates/main/o/openssl/libssl1.0.0_1.0.1e-2+deb7u5_amd64.deb
wget http://security.debian.org/pool/updates/main/o/openssl/libssl-dev_1.0.1e-2+deb7u5_amd64.deb

dpkg -i openssl_1.0.1e-2+deb7u5_amd64.deb
dpkg -i libssl1.0.0_1.0.1e-2+deb7u5_amd64.deb
dpkg -i libssl1.0.0-dbg_1.0.1e-2+deb7u5_amd64.deb
dpkg -i libssl-dev_1.0.1e-2+deb7u5_amd64.deb

2. Riavviare server / servizi

Per una migliore protezione, riavviare l'intero server o se il server non può essere offline, riavviare i servizi necessari.

3. Controlla la versione OpenSSL

love@server:~$ openssl version
OpenSSL 1.0.1e 11 Feb 2013
love@server:~$ dpkg -l libssl1.0.0
||/ Name                    Version          Architecture     Description
+++-=======================-================-================-====================================================
ii  libssl1.0.0                 1.0.1e-2+deb7u6  amd64            SSL shared libraries

1
Se ricevi aggiornamenti da wheezy/securityallora sarai bravo con apt-get update && apt-get upgrade. In alternativa, utilizzare un gestore di pacchetti interattivo per aggiornare solo i pacchetti openssl, libssl1.0.0, libssl1.0.0-dbge libssl-dev(come installato sul vostro sistema).
un CVn

l'utilizzo di apt-get non risolve il problema per me - mostra ancora OpenSSL 1.0.1e 11 feb 2013
user568829

Grazie @ michael-kjorling, non era disponibile quando l'ho fatto, ma è il modo più sicuro e corretto di aggiornare.
jacksoncage

2
@ user568829 dopo aver applicato la patch, la versione di openssl continuerà a essere visualizzata OpenSSL 1.0.1e 11 Feb 2013poiché la patch si chiama 1.0.1e-2. Puoi controllare con dpkg -l openssle dovrebbe mostrare la versione1.0.1e-2+deb7u6
jacksoncage

2
Suggerirei di riavviare l'host dopo aver aggiornato OpenSSL, non perché è strettamente necessario, ma per tranquillità che almeno tutto ciò che carica dinamicamente le librerie OpenSSL utilizza la nuova versione. (Staticamente collegato è un'altra questione.) Detto questo, riconosco che alcuni server non possono essere facilmente riavviati in tutte le situazioni in cui un riavvio del servizio potrebbe essere accettabile.
un CVn

9

Vorrei sottolineare che le chiavi private non sono le uniche risorse da considerare compromesse. Il bug ha il potenziale di perdere qualsiasi memoria in esecuzione nello stesso spazio di indirizzi (cioè lo stesso processo) di OpenSSL. Pertanto, se si esegue un processo server in cui una versione vulnerabile di OpenSSL è collegata staticamente o dinamicamente, qualsiasi informazione che tale processo abbia mai gestito , inclusi password, numeri di carta di credito e altri dati personali, dovrebbe essere considerata potenzialmente compromessa.


9

FreeBSD 10.0 o openssl dalle porte

Il team di sicurezza di FreeBSD ha pubblicato un avviso riguardante CVE-2014-0160 (aka "Heartbleed") e: FreeBSD-SA-14: 06.openssl

  1. Aggiornamento di FreeBSD

    • Aggiornamento di FreeBSD tramite una patch binaria

      I sistemi che eseguono una versione RELEASE di FreeBSD sulle piattaforme i386 o amd64 possono essere aggiornati tramite l'utility freebsd-update (8):

      # freebsd-update fetch
      # freebsd-update install
      
    • Aggiornamento di FreeBSD dalle fonti

      1. Scarica la patch pertinente dalla posizione seguente e verifica la firma PGP staccata utilizzando l'utilità PGP.

        # fetch http://security.FreeBSD.org/patches/SA-14:06/openssl-10.patch
        # fetch http://security.FreeBSD.org/patches/SA-14:06/openssl-10.patch.asc
        # gpg --verify openssl-10.patch.asc
        
      2. Eseguire i seguenti comandi come root:

        # cd /usr/src
        # patch < /path/to/patch
        
      3. Ricompila il sistema operativo

        usando buildworld e installworld come descritto nel manuale di FreeBSD .

  2. Aggiorna la porta openssl con la versione minima 1.0.1_10

  3. Riavvia tutti i demoni utilizzando la libreria o riavvia il sistema

  4. Agire come se il sistema fosse stato compromesso, emettere nuovamente tutte le chiavi e / o i certificati SSL e le informazioni potenzialmente trapelate (consultare la risposta più generale dell'AEAA ).

FreeBSD 9.xe FreeBSD 8.x

Questi sistemi non sono vulnerabili al problema Heartbleed per impostazione predefinita, poiché si basano sulla versione 0.9.x precedente della libreria openssl , a meno che non sia stato installato openssl dalle porte (vedere di sopra).

Se questi sistemi non sono vulnerabili al problema Heartbleed , potrebbe essere saggio aggiornare il tuo sistema piuttosto presto che successivamente a causa di un'altra vulnerabilità locale (vedi FreeBSD-SA-14: 06.openssl e la sezione "FreeBSD 10.0" al piano di sopra):

Un utente malintenzionato locale potrebbe essere in grado di snoopare un processo di firma e recuperare la chiave di firma da esso. [CVE-2014-0076]

Nota :

L' advisory Heartbleed originale elenca FreeBSD 8.4 e 9.1 come potenzialmente vulnerabili. Questo non è vero a causa della mancanza di Heartbeat Extension (la libreria openssl di FreeBSD predefinita è la versione 0.9.x).


3

Ho trovato quasi impossibile determinare le versioni di SSL in uso su diversi dispositivi con cui lavoro. Anche se tecnicamente non è una mitigazione poter identificare gli host attualmente vulnerabili era in cima alla mia lista.

Ho messo insieme una piccola VM che eseguirà controlli su host e porte arbitrari usando il modulo di test di FiloSottile . A prima vista, il codice sembra valido.

Il rilascio della VM completata è qui . È in formato VMX.

Parole di avvertimento

Questo script e VM mostreranno solo lo stato corrente dei tuoi sistemi. È del tutto possibile che ad un certo punto in passato i tuoi sistemi si trovassero in uno stato vulnerabile e avrebbero potuto essere stati abusati.

Qualcosa che appare qui è sicuramente una priorità assoluta da risolvere, ma non ti toglie il gancio per l'applicazione degli aggiornamenti e la modifica di tutte le chiavi.


Ho appena ricevuto un'email da Snapt, la loro. BOLO ( fai attenzione ) !
Jacob,

2

Amazon Linux (distribuzione Linux utilizzata in Amazon EC2)

https://aws.amazon.com/amazon-linux-ami/security-bulletins/ALAS-2014-320/

Panoramica del problema: è stato trovato un controllo dei limiti mancante nel modo in cui OpenSSL ha gestito i pacchetti di estensione heartbeat TLS. Questo difetto potrebbe essere usato per rivelare fino a 64k di memoria da un client o server connesso.

Versioni interessate: qualsiasi AMI Amazon Linux su cui è installato openssl 1.0.1, ovvero qualsiasi AMI Amazon Linux 2013.03 o successive e qualsiasi AMI Amazon Linux che sia stata aggiornata a 2013.03 o successive. OpenSSL è installato di default sull'AMI Amazon Linux.

Pacchetti interessati: openssl

Correzione del problema: eseguire yum update openssl per aggiornare il sistema. Una volta installato il nuovo pacchetto, è necessario riavviare manualmente tutti i servizi che utilizzano openssl o riavviare l'istanza. Mentre il nuovo pacchetto è ancora chiamato openssl-1.0.1e, contiene la correzione per CVE-2014-0160.

Nuovi pacchetti: i686:

openssl-1.0.1e-37.66.amzn1.i686

openssl-static-1.0.1e-37.66.amzn1.i686

openssl-perl-1.0.1e-37.66.amzn1.i686

openssl-devel-1.0.1e-37.66.amzn1.i686

openssl-debuginfo-1.0.1e-37.66.amzn1.i686

x86_64:

openssl-devel-1.0.1e-37.66.amzn1.x86_64

openssl-1.0.1e-37.66.amzn1.x86_64

openssl-debuginfo-1.0.1e-37.66.amzn1.x86_64

openssl-perl-1.0.1e-37.66.amzn1.x86_64

openssl-static-1.0.1e-37.66.amzn1.x86_64
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.