Wie kann ich den Heartbleed-Fehler (CVE-2014-0160) in OpenSSL beheben?

152

Ab heute wurde ein Fehler in OpenSSL festgestellt, der Versionen 1.0.1durch 1.0.1f(einschließlich) und betrifft 1.0.2-beta.

Seit Ubuntu 12.04 sind wir alle anfällig für diesen Fehler. Um diese Sicherheitsanfälligkeit zu beheben, sollten betroffene Benutzer auf OpenSSL aktualisieren 1.0.1g.

Wie kann jeder betroffene Benutzer dieses Update jetzt anwenden ?

Lucio
quelle
Haben Sie eine betroffene Version von openssl?
Braiam
Ich habe die gepatchte Version 1.0.1-4ubuntu5.12 und habe den Apache-Dienst neu gestartet, aber beim Filippo.io / Heartbleed- Test auf meiner Website wird immer noch angezeigt , dass ich anfällig bin.
1
@Mat Ich weiß nicht, was diese Site testet, aber vielleicht erkennt sie, dass Sie einen alten Schlüssel verwenden. Da der Schlüssel möglicherweise durchgesickert ist, müssen Sie ihn neu generieren.
Gilles
1
Sie möchten OpenSSL wirklich nicht auf neue Großhandelsversionen aktualisieren, das ist ein unglaublicher Schmerz. Viel einfacher ist es, nur das aktualisierte Paket zu installieren, das das Problem behebt
sarnold
Haben Sie Ihre Dienste nach dem Upgrade neu gestartet?
Axel

Antworten:

141

Sicherheitsupdates sind für 12.04, 12.10, 13.10 und 14.04 verfügbar ( siehe Ubuntu-Sicherheitshinweis USN-2165-1) .

Daher müssen Sie zuerst die verfügbaren Sicherheitsupdates installieren, indem Sie beispielsweise ausführen

sudo apt-get update
sudo apt-get upgrade

von der Kommandozeile.

Vergessen Sie nicht, die Dienste (HTTP, SMTP usw.), die die betroffene OpenSSL-Version verwenden, neu zu starten , da Sie sonst immer noch anfällig sind. Siehe auch Heartbleed: Was ist das und welche Möglichkeiten gibt es, es zu mildern? auf Serverfault.com.

Der folgende Befehl zeigt (nach einem Upgrade) alle Dienste an, die neu gestartet werden müssen:

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

Danach müssen Sie alle Server-SSL-Schlüssel neu generieren und dann bewerten, ob Ihre Schlüssel möglicherweise durchgesickert sind. In diesem Fall haben Angreifer möglicherweise vertrauliche Informationen von Ihren Servern abgerufen.

