Test: Hinter den Kulissen der WhatsApp-Verschlüsselung

WhatsApp verschlüsselt schon länger Ende-zu-Ende mit dem bei Krypto-Experten angesehenen Signal-Protokoll – jedenfalls manchmal. Verlassen konnte man sich darauf nicht. Wir versuchen die Frage zu beantworten, ob sich das geändert hat.

In Pocket speichern vorlesen Druckansicht 18 Kommentare lesen
Test: Hinter den Kulissen der WhatsApp-Verschlüsselung
Lesezeit: 8 Min.
Von
  • Fabian A. Scherschel
Inhaltsverzeichnis

Der beliebte Messenger WhatsApp schützt manche Nachrichten seit fast anderthalb Jahren auch mit Ende-zu-Ende-Verschlüsselung. Diese stammt vom Open-Source-Messenger Signal und Krypto-Ikone Moxie Marlinspike und wird von Experten als vorbildlich angesehen. Als heise Security sich allerdings vor gut einem Jahr die Umsetzung dieser Verschlüsselung näher angesehen hat, mussten wir feststellen, dass sie im Alltag de facto unbrauchbar ist. Da WhatsApp nur Nachrichten zwischen Android-Geräten verschlüsselte und dem Nutzer nicht anzeigte, welche Nachrichten verschlüsselt wurden und welche nicht, konnte man sich auf die Sicherheit einzelner Gespräche nicht verlassen. Erschwerend kam hinzu, dass die verwendeten Krypto-Schlüssel nicht geprüft werden konnten.

Doch Marlinspike und seine Entwicklerfirma Open WhisperSystems haben versprochen, dies zu ändern und flächendeckende Verschlüsselung einzuführen. Seit dieser Woche ist es soweit: WhatsApp hat angekündigt nun alle Nachrichten, Anhänge und Gruppenchats zu verschlüsseln. Zeit, dem Dienst noch mal auf den Zahn zu fühlen und diese Behauptung zu überprüfen.

Ziel unserer Tests war es, herauszufinden, ob WhatsApp seit den Änderungen wirklich unabhängig vom Gerät des Empfängers verschlüsselt. Dazu haben wir über einen Zeitraum von zwei Tagen Nachrichten an verschiedene Geräte verschickt und die Kommunikation analysiert. Die Verschlüsselung an sich haben wir keinem Test unterzogen.

Wir haben unseren bewährten Versuchsaufbau vom letzten Mal reaktiviert und mussten nur die yowsup-Installation etwas anpassen.

Für unsere Analyse nutzen wir wieder den Testaufbau, den wir letztes Jahr etabliert hatten. Das quelloffene Python-Tool yowsup erlaubt es uns, Nachrichten in das WhatsApp-Netz zu senden und Antworten zu empfangen. Dabei bietet es die Möglichkeit, weit mehr Informationen über den Ablauf der Kommunikation und das eingesetzte Protokoll zu Tage zu fördern, als mit den üblichen Smartphone-Apps.

Außerdem können wir Modifikationen am Quellcode durchführen und so noch mehr Informationen auslesen. Für die Krypto-Operationen ist die Open-Source-Bibliothek python-axolotl zuständig – diese haben wir unangetastet gelassen, um die eigentlichen Krypto-Prozesse nicht zu kompromittieren. Das Axolotl im Namen steht übrigens für das sogenannte Axolotl-Protokoll, das für den Schlüsselaustausch verantwortlich ist und dabei Forward Secrecy gewährleistet.

Unser leicht angepasster Patch des yowsup-Codes.

Seit unserem Test von vor einem Jahr hat sich im Code von yowsup einiges geändert und so mussten wir auch unseren Patch von damals etwas anpassen. Der entsprechende Quellcode findet sich hier. Die Änderungen schreiben, wie schon im ersten Test, den empfangenen Ciphertext des Echo-Clients von yowsup mit einer Meldung des Python-Loggers als Output ins Terminal. Der nach dem Call zu python-axolotl entschlüsselte Plaintext wird dann auf die gleiche Weise ausgegeben.

Wenn ein WhatsApp-Client dabei Klartext gesendet hat, war das im Versuchsaufbau deutlich sichtbar. Außerdem konnten wir den yowsup-Client auch neue Schlüssel erstellen lassen und so diverse Angriffsszenarien nachstellen. Zum Zeitpunkt unserer Tests hatte yowsup einige Probleme mit der Formatierung von Nachrichten, eventuell bedingt durch Änderungen bei WhatsApp, was die unschönen Artefakte in unseren Ergebnissen erklärt.

In unseren Test mit mehreren iPhones, einem Android-Smartphone und einem Laptop mit yowsup hakelte es zuerst beim Aufbau verschlüsselter Chats. Wir vermuten, dass die WhatsApp-Server durch die Einführung der Verschlüsselung bei Millionen Geräten, die zuvor unverschlüsselt kommuniziert hatten, etwas überlastet waren oder mit Kinderkrankheiten zu kämpfen hatten. Über mehrere Tage konnten wir allerdings das im Folgenden beschriebene Verhalten der Clients beobachten.

Meldete sich unser Client zum ersten Mal bei WhatsApp an, erzeugte er Pre-Keys und lud diese auf die Server des Dienstes, genau wie die WhatsApp-Entwickler dies in ihrem Sicherheits-Whitepaper beschreiben. Wurde der Client mit Klartext von einem Kontakt konfrontiert, kommunizierte er mit diesem ab dann ebenfalls im Klartext. Das kam zum Beispiel vor, als wir auf einem iPhone eine veraltete WhatsApp-Version benutzten. In diesem Fall wird in den Smartphone-Apps die Meldung, dass der Chat ab sofort verschlüsselt ist, nicht angezeigt und die Kontaktinformationen weisen darauf hin, dass die Person nicht verschlüsselt kommunizieren kann.

