Google heeft aangekondigd dat de programmeertaal Rust is opgenomen in het assortiment talen die zijn toegestaan voor de ontwikkeling van het Android-platform. De Rust-compiler werd al in 2019 opgenomen in de broncode van Android, maar de ondersteuning voor deze taal bleef experimenteel. Een van de eerste componenten in Rust die voor Android zal worden geleverd, zijn de nieuwe implementaties van de Binder interprozesscommunicatie (IPC) en de Bluetooth-stack.
De implementatie van Rust is uitgevoerd in het kader van een project om de beveiliging te versterken, veilige programmeertechnieken te bevorderen en de effectiviteit van het opsporen van geheugenproblemen in Android te verhogen. Er wordt opgemerkt dat ongeveer 70% van alle gevaarlijke kwetsbaarheden die in Android zijn ontdekt, het gevolg zijn van fouten bij het werken met geheugen. Het gebruik van de Rust-taal, die zich richt op veilige geheugentoegang en automatisch geheugenbeheer biedt, zal het risico op kwetsbaarheden die het gevolg zijn van geheugenfouten, zoals het benaderen van geheugen na de vrijgiving en bufferoverlopen, verminderen.
Veilige geheugentoegang wordt in Rust tijdens de compilatie gegarandeerd door middel van referentiecontroles, objecteigenaarschap bijhouden en levensduurbeheer (scopes), evenals door de toegankelijkheid van het geheugen te evalueren tijdens het uitvoeren van de code. Rust biedt ook tools ter bescherming tegen integer-overflows, vereist verplichte initialisatie van variabelen voordat ze worden gebruikt, behandelt fouten beter in de standaardbibliotheek, past het concept van onveranderlijke (immutable) referenties en variabelen standaard toe en biedt sterke statische typing om logische fouten te minimaliseren.
In Android wordt veilige geheugentoegang gewaarborgd in de reeds ondersteunde talen Kotlin en Java, maar deze zijn niet geschikt voor de ontwikkeling van systeemcomponenten vanwege hoge overhead. Rust biedt de mogelijkheid om prestaties te bereiken die dicht bij die van C en C++ liggen, wat het mogelijk maakt om het te gebruiken voor de ontwikkeling van low-level onderdelen van het platform en componenten voor interactie met hardware.
Ter beveiliging van code in C en C++ op Android wordt sandbox-isolatie, statische analyse en fuzzing-tests toegepast. De mogelijkheden van sandbox-isolatie zijn beperkt en hebben hun maximale potentieel bereikt (verdere splitsing in processen is niet efficiƫnt gezien het middelenverbruik). Onder de beperkingen van sandbox-toepassing worden hoge overheadkosten en een toename van het geheugengebruik genoemd, veroorzaakt door de noodzaak om nieuwe processen te genereren, evenals de bijkomende vertragingen die gepaard gaan met het gebruik van IPC.
Sandbox lost echter de kwetsbaarheden in de code niet op, maar vermindert alleen de risico's en bemoeilijkt het uitvoeren van aanvallen, aangezien voor exploitatie het identificeren van niet ƩƩn, maar meerdere kwetsbaarheden nodig is. Methoden op basis van code-testen zijn beperkt doordat het creƫren van omstandigheden voor het manifesteren van problemen vereist is om fouten te identificeren. Het is niet mogelijk om alle mogelijke scenario's te dekken, waardoor veel fouten ongezien blijven.
Voor systeemsprocessen in Android volgt Google de 'two-rule', volgens welke elke toegevoegde code aan niet meer dan twee van de drie voorwaarden moet voldoen: werken met onbetrouwbare invoer, gebruik van een onveilige programmeertaal (C/C++) en uitvoeren zonder strikte sandbox-isolatie (aanwezigheid van verhoogde privileges). Uit deze regel volgt dat code voor het verwerken van externe gegevens ofwel teruggebracht moet worden tot minimale privileges (geĆÆsoleerd moet zijn), of geschreven moet worden in een veilige programmeertaal.
Google is niet van plan bestaande C/C++ code opnieuw te schrijven in Rust, maar wil deze taal gebruiken voor de ontwikkeling van nieuwe code. Het gebruik van Rust voor nieuwe code is logisch, aangezien statistieken aantonen dat de meeste fouten naar voren komen in nieuwe of recent gewijzigde code. In het bijzonder wordt ongeveer 50% van de ontdekte geheugenfouten in Android aangetroffen in code die minder dan een jaar geleden geschreven is.

Bron: opennet.ru
