Rust ist in die Liste der Hauptsprachen für die Entwicklung der Android-Plattform aufgenommen worden.

Google hat angekündigt, die Programmiersprache Rust in die Liste der Sprachen aufzunehmen, die für die Entwicklung der Android-Plattform zulässig sind. Der Rust-Compiler wurde bereits 2019 in den Quellcode-Baum von Android aufgenommen, aber die Unterstützung für diese Sprache blieb bis jetzt experimentell. Zu den ersten Komponenten in Rust, die in Android integriert werden sollen, gehören neue Implementierungen des Interprozesskommunikationsmechanismus Binder und des Bluetooth-Stacks.

Die Einführung von Rust erfolgt im Rahmen eines Projekts zur Verbesserung der Sicherheit, zur Förderung von sicheren Programmierpraktiken und zur Erhöhung der Effizienz bei der Identifizierung von Problemen mit der Speichermanagement in Android. Es wird festgestellt, dass etwa 70 % aller gefährlichen Sicherheitsanfälligkeiten, die in Android festgestellt wurden, durch Fehler im Speichermanagement verursacht werden. Der Einsatz der Sprache Rust, die sich auf sicheres Speichermanagement konzentriert und eine automatische Speicherverwaltung bietet, wird das Risiko von Sicherheitsanfälligkeiten, die durch Speicherfehler entstehen, wie z. B. den Zugriff auf den Speicher nach seiner Freigabe oder Pufferüberläufe, verringern.

Sicheres Speichermanagement wird in Rust zur Compile-Zeit durch Überprüfung von Referenzen, Tracking des Eigentums an Objekten und Berücksichtigung der Lebensdauer von Objekten (Sichtbarkeitsbereich) sichergestellt, sowie durch die Bewertung der Korrektheit des Zugriffs auf den Speicher zur Laufzeit des Codes. Rust bietet zudem Mechanismen zur Abwehr von Ganzzahlüberläufen, verlangt die obligatorische Initialisierung von Variablen vor der Verwendung, behandelt Fehler in der Standardbibliothek besser, wendet das Konzept der Unveränderlichkeit (immutable) von Referenzen und Variablen standardmäßig an und bietet eine starke statische Typisierung, um logische Fehler zu minimieren.

In Android wird sicheres Speichermanagement bereits in den unterstützten Sprachen Kotlin und Java gewährleistet, jedoch eignen sie sich aufgrund hoher Overheadkosten nicht für die Entwicklung von Systemkomponenten. Rust ermöglicht es, eine Leistung zu erzielen, die vergleichbar mit der von C und C++ ist, was es erlaubt, es für die Entwicklung von nieder-leveligen Teilen der Plattform und Komponenten zur Interaktion mit der Hardware zu verwenden.

Um die Sicherheit von C- und C++-Code in Android zu gewährleisten, werden Sandbox-Isolierung, statische Analyse und Fuzzing-Tests eingesetzt. Die Möglichkeiten der Sandbox-Isolierung sind eingeschränkt und haben ihre Grenzen erreicht (eine weitere Unterteilung in Prozesse ist aus Sicht des Ressourcenverbrauchs nicht sinnvoll). Zu den Einschränkungen der Verwendung von Sandboxes zählen große Overheadkosten und ein Anstieg des Speicherverbrauchs, die durch die Notwendigkeit entstehen, neue Prozesse zu erzeugen, sowie zusätzliche Verzögerungen, die mit der Nutzung von IPC verbunden sind.

Die Sandbox beseitigt jedoch keine Schwachstellen im Code, sondern verringert lediglich die Risiken und erschwert einen Angriff, da zur Ausnutzung mehrere Schwachstellen identifiziert werden müssen. Codebasierte Testmethoden sind dadurch eingeschränkt, dass für das Auffinden von Fehlern Bedingungen geschaffen werden müssen, die Probleme offenbaren. Es ist nicht möglich, alle denkbaren Varianten abzudecken, weshalb viele Fehler unentdeckt bleiben.

Für systemnahe Prozesse in Android befolgt Google die „Zwei-Regel“, wonach jeder hinzugefügte Code nicht mehr als zwei von drei Bedingungen erfüllen darf: den Umgang mit nicht validierten Eingaben, die Verwendung einer unsicheren Programmiersprache (C/C++) und die Ausführung ohne strenge Sandbox-Isolierung (Vorhandensein von erhöhten Berechtigungen). Daraus folgt, dass Code zur Verarbeitung externer Daten entweder auf minimale Berechtigungen reduziert (isoliert) oder in einer sicheren Programmiersprache geschrieben sein muss.

Google hat nicht das Ziel, den vorhandenen C/C++-Code auf Rust umzustellen, sondern plant, diese Sprache für die Entwicklung neuen Codes zu verwenden. Den neuen Code in Rust zu schreiben, ist sinnvoll, da statistisch die meisten Fehler in neuem oder kürzlich geändertem Code auftreten. Insbesondere werden etwa 50 % der gefundenen Speicherfehler in Android in Code identifiziert, der weniger als ein Jahr alt ist.

Rust ist in die Liste der Hauptsprachen für die Entwicklung der Android-Plattform aufgenommen worden.


Quelle: opennet.ru
60GB SSD 8Gb DDR4