Sowohl ein Android-Smartphone als auch ein iPhone kommunizieren verschlüsselt mit unserem yowsup-Testnutzer namens Naomi. Der Nachrichten-Text hat allerdings mitunter ein paar Schönheitsfehler.

Kam die erste verschlüsselte Nachricht von einem Kontakt, konnten wir ab diesem Punkt nur noch verschlüsselte Kommunikation beobachten; unsere Versuche, ein Downgrade auf Plaintext zu erzwingen, scheiterten allesamt. Als wir etwa mit yowsup manuell eine Klartext-Nachricht verschickten, erreichte diese den Anwender mit dem Smartphone nicht. Ob die Clients verschlüsselt oder unverschlüsselt kommunizieren, war in unseren Tests plattformunabhängig. Wir konnten auf Protokollebene nur Ende-zu-Ende-verschlüsselte Nachrichten und Klartext unterscheiden, abhängig davon ob zwei Clients schon einmal Schlüssel ausgetauscht hatten, oder nicht.

Moxie Marlinspike hat in seinem Blog-Artikel zur Einführung der WhatsApp-Verschlüsselung darüber hinaus angekündigt, dass man in Zukunft die Möglichkeit zur Plaintext-Kommunikation im WhatsApp-Netz komplett abstellen wolle. Dann soll es nur noch Ende-zu-Ende-verschlüsselte Verbindungen geben.

Auch in unseren Versuchen mit veränderten Schlüsseln verhielt sich WhatsApp so, wie man es erwarten würde. Wir aktivierten dazu in den WhatsApp-Einstellungen die Option, über Änderungen an Schlüsseln benachrichtigt zu werden und löschten unter anderem auf der yowsup-Seite die Schlüssel, um eine Neuerstellung zu erzwingen. Prompt zeigte WhatsApp bei der nächsten Nachricht Warnung an, dass sich die Schlüssel des Gegenübers geändert haben – sowohl auf iPhones als auch unter Android.

Das Python-Tool yowsup gibt uns die Möglichkeit den verschlüsselt eingehenden Cyphertext und das von der Axolotl-Bibliothek entschlüsselte Ergebnis (Plaintext) zu überprüfen.

Bisher hatten wir keine Zeit, uns die Kommunikation des WhatsApp-Clients im Browser genauer anzuschauen. Ob und wie der verschlüsselt, ist somit weitgehend unklar. Naheliegend ist, dass der WhatsApp-Client auf dem Smartphone als Endpunkt der E2E-Verschlüsselung dient und der dann eine transportgesicherte Kommunikation mit dem Browser-Client aufbaut. Ob das so ist und welche Angriffspunkte sich ergeben, müssen weitere Untersuchungen zeigen. Ebenfalls zu untersuchen wäre, wie genau die von den WhatsApp-Entwicklern beschriebene neue Transportverschlüsselung funktioniert.

WhatsApp bestätigt: Unser yowsup-Testnutzer kommuniziert verschlüsselt mit uns.

Diese Tests zeichnen ein anderes Bild als noch beim letzten Mal: Nach den Änderungen am Benutzerinterface der Apps und der konsequenten Ende-zu-Ende-Verschlüsselung über Gerätegrenzen hinweg ist die WhatsApp-Verschlüsselung tatsächlich ein gewaltiger Schritt nach vorne. Wir haben mit unseren Tests keine Anhaltspunkte gefunden, dass die Verschlüsselung nicht so funktionieren würde, wie sie von Marlinspike beschrieben wurde. Insbesondere akzeptierte WhatsApp in unseren Versuchen für ein einmal als Krypto-fähig erkanntes Gegenüber ausschließlich verschlüsselte Nachrichten.

Mit der schon aus dem Messenger Signal bekannten Möglichkeit, den öffentlichen Schlüssel des Gegenübers zu prüfen, können Nutzer zusätzlich sicherstellen, dass sie auch mit der richtigen Person reden und sich kein Man-in-the-Middle in die Verbindung eingeschlichen hat. Insbesondere durch die Möglichkeit, Schlüssel zu prüfen und sich über Änderungen an diesen Schlüsseln benachrichtigen zu lassen, hat sich WhatsApp freiwillig in eine Position gebracht, in der Man-in-the-Middle-Angriffe auf die Verschlüsselung ein hohes Entdeckungsrisiko mit sich bringen.

Alles in allem ist die Einführung von belastbarer Ende-zu-Ende-Verschlüsselung für über eine Milliarde WhatsApp-Nutzer, die nichts weiter tun müssen, als ein App-Update zu installieren, ein echter Gewinn in Sachen Privatsphäre. Ein gewisses Restrisiko bleibt natürlich noch. WhatsApp ist, im Gegensatz zu Marlinspikes eigener App Signal, nicht quelloffen. Nutzer können sich also nie ganz sicher sein, dass ihnen der Dienstanbieter keine manipulierte App unterschiebt, welche die Verschlüsselung untergräbt. Außerdem sammeln WhatsApps Server nach wie vor Metadaten – sie haben zwar keinen Zugriff auf den Inhalt der Nachrichten, können aber sehen, wer mit wem spricht. Ein Problem, das übrigens alle Messenger dieser Art haben und das technisch schwer zu lösen ist. Ein gewisses Vertrauen gegenüber der Facebook-Tochter WhatsApp muss der Nutzer also schon aufbringen. (fab)