Der WhatsApp-Verschlüsselung auf die Finger geschaut

Für einen Artikel in c't hat sich das Team von heise Security die Ende-zu-Ende-Verschlüsselung von WhatsApp im Detail angesehen. Dabei kam heraus, dass WhatsApp zwar vorbildlich mit der TextSecure-Technik von Moxie Marlinspike verschlüsselt, das Ganze in der Praxis aber nur beschränkten Nutzen hat.

In Pocket speichern vorlesen Druckansicht
Der WhatsApp-Verschlüsselung auf die Finger geschaut
Lesezeit: 7 Min.
Von
  • Fabian A. Scherschel
Inhaltsverzeichnis

English translation of this article

Als die Macher des Krypto-Messengers TextSecure Ende 2014 ankündigten WhatsApp würde nun mit dem von ihnen entwickelten Protokoll Ende-zu-Ende verschlüsseln, löste dies ein großes Medieninteresse aus. Danach wurde es allerdings schnell wieder still um die Verschlüsselung beim beliebten Smartphone-Messenger. Viele Nutzer fragen sich noch immer, ob sie der App nun vertrauen können oder ob die Datenkrake Facebook nach wie vor alles mitliest. Um diese Frage in einem c't-Artikel zu beantworten (siehe dazu Ausgabe 11/15 von c't auf S.88: "WhatsApp entschlüsselt"), haben wir die Verschlüsselung des Dienstes unter die Lupe genommen.

Da die Apps selbst Closed Source sind, konzentrierten wir uns auf die übertragenen Nachrichten. Dabei sind wir von zwei Seiten an die Sache herangegangen. Zum einen haben wir den Datenverkehr vom Smartphone zum WhatsApp-Server untersucht, zum anderen haben wir die empfangene Nachricht dem Python-Tool yowsup vorgeworfen. Da das als Quelltext vorliegt, konnten wir dort nachvollziehen, was wie entschlüsselt werden musste, um die verschickte Nachricht zum Vorschein zu bringen.

Auf der Seite des Smartphones schalteten wir uns zwischen das Absender-Gerät der Nachricht und den WLAN-Router. Mittels ARP-Spoofing machten wir dem Gerät vor, wir wären der Router und gaben uns gegenüber dem Router als das Handy aus – ein klassischer Man-in-the-Middle-Angriff. Auf diesem Weg ging sämtlicher Netzwerkverkehr vom Smartphone zum WhatsApp-Server an uns vorbei. Mit Hilfe eines Zusatzmoduls für Wireshark gelang es uns, in die von WhatsApp verschickten Datenpakete hineinzuschauen. Allerdings förderte das nur die Verwaltungsinformationen des Jabber-ähnlichen Protokolls zu Tage. Der eigentliche Inhalt der Nachrichten blieb – wie zu erwarten – unlesbarer Binärcode.

Der Versuchsaufbau: Das Smartphone sendet eine Nachricht an yowsup auf einem Desktop-Rechner. Auf dem Weg zum WhatsApp-Server werden die Daten auf dem Laptop mit Wireshark mitgeschnitten und dann weiter geschickt.

Wie bereits von Sicherheitsforschern dokumentiert wurde, setzt WhatsApp eine proprietäre Transportverschlüsselung ein, die auf dem problematischen RC4-Algorithmus beruht und somit durchaus angreifbar ist. Das RC4-Verfahren gilt als geknackt; außerdem wird offenbar für beide Kommunikationsrichtungen der gleiche, aus einem Benutzerkennwort abgeleitete Schlüssel verwendet, was zusätzliche Angriffsfläche bietet. Somit ist die Transportverschlüsselung prinzipiell angreifbar. Trotzdem ist damit eine einfache Massenüberwachung der WhatsApp-Kommunikation etwa auf den Internet-Backbones schon mal unmöglich.

Bleiben für eine massenhafte Analyse von WhatsApp-Nachrichten also die WhatsApp-Server, welche die transport-gesicherten Nachrichten dechiffrieren und damit dann den Klartext der Nachrichten prozessieren und auch auswerten können. Zumindest wenn keine Ende-zu-Ende-Verschlüsselung das verhindert. Ob die, wie von Moxie Marlinspike behauptet, jedoch tatsächlich schon zum Einsatz kommt, ist bislang nicht dokumentiert. WhatsApp selbst hat sich zum Thema Ende-zu-Ende-Verschlüsselung (E2E) nicht öffentlich geäußert. Also haben wir uns die von einem Android-Smartphone verschickten Nachrichten genauer angeschaut. Die sollten nämlich laut Marlinspike bereits E2E-gesichert sein, wenn die Gegenstelle das ebenfalls schon kann.

