Sem hluti af viðleitni til að styrkja öryggi mikilvægra hugbúnaðaríhluta kerfisins Android Google hefur endurskrifað pvmfm vélbúnaðinn í Rust, sem er notaður til að skipuleggja rekstur sýndarvéla sem pVM sýndarvélastýringin ræsir frá. Android Sýndarvæðingarrammi. Áður var vélbúnaðarforritið skrifað í C og útfært ofan á U-Boot ræsiforritið, en áður hafði komið í ljós að kóði þess innihélt veikleika af völdum minnisstjórnunarvandamála.
Endurskrifuð vélbúnaðarhugbúnaður í Rust fylgir með í pakkanum. Android 14, og alhliða bókasöfnin sem búin voru til við þróun vélbúnaðarins hafa verið pökkuð sem kassapakkar og gefin Rust samfélaginu. Til dæmis hefur smccc pakkinn verið gefinn út til að styðja PSCI (Power State Coordination Interface) viðmót ARM og SMCCC (SMC Calling Convention) köll, sem og aarch64-síðupakkann til að meðhöndla minnissíðutöflur. Einnig hefur verið unnið að því að laga villur og auka virkni núverandi virtio-drivers pakkans með innleiðingu VirtIO rekla. Auk kerfisins Android Tilgreindir pakkar eru notaðir í Oak verkefninu, sem þróar íhluti til að senda, geyma og vinna úr gögnum í vernduðum umhverfum (TEE, Trusted Execution Environment).
pVM hypervisorinn tekur stjórn snemma í ræsingarferlinu og veitir fulla minniseinangrun. sýndarvélar og hýsilumhverfið, sem kemur í veg fyrir að hýsilkerfið fái aðgang að vernduðum sýndarvélum þar sem viðkvæm gögn eru unnin. Vélbúnaðurinn pvmfm (Protected Virtual Machine Firmware) tekur stjórn strax eftir að sýndarvélin ræsist, staðfestir búið umhverfi og ákveður hvort hætta eigi við ræsingu ef heilleikavandamál eru greind eða býr til ræsivottorð fyrir gestakerfið ef traustkeðjan er staðfest.
Endurskipulagning í Rust gerir það auðveldara og öruggara að fylgja „reglunni tveggja“ sem Google notar til að viðhalda öryggi kerfisíhluta. AndroidSamkvæmt þessari reglu má allur viðbættur kóði ekki uppfylla fleiri en tvö af þremur skilyrðum: að meðhöndla ótrausta inntaksgögn, nota óöruggt forritunarmál (C/C++) og keyra með auknum réttindum. Þessi regla felur í sér að kóði til að vinna úr utanaðkomandi gögnum verður annað hvort að vera einangraður í lágmarksréttindi (einangraður) eða skrifaður á öruggu forritunarmáli. Samkvæmt tölfræði Google eru um það bil 70% allra hættulegra veikleika sem greinast í... Android, af völdum villna við vinnu með minni.
Rust leggur áherslu á öryggi minnis og dregur úr hættu á veikleikum af völdum vandamála eins og notkunar eftir að hugbúnaðurinn hefur verið sleppt og biðminnisyfirhlaupa. Rust tryggir öryggi minnis við þýtingu með því að athuga tilvísanir, fylgjast með eignarhaldi hluta og reikna út líftíma hluta (umfang), sem og með því að sannreyna aðgang að minni á keyrslutíma. Rust veitir einnig vörn gegn heiltöluflóðum, krefst skyldubundinnar frumstillingar breytugilda fyrir notkun, meðhöndlar betur villur í stöðluðu bókasafni, innleiðir hugtakið óbreytanlegar tilvísanir og breytur sjálfgefið og býður upp á sterka truflanaritun til að lágmarka rökvillur.
Einn erfiðleiki sem kemur upp við þróun lágstigsíhluta eins og rekla í Rust er þörfin á að meðhöndla nakta bendla í óöruggum ham. Rust er hannað með minni úthlutað af forriti í huga, en kóði sem keyrir án vélbúnaðaryfirlagna verður að fá aðgang að sameiginlegu minni og MMIO. Geta Rust til að meðhöndla nakta bendla er nú ekki eins góð og vonast er til, en þetta ætti að batna þegar stuðningur við offset_of, slice_ptr_get og slice_ptr_len makróana nær stöðugleika.
Aðrir athyglisverðir gallar eru meðal annars þörfin fyrir bætta setningafræði til að fá aðgang að uppbyggingarreitum og fylkisvísum í gegnum beina bendla án þess að búa til tilvísanir, sem og takmarkanir á að búa til öruggar umbúðir fyrir óöruggar aðgerðir sem geta valdið óskilgreindri hegðun og þýðandinn getur ekki athugað. Til dæmis er ómögulegt að búa til slíkar umbúðir fyrir aðgerðir með minnissíðutöflum, þar sem síðuvörpun í einum hluta forritsins getur haft áhrif á aðra hluta.
Hvað varðar stærð kóðans sem myndaðist, þá tók gamla útgáfan af pVM vélbúnaðarforritinu 220 KB en sú nýja 460 KB. Hins vegar bætti endurskrifaða útgáfan við nýjum eiginleikum sem gerðu okkur kleift að útrýma sumum öðrum íhlutum sem notaðir voru við ræsingu. Þar af leiðandi var heildarstærð allra gamalla og nýrra ræsiþátta sambærileg. Það skal tekið fram að þegar stærð er mikilvægari en afköst er hægt að ná sambærilegum árangri og í C með því að virkja viðbótar stærðarbestunarstillingar í þýðandanum, fjarlægja óþarfa ósjálfstæði og nota ekki strengjasniðsverkfæri.
Að auki er minnst á áframhaldandi vinnu við innleiðingu á möguleikanum á að keyra traust forrit (Trusted Application) skrifuð í Rust forritamálinu í Trusty stýrikerfinu, sem býður upp á TEE (Trusted Execution Environment) fyrir... Android, framkvæmt samhliða Android á sama örgjörva í aðskildu, einangruðu umhverfi. Trusty er notað í Pixel tækjum og notar nú þegar Rust í bókasöfnum og kerfisíhlutum (kjarninn er enn í C).
Heimild: opennet.ru
