Androidi platvormi kriitiliselt tĂ€htsate tarkvarakomponentide turvalisuse suurendamise raames on Google ĂŒmber kirjutanud pvmfm pĂŒsivara Rusti keeles, mida kasutatakse virtuaalmasinate töö korraldamiseks, mida kĂ€itatakse Android Virtualization Frameworki osana pVM hĂŒperviisori poolt. Varem oli pĂŒsivara kirjutatud C keeles ja realiseeritud U-Booti laadijale, mille koodis on varem leitud haavatavusi, mis on pĂ”hjustatud mĂ€luga seotud probleemidest.
Rustis ĂŒmber kirjutatud pĂŒsivara on lisatud Android 14-sse, samas kui arendusprotsessi kĂ€igus loodud universaalsed teegid on vormindatud crate-pakettideks ja edastatud Rusti kogukonnale. NĂ€iteks on avaldatud paketid smccc, et toetada ARM-i liideseid PSCI (Power State Coordination Interface) ja SMCCC (SMC Calling Convention) kutseid, ning aarch64-paging pakett mĂ€lu lehtede tabelite manipuleerimiseks. Samuti on vĂ€lja töötatud olemasoleva virtio-drivers paketi vigu parandamise ja funktsionaalsuse suurendamise töö, et rakendada VirtIO draivereid. Lisaks Androidi platvormile kasutatakse neid pakette ka Oak-projektis, mis arendab komponente andmete edastamiseks, salvestamiseks ja töötlemiseks usaldusvÀÀrsetes keskkondades (TEE, Trusted Execution Environment).
HĂŒperviisor pVM saab juhtimise varajases laadimisetapis ja tagab mĂ€lu tĂ€ieliku isoleerituse virtuaalmasinate ja host-ökosĂŒsteemi, takistades host-sĂŒsteemil juurdepÀÀsu kaitstud virtuaalmasinatele, kus töödeldakse konfidentsiaalset teavet. pvmfm (Protected Virtual Machine Firmware) pĂŒsivara saab juhtimise kohe pĂ€rast virtuaalse masina kĂ€ivitamist, kontrollib loodud keskkonda ning otsustab laadimise kriitilise peatamise vĂ”i genereerib kĂŒlgsertifikaadi kĂŒlalisĂŒsteemile, kui usaldusketti on kinnitatud.
Rusti keelt kasutades on lihtsam ja ohutum jĂ€rgida Google'i âkahe reegliâ pĂ”himĂ”tteid, mis tagavad Androidi sĂŒsteemikomponentide turvalisuse. Selle reegli kohaselt peab kĂ”ik uus lisatav kood vastama mitte rohkem kui kahele tingimusele kolmest: töötama kontrollimata sisendiga, kasutama ohtlikku programmeerimiskeelt (C/C++) ning töötama suurenenud Ă”igustega. Seega peab vĂ€liste andmete töötlemise kood kas olema piiratud minimaalsete Ă”igustega (isoleeritud) vĂ”i kirjutatud turvalises programmeerimiskeeles. Google'i statistika kohaselt on umbes 70% Androidis tuvastatud ohtlikest haavatavustest pĂ”hjustatud mĂ€luga seotud vigadest.
Rust keskendub mĂ€lutöö turvalisusele ning aitab vĂ€hendada ohtu haavatavuste tekkimisele, mis on pĂ”hjustatud probleemidest, nagu mĂ€lu juurde pÀÀsemine pĂ€rast selle vabastamist ja mĂ€lupuhvri ĂŒletamine. Rust tagab mĂ€lutöö turvalisuse kompilatsiooni ajal, kontrollides viiteid, jĂ€lgides objektide omandiĂ”igust ja arvestades objektide elutsĂŒklit (nende nĂ€htavuse perioodi) ning hindab ka mĂ€lule juurdepÀÀsu Ă”igsust koodi tĂ€itmise ajal. Rust pakub samuti vahendeid tĂ€isarvude ĂŒletĂ€itumise kaitsmiseks, nĂ”uab muutuja vÀÀrtuste kohustuslikku initsialiseerimist enne kasutamist, kĂ€sitleb vigu paremini standardraamatukogus, rakendab muutumatute (immutable) viidete ja muutujate kontseptsiooni vaikimisi ning pakub tugevat staatilist tĂŒĂŒpimist loogiliste vigade minimeerimiseks.
Rust-keeles madala taseme komponentide, nagu draiverite, arendamisel esinevad raskused hĂ”lmavad vajadust töötada paljade viidete (bare pointers) kasutamisega unsafe-reĆŸiimis, kuna Rust on loodud silmas pidades programmi mĂ€lu kasutamist, ning koodis, mis töötab otse riistvaral, tuleb tegeleda jagatud mĂ€lu ja MMIO-ga. Praegu on Rusti vĂ”imalused paljude viidete kasutamiseks veel arendamisel, kuid olukord peaks paranema pĂ€rast makrode offset_of, slice_ptr_get ja slice_ptr_len stabiliseerimist.
Puudustena vÀÀrib tĂ€helepanu vajadus parandada sĂŒntaksit struktuurivĂ€ljade ja massiivide indeksite juurde pÀÀsemiseks paljaste nĂ€idikute kaudu, ilma linkide loomise vajaduseta, samuti piirangud ohutute mĂ€histe loomisel unsafe-operatsioonide ĂŒle, mis vĂ”ivad pĂ”hjustada mÀÀramatut kĂ€itumist ja mida kompilaator ei saa kontrollida. NĂ€iteks ei saa selliseid mĂ€hiseid luua mĂ€lu lehekĂŒlgede toimingute jaoks, kuna lehekĂŒlgede kaardistamine ĂŒhe osa programmist vĂ”ib mĂ”jutada teisi osi.
Tulemuslikkuse suuruse osas vanem pVM-firmware versioon kasutas 220 kB, uus versioon aga 460 kB, kuid uude kirjutatud versiooni on lisatud uusi funktsioone, mille tĂ”ttu on vĂ”imalik loobuda mĂ”nest muust alglaadimisel kasutatavast komponendist. LĂ”ppkokkuvĂ”ttes osutus vanade ja uute laadimis komponentide kogusumma sarnaseks. Kui suurus on olulisem kui jĂ”udlus, on C-keelega vĂ”rreldavaid tulemusi vĂ”imalik saavutada, aktiveerides kompilaatori tĂ€iendavad optimeerimisreĆŸiimid suuruse osas, loobudes liigsetest sĂ”ltuvustest ja mitte kasutades stringide vormindamise vahendeid.
Lisaks mainitakse, et jĂ€tkatakse usaldusvÀÀrsete rakenduste (Trusted Application) kĂ€ivitamise vĂ”imaluse rakendamist Rust keeles Trusty operatsioonisĂŒsteemis, mis pakub TEE-keskkonda (Trusted Execution Environment) Androidile, mis töötavad sama protsessori isolatsioonis eraldi keskkonnas paralleelselt Androidiga. Trusty kasutatakse Pixel-seadmetes ja juba kasutatakse Rusti raamatukogudes ja sĂŒsteemi komponentides (tuum jÀÀb C keeles).
Allikas: opennet.ru