Eine solche Gegenstelle setzten wir für unsere Untersuchungen selbst auf. Die freie und quelloffene Software yowsup kann man dazu verwenden, per Skript vom Webserver zu whatsappen. In der aktuellen Version enthält sie auch bereits eine experimentelle Option mit dem Namen --moxie, mit der man einen E2E-fähige WhatsApp-Client aufsetzen kann. Der Vorteil gegenüber dem Original: Nicht nur der Quellcode von yowsup selbst liegt offen, das Programm bindet eine Portierung der Axolotl-Verschlüsselung aus TextSecure ein, die vom selben Entwickler stammt und ebenfalls Open Source ist. So kann man alle Schritte vom Empfang der chiffrierten Daten aus dem Netz bis hin zur Ausgabe der Klartextnachricht verfolgen.

Mit diesem Patch schauen wir yowsup auf die Finger, wenn es Nachrichten entschlüsselt.

Für unsere Tests luden wir den Python-Code aus dem GitHub-Repo des yowsup-Projektes herunter und bauten an einigen Stellen zusätzliche Kontroll-Ausgaben ein. Die Änderungen sorgen dafür, dass der Code den Ciphertext auf der Kommandozeile ausgibt, bevor er entschlüsselt wird. Die binären Cipherdaten wandelt der Logging-Code für die Ausgabe in Hexadezimal-Form um. Und in der Tat kam von den getesteten Android-Handys immer Ciphertext an deser Stelle an.

Codeflow: So verarbeitet yowsup mit Hilfe der Bibliothek python-axolotl eine eingehende Nachricht, die mit dem TextSecure-Protokoll verschlüsselt wurde und entschlüsselt werden soll.

Im nächsten Schritt ruft der Code die Axolotl-Bibliothek auf und lässt die Nachricht entschlüsseln. Eine zweite Modifikation unsererseits sorgte dafür, dass auch der Klartext auf der Kommandozeile als Hinweis ausgegeben wird. Und in der Tat lieferte dieser Schritt den schließlich auch angezeigten Klartext zurück.

Damit wissen wir, dass unsere Android-Handys im Test tatsächlich nur Ende-zu-Ende-verschlüsselte Nachrichten an die E2E-fähige Gegenstelle verschickten. Und diese Nachrichten waren offenbar nicht irgendwie, sondern gemäß dem TextSecure-Protokoll verschlüsselt. Von ebenfalls getesteten iOS-Clients kamen hingegen keine derart gesicherten Nachrichten.

Hier zeigt der Echo Client von yowsup die verschlüsselt eingehende Nachricht sowie den Klartext nach der Entschlüsselung durch die Axolotl-Bibliothek.

Wir sahen übrigens bei unserer Analyse der Netzwerk-Aktivitäten keine zusätzlichen Daten, die eventuell darauf hinweisen könnten, dass der WhatsApp-Client die Daten zusätzlich noch ohne den E2E-Schutz an den Server sendet. Damit beginnt allerdings die frustrierende Liste der Dinge, die wir mit unserem Versuchsaufbau nicht erfassen können. Wir wissen etwa nicht, ob die E2E-Verschlüsselung tatsächlich immer zum Einsatz kommt, wenn es möglich ist, oder nach bestimmten Kriterien auch mal ausgesetzt wird – etwa auf Anfrage gewisser Dienste oder in bestimmten Ländern. Grundsätzlich ist ein solcher Schalter ja durchaus vorgesehen. Schließlich sendet jeder WhatsApp-Client auch ungesicherte Nachrichten etwa an iPhones ohne E2E-Verschlüsselung.

Ob die von WhatsApp erstellten, geheimen Schlüssel unter bestimmten Umständen vielleicht doch das Gerät verlassen, wissen wir ebenfalls nicht. Aber solange WhatsApp jedem Client jederzeit signalisieren kann, ab sofort unverschlüsselt zu senden und der Anwender praktisch keine Chance hat, das zu bemerken, dürfte das Interesse an diesen Schlüsseln ohnehin gering sein.

Letzteres ist vielleicht sogar das größte Problem der Ende-zu-Ende-Verschlüsselung. Man weiß eigentlich nie wirklich sicher, ob sie tatsächlich zum Einsatz kommt. Denn weder beim Verschicken noch beim Empfang zeigt ein regulärer WhatsApp-Client an, ob die Nachricht E2E-verschlüsselt wurde. Auch unsere Labor-Tests belegen lediglich, dass das prinzipiell schon geschieht. Genug, um sich drauf zu verlassen, ist das leider nicht. Erschwerend hinzu kommt, dass es zumindest nach unserem Kenntnisstand nicht einmal ein Commitment von WhatsApp zu konsequenter E2E-Verschlüsselung gibt. Damit bleibt das Ganze bisher leider nur eine Geste.


Mehr zum Thema:

(fab)