Rust ingår bland huvudspråken för Android-plattformsutveckling

Google har tillkännagivit införandet av programmeringsspråket Rust bland de språk som är tillåtna för att utveckla Android-plattformen. Rust-språkkompilatorn inkluderades i Android-källträdet redan 2019, men stödet för detta språk förblev experimentellt. Några av de första Rust-komponenterna som planeras för Android inkluderar nya implementeringar av Binders interprocesskommunikationsmekanism och Bluetooth-stacken.

Introduktionen av Rust genomfördes som en del av ett projekt för att stärka säkerheten, främja säkra programmeringstekniker och öka effektiviteten i att identifiera problem när man arbetar med minne i Android. Det noteras att cirka 70 % av alla farliga sårbarheter som identifieras i Android orsakas av fel när man arbetar med minne. Att använda Rust, som fokuserar på minnessäkerhet och automatisk minneshantering, kommer att minska risken för sårbarheter orsakade av minnesfel som efterfri åtkomst och buffertöverskridanden.

Rust upprätthåller minnessäkerheten vid kompilering genom referenskontroll, objektägande och objektlivstidsspårning (scopes) och genom att utvärdera riktigheten av minnesåtkomster under körning. Rust ger också skydd mot heltalsspill, kräver att variabelvärden initieras före användning, har bättre felhantering i standardbiblioteket, använder konceptet med oföränderliga referenser och variabler som standard och erbjuder stark statisk typning för att minimera logiska fel.

I Android tillhandahålls minnessäkerhet på de redan stödda språken Kotlin och Java, men de är inte lämpliga för att utveckla systemkomponenter på grund av hög overhead. Rust gör det möjligt att uppnå prestanda nära C- och C++-språken, vilket gör att den kan användas för att utveckla lågnivådelar av plattformen och komponenter för att interagera med hårdvara.

För att säkerställa säkerheten för C- och C++-kod använder Android sandlådeisolering, statisk analys och fuzzing-testning. Möjligheterna för sandlådeisolering är begränsade och har nått gränsen för deras kapacitet (ytterligare fragmentering i processer är opraktisk ur resursförbrukningssynpunkt). Begränsningar för att använda sandlåda inkluderar stora overheadkostnader och ökad minnesförbrukning orsakad av behovet av att skapa nya processer, samt ytterligare förseningar i samband med användningen av IPC.

Samtidigt eliminerar sandbox inte sårbarheter i koden, utan minskar bara risker och komplicerar attacken, eftersom exploatering kräver identifiering av inte en utan flera sårbarheter. Metoder baserade på kodtestning är begränsade genom att det för att identifiera fel är nödvändigt att skapa förutsättningar för att problemet ska uppenbara sig. Det är inte möjligt att täcka alla möjliga alternativ, så många fel går obemärkt förbi.

För systemprocesser i Android följer Google "regeln om två", enligt vilken all tillagd kod inte får uppfylla mer än två av tre villkor: arbeta med ovaliderad indata, använda ett osäkert programmeringsspråk (C/C++) och körs utan strikt sandlådeisolering (med förhöjda privilegier). Denna regel innebär att koden för bearbetning av extern data antingen måste reduceras till minimala privilegier (isolerad) eller skrivas på ett säkert programmeringsspråk.

Google siktar inte på att skriva om befintlig C/C++-kod i Rust, men planerar att använda detta språk för att utveckla ny kod. Det är vettigt att använda Rust för ny kod eftersom, statistiskt sett, de flesta buggar visas i ny eller nyligen ändrad kod. I synnerhet upptäcks cirka 50 % av upptäckta minnesfel i Android i kod som skrevs för mindre än ett år sedan.

Rust ingår bland huvudspråken för Android-plattformsutveckling


Källa: opennet.ru

Lägg en kommentar