Wie Cloudflare den von WhatsApp Web an Nutzer übermittelten Programmcode prüft

Cloudflare hilft WhatsApp dabei, sicherzustellen, dass der für die sichere Nachrichtenübermittlung verwendete Programmcode nicht manipuliert wurde. Hier erfahren Sie, wie wir dabei vorgehen.

Woher wissen Sie beim Aufrufen einer Website, dass Ihr Webbrowser auch wirklich den für die Ausführung vorgesehenen Programmcode herunterlädt? Das Web bietet deutlich weniger Gewissheit, dass der Programmcode nicht manipuliert wurde, als dies bei einer App für Mobilgeräte aus einem vertrauenswürdigen App Store der Fall ist. Wir freuen uns, eine Partnerschaft mit WhatsApp zur Bereitstellung eines Systems verkünden zu können, mit dem die Nutzer beim Aufrufen von WhatsApp über das Internet die Sicherheit haben, dass auch wirklich der von dem Unternehmen beabsichtigte Programmcode ausgeführt wird.

WhatsApp wird immer häufiger über den Browser genutzt und auch die Zahl der gefährdeten Anwender – darunter Journalisten und Aktivisten, etwa im Bereich Menschenrechte – steigt. Deshalb wollte das Unternehmen Maßnahmen ergreifen, um Usern, die den Dienst über den Browser nutzen, eine gewisse Sicherheit bieten zu können. Akteuren, die den für die Ende-zu-Ende-Verschlüsselung von Nachrichten zwischen WhatsApp-Nutzern verantwortlichen Programmcode kompromittieren oder manipulieren wollen, wollte WhatsApp deutlich mehr entgegensetzen als bisher. Dafür ist das Unternehmen an uns herangetreten.

Wie funktioniert die Abwehr? Cloudflare speichert den Hash des Programmcodes, der bei WhatsApp-Nutzern ausgeführt werden sollte. Wenn ein User WhatsApp im Browser öffnet, vergleicht die Erweiterung WhatsApp Code Verify einen Hash des im Browser ausgeführten Programmcodes mit dem bei Cloudflare gespeicherten Hashwert. So lässt sich leicht feststellen, ob alles seine Ordnung hat.

Durch einen Abgleich von Hashes manipulierte oder beschädigte Dateien aufzuspüren, ist an sich keine neue Idee. Die Innovation besteht erstens darin, das Verfahren zu automatisieren, damit es in großem Maßstab eingesetzt werden kann. Zweitens wird dafür gesorgt, dass es für WhatsApp-Anwender „einfach funktioniert“. In Anbetracht der Verbreitung von WhatsApp und dem unausgesprochenen Vertrauen, das Cloudflare entgegengebracht wird, möchten wir einen tieferen Einblick in die technische Funktionsweise dieses Systems geben.

Zunächst wollen wir aber noch explizit darauf hinweisen, dass Cloudflare einen vertrauenswürdigen Überprüfungsendpunkt zur Unterstützung von Code Verify bereitstellt. Chat- und sonstige Nachrichten sowie sonstiger Datenverkehr zwischen WhatsApp-Nutzern wird niemals an Cloudflare übermittelt; dieser Traffic bleibt vertraulich und wird Ende-zu-Ende verschlüsselt. Im Rahmen dieses Systems werden keine Nachrichten oder Medieninhalte durch das Cloudflare-Netzwerk geleitet. Darauf legen wir als zuverlässiger Drittanbieter besonderen Wert.

Erleichterte Verifizierung

Machen wir zunächst eine kleine Zeitreise zurück in das Jahr 2013, als die auf Red Hat basierende und sich inzwischen großer Beliebtheit erfreuende Linux-Distribution Fedora gerade herausgekommen war. Sie wollen sie gern herunterladen, möchten aber sicherstellen, dass es sich auch um das „echte“ Fedora-Betriebssystem handelt und nicht um eine Fake-Version, mit der Ihre Passwörter abgegriffen oder Ihre Tastatureingaben protokolliert werden. Sie rufen also die Downloadseite auf, beginnen mit dem Herunterladen und bekommen einen MD5-Hashwert (der damals als sicher galt) angezeigt. Nach vollendetem Download führen Sie „md5 fedora-download.iso“ aus und vergleichen den Hashwert mit dem auf der Seite. Da beide übereinstimmen, sind Sie beruhigt und beginnen damit, Fedora auf Ihrem Rechner zu installieren.

Doch halt: Wenn auf der Download-Webseite auch der Hashwert bereitgestellt wird, könnte dann nicht jemand, der Böses im Schilde führt, sowohl das herunterzuladende Programm als auch den Hashwert durch eigene Inhalte ersetzen? Der „md5“-Abgleich würde weiterhin ein positives Ergebnis liefern. Aber es besteht keinerlei Garantie, dass es sich um die „echte“ (nicht manipulierte) Version der Software handelt, die heruntergeladen werden soll.

Auch im Jahr 2022 ist es weiterhin üblich, Hashwert und Software auf demselben Server zu hosten.

Mit anderen Ansätzen wird versucht, diese Methode zu optimieren. So können unterzeichnete Signaturen bereitgestellt werden. Bei diesen können die Nutzer verifizieren, dass sie mit „bekannten“ öffentlichen Schlüsseln signiert wurden, die an anderer Stelle gehostet werden. Werden solche Signaturen (auch „Hashes“ genannt) bei einem vertrauenswürdigen Drittanbieter gehostet, erschwert das Manipulationen ganz erheblich. Allerdings muss der User in diesem Fall nicht nur wissen, wem er trauen kann, sondern sich auch Kenntnisse zu Tools wie GnuPG aneignen. Insofern ist die für das moderne Internet erforderliche Vertrauens- und Verifizierungsgrundlage für Software damit nicht gegeben.

An diesem Punkt kommen Code Verify und Cloudflare ins Spiel. Die von Meta Open Source veröffentlichte Erweiterung automatisiert das Verfahren: Der kryptografische Hashwert der von WhatsApp verwendeten Bibliotheken wird lokal erstellt und mit einem Hash von einer vertrauenswürdigen externen Quelle (in diesem Fall Cloudflare) abgeglichen.

In der folgenden Abbildung soll der Ablauf ein wenig veranschaulicht werden. Sie zeigt, wie die drei Beteiligten – der Nutzer, WhatsApp und Cloudflare – miteinander interagieren.

Das Schaubild zeigt die vier Schritte zur Verifizierung des Programmcodes von WhatsApp Web.

Mit diesen vier Schritten wird im Wesentlich überprüft, ob der Programmcode nicht nachträglich verändert wurde:

  1. WhatsApp veröffentlicht die neueste Version der eigenen JavaScript-Bibliotheken auf firmeneigenen Servern und übermittelt den zugehörigen Hashwert für diese Version an den Überprüfungsendpunkt von Cloudflare.
  2. Ein Webclient von WhatsApp ruft die neuesten Bibliotheken von WhatsApp ab.
  3. Anschließend ruft die Browsererweiterung Code Verify über eine gesonderte, sichere Verbindung den Hashwert für diese Version bei Cloudflare ab.
  4. Code Verify gleicht den Hashwert von Cloudflare, über dessen Vertrauenswürdigkeit Gewissheit herrscht, mit dem lokal generierten Hashwert für die Bibliotheken ab.

Stimmen die beiden Hashes überein, was unter so gut wie allen Umständen der Fall sein sollte, gilt der Programmcode aus Sicht der Erweiterung als „verifiziert“. Falls die Hashwerte jedoch nicht deckungsgleich sind, wird auf dem Browser des Nutzers ein anderer Programmcode ausgeführt, als von WhatsApp beabsichtigt.

Sicherheit muss unkompliziert sein

Dieses Verfahren – und die Tatsache, dass es für den Nutzer automatisch abläuft – trägt dazu bei, auf skalierbare Weise für Transparenz zu sorgen. Müssten die Anwender die Hashwerte selbst manuell anfordern, generieren und abgleichen, würde nur eine kleine Menge an technisch versierten Usern Manipulationen entdecken können. Aus Sicht eines so großen Diensts wie WhatsApp wäre eine solche Herangehensweise weder sonderlich praktikabel noch nutzerfreundlich.

Bei diesem Vorgehen bestehen Parallelen zu einer Reihe von Technologien, die heute genutzt werden. Dazu zählt Subresource Integrity in Webbrowsern: Bei der Anforderung eines Elements von einem Drittanbieter (etwa eines Skripts oder Stylesheets) überprüft der Browser, ob dieses dem beschriebenen Hash entspricht. Ist das nicht der Fall, wird das Element nicht geladen. Dadurch wird verhindert, dass potenziell kompromittierte Skripte Nutzerdaten abgreifen. Weitere Verfahren sind das Projekt Certificate Transparency und das damit verwandte Vorhaben Binary Transparency. Beide bieten öffentlich überprüfbare Transparenz für kritische Assets, unter anderem in Form von WebPKI-Zertifikaten und weiteren Binärblobs. Das in diesem Beitrag beschriebene Verfahren lässt sich – noch – nicht für beliebige Assets skalieren. Wir prüfen aber Möglichkeiten für die Ausweitung dieses Angebots auf ein breiter ausgelegtes und in größerem Stil nutzbares System wie Binary Transparency.

Bei unserem Bemühen um mehr Datenschutzfreundlichkeit und Sicherheit im Web ist die Zusammenarbeit mit dem Team von WhatsApp erst der Anfang.  Künftig wollen wir auch anderen Unternehmen dabei helfen, zu überprüfen, ob bei den Nutzern auch wirklich der Programmcode ankommt, der ausgeführt werden soll. Der Schutz der Internetanwender im großen Maßstab und die Gewährleistung des Datenschutzes gehören zu den Grundprinzipien von Cloudflare und wir freuen uns schon darauf, den Rest des Jahres 2022 weiter auf diese Ziele hinzuarbeiten.