Rust gehört zu den Hauptsprachen für die Entwicklung von Android-Plattformen

Google hat angekündigt, die Programmiersprache Rust in die für die Entwicklung der Android-Plattform zulässigen Sprachen aufzunehmen. Der Rust-Sprachcompiler wurde bereits 2019 in den Android-Quellbaum aufgenommen, die Unterstützung für diese Sprache blieb jedoch experimentell. Zu den ersten für Android geplanten Rust-Komponenten gehören neue Implementierungen des Binder-Interprozess-Kommunikationsmechanismus und des Bluetooth-Stacks.

Die Einführung von Rust erfolgte im Rahmen eines Projekts zur Stärkung der Sicherheit, zur Förderung sicherer Programmiertechniken und zur Steigerung der Effizienz bei der Erkennung von Problemen bei der Arbeit mit dem Speicher in Android. Es wird darauf hingewiesen, dass etwa 70 % aller in Android identifizierten gefährlichen Schwachstellen auf Fehler bei der Arbeit mit dem Speicher zurückzuführen sind. Durch die Verwendung von Rust, das sich auf Speichersicherheit und automatische Speicherverwaltung konzentriert, wird das Risiko von Schwachstellen verringert, die durch Speicherfehler wie After-Free-Zugriff und Pufferüberläufe verursacht werden.

Rust erzwingt die Speichersicherheit zur Kompilierungszeit durch Referenzprüfung, Objektbesitz und Objektlebensdauerverfolgung (Bereiche) sowie durch die Bewertung der Korrektheit von Speicherzugriffen zur Laufzeit. Rust bietet außerdem Schutz vor Ganzzahlüberläufen, erfordert, dass Variablenwerte vor der Verwendung initialisiert werden, verfügt über eine bessere Fehlerbehandlung in der Standardbibliothek, verwendet standardmäßig das Konzept unveränderlicher Referenzen und Variablen und bietet starke statische Typisierung, um logische Fehler zu minimieren.

In Android ist Speichersicherheit in den bereits unterstützten Sprachen Kotlin und Java vorgesehen, diese sind jedoch aufgrund des hohen Overheads nicht für die Entwicklung von Systemkomponenten geeignet. Rust ermöglicht es, eine Leistung zu erreichen, die den Sprachen C und C++ ähnelt, wodurch es für die Entwicklung von Low-Level-Teilen der Plattform und Komponenten für die Interaktion mit Hardware verwendet werden kann.

Um die Sicherheit von C- und C++-Code zu gewährleisten, verwendet Android Sandbox-Isolation, statische Analyse und Fuzzing-Tests. Die Möglichkeiten der Sandbox-Isolation sind begrenzt und haben ihre Leistungsgrenze erreicht (eine weitere Fragmentierung in Prozesse ist aus Sicht des Ressourcenverbrauchs unpraktisch). Zu den Einschränkungen bei der Verwendung von Sandbox gehören hohe Overhead-Kosten und ein erhöhter Speicherverbrauch, der durch die Notwendigkeit, neue Prozesse zu starten, sowie zusätzliche Verzögerungen im Zusammenhang mit der Verwendung von IPC verursacht wird.

Gleichzeitig beseitigt die Sandbox keine Schwachstellen im Code, sondern verringert lediglich die Risiken und erschwert den Angriff, da für die Ausnutzung nicht nur eine, sondern mehrere Schwachstellen identifiziert werden müssen. Methoden, die auf Codetests basieren, haben die Einschränkung, dass zur Identifizierung von Fehlern Bedingungen geschaffen werden müssen, unter denen sich das Problem manifestiert. Es ist nicht möglich, alle möglichen Optionen abzudecken, so dass viele Fehler unbemerkt bleiben.

Für Systemprozesse in Android hält sich Google an die „Zweierregel“, wonach jeder hinzugefügte Code nicht mehr als zwei von drei Bedingungen erfüllen darf: Arbeiten mit nicht validierten Eingabedaten, Verwenden einer unsicheren Programmiersprache (C/C++) und Läuft ohne strikte Sandbox-Isolation (mit erhöhten Berechtigungen). Diese Regel impliziert, dass der Code zur Verarbeitung externer Daten entweder auf minimale Privilegien reduziert (isoliert) oder in einer sicheren Programmiersprache geschrieben werden muss.

Google hat nicht das Ziel, bestehenden C/C++-Code in Rust neu zu schreiben, sondern plant, diese Sprache zur Entwicklung neuen Codes zu verwenden. Es ist sinnvoll, Rust für neuen Code zu verwenden, da statistisch gesehen die meisten Fehler in neuem oder kürzlich geändertem Code auftreten. Insbesondere werden etwa 50 % der erkannten Speicherfehler in Android in Code erkannt, der vor weniger als einem Jahr geschrieben wurde.

Rust gehört zu den Hauptsprachen für die Entwicklung von Android-Plattformen


Source: opennet.ru

Kommentar hinzufügen