Google shkruajti rishtas firmware-in pvmfm në gjuhën Rust, e cila përdoret në Android.

Në kuadër të punës për të forcuar sigurinë e komponentëve kritikë të platformës Android, kompania Google shkroi rishtas firmware-in pvmfm në gjuhën Rust, i cili përdoret për organizimin e veprimit të makinave virtuale, të cilat aktivizohen nga hipervizori pVM në kuadër të Android Virtualization Framework. Më parë firmware-i ishte shkruar në gjuhën C dhe ishte realizuar mbi ngarkuesin U-Boot, në kodin e të cilit më parë janë gjetur dobësi të shkaktuara nga probleme gjatë punës me kujtesën.

Kjo firmware e riparë në Rust është përfshirë në Android 14, ndërsa bibliotekat universale të krijuara gjatë zhvillimit të firmware-it janë ndarë si paketat crate dhe janë dhënë komunitetit Rust. Për shembull, është publikuar paketa smccc për mbështetje të ndërfaqeve ARM PSCI (Power State Coordination Interface) dhe thirrjeve SMCCC (SMC Calling Convention), si dhe paketa aarch64-paging për manipulimin e tabelave të faqeve të memories. Po ashtu, është punuar për të eliminuar gabimet dhe për të zgjeruar funksionalitetin e paketës ekzistuese virtio-drivers me realizimin e drejtuesve VirtIO. Përveç platformës Android, paketat e përmendura janë shpërndarë në projektin Oak, i cili zhvillon komponentë për transmetimin, ruajtjen dhe përpunimin e të dhënave në ambientet e sigurta (TEE, Trusted Execution Environment).

Hipervizori pVM merr kontrollin në një fazë të hershme të ngarkimit dhe siguron izolimin e plotë të memories. makinave virtuale dhe ambientet e hostimit, duke parandaluar qasjen nga sistemet e hostimit në makina virtuale të mbrojtura, ku përpunohen të dhëna të ndjeshme. Firmware pvmfm (Protected Virtual Machine Firmware) merr kontrollin menjëherë pas nisjes së makinës virtuale, kryen verifikimin e ambientit të krijuar dhe merr një vendim për ndalimin emergjent të ngarkesës në rast se zbulohen probleme me integritetin ose gjeneron një certifikatë ngarkimi për sistemin mysafir në rast të konfirmimit të zinxhirit të besimit.

Riprova e kontrollo i kodin e programimit Rust sigurojnë një zbatimin më të thjeshtë dhe të sigurt të "rregullit të dy" që përdor Google për të mbajtur sigurinë e komponentëve sistemorë të Android. Sipas këtij rregulli, çdo kod i shtuar duhet të përfshijë jo më shumë se dy nga tre kushte: punimi me të dhëna të pa verifikuara, përdorimi i një gjuhe programimi të pasigurt (C/C++) dhe ekzekutimi me privilegje të rritura. Nga ky rregull del se kodi për përpunimin e të dhënave të jashtme duhet të jetë ose i kufizuar në privilegje minimale (izoluese), ose të jetë shkruar në një gjuhë programimi të sigurt. Sipas statistikave të Google, rreth 70% e të gjitha dobësive të rrezikshme të identifikuara në Android, shkaktohen nga gabimet gjatë punës me kujtesën.

Rust është fokusuar në menaxhimin e sigurt të memories, duke lejuar që të reduktohet rreziku i shfaqjes së dobësive që shkaktohen nga probleme siq janë aksesimi i memories pas çlirimit dhe kalimi jashtë kufijve të buferëve. Menaxhimi i sigurt i memories në Rust arrihet gjatë kompilimit përmes kontrollit të referencave, ndjekjes së pronësisë së objekteve dhe llogaritjes së kohëzgjatjes së jetës së objekteve (hapësirave të dukshme), si dhe përmes vlerësimit të saktësisë së aksesit në memory gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtjen nga mbushjet e numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave para përdorimit, trajton më mirë gabimet në bibliotekën standarde, aplikon konceptin e referencave dhe variablave të pakësueshëm (immutable) si parazgjedhje, dhe ofron një tipizim të fortë statik për të minimizuar gabimet logjike.

Nga vështirësitë që dalin gjatë zhvillimit të komponentëve me nivel të ulët në gjuhën Rust, siç janë drejtuesit, përmendet nevoja për të punuar me tregues të papërpunuar në modalitetin unsafe, pasi Rust është krijuar me një vështrim në përdorimin e memories të alokuar në program, dhe në kodin që punon pa shtresa mbi hardueri, rezulton nevoja për të pasur qasje në memoren e ndarë dhe MMIO. Aktualisht, aftësitë e Rust për të punuar me tregues të papërpunuar lënë për të dëshiruar, por situata pritet të ndryshojë pas stabilizimit të mbështetjes për makrotë offset_of, slice_ptr_get dhe slice_ptr_len.

Një tjetër disavantazh që meriton vëmendje është nevoja për një sintaksë të përmirësuar për të aksesuar fushat e strukturave dhe indekset e masivave përmes treguesve të papërpunuar pa krijuar referencia, si dhe kufizimet në krijimin e mbështetjeve të sigurta mbi operacionet unsafe, të cilat mund të shkaktojnë sjellje të pacaktuar dhe nuk mund të verifikohen nga kompajleri. Për shembull, mbështetje të tilla nuk mund të krijohen për operacionet me tabelat e faqeve të memories, pasi mapimi i faqeve në një pjesë të programit mund të ndikojë në pjesë të tjera.

Sa i pĂ«rket madhĂ«sisĂ« sĂ« kodit rezultues, varianti i vjetĂ«r i firmware-it pVM zinte 220 kB, ndĂ«rsa i ri — 460 kB; pĂ«r mĂ« tepĂ«r, janĂ« shtuar mundĂ«si tĂ« reja, tĂ« cilat lejuan eliminimin e disa komponentĂ«ve tĂ« tjerĂ« tĂ« pĂ«rdorur gjatĂ« ngarkesĂ«s. Si rezultat, madhĂ«sia totale e tĂ« gjitha komponentĂ«ve tĂ« vjetĂ«r dhe tĂ« rinj tĂ« ngarkesĂ«s u bĂ« e krahasueshme. Vlen tĂ« theksohet qĂ« kur madhĂ«sia Ă«shtĂ« mĂ« e rĂ«ndĂ«sishme se performanca, rezultate tĂ« krahasueshme me gjuhĂ«n C mund tĂ« arrihen duke aktivizuar regjime tĂ« shtesave pĂ«r optimizimin e madhĂ«sisĂ« nĂ« kompilator, duke hequr varĂ«sitĂ« e panevojshme dhe duke mos pĂ«rdorur mjete tĂ« formatimit tĂ« vargjeve.

Për më tepër, përmendet vazhdimi i punës mbi implementimin e mundësisë për të ekzekutuar aplikacione të besueshme të shkruara në gjuhën Rust (Trusted Application) në sistemin operativ Trusty, i cili ofron një mjedis TEE (Trusted Execution Environment) për Android, duke u ekzekutuar paralelisht me Android mbi të njëjtin procesor në një mjedis të izoluar. Trusty përdoret në pajisjet Pixel dhe tashmë përdor Rust në bibliotekat dhe komponentët sistemorë (në bërthamë vazhdon të përdoret C).

Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster