Rust im Einsatz für große Dienste: Eine zusätzliche Sicherheitsschicht für WhatsApp
(engineering.fb.com)- WhatsApp mit mehr als 3 Milliarden Nutzerinnen und Nutzern hat eine Rust-basierte Sicherheitsschicht eingeführt, um die Abwehr gegen Malware-Bedrohungen zu stärken
- Die Media-Consistency-Bibliothek wurde in Rust neu geschrieben und auf Milliarden von Geräten und Browsern ausgerollt; die Validierung im produktiven Einsatz in globalem Maßstab ist abgeschlossen
- Dabei wurden 160.000 Zeilen bestehender C++-Code durch 90.000 Zeilen Rust ersetzt, was sowohl die Performance als auch die Speichereffizienz verbessert hat
- Seit der Stagefright-Schwachstelle im Jahr 2015 treibt das Unternehmen die Einführung speichersicherer Sprachen wie Rust voran, um die Sicherheit bei der Verarbeitung von Mediendateien zu erhöhen
- Diese Veränderung markiert einen Wendepunkt in der Sicherheitsstrategie von WhatsApp, Messenger und Instagram, bei der speichersichere Sprachen stärker gewichtet werden
WhatsApps Strategie zur Medienverarbeitung
- WhatsApp ist ein Ende-zu-Ende-verschlüsselter Messaging-Dienst mit mehr als 3 Milliarden Nutzerinnen und Nutzern und entwickelt seine Strategie kontinuierlich weiter, um auf anhaltende Sicherheitsbedrohungen zu reagieren
- Wenn Nutzer Bilder, Videos und andere Medien teilen, besteht die Möglichkeit, dass diese Malware enthalten
- Manche Dateien können ungepatchte Schwachstellen im Betriebssystem oder in Apps ausnutzen
- Um dies zu verhindern, hat WhatsApp die Programmiersprache Rust in die Medienfreigabe integriert und so Speichersicherheit sichergestellt
- Dies wird als der weltweit größte Rollout einer Rust-basierten Bibliothek bezeichnet
Die Android-Stagefright-Schwachstelle von 2015 und die Reaktion darauf
- Die Stagefright-Schwachstelle in Android aus dem Jahr 2015 befand sich in einer Media-Processing-Bibliothek auf Betriebssystemebene und konnte daher nicht auf App-Ebene behoben werden
- WhatsApp verbesserte seine eigene C++-Bibliothek „wamedia“, sodass sie Dateien erkennt, die nicht dem MP4-Standard entsprechen
- Dadurch konnten Nutzer auch ohne OS-Updates geschützt werden
- Da wamedia jedoch nicht vertrauenswürdige Eingaben automatisch verarbeitet, wurde der Wechsel zu einer speichersicheren Sprache als notwendig erkannt
Der Umstieg auf Rust: groß angelegte Neuentwicklung und Ergebnisse
- WhatsApp entwickelte eine Rust-Version von wamedia parallel zur bestehenden C++-Version
- Mit differential fuzzing, Integrationstests und Unit-Tests wurde die Kompatibilität beider Implementierungen überprüft
- Anfangs gab es Probleme mit größerer Binärdateigröße durch die Rust-Standardbibliothek sowie mit der Kompatibilität des Build-Systems, langfristig wurde jedoch eine tragfähige Support-Struktur aufgebaut
- Am Ende wurden 160.000 Zeilen C++ → 90.000 Zeilen Rust ersetzt, bei gleichzeitigen Verbesserungen bei Performance und Speichernutzung
- Die Rust-Version wurde vollständig auf Android, iOS, Mac, Web, Wearables und allen weiteren Plattformen ausgerollt
- Anschließend wurde das „Kaleidoscope“-System eingeführt, um riskante Dateitypen wie PDFs oder ausführbare Dateien zu erkennen und manipulierte Erweiterungen sowie MIME-Spoofing zu identifizieren
WhatsApps Sicherheitsansatz
- WhatsApp betreibt mehrere Sicherheitsebenen, darunter Ende-zu-Ende-Verschlüsselung, verschlüsselte Backups, Key Transparency und Schutzfunktionen für Anrufe
- Risiken werden durch CVE-Offenlegung, interne und externe Sicherheitsaudits, Fuzzing und statische Analyse, Supply-Chain-Management und Analyse der Angriffsfläche identifiziert
- Das Bug-Bounty-Programm wurde erweitert; Forschenden wird ein Research Proxy bereitgestellt, mit dem sie das WhatsApp-Netzwerkprotokoll analysieren können
- Da sich gezeigt hat, dass viele schwerwiegende Schwachstellen auf Speichersicherheitsprobleme in C/C++ zurückgehen, verfolgt WhatsApp parallel drei Strategien
- Minimierung unnötiger Angriffsfläche
- Stärkere Sicherheitsgarantien für verbleibenden C/C++-Code
- Umstellung der Standardsprache für neuen Code auf speichersichere Sprachen
Beschleunigte Rust-Einführung und künftige Richtung
- Rust ermöglicht WhatsApp die Entwicklung hochperformanter, plattformübergreifender Sicherheitsbibliotheken
- Diese Veränderung liefert eine zusätzliche, für Nutzer unsichtbare Sicherheitsschicht und ist Teil einer Defense-in-Depth-Strategie
- Die Sicherheitsteams von WhatsApp und Meta weiten die besonders wirksamen Einsatzbereiche von Rust aus und planen, die Einführung von Rust weiter zu beschleunigen
1 Kommentare
Hacker-News-Kommentare
WhatsApp ist ein Messenger, den täglich 3 Milliarden Menschen nutzen.
In den USA ist er nicht besonders verbreitet, weltweit hat er sich jedoch als grundlegende Kommunikationsinfrastruktur etabliert.
Wer ein Produkt für den globalen Markt bauen will, muss die Denkweise und Gewohnheiten dieser Nutzer verstehen.
Solche unabhängigen Leute gibt es immer noch mindestens ein paar Dutzend.
Bitte beteiligt euch nicht daran, WhatsApp noch unausweichlicher zu machen.
Die meisten Leute prüfen ihre E-Mails kaum.
Ich betreibe eine Entwickler-Community und stoße oft an die Gruppenobergrenze von 1024 Personen.
Selbst wenn man zu Discord oder Slack wechseln will, landet man am Ende wieder bei WhatsApp.
Wegen der Datenpakete der Mobilfunkanbieter ist WhatsApp faktisch kostenlos.
Über Spam durch Unternehmensnachrichten gab es bei TechCrunch schon mehrfach Berichte, geändert hat sich in der Praxis aber kaum etwas.
Auch die UX der Community-Funktionen ist nicht besonders gut.
Am Ende ist das Problem wohl die immer stärkere Abhängigkeit vom Facebook-Ökosystem.
Ich nutze WhatsApp seit 10 Jahren nicht mehr, und die meisten meiner Freunde und Familienmitglieder sind zu Signal gewechselt.
In Europa gibt es immer noch Regionen, in denen Viber genutzt wird.
Es wurde zwar als die größte Auslieferung einer in Rust geschriebenen Bibliothek bezeichnet, aber tatsächlich könnte Fontations noch größer sein.
Es ist in Chromium enthalten, und wenn man seine Abhängigkeiten mitrechnet, ist die installierte Basis möglicherweise breiter.
Dem Zitat nach zu urteilen scheint WhatsApp libsignal nicht direkt zu verwenden.
Zum Beispiel: image-png, CrabbyAvif, qr_code, icu4x
Dass der Code von 160.000 auf 90.000 Zeilen reduziert wurde, ist zwar gut, aber noch interessanter ist die parallele Rollout-Strategie.
Dass Rust- und C++-Version gleichzeitig liefen und die Gleichwertigkeit per differential fuzzing geprüft wurde, wirkt sehr praxisnah.
Bei mobilen Clients ist die Binärgröße wichtig, deshalb ist die Investition in Build-Tooling bemerkenswert.
Möglicherweise handelt es sich um Optimierungen, die nur in Nightly-Builds möglich sind.
Der schwierigste Teil bei solchen Rewrites ist weniger die Rust-Implementierung selbst als die Wahrung der Bug-Kompatibilität des bestehenden Parsers.
Reale Mediendateien sind oft formal fehlerhaft; wenn man zu strikt parst, gehen Nutzerdaten kaputt.
Differential fuzzing ist praktisch der einzige praktikable Ansatz.
Wenn man sagt, WhatsApp habe die größte Rust-Auslieferung, dann wohl deshalb, weil es auf mehr Geräten als Windows 11 läuft.
Allerdings ist fraglich, ob WhatsApp libsignal direkt nutzt.
Android selbst enthält bereits viel Rust-basierten Code, und auch auf Embedded-Geräten wird Rust breit eingesetzt.
während Windows weiterhin stark von C/C++ geprägt ist.
Es heißt, die Einführung der Rust-Standardbibliothek habe zu einer Vergrößerung der Binärgröße geführt, aber es wird nicht erklärt, wie das gelöst wurde.
Relevante Commits: commit1, commit2
Das Problem ist weniger die Größe selbst als vielmehr duplizierte Rust-Abhängigkeiten.
In gemischten C++/Rust-Builds binden beide jeweils ihr eigenes
libstdein, weshalb ein integriertes Build-System wie Bazel nötig ist.Anfangs nahm man einen Overhead von rund 200 KiB in Kauf, doch mit dem Wechsel zu Buck2 wurden sowohl Größe als auch Build-Zeit reduziert.
Dazu kamen aktuelle clang-Optimierungen und Verbesserungen bei LTO.
Ich frage mich, ob Signal etwas Ähnliches versucht.
libsignal ist zwar in Rust implementiert, aber über den Rest weiß ich wenig.
Es gab die Formulierung, man liefere standardmäßig Ende-zu-Ende-Verschlüsselung für 3 Milliarden Menschen, aber es gab auch Berichte, dass Nachrichten gelesen werden konnten.
Skype war standardmäßig ebenfalls verschlüsselt, konnte aber je nach Serverkonfiguration deaktiviert werden.
Die eigentliche Frage ist, ob man darauf vertrauen kann, dass Meta die Daten nicht mitliest.
Es ist ironisch, dass Meta Phishing oder Betrug mit Prepaid-Karten nicht stoppt, sich aber bei anderen Dingen so engagiert zeigt.
Beeindruckend ist, dass mit der Einführung von Rust offenbar viele Bugs verschwunden sind.
In C++ gibt es unzählige Fälle von undefiniertem Verhalten (UB), während Rust solche Probleme strukturell verhindert.
Dank des starken Typsystems steigt die Zuverlässigkeit deutlich.