Wegen eines Programmierfehlers in Open SSL ließen Server ihre geheimen Schlüssel Byte-weise ins Internet tropfen. Eine Nachlese zum bisher aufsehenerregendsten Security-Bug des Jahres 2014.
Ein sicherheitsrelevanter Bug in der freien Krypto-Software Open SSL [1] hat im April 2014 für einiges Aufsehen gesorgt, auch außerhalb von Fachkreisen. Entdeckt haben ihn ungefähr zeitgleich am 7. April der Google-Mitarbeiter Neel Mehta [2] und das Team der finnischen Security-Firma Codenomicon.
Da sich der Fehler in der Heartbeat-Erweiterung der Software befand, war mit einem Wortspiel rasch der Name Heartbleed geschaffen. Codenomicon stellte eine gleichnamige Website online – und der Name blieb haften [3]. Der Heartbleed-Bug mit der Kennung CVE-2014-0160 sorgte für viel Unsicherheit und eilige Serverupdates.
Lebenszeichen
Technisch steckt hinter der Sicherheitslücke ein recht einfacher Programmierfehler. Open SSL setzt unter anderem Transportverschlüsselung nach dem Protokoll TLS um. Aus Performancegründen ist es wünschenswert, die TLS-Verbindung zwischen Client und Server nicht ständig neu aufzubauen, sondern länger aktiv zu halten. Dazu dient die Heartbeat-Erweiterung des Protokolls nach RFC 6520. Um der Gegenseite zu versichern, dass sie die Verbindung halten, schicken sich Client und Server kleine Datenmengen hin und her. Dabei senden sie nicht nur ein paar Bytes Daten, die die Gegenstelle wieder zurückschicken soll, sondern geben auch deren Länge an.
DELUG-DVD
Die DELUG-Ausgabe dieses Linux-Magazins bringt auf DVD die Pentesting-Distribution Kali Linux in Version 1.0.6 zuzüglich Updates mit. Das installierbare Livesystem enthält unter anderem die Metasploit-Version 4.9.2 mit Client- sowie Server-seitigen Exploit-Modulen für Heartbleed.
Der Programmierfehler liegt darin, dass der Empfänger die Datenlänge nicht selbst ermittelt, sondern diesen Wert ohne Prüfung von der Gegenstelle übernimmt. Schickt ein Partner nun aber lediglich 1 KByte Daten als Payload, gibt aber beispielsweise 5 KByte als deren Länge an, dann liest der Empfänger über den Datenbereich der Payload hinaus und schickt weitere 4 KByte aus seinem Arbeitsspeicher durchs Netzwerk zurück.
Zu viel gelesen
Dieser Fehler entspricht dem bekannten Typ Read Overrun, auch als Buffer Overread oder Out-of-bounds Read bezeichnet – ein Lesevorgang über das Datenende hinaus [4]. Im Normalfall wäre das nicht sonderlich dramatisch, denn es würde sich um zufällige Inhalte aus dem Arbeitsspeicher handeln. Open SSL implementiert allerdings seine eigene Speicherverwaltung und verwendet dabei etwa die Funktion »OPENSSL_malloc()« statt der gebräuchlichen »malloc()« .
Daher enthalten die Speicherfragmente stets Daten, mit denen Open SSL arbeitet. Bei der Kryptosoftware sind das Zertifikate und Schlüssel, die eigentlich geheim bleiben sollten. Bis zu 64 KByte lassen sich pro einzelnem Heartbeat herauskitzeln. Wiederholt ein Angreifer den Vorgang oft genug, kann er sich eine ausreichende Menge Speicher verschaffen, um schließlich den privaten SSL-Schlüssel eines Servers zu rekonstruieren.
Das war zunächst noch eine Vermutung und das Unternehmen Cloudflare schrieb einen Wettbewerb für den praktischen Beweis aus [5]. Kaum einen Tag später hatten ein Open-Source-Entwickler sowie ein finnischer Security-Forscher den privaten SSL-Schlüssel des Cloudflare-Testservers erbeutet. Sie brauchten dazu in dem einen Fall 2,5 Millionen, im anderen 100000 Requests.
Exploits
Man muss jedoch kein Security-Champion sein, um die Attacke selbst nachzuvollziehen. Für das Penetrationtest-Framework Metasploit stehen fertige Module für Angriffe gegen Server [6] und Clients [7] zur Verfügung. Der Kasten “Heartbleed mit Metasploit aufspüren” gibt eine detaillierte Anleitung, Abbildung 1 zeigt den Einsatz des Exploits gegen einen lokalen Apache-Webserver mit verwundbarem SSL-Modul.
Heartbleed mit Metasploit aufspüren
Die Entwickler von Metasploit, einem freien Toolkit für Penetrationtests, reagieren rasch auf neue Sicherheitslücken. Auch im Fall von Heartbleed gab es nur wenige Tage nach der Bekanntgabe der Lücke bereits passende Exploit-Module für die in Ruby geschriebene Software – erst zum Attackieren von Servern, dann auch einen Serverdienst, der den Speicher von Clients ausliest.
Je nach eingesetzter Linux-Distribution ist Metasploit nicht so einfach zu installieren. Am einfachsten probiert man es mit einer Security-Distribution wie Kali Linux [9] aus, die der DVD-Ausgabe dieses Linux-Magazins beiliegt. Die Kali-Entwickler pflegen ein eigenes Paketarchiv für Security-Software, das auch ein regelmäßig aktualisiertes Metasploit samt Modulen enthält. Eigene Installationen sind mit dem Kommando »msfupdate« aktualisierbar.
Das muss der Anwender jedoch mir Rootrechten ausführen. Nicht erschrecken: Penetration-Tester arbeiten häufig als Root, so auch beim Benutzen von Metasploit. Die Distribution Kali bootet standardmäßig ebenfalls in eine Root-Oberfläche (Defaultpasswort »toor« ).
Die lange Liste der installierten Metasploit-Module kann man auf der Kommandozeile mit dem Kommando
mfscli | grep heart
nach Exploits für Heartbleed durchsuchen. Das Testen erfolgt dann in der Metasploit-Konsole, die eine interaktive Kommandozeile mit History und Vervollständigung bereitstellt, ähnlich der Bash. Der Anwender startet sie mit »mfsconsole« und muss anschließend eine merkliche Weile warten, bis das Framework initialisiert ist und ein Prompt erscheint.
Das Use-Kommando wählt das zu benutzende Modul aus, mit
use auxiliary/scanner/ssl/openssl_heartbleed
aktiviert der Anwender den Scanner zum Untersuchen verwundbarer Server. Das Kommando »info« zeigt eine Kurzinformation über das Modul inklusive Autoren, relevanter Advisories sowie der wichtigsten Variablen. Letztere setzt man nach dem Muster »set VARIABLE Wert« . Beispielsweise stellt
set RHOSTS 192.168.1.123
die IP-Adresse eines zu scannenden Servers im lokalen Netzwerk ein. Der Befehl »run« führt den Exploit aus. Das Kommando
use auxiliary/server/openssl_heartbeat_client_memory
wählt das Modul zum Angreifen verwundbarer Clients aus. Es stellt einen Serverdienst auf dem Metasploit-Host bereit. Mittels Info- und Set-Kommando lässt er sich konfigurieren, standardmäßig hört er auf alle eingehenden Anfragen. Der Befehl »run« startet anschließend den Server.
Aktiviert man zudem die Einstellung »VERBOSE« , schreibt der Server sein Ereignisprotokoll aufs Terminal. Die Tastenkombination [Strg]+[D] beendet die Metasploit-Konsole.
Die erbeuteten Daten enthalten Mailadressen und weitere Texte, die aus Zertifikaten und Schlüsseln aus dem Verzeichnis »/etc/ssl/private« stammen. Das macht für alle öffentlichen Open-SSL-Installationen ein Update zwingend erforderlich. Unzählige Web-, SMTP-, POP- und IMAP-Server sowie SSL-VPNs, Webbrowser und Chat-Dienste nutzen die äußerst populäre Krypto-Software für sichere Verbindungen – sofern sie nicht die Konkurrenz GNU TLS verwenden.
Prinzipiell sind sowohl Client- als auch Server-Anwendungen betroffen, Webbrowser verwenden das Heartbeat-Feature aber meist nicht. Als eine der ersten Notfall-Maßnahmen empfahl das Open-SSL-Projekt, seine Software mit dem Flag »-DOPENSSL_NO_HEARTBEATS« zu übersetzen und somit das verwundbare Heartbeat-Feature zu entfernen.
Heartbleed betrifft die Open-SSL-Versionen 1.0.1 und 1.0.2-beta, einschließlich 1.0.1f und 1.0.2-beta1. Ein Patch stand binnen eines Tages zur Verfügung. Wie Listing 1 zeigt, fügt es der betroffenen Funktion »tls1_process_heartbeat()« in der Quelltextdatei »t1_lib.c« eine If-Abfrage hinzu. Sie vergleicht die Länge der »payload« -Variablen über die »SSL3_RECORD« -Struktur (»s3->rrec« ) mit der eigentlichen Größe der übertragenen Daten. Falls diese nicht zusammenpassen, ignoriert die Software das Paket einfach und sendet keine Antwort, womit die Attacke vereitelt ist.
Listing 1
Open-SSL-Patch für Heartbleed
01 if (1 + 2 + payload + 16 > s->s3->rrec.length) 02 return 0; /* silently discard per RFC 6520 sec. 4 */
Die Distributionen
Das Patch oder ein Update auf die Open-SSL-Versionen 1.0.1g beziehungsweise 1.0.2-beta2 stopft die Sicherheitslücke. Wegen der verschiedenen Softwareversionen befand sich der Bug nicht in allen Releases von Linux-Distributionen, wie Tabelle 1 zeigt. Beispielsweise blieben Debian Squeeze und Suse Linux Enterprise Server 11 aufgrund ihres älteren Versionsstands verschont. Bei Red Hat Enterprise Linux waren die Anwender bis inklusive Version 6.4 sicher.
Tabelle 1
Updates der Linux-Distributionen
|
Distribution und Version |
Gefixtes Paket verfügbar |
|---|---|
|
Debian Linux 6 Squeeze (Oldstable) |
(nicht betroffen) |
|
Debian Linux 7.4 Wheezy (Stable) |
07.04.2014 |
|
Debian Linux 8.0 Jessie (Testing) |
09.04.2014 |
|
Ubuntu 12.04 LTS Precise |
07.04.2014 |
|
Ubuntu 12.10 Quantal |
07.04.2014 |
|
Ubuntu 13.04 Raring |
(nicht betroffen) |
|
Ubuntu 13.10 Saucy |
07.04.2014 |
|
Ubuntu 14.04 Trusty |
07.04.2014 |
|
SLES 11 |
(nicht betroffen) |
|
Open Suse 12.3 |
08.04.2014 |
|
Open Suse 13.1 |
08.04.2014 |
|
Red Hat Enterprise Linux 5 |
(nicht betroffen) |
|
Red Hat Enterprise Linux bis 6.4 |
(nicht betroffen) |
|
Red Hat Enterprise Linux ab 6.5 |
08.04.2014 |
|
Fedora 19 |
08.04.2014 |
|
Fedora 20 |
08.04.2014 |
Die meisten Linux-Distributionen stellten bereits am 8. April 2014, also einen Tag nach Bekanntgabe des Bugs, aktualisierte Binärpakete bereit, einige sogar noch am selben Tag. Viele Admins dürften Überstunden gemacht haben, um ihre Installationen zu aktualisieren. Ist ein öffentlicher Server von Heartbleed betroffen, ist es übrigens nicht genug, die Software gegen eine reparierte Version auszutauschen. Da bestehende private Schlüssel in die Hände von Angreifern gefallen sein können, muss der Admin zudem neue Schlüssel und Zertifikate generieren und das alte Zertifikat zurückrufen.
Dabei kann der Admin Heartbleed zum Anlass nehmen, um zu überprüfen, ob er beim SSL-/TLS-Betrieb alles richtig macht. Meist steht ein Upgrade auf zeitgemäße Schlüssellängen von 2048 Bit an. Weitere Anregungen dazu liefert die empfehlenswerte Leseliste des Open-Source-Entwicklers Daniel Molkentin [8].
Infos
- Open SSL: http://www.openssl.org
- Open-SSL-Advisory zu Heartbleed: https://www.openssl.org/news/secadv_20140407.txt
- Heartbleed-Seite von Codenomicon: http://heartbleed.com
- Out-of-bounds Read: https://cwe.mitre.org/data/definitions/125.html
- Cloudflare Challenge: http://blog.cloudflare.com/the-results-of-the-cloudflare-challenge
- Metasploit-Modul für Server: https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/ssl/openssl_heartbleed.rb
- Metasploit-Modul für Clients: https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/server/openssl_heartbeat_client_memory.rb
- Daniel Molkentins TLS-/SSL-Lese-Empfehlungen: https://daniel.molkentin.net/2014/04/21/fighting-cargo-cult-the-incomplete-ssltls-bookmark-collection/
- Kali Linux: http://www.kali.org






