Rust er inkludert blant hovedspråkene for Android-plattformutvikling

Google har annonsert inkluderingen av programmeringsspråket Rust blant språkene som er tillatt for utvikling av Android-plattformen. Rust-språkkompilatoren ble inkludert i Android-kildetreet tilbake i 2019, men støtten for dette språket forble eksperimentell. Noen av de første Rust-komponentene som er planlagt for Android inkluderer nye implementeringer av Binders interprosesskommunikasjonsmekanisme og Bluetooth-stakken.

Introduksjonen av Rust ble gjennomført som en del av et prosjekt for å styrke sikkerheten, fremme trygge programmeringsteknikker og øke effektiviteten av å identifisere problemer ved arbeid med minne i Android. Det bemerkes at omtrent 70 % av alle farlige sårbarheter identifisert i Android er forårsaket av feil ved arbeid med minne. Bruk av Rust, som fokuserer på minnesikkerhet og automatisk minneadministrasjon, vil redusere risikoen for sårbarheter forårsaket av minnefeil som etterfri tilgang og bufferoverskridelser.

Rust håndhever minnesikkerhet ved kompilering gjennom referansesjekking, objekteierskap og objektlevetidssporing (scopes), og ved å evaluere riktigheten av minnetilganger under kjøring. Rust gir også beskyttelse mot heltallsoverløp, krever at variabelverdier initialiseres før bruk, har bedre feilhåndtering i standardbiblioteket, bruker konseptet med uforanderlige referanser og variabler som standard, og tilbyr sterk statisk skriving for å minimere logiske feil.

I Android er minnesikkerhet gitt på de allerede støttede språkene Kotlin og Java, men de er ikke egnet for å utvikle systemkomponenter på grunn av høy overhead. Rust gjør det mulig å oppnå ytelse nær C- og C++-språkene, noe som gjør at den kan brukes til å utvikle lavnivådeler av plattformen og komponenter for samhandling med maskinvare.

For å sikre sikkerheten til C- og C++-kode, bruker Android sandkasseisolasjon, statisk analyse og fuzzing-testing. Mulighetene for sandkasseisolering er begrenset og har nådd grensen for deres evner (ytterligere fragmentering i prosesser er upraktisk fra et ressursforbruk). Begrensninger ved bruk av sandkasse inkluderer store overheadkostnader og økt minneforbruk forårsaket av behovet for å skape nye prosesser, samt ytterligere forsinkelser knyttet til bruken av IPC.

Samtidig eliminerer ikke sandbox sårbarheter i koden, men reduserer bare risiko og kompliserer angrepet, siden utnyttelse krever identifisering av ikke én, men flere sårbarheter. Metoder basert på kodetesting er begrenset ved at for å identifisere feil er det nødvendig å legge forholdene til rette for at problemet kan manifestere seg. Det er ikke mulig å dekke alle mulige alternativer, så mange feil går ubemerket hen.

For systemprosesser i Android følger Google «regelen om to», ifølge hvilken enhver tilføyd kode ikke må oppfylle mer enn to av tre betingelser: arbeid med uvaliderte inngangsdata, bruk av et usikkert programmeringsspråk (C/C++), og kjører uten streng sandkasseisolasjon (har forhøyede privilegier). Denne regelen innebærer at koden for behandling av eksterne data enten må reduseres til minimale privilegier (isolert) eller skrives på et sikkert programmeringsspråk.

Google har ikke som mål å omskrive eksisterende C/C++-kode i Rust, men planlegger å bruke dette språket til å utvikle ny kode. Det er fornuftig å bruke Rust for ny kode fordi statistisk sett vises de fleste feilene i ny eller nylig endret kode. Spesielt blir rundt 50 % av oppdagede minnefeil i Android oppdaget i kode skrevet for mindre enn ett år siden.

Rust er inkludert blant hovedspråkene for Android-plattformutvikling


Kilde: opennet.ru

Legg til en kommentar