Google teatas, et programmeerimiskeel Rust on nüüd lubatud Androidi platvormi arendamise keelte hulgas. Rust'i kompilaator liideti Androidi lähtekoodi puusse juba 2019. aastal, kuid selle keele tugi jäi katsetusjärku. Üks esimesi Rust'is loodud komponente, mis plaanitakse Androidisse lisada, on uued rakendused protsessidevahelise suhtluse mehhanismist Binder ja Bluetooth'i protokollist.
Rust'i kasutuselevõtt on osa projektist, mille eesmärk on tugevdada turvalisust, edendada turvalise programmeerimise praktikaid ja täiustada mäluhaldusprobleemide avastamise efektiivsust Androidis. Nähakse, et ligikaudu 70% Androidis avastatud ohtlikest haavatavustest tuleneb mäluhaldusvigadest. Rust'i, mis keskendub mäluturvalisusele ja pakub automaatset mäluhaldust, kasutamine vähendab ohtu haavatavuste tekkeks, mis on põhjustatud mäluhaldusvigadest, nagu mälupiirkondadele juurdepääs pärast nende vabastamist ja puhvriväärtuse üleastumine.
Rust tagab mälutöö turvalisuse tagamise kompileerimise ajal viidete kontrollimise, objektide omandi jälgimise ja objektide eluea (ulatus) arvestamise kaudu ning hindab koodi käivitamise ajal mälu juurdepääsu õigsust. Rust pakub ka vahendeid täisarvude ületäitumise vastu kaitsmiseks, nõuab muutujate väärtuste kohustuslikku initsialiseerimist enne kasutamist, haldab tõhusamalt vigu standardses teegis, rakendab immutamatuse (immutable) viiteid ja muutujaid vaikimisi ning pakub tugevat staatilist tüübistamist loogiliste vigade minimeerimiseks.
Androidis tagab mälutöö turvalisuse juba toetatud keeltes Kotlin ja Java, kuid need ei sobi süsteemikomponentide arendamiseks kõrgete kulude tõttu. Rust võimaldab saavutada jõudluse, mis on lähedane C ja C++ keeltele, muutes selle sobivaks madala taseme platvormide ja riistvaraga suhtlemise komponentide arendamiseks.
Koodi kaitsmiseks C ja C++ puhul Androidis rakendatakse sandbox-isolatsiooni, staatilist analüüsi ja fuzzing-teste. Sandbox-isolatsiooni võimalused on piiratud ja on saavutanud oma võimekuse piiri (edasi jagamine protsessidesse ei ole ressursside tarbimise seisukohalt mõistlik). Sandbox'i rakendamise piirangutena mainitakse suurt täiendavat kulu ja mälutarbimise kasvu, mis tuleneb uute protsesside genereerimise vajadusest, samuti täiendavaid viivitusi, mis on seotud IPC kasutamisega.
Kuid sandbox ei kõrvalda koodivigu, vaid vähendab ainult riske ja muudab rünnaku läbiviimise keerulisemaks, kuna nende kasutamiseks on vajalik tuvastada mitte ainult üks, vaid mitu haavatavust. Kooditesti põhine meetod on piiratud sellega, et vigade avastamiseks tuleb luua olukord, kus probleem avaldub. Kõikvõimalike variantide hõlmamine ei ole võimalik, mistõttu jääb palju vigu avastamata.
Androidi süsteemiprotsesside puhul järgib Google "kahe reeglit", mille kohaselt peab iga lisatav kood vastama vähem kui kahele kolmest tingimusest: töötamine kontrollimata sisendandmetega, ebaohutu programmeerimiskeele (C/C++) kasutamine ja teostamine ilma rangete sandbox-isolatsioonita (suurenenud õiguste olemasolu). Nii et välistest andmetest töötlemiseks mõeldud kood peab olema kas piiratud miinimumõigustega (isoleeritud) või kirjutatud ohutuks programmeerimiskeeleks.
Google ei kavatse olemasolevat C/C++ koodi Rustis ümber kirjutada, vaid plaanib kasutada seda keelt uue koodi arendamiseks. Rusti kasutamine uue koodi jaoks on mõttekas, kuna statistika kohaselt ilmneb enamus vigu uues või hiljuti muudetud koodis. Eelkõige tuvastatakse umbes 50% Androidi mälutöötluse vigu koodis, mis on kirjutatud alla aasta tagasi.

Allikas: opennet.ru
