Google on tugevdada Androidi platvormi kriitiliselt oluliste tarkvarakomponentide turvalisust ja kirjutas PVMFW-i, mida kasutatakse virtuaalsete masinate haldamiseks, Rusti keeles ĂŒmber. Varasemalt oli see tarkvara kirjutatud C keeles ja teostatud U-Booti kĂ€ivitaja peale, kus leiti eelnevalt haavatavusi, mis olid seotud mĂ€luhalduse probleemidega.
Rustis ĂŒmber kirjutatud tarkvara on osa Android 14-st, samas kui selle arendusega seotud universaalsed raamatukogud on pakendatud crate-pakettideks ja edastatud Rusti kogukonnale. NĂ€iteks on avalikustatud smccc pakett ARM-i PSCI (Power State Coordination Interface) ja SMCCC (SMC Calling Convention) toetamiseks ning aarch64-paging pakett mĂ€lulehtede tabelitega manipuleerimiseks. Samuti on tehtud tööd vigade parandamiseks ja virtio-draiverite olemasoleva paketi funktsionaalsuse laiendamiseks. 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).
pVM hĂŒperviisor saab juhtimise varases laadimisjĂ€rgus ja tagab tĂ€ieliku mĂ€lua isolatsiooni virtuaalmasinad ja host-keskkonna vahel, takistades host-sĂŒsteemil juurdepÀÀsu kaitstud virtuaalsetele masinatele, kus töödeldakse konfidentsiaalset teavet. PVMFW (Protected Virtual Machine Firmware) hakkab juhtima kohe pĂ€rast virtuaalse masina kĂ€ivitamist, kontrollib loodud keskkonda ja otsustab laadimise hĂ€daolukorra katkestamise kasuks, kui tuvastatakse terviklikkusprobleem vĂ”i genereerib laadimissertifikaadi kĂŒlalisĂŒsteemile usalduspunktide ahela kinnitamisel.
Rusti keeles ĂŒmberprojekteerimine aitab saavutada lihtsamat ja turvalisemat kahe reegli jĂ€rgimist, mida Google rakendab Androidi sĂŒsteemikomponentide turvalisuse sĂ€ilitamiseks. Selle reegli kohaselt peab kĂ”ik jĂ”udnud kood vastama mitte rohkem kui kahele kolmest tingimusest: töötamine kontrollimata sisendite, ohtlike programmeerimiskeelte (C/C++) kasutamine ja suurendatud Ă”iguste tĂ€itmine. Sellest reeglist tuleneb, et vĂ€listatud andmete töötlemiseks mĂ”eldud kood peab kas olema kĂ€rbitud minimaalsed Ă”igused (isoleeritud) vĂ”i olema kirjutatud ohutuks programmeerimiskeeles. Google'i statistika kohaselt on umbes 70% Androidis tuvastatud ohtlikest haavatavustest seotud mĂ€luhalduse vigadega.
Rust keskendub ohutule mĂ€luhaldusele ja aitab vĂ€hendada haavatavuste tekkimise riski, mis on seotud probleemidega, nagu juurdepÀÀs mĂ€llu pĂ€rast selle vabastamist ja mĂ€lupiiride ĂŒletamine. Rust tagab ohutu mĂ€luhalduse kompileerimise ajal linkide kontrollimise, objektide omaduste jĂ€lgimise ja eluea (vaatusala) arvessevĂ”tmise kaudu, samuti mĂ€lule juurdepÀÀsu Ă”iguse hindamise koodi tĂ€itmise ajal. Rust pakub samuti meetmeid tĂ€isarvude ĂŒletĂ€itumiste kaitsmiseks, nĂ”uab muutuja vÀÀrtuste kohustuslikku algset mÀÀramist enne kasutamist, paremini kĂ€sitleb vigu standardraamatukogus, rakendab immutamatuse (immutable) kontseptsiooni ja pakub tugevat staatilist tĂŒĂŒpimist loogiliste vigade minimeerimiseks.
Rust-i madala taseme komponentide, nĂ€iteks draiverite, arendamisel esinevate raskuste hulka kuulub vajadus töötada toore pointeritega unsafe-reĆŸiimis, kuna Rust on loodud programmi jooksul eraldatud mĂ€lu kasutamiseks ning kode, mis töötab otse riistvara kohal ilma kihita, peab ligipÀÀsema jagatud mĂ€lule ja MMIO-le. Praegu jĂ€tavad Rusti toorpointerite kĂ€sitlemise vĂ”imalused soovida, kuid olukord peaks muutuma pĂ€rast makroskoopide offset_of, slice_ptr_get ja slice_ptr_len stabiliseerimist.
Ka murekohtade hulka kuulub vajadus tĂ€iustatud sĂŒntaksi jĂ€rele struktuuride vĂ€ljade ja massiivide indeksite ligipÀÀsuks toore pointerite kaudu ilma viidete loomise vajaduseta, samuti piirangud ohutute mĂ€histe loomisel unsafe-operatsioonide ĂŒle, mis vĂ”ivad pĂ”hjustada mÀÀramata kĂ€itumist ja mida ei saa kompilaatoriga kontrollida. NĂ€iteks selliseid mĂ€hiseid pole vĂ”imalik luua mĂ€lulehe tabelite operatsioonide jaoks, kuna lehtede kaardistamine ĂŒks osa programmist vĂ”ib mĂ”jutada teisi osi.
Mis mÔÔdab tulemuskoodi suurust, siis vana pVM-i versioon oli 220 kB, uus aga 460 kB, kuid kirjutatud versioon sisaldab uusi funktsioone, mille tĂ”ttu on vĂ”imalik loobuda mĂ”nest muust kĂ€ivituskomponendist. LĂ”ppkokkuvĂ”ttes osutus kĂ”igi vanade ja uute kĂ€ivituskomponentide kogusuurus sarnaseks. MĂ€rgitakse, et kui suurus on olulisem kui jĂ”udlus, on C-keelega sarnaseid tulemusi vĂ”imalik saavutada, kui kompilaatoris aktiveerida tĂ€iendavad suuruse optimeerimise reĆŸiimid, eemaldada liigsed sĂ”ltuvused ja mitte kasutada stringide vormindamise vahendeid.
Lisaks mainitakse, et jĂ€tkatakse töödega Rusti keeles kirjutatud usaldusvÀÀrsete rakenduste (Trusted Application) kĂ€ivitamise vĂ”imaluse rakendamise nimel Trusty operatsioonisĂŒsteemis, mis pakub TEE-keskkonda (Trusted Execution Environment) Androidile ja töötab paralleelselt Androidiga samal protsessoril eraldi isoleeritud keskkonnas. Trusty on kasutusel Pixel-seadmetes ning kasutab juba Rusti raamatukogudes ja sĂŒsteemikomponentides (tuum jÀÀb C-keeles).
Allikas: opennet.ru
