Google on Rust keeles ümber kirjutanud Androidis kasutatava pvmfm püsivara.

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

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster