Come correggere il bug Heartbleed (CVE-2014-0160) in OpenSSL?


152

Ad oggi, è stato trovato un bug in OpenSSL che interessa le versioni 1.0.1attraverso 1.0.1f(compreso) e 1.0.2-beta.

Da Ubuntu 12.04, siamo tutti vulnerabili a questo errore. Per correggere questa vulnerabilità, gli utenti interessati devono eseguire l'aggiornamento a OpenSSL 1.0.1g.

In che modo ogni utente interessato può applicare questo aggiornamento ora ?


Hai una versione interessata di openssl?
Braiam,

Ho la versione 1.0.1-4ubuntu5.12 con patch e ho riavviato il servizio apache ma i test filippo.io/Heartbleed sul mio sito dicono ancora che sono vulnerabile Hai idea del perché?

1
@Mat Non so cosa verifichi quel sito, ma forse rileva che stai usando una vecchia chiave. Poiché la chiave potrebbe essere trapelata, è necessario rigenerarla.
Gilles,

1
Non vuoi davvero aggiornare OpenSSL alle nuove versioni all'ingrosso, è un dolore incredibile. Molto più semplice è installare il pacchetto aggiornato che corregge
sarnold

hai riavviato i tuoi servizi dopo l'aggiornamento?
Axel,

Risposte:


141

Gli aggiornamenti di sicurezza sono disponibili per 12.04, 12.10, 13.10 e 14.04 vedi Avviso di sicurezza di Ubuntu USN-2165-1 .

Quindi prima devi applicare gli aggiornamenti di sicurezza disponibili, ad esempio eseguendo

sudo apt-get update
sudo apt-get upgrade

dalla riga di comando.

Non dimenticare di riavviare i servizi (HTTP, SMTP, ecc.) Che utilizzano la versione OpenSSL interessata, altrimenti sei ancora vulnerabile. Vedi anche Heartbleed: che cos'è e quali sono le opzioni per mitigarlo? su Serverfault.com.

Il seguente comando mostra (dopo un aggiornamento) tutti i servizi che devono essere riavviati:

sudo find /proc -maxdepth 2 -name maps -exec grep -HE '/libssl\.so.* \(deleted\)' {} \; | cut -d/ -f3 | sort -u | xargs --no-run-if-empty ps uwwp

Successivamente, è necessario rigenerare tutte le chiavi SSL del server , quindi valutare se le chiavi potrebbero essere trapelate, nel qual caso gli aggressori potrebbero aver recuperato informazioni riservate dai server.


23
Non sono sicuro che funzioni su Ubuntu 12.04.4 LTS. Dopo l'aggiornamento completo, openssl versionOpenSSL 1.0.1 14 Mar 2012. Questa non è la versione con patch, giusto? O sto leggendo male?
Paul Cantrell,

7
Cosa fare con Ubuntu 13.04? Nessun openssl aggiornato disponibile :-(
Frodik

20
Su Ubuntu 12.04 anche OpenSSL fisso visualizza la versione 1.0.1 14 Mar 2012. Leggi la risposta di crimi per scoprire se la tua installazione include la correzione.
dan

7
Grazie @dan! Riassumendo la risposta di @ crimi qui: se corri dpkg -l | grep ' openssl 'e ottieni 1.0.1-4ubuntu5.12allora sei a posto.
Paul Cantrell,

20
Patch e riavvio non sono sufficienti. È necessario rigenerare le chiavi e valutare se le chiavi sono state trapelate e altro materiale riservato. Vedi ad esempio Heartbleed significa nuovi certificati per ogni server SSL?
Gilles,

71

Il bug è noto come Heartbleed .

Sono vulnerabile?

Generalmente, sei interessato se esegui un server per cui hai generato una chiave SSL ad un certo punto. La maggior parte degli utenti finali non è (direttamente) interessata; almeno Firefox e Chrome non usano OpenSSL. SSH non è interessato. La distribuzione dei pacchetti Ubuntu non è interessata (si basa sulle firme GPG).

Sei vulnerabile se esegui qualsiasi tipo di server che utilizza le versioni OpenSSL 1.0–1.0.1f (ad eccezione delle versioni ovviamente modificate da quando è stato scoperto il bug). Le versioni di Ubuntu interessate sono da 11.10 oniriche a 14.04 pre-release attendibili. È un bug di implementazione, non un difetto nel protocollo, quindi solo i programmi che usano la libreria OpenSSL sono interessati. Se hai un programma collegato alla vecchia versione 0.9.x di OpenSSL, non è interessato. Sono interessati solo i programmi che utilizzano la libreria OpenSSL per implementare il protocollo SSL; i programmi che usano OpenSSL per altre cose non sono interessati.

Se hai eseguito un server vulnerabile esposto a Internet, consideralo compromesso a meno che i tuoi registri non mostrino alcuna connessione dall'annuncio del 2014-04-07. (Ciò presuppone che la vulnerabilità non sia stata sfruttata prima del suo annuncio.) Se il server è stato esposto solo internamente, la necessità di modificare le chiavi dipenderà da quali altre misure di sicurezza sono in atto.

Qual è l'impatto?

Il bug consente a qualsiasi client in grado di connettersi al server SSL di recuperare circa 64 KB di memoria dal server. Non è necessario che il client sia autenticato in alcun modo. Ripetendo l'attacco, il client può scaricare diverse parti della memoria in tentativi successivi.

Uno dei dati critici che l'attaccante potrebbe essere in grado di recuperare è la chiave privata SSL del server. Con questi dati, l'attaccante può impersonare il tuo server.

Come posso ripristinare su un server?

  1. Porta offline tutti i server interessati. Finché sono in esecuzione, stanno potenzialmente perdendo dati critici.

  2. Aggiorna il libssl1.0.0pacchetto e assicurati che tutti i server interessati siano riavviati.
    Puoi verificare se i processi interessati sono ancora in esecuzione con `` grep '' libssl. (cancellato) "/ proc / / maps"

  3. Genera nuove chiavi . Ciò è necessario perché il bug potrebbe aver consentito a un utente malintenzionato di ottenere la vecchia chiave privata. Segui la stessa procedura che hai usato inizialmente.

    • Se si utilizzano certificati firmati da un'autorità di certificazione, inviare le nuove chiavi pubbliche alla propria CA. Quando ottieni il nuovo certificato, installalo sul tuo server.
    • Se si utilizzano certificati autofirmati, installarlo sul server.
    • In ogni caso, sposta le vecchie chiavi e i certificati (ma non eliminarli, assicurati solo che non vengano più utilizzati).
  4. Ora che hai nuove chiavi senza compromessi, puoi riportare il tuo server online .

  5. Revoca i vecchi certificati.

  6. Valutazione del danno : qualsiasi dato che è stato nella memoria di un processo che serve connessioni SSL potrebbe essere stato trapelato. Ciò può includere password degli utenti e altri dati riservati. È necessario valutare quali potrebbero essere stati questi dati.

    • Se stai eseguendo un servizio che consente l'autenticazione con password, le password degli utenti che si sono connessi da poco prima dell'annuncio della vulnerabilità dovrebbero essere considerate compromesse. (Un po 'prima, perché la password potrebbe essere rimasta inutilizzata in memoria per un po'.) Controlla i tuoi registri e modifica le password di qualsiasi utente interessato.
    • Invalida anche tutti i cookie di sessione, poiché potrebbero essere stati compromessi.
    • I certificati client non sono compromessi.
    • Qualsiasi dato scambiato da poco prima della vulnerabilità potrebbe essere rimasto nella memoria del server e quindi potrebbe essere trapelato a un utente malintenzionato.
    • Se qualcuno ha registrato una vecchia connessione SSL e ha recuperato le chiavi del tuo server, ora può decodificare la sua trascrizione. (A meno che PFS non sia stato garantito - se non lo sai, non lo era.)

Come posso recuperare su un client?

Esistono solo poche situazioni in cui le applicazioni client sono interessate. Il problema sul lato server è che chiunque può connettersi a un server e sfruttare il bug. Per sfruttare un client, devono essere soddisfatte tre condizioni:

  • Il programma client ha utilizzato una versione errata della libreria OpenSSL per implementare il protocollo SSL.
  • Il client si è connesso a un server dannoso. (Ad esempio, se ti sei connesso a un provider di posta elettronica, questo non è un problema.) Ciò doveva accadere dopo che il proprietario del server è diventato consapevole della vulnerabilità, quindi presumibilmente dopo il 2014-04-07.
  • Il processo client aveva in memoria dati riservati che non erano condivisi con il server. (Quindi, se hai appena corso wgetper scaricare un file, non c'erano dati da perdere.)

Se lo hai fatto tra il 2014-04-07 sera UTC e l'aggiornamento della libreria OpenSSL, considera compromessi tutti i dati presenti nella memoria del processo client.

Riferimenti


4
Non credo che sia interessato solo il lato server delle connessioni SSL / TLS ". openssl.org/news/secadv_20140407.txt afferma che può rivelare segreti da client o server. ubuntu.com/usn/usn-2165-1 è d' accordo. Le possibilità che si stiano utilizzando i certificati client durante la connessione a un server dannoso sono limitate, ma esiste la possibilità.
arm

@armb Hai un buon punto. Non importa nemmeno se vengono utilizzati i certificati client, la perdita di dati non è correlata all'uso dei certificati. Ho arruolato l'aiuto di professionisti .
Gilles,

I certificati dei clienti sono il caso in cui si perderanno le chiavi private, ma sì, le password, i cookie di autorizzazione ecc. Potrebbero comunque perdere. Tuttavia, con un client basato su OpenSSL come curl o wget nell'uso tipico, non avresti segreti per altri siti in memoria durante la connessione a un server dannoso, quindi in quel caso penso che l'unica perdita sarebbe se fornissi i segreti del client anticipando di consegnarli a un sito legittimo e Heartbleed li ha fatti trapelare durante l'handshake prima che la verifica del certificato rivelasse che non si è collegati al sito giusto.
arm

1
@Gilles Potresti essere interessato alle risposte a Quali clienti si sono dimostrati vulnerabili a Heartbleed? . Sono riuscito a ottenere memoria "interessante" su nginx (modalità proxy), wget, link e altri.
Lekensteyn,

1
@ MuhamedHuseinbašić Il pacchetto opensslcontiene strumenti da riga di comando. Non viene utilizzato dalle applicazioni che utilizzano la libreria OpenSSL per implementare il protocollo SSL (come Apache). Ma dovresti semplicemente applicare gli aggiornamenti di sicurezza della distribuzione.
Gilles,

40

Per vedere quale versione di OpenSSL è installata su Ubuntu eseguire:

dpkg -l | grep openssl

Se viene visualizzato il seguente output di versione, è necessario includere la patch per CVE-2014-0160.

ii  openssl      1.0.1-4ubuntu5.12      Secure Socket Layer (SSL)...

Guardando https://launchpad.net/ubuntu/+source/openssl/1.0.1-4ubuntu5.12 , mostra che tipo di bug sono stati corretti:

...
 SECURITY UPDATE: memory disclosure in TLS heartbeat extension
    - debian/patches/CVE-2014-0160.patch: use correct lengths in
      ssl/d1_both.c, ssl/t1_lib.c.
    - CVE-2014-0160
 -- Marc Deslauriers <email address hidden>   Mon, 07 Apr 2014 15:45:14 -0400
...

2
Ho aggiornato e ottengo la versione 5.12 ma questo strumento mi dice ancora che sono vulnerabile filippo.io/Heartbleed Thoughts?
toxaq,

3
Ho testato i nostri server aggiornati su questo lato e mi ha detto che non sono interessato. Hai riavviato il tuo sistema o almeno sei sicuro che tutti i processi necessari siano stati riavviati?
crimi

3
Dopo aver aggiornato OPENSSL, tutto quello che dovevo fare era riavviare il servizio apache, ma grazioso non mi ha aiutato . Ho dovuto andare a ricominciare usandosudo service apache2 restart
Tom Hert l'

1
Ho appena trovato la causa della mia vulnerabilità: avevo installato mod-spdy-beta. Dopo averlo rimosso e riavviato Apache, tutti i test ora sono verdi.
Andreas Roth,

3
L'aggiornamento opensslnon risolve applicazioni come Apache, Nginx o postfix. Devi aggiornarli libssl1.0.0e riavviarli come spiegato in altri post.
dal

17

Se i tuoi repository apt-get non contengono alcuna versione OpenSSL 1.0.1g precompilata , scarica semplicemente le fonti dal sito Web ufficiale e compila.

Sotto la singola riga di comando per compilare e installare l'ultima versione di openssl.

curl https://www.openssl.org/source/openssl-1.0.1g.tar.gz | tar xz && cd openssl-1.0.1g && sudo ./config && sudo make && sudo make install

Sostituisci il vecchio file binario openssl con quello nuovo tramite un collegamento simbolico.

sudo ln -sf /usr/local/ssl/bin/openssl `which openssl`

Siete tutti bravi!

# openssl version should return
openssl version
OpenSSL 1.0.1g 7 Apr 2014

Cf questo post sul blog .

NB: Come indicato nel post del blog, questa soluzione alternativa non risolverà "Server Nginx e Apache che devono essere ricompilati con sorgenti openSSL 1.0.1g".


2
Come al solito Ubuntu non fornisce la nuova versione upstream ma ha patchato le versioni di tutte le versioni supportate per mantenere le modifiche al minimo.
Florian Diesch,

1
Nota: assicurarsi di riavviare il server dopo aver aggiornato OpenSSL. Apache e Nginx hanno raccolto la nuova lib e la vulnerabilità è stata chiusa.
Angelov,

6
Eh, ora che mi prendo il tempo per leggere i dettagli di questo post, sono ancora più sconvolto: scaricare un tarball da un posto casuale da Internet, decomprimere ed eseguire parti di esso come root è solo un comportamento sconsiderato. Sarebbe leggermente meglio se le firme tarball fossero scaricate e controllate, ma assicurarsi di convalidare le firme firmate con la chiave giusta è di per sé una domanda difficile. Le distribuzioni hanno già fatto il possibile per garantire una provenienza sicura di tarball e patch. Grazie.
Sarnold,

2
potrebbe essere una buona idea compilare dal sorgente ORA e installarne uno più recente in seguito da apt, in questo modo il tuo più sicuro che senza aspettative su versioni precedenti di Ubuntu comunque solo i miei due centesimi
nwgat

2
@sarnold openssl.org non sembra un posto casuale per scaricare la fonte di openssl. Canonical dovrebbe renderlo superfluo, ma openssl.org dovrebbe essere l'autorevole a monte su cui lavorare.
Rustavore,

12

Per coloro che non vogliono fare un aggiornamento del pacchetto a livello di server. Ho letto un sacco di queste guide oggi e apt-get upgrade openssl=== apt-get upgradequesto applicherà tutte le correzioni di sicurezza richieste dal tuo computer. Fantastico, a meno che non ci si appoggi esplicitamente a una vecchia versione del pacchetto da qualche parte.

Questa è l'azione minima richiesta su Ubuntu 12.04 LTS che esegue Apache 2:

  • Vai a questo indirizzo e dimostra di avere la vulnerabilità. È necessario utilizzare l'INDIRIZZO ESTERNO DIRETTO DEL WEB SERVER. Se usi un bilanciamento del carico (ad esempio ELB) potresti non contattare direttamente il tuo server web.

  • Eseguire il seguente 1 liner per aggiornare i pacchetti e riavviare. Sì, ho visto tutte le guide dire che dovresti avere un timestamp dopo il 4 aprile 2014, questo non sembra essere il mio caso.

    apt-get update && apt-get install openssl libssl1.0.0 && /etc/init.d/apache2 restart

  • Assicurati di aver installato le versioni del pacchetto appropriate e controlla ancora una volta la vulnerabilità del tuo server web.

I pacchetti chiave sono i seguenti, ho determinato queste informazioni utilizzando il comando seguente, quindi ho rimosso la cruft (non è necessario sapere molto sullo stato delle mie macchine).

$ dpkg -l | grep ssl

ii  libssl-dev                       1.0.1-4ubuntu5.12          SSL development libraries, header files and documentation
ii  libssl1.0.0                      1.0.1-4ubuntu5.12          SSL shared libraries
ii  openssl                          1.0.1-4ubuntu5.12          Secure Socket Layer (SSL)* binary and related cryptographic tools

1.0.1-4ubuntu5.12NON deve contenere la vulnerabilità. Accertarsi che accada di nuovo visitando il sito Web di seguito e testando il server Web.

http://filippo.io/Heartbleed/


2
L'uso di un sito esterno per dimostrare una vulnerabilità in un server sembra essere l'approccio sbagliato per me.
Rinzwind,

Gli script di test delle vulnerabilità esterne stanno diventando sempre più comuni in questi giorni. Fa esattamente quello che fa uno script interno, la connessione è appena iniziata da un server web esterno. Puoi consultare siti come WhiteHatSecurity.com per un esempio di un programma che avvia tutte le connessioni in remoto. Ci sono casi in cui questo non volerebbe, ad esempio i test di vulnerabilità della rete ma per testare un server Web rivolto in avanti (che in generale sarà un server SSL) è quasi l'ideale.
Adrian,

Perché installare il pacchetto se viene aggiornato?
Braiam,

1
apt-get install openssl libssl1.0.0fatto per me. In esecuzione openssl version -aora mostra:built on: Mon Apr 7 20:33:29 UTC 2014
topher

"Oggigiorno gli script di test delle vulnerabilità esterne stanno diventando sempre più comuni", il che apre la possibilità a quel sito esterno di abusare del mio sistema: tutto ciò di cui hanno bisogno per sapere che non funziona e hackerare il mio sistema prima di correggerlo. No, questo non è il modo corretto. (e sì, ospito i miei siti con apache e openssl).
Rinzwind,

11

Ho notato molti commentatori qui che hanno bisogno di aiuto urgentemente. Stanno seguendo le istruzioni, l'aggiornamento e il riavvio e sono ancora vulnerabili quando si utilizzano alcuni dei siti Web di prova.

Devi assicurarti di non avere pacchetti in sospeso come libssl.

:~$ sudo apt-get upgrade -V
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages have been kept back:
  libssl-dev (1.0.1-4ubuntu5.10 => 1.0.1-4ubuntu5.12)
  libssl1.0.0 (1.0.1-4ubuntu5.10 => 1.0.1-4ubuntu5.12)
  linux-image-virtual (3.2.0.31.34 => 3.2.0.60.71)
  linux-virtual (3.2.0.31.34 => 3.2.0.60.71)
0 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.

Per aggiornare quelli apt-mark unhold libssl1.0.0(ad esempio). Quindi l'aggiornamento: apt-get upgrade -V. Quindi, riavvia i servizi interessati.

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.