Florian Diesch
quelle
23
Ich bin mir nicht sicher, ob dies unter Ubuntu 12.04.4 LTS funktioniert. Nach dem vollständigen Update openssl versiongibt OpenSSL 1.0.1 14 Mar 2012. Das ist nicht die gepatchte Version, oder? Oder verstehe ich es falsch?
Paul Cantrell
7
Was kann man mit Ubuntu 13.04 machen? Keine aktualisierten openssl verfügbar :-(
Frodik
20
Unter Ubuntu 12.04 wird sogar die feste OpenSSL-Version angezeigt 1.0.1 14 Mar 2012. Lesen Sie die Antwort von crimi, um herauszufinden, ob Ihre Installation das Update enthält.
Dan
7
Danke, @dan! Resummarizing @ crimis Antwort hier: Wenn du rennst dpkg -l | grep ' openssl 'und bekommst, 1.0.1-4ubuntu5.12kannst du loslegen .
Paul Cantrell
20
Patchen und Neustarten ist nicht genug. Sie müssen Schlüssel neu generieren und beurteilen, ob Ihre Schlüssel und anderes vertrauliches Material durchgesickert sind. Siehe zB Bedeutet Heartbleed neue Zertifikate für jeden SSL-Server?
Gilles
71

Der Fehler ist als Heartbleed bekannt .

Bin ich verletzlich?

Im Allgemeinen sind Sie betroffen, wenn Sie einen Server ausführen, für den Sie irgendwann einen SSL-Schlüssel generiert haben. Die meisten Endbenutzer sind nicht (direkt) betroffen. Zumindest Firefox und Chrome verwenden kein OpenSSL. SSH ist nicht betroffen. Die Verteilung von Ubuntu-Paketen ist nicht betroffen (sie basiert auf GPG-Signaturen).

Sie sind anfällig, wenn Sie einen Server mit den OpenSSL-Versionen 1.0–1.0.1f ausführen (außer natürlich Versionen, die seit dem Erkennen des Fehlers gepatcht wurden). Die betroffenen Ubuntu-Versionen sind vertrauenswürdige Vorabversionen von 11.10 Oneiric bis 14.04. Es ist ein Implementierungsfehler, kein Fehler im Protokoll, daher sind nur Programme betroffen, die die OpenSSL-Bibliothek verwenden. Wenn Sie ein Programm haben, das mit der alten Version 0.9.x von OpenSSL verknüpft ist, ist dies nicht betroffen. Es sind nur Programme betroffen, die die OpenSSL-Bibliothek zum Implementieren des SSL-Protokolls verwenden. Programme, die OpenSSL für andere Zwecke verwenden, sind nicht betroffen.

Wenn Sie einen anfälligen Server ausgeführt haben, der dem Internet ausgesetzt ist, sollten Sie ihn als gefährdet betrachten, es sei denn, in Ihren Protokollen wird seit der Ankündigung am 07.04.2014 keine Verbindung angezeigt. (Dies setzt voraus, dass die Sicherheitsanfälligkeit vor ihrer Bekanntgabe nicht ausgenutzt wurde.) Wenn Ihr Server nur intern verfügbar gemacht wurde, hängt es von den anderen Sicherheitsmaßnahmen ab, ob Sie die Schlüssel ändern müssen.

Was ist die Auswirkung?

Der Fehler ermöglicht es jedem Client, der eine Verbindung zu Ihrem SSL-Server herstellen kann, ungefähr 64 KB Speicher vom Server abzurufen. Der Client muss in keiner Weise authentifiziert werden. Durch Wiederholen des Angriffs kann der Client in aufeinanderfolgenden Versuchen verschiedene Teile des Speichers sichern.

Einer der kritischen Datenbestandteile, die der Angreifer möglicherweise abrufen kann, ist der private SSL-Schlüssel des Servers. Mit diesen Daten kann sich der Angreifer als Ihr Server ausgeben.

Wie kann ich auf einem Server wiederherstellen?

  1. Schalten Sie alle betroffenen Server offline. Solange sie ausgeführt werden, können wichtige Daten verloren gehen.

  2. Aktualisieren Sie das libssl1.0.0Paket , und stellen Sie sicher, dass alle betroffenen Server neu gestartet werden.
    Sie können mit grep libssl überprüfen, ob die betroffenen Prozesse noch ausgeführt werden. (gestrichen) "/ proc / / maps"

  3. Generieren Sie neue Schlüssel . Dies ist erforderlich, da der Fehler möglicherweise einem Angreifer ermöglicht hat, den alten privaten Schlüssel abzurufen. Gehen Sie genauso vor, wie Sie es ursprünglich getan haben.

    • Wenn Sie von einer Zertifizierungsstelle signierte Zertifikate verwenden, senden Sie Ihre neuen öffentlichen Schlüssel an Ihre Zertifizierungsstelle. Wenn Sie das neue Zertifikat erhalten, installieren Sie es auf Ihrem Server.
    • Wenn Sie selbstsignierte Zertifikate verwenden, installieren Sie diese auf Ihrem Server.
    • Bewegen Sie in jedem Fall die alten Schlüssel und Zertifikate aus dem Weg (aber löschen Sie sie nicht, stellen Sie nur sicher, dass sie nicht mehr verwendet werden).
  4. Jetzt, da Sie neue, kompromisslose Schlüssel haben, können Sie Ihren Server wieder online schalten .

  5. Sperren Sie die alten Zertifikate.

  6. Schadensbewertung : Alle Daten, die sich im Speicher eines Prozesses befanden, der SSL-Verbindungen bedient, sind möglicherweise durchgesickert. Dies kann Benutzerkennwörter und andere vertrauliche Daten umfassen. Sie müssen auswerten, wie diese Daten gewesen sein könnten.

    • Wenn Sie einen Dienst ausführen, der die Kennwortauthentifizierung ermöglicht, sollten die Kennwörter von Benutzern, die sich kurz vor Bekanntgabe der Sicherheitsanfälligkeit angemeldet haben, als gefährdet eingestuft werden. (Kurz zuvor, da das Kennwort möglicherweise eine Weile nicht verwendet wurde.) Überprüfen Sie Ihre Protokolle und ändern Sie die Kennwörter aller betroffenen Benutzer.
    • Deaktivieren Sie auch alle Sitzungscookies, da diese möglicherweise kompromittiert wurden.
    • Client-Zertifikate werden nicht gefährdet.
    • Alle Daten, die kurz vor der Sicherheitsanfälligkeit ausgetauscht wurden, befinden sich möglicherweise noch im Speicher des Servers und wurden möglicherweise an einen Angreifer weitergegeben.
    • Wenn jemand eine alte SSL-Verbindung aufgezeichnet und die Schlüssel Ihres Servers abgerufen hat, kann er jetzt sein Transkript entschlüsseln. (Es sei denn, PFS wurde sichergestellt - wenn Sie nicht wissen, war es nicht.)

Wie kann ich auf einem Client wiederherstellen?

Es gibt nur wenige Situationen, in denen Clientanwendungen betroffen sind. Das Problem auf der Serverseite ist, dass jeder eine Verbindung zu einem Server herstellen und den Fehler ausnutzen kann. Um einen Client auszunutzen, müssen drei Bedingungen erfüllt sein:

  • Das Client-Programm verwendete eine fehlerhafte Version der OpenSSL-Bibliothek, um das SSL-Protokoll zu implementieren.
  • Der Client ist mit einem böswilligen Server verbunden. (Wenn Sie beispielsweise eine Verbindung zu einem E-Mail-Anbieter hergestellt haben, ist dies kein Problem.) Dies musste geschehen, nachdem der Serverbesitzer von der Sicherheitsanfälligkeit Kenntnis erlangt hatte, also vermutlich nach dem 07.04.2014.
  • Der Client-Prozess hatte vertrauliche Daten im Speicher, die nicht mit dem Server geteilt wurden. (Wenn Sie gerade wgeteine Datei heruntergeladen haben, gab es keine Daten zu verlieren.)

Wenn Sie dies zwischen dem 07.04.2014 (UTC) und dem Upgrade Ihrer OpenSSL-Bibliothek getan haben, sollten Sie alle Daten, die sich im Speicher des Client-Prozesses befanden, als gefährdet betrachten.

Verweise

Gilles
quelle
4
Ich glaube nicht, dass "Nur die Serverseite von SSL / TLS-Verbindungen betroffen ist". openssl.org/news/secadv_20140407.txt sagt, dass es Geheimnisse von Client oder Server enthüllen kann. ubuntu.com/usn/usn-2165-1 stimmt zu. Die Wahrscheinlichkeit, dass Sie Client-Zertifikate verwenden, während Sie sich mit einem böswilligen Server verbinden, ist gering, aber die Möglichkeit besteht.
Armbe
@Armb Sie machen einen guten Punkt. Es spielt keine Rolle, ob Client-Zertifikate verwendet werden, der Datenverlust ist unabhängig von der Verwendung von Zertifikaten. Ich habe die Hilfe von Fachleuten in Anspruch genommen .
Gilles
Client-Zertifikate sind der Fall, wenn Sie private Schlüssel verlieren würden, aber ja, Passwörter, Autorisierungs-Cookies usw. könnten trotzdem verloren gehen. Bei einem OpenSSL-basierten Client wie curl oder wget würden Sie jedoch keine Geheimnisse für andere Sites im Speicher haben, während Sie eine Verbindung zu einem böswilligen Server herstellen. In diesem Fall wäre das einzige Leck, wenn Sie dem Client Geheimnisse geben würden Vorwegnahme der Weitergabe an eine legitime Site, und Heartbleed hat sie während des Handshakes durchgesickert, bevor die Zertifikatüberprüfung ergibt, dass Sie nicht mit der richtigen Site verbunden sind.
Armbe
1
@ Gilles Vielleicht interessieren Sie sich für die Antworten auf Welche Kunden sind nachweislich anfällig für Heartbleed? . Ich habe es geschafft, "interessanten" Speicher für Nginx (Proxy-Modus), Wget, Links und andere zu gewinnen.
Lekensteyn
1
@ MuhamedHuseinbašić Das Paket opensslenthält Befehlszeilentools. Es wird nicht von Anwendungen verwendet, die die OpenSSL-Bibliothek zum Implementieren des SSL-Protokolls verwenden (z. B. Apache). Sie sollten jedoch nur die Sicherheitsupdates der Distribution anwenden.
Gilles
40

So können Sie feststellen, welche OpenSSL-Version unter Ubuntu installiert ist:

dpkg -l | grep openssl

Wenn die folgende Versionsausgabe angezeigt wird, sollte ein Patch für CVE-2014-0160 enthalten sein.

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

Unter https://launchpad.net/ubuntu/+source/openssl/1.0.1-4ubuntu5.12 wird angezeigt , welche Art von Fehlern behoben wurden:

...
 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
...
Crimi
quelle
2
Ich habe ein Upgrade durchgeführt und die Version 5.12 erhalten, aber dieses Tool sagt mir immer noch, dass ich anfällig bin. Filippo.io/Heartbleed Thoughts?
Toxaq
3
Ich habe unsere aktualisierten Server auf dieser Seite getestet und festgestellt, dass ich nicht betroffen bin. Haben Sie Ihr System neu gestartet, oder sind Sie zumindest sicher, dass alle erforderlichen Prozesse neu gestartet wurden?
Crimi
3
Nach der Aktualisierung der OPENSSL musste ich lediglich den Apache-Dienst neu starten, aber Graceful half nicht . Ich musste gehen und neu starten mitsudo service apache2 restart
Tom Hert
1
Ich habe gerade die Ursache meiner Sicherheitslücke gefunden: Ich hatte Mod-Spdy-Beta installiert. Nach dem Entfernen und Neustarten von Apache sind alle Tests jetzt grün.
Andreas Roth
3
Das Aktualisieren opensslrepariert keine Anwendungen wie Apache, Nginx oder Postfix. Sie müssen sie aktualisieren libssl1.0.0und neu starten, wie in anderen Beiträgen erläutert.
Dienstag,
17

Wenn Ihr apt-get-Repository keine vorkompilierte OpenSSL- Version 1.0.1g enthält, laden Sie einfach die Quellen von der offiziellen Website herunter und kompilieren Sie sie.

Unterhalb der einzelnen Befehlszeile zum Kompilieren und Installieren der letzten openssl-Version.

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

Ersetzen Sie alte openssl-Binärdatei durch die neue über einen Symlink.

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

Ihr seid alle gut!

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

Vgl. Diesen Blogbeitrag .

NB: Wie im Blog-Beitrag angegeben, wird durch diese Problemumgehung "Nginx- und Apache-Server, die mit 1.0.1g openSSL-Quellen neu kompiliert werden müssen" nicht behoben.

Quentin Rousseau
quelle
2
Wie üblich stellt Ubuntu keine neue Upstream-Version zur Verfügung, hat jedoch die Versionen für alle unterstützten Releases gepatcht, um die Änderungen auf ein Minimum zu beschränken.
Florian Diesch
1
Hinweis: Stellen Sie sicher, dass Sie Ihren Server nach der Aktualisierung von OpenSSL neu starten. Apache und Nginx nahmen die neue Bibliothek auf und die Sicherheitslücke wurde geschlossen.
dAngelov
6
Heh, jetzt, da ich mir die Zeit nehme, die Details dieses Beitrags zu lesen , bin ich noch entsetzlicher - das Herunterladen eines Tarballs von einem beliebigen Ort aus dem Internet, das Entpacken und Ausführen von Teilen davon als root ist einfach ein rücksichtsloses Verhalten. Es wäre etwas besser, wenn die Tarball-Signaturen heruntergeladen und überprüft würden. Es ist jedoch eine schwierige Frage, sicherzustellen, dass Sie die Signaturen mit dem richtigen Schlüssel validieren. Distributionen haben bereits Anstrengungen unternommen, um die sichere Herkunft von Tarballs und Patches sicherzustellen. Vielen Dank.
Sarnold
2
Es könnte eine gute Idee sein, JETZT aus dem Quellcode zu kompilieren und später aus apt einen neueren zu installieren. Auf diese Weise sind Sie auf älteren Ubuntu-Versionen sicherer als erwartet, jedenfalls nur auf meinen zwei Cent
nwgat
2
@sarnold openssl.org scheint kein zufälliger Ort zu sein, um den Quellcode für openssl herunterzuladen. Canonical sollte dies unnötig machen, aber openssl.org sollte der autorisierende Upstream sein, von dem aus gearbeitet werden kann.
Rustavore
12

Für diejenigen, die kein serverweites Paket-Upgrade durchführen möchten. Ich habe heute ein paar dieser Anleitungen gelesen und apt-get upgrade openssl=== hiermit apt-get upgradewerden alle für Ihren Computer erforderlichen Sicherheitskorrekturen angewendet . Wunderbar, es sei denn, Sie stützen sich explizit irgendwo auf eine alte Paketversion.

Dies ist die minimale Aktion, die unter Ubuntu 12.04 LTS mit Apache 2 erforderlich ist:

  • Gehen Sie zu dieser Adresse und beweisen Sie, dass Sie die Sicherheitsanfälligkeit haben. Sie sollten die DIREKTE EXTERNE ADRESSE IHRES WEBSERVERS verwenden. Wenn Sie einen Loadbalancer (z. B. ELB) verwenden, wenden Sie sich möglicherweise nicht direkt an Ihren Webserver.

  • Führen Sie den folgenden 1 Liner aus, um Pakete zu aktualisieren und neu zu starten. Ja, ich habe in allen Reiseführern gesehen, dass Sie einen Zeitstempel nach dem 4. April 2014 haben sollten. Dies scheint für mich nicht der Fall zu sein.

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

  • Stellen Sie sicher, dass Sie die entsprechenden Paketversionen installiert haben, und überprüfen Sie Ihren Webserver erneut auf die Sicherheitsanfälligkeit.

Die Schlüsselpakete lauten wie folgt: Ich habe diese Informationen mit dem folgenden Befehl ermittelt und dann die Cruft entfernt (Sie müssen nicht so viel über den Zustand meiner Maschinen wissen).

$ 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.12sollte NICHT die Sicherheitsanfälligkeit enthalten. Stellen Sie sicher, dass dies der Fall ist, indem Sie erneut die unten stehende Website aufrufen und Ihren Webserver testen.

http://filippo.io/Heartbleed/

Adrian
quelle
2
Die Verwendung einer externen Website zum Nachweis einer Sicherheitsanfälligkeit in einem Server scheint für mich der falsche Ansatz zu sein.
Rinzwind
Skripte zum Testen externer Schwachstellen werden heutzutage immer häufiger eingesetzt. Es macht genau das, was ein internes Skript macht, die Verbindung wird nur von einem externen Webserver initiiert. Auf Websites wie WhiteHatSecurity.com finden Sie ein Beispiel für ein Programm, mit dem alle Verbindungen remote initiiert werden. Es gibt Fälle, in denen dies nicht funktioniert, beispielsweise beim Testen von Netzwerkschwachstellen. Zum Testen eines vorwärtsgerichteten Webservers (der im Allgemeinen ein SSL-Server ist) ist dies jedoch nahezu ideal.
Adrian
Warum das Paket installieren, wenn es aktualisiert wird?
Braiam
1
apt-get install openssl libssl1.0.0tat es für mich. Laufen openssl version -azeigt jetzt:built on: Mon Apr 7 20:33:29 UTC 2014
topher
"Externe Skripte zum Testen von Sicherheitslücken werden heutzutage immer häufiger verwendet." Dies eröffnet die Möglichkeit, dass diese externe Site mein System missbraucht: Sie müssen nur wissen, dass es fehlschlägt und mein System hacken, bevor ich es patche. Nein, das ist nicht der richtige Weg. (und ja ich hoste meine eigenen sites mit apache und openssl).
Rinzwind
11

Mir sind hier viele Kommentatoren aufgefallen, die dringend Hilfe brauchen. Sie befolgen die Anweisungen und führen ein Upgrade und einen Neustart durch. Bei Verwendung einiger Testwebsites besteht weiterhin die Gefahr, dass sie nicht ordnungsgemäß ausgeführt werden.

Sie müssen sicherstellen, dass keine Pakete wie libssl zurückgehalten werden.

:~$ 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.

Um diese zu aktualisieren apt-mark unhold libssl1.0.0(zum Beispiel). Dann aktualisieren: apt-get upgrade -V. Starten Sie dann die betroffenen Dienste neu.

Domino
quelle