Google verabschiedet sich von C++
Google will Speichersicherheit stärker fokussieren und künftig Sprachen wie Java, Rust oder Carbon einsetzen. Für Altlasten gibt es eine spezielle Strategie.
Google stellt seinen Code verstärkt auf speichersichere Sprachen wie Java, Go, Carbon und insbesondere auch Rust um. Das betrifft allen neu geschriebenen Code und die Teile der bestehenden, sicherheitsrelevanten Basis. Die Firma verweist darauf, dass nach wie vor die meisten Attacken auf Computersysteme dann erfolgreich sind, wenn sie Schwachstellen bei Speicherzugriffen nutzen.
Im Whitepaper, in dem Google seine neue Strategie vorstellt, findet sich eine genaue AufschlĂĽsselung schwerer, den Speicher betreffender SicherheitslĂĽcken:
- Chrome: 70 Prozent aller Schwachstellen mit hohem/kritischen Risiko
- Android: 70 Prozent aller Schwachstellen mit hohem/kritischen Risiko
- Google Server: 16 bis 29 Prozent aller Schwachstellen
- Project Zero: 68 Prozent aller verwendeten Zero-Day-LĂĽcken (in the wild)
- Microsoft: 70 Prozent aller LĂĽcken mit CVE-Eintrag.
Der zugehörige Blog-Eintrag weist auf die CWE-Schwachstellenliste (Common Weakness Enummeration) hin, in der die ersten drei Einträge bei Known Exploited Vulnerabilities (KEV) ebenfalls Speicherprobleme betreffen.
Daraus zieht Google den Schluss: "Bei Google haben wir jahrzehntelange Erfahrung [Google gibt es seit 1998, Anm. d. Red] darin, eine große Bandbreite an Klassen von Sicherheitslücken im großen Stil anzugehen." Und: "Wir erwarten, dass hochverlässliche Speichersicherheit nur mit einem Security-by-Design-Ansatz erreicht werden kann, der sich auf die umfassende Einführung von Sprachen mit rigorosen Speichersicherheitsgarantien konzentriert."
Was geschieht mit den unsicheren Altlasten?
Konkret will die Firma dieses Ziel erreichen, indem sie dazu übergeht, neuen Code in sicheren Sprachen zu schreiben: Java/Kotlin, Go, Rust oder Carbon. Größere Probleme bereiten Google auf der einen Seite die Altlasten, eine Masse an bestehenden, unsicheren, aber unentdeckten Zeilen in C++, und auf der anderen Seite die Erkenntnis, dass "größere Programme in einigen Fällen die Verwendung unsicherer Konstruktionen erfordern". Hier schlägt das Paper folgende Maßnahmen vor:
- Unsicheren Code kapseln und nur ĂĽber eine API erreichbar machen.
- Hardware-Funktionen wie das Memory Tagging in ARM-Prozessoren ab Version 8.5a: Dabei können Speicherbereiche und Pointer getaggt werden, sodass falsches Dereferenzieren zu einem Fehler führt.
- Das CHERI-Projekt (Capability Hardware Enhanced RISC Instructions) bietet Funktionen, um auf Hardware-Ebene Speicherbereiche quasi in Quarantäne zu nehmen. Dabei ergibt jedoch eventuell der Overhead ein Problem für die Performance.
- Die Programmiersprache Carbon soll es in der kommenden Version 0.2 im Idealfall ermöglichen, große Mengen Legacy-C++-Code einfach in sichere Gefilde zu überführen.
Rust stark im Kommen
Eine zentrale Rolle fĂĽr neuen Code soll Rust einnehmen, und Google betont die Schritte, die die Teams der Firma bislang in diese Richtung vollzogen haben:
- Android: Das Entwicklerteam hat viele Komponenten auf Rust umgestellt, zum Beispiel im Embedded-Bereich.
- Chrome: Hier gibt es eine eigene Rust-Toolchain, die der QR-Code-Scanner bereits problemlos durchlaufen hat.
- Rust: Google hat das Rust-Team mit einer Million Dollar unterstĂĽtzt.
- Linux: Um speichersichere Treiber zu entwickeln, hat Google Rust-Projekte fĂĽr den Linux-Kernel finanziell unterstĂĽtzt.
Weiter Informationen zur Strategie der Firma finden sich im erwähnten Whitepaper und zur Speichersicherheit allgemein auf den Seiten der Internet Security Research Group.
(who)