A Google Rustban fejleszti az Android egyes részeit a biztonság javítása érdekében

A Google Rust nyelven írja és írja át az Android egyes részeit, hogy javítsa az operációs rendszer egészének biztonságát a C és C++ között. Olvasson tovább, ha többet szeretne megtudni!

Az Android, mint teljes operációs rendszer-megoldás, sok mozgó alkatrészt tartalmaz. Nagy vonalakban ezek a részek az alkalmazásökoszisztéma, majd maga az operációs rendszer. Fejlesztőként a választott programozási nyelv attól függően változik, hogy az Android melyik részén dolgozik. Az alkalmazásfejlesztők számára a Java és a Kotlin népszerű lehetőségek. Az operációs rendszeren és annak alsóbb szintjein dolgozó fejlesztők számára eddig a C és a C++ volt a népszerű választás. Ma a Google egy harmadik opcióval bővíti az operációs rendszer fejlesztőit, mivel az Android Open Source Project már támogatja a Rust programozási nyelvet magának az operációs rendszernek a fejlesztéséhez.

A C és C++ korlátai

Az Android operációs rendszer alacsonyabb szintjei olyan rendszerprogramozási nyelveket igényelnek, mint a C és a C++. Ezek a nyelvek irányítást és kiszámíthatóságot biztosítanak a fejlesztőknek, ami fontos az alacsony szintű rendszererőforrásokhoz és hardverekhez való hozzáféréskor.

Sajnos a C és a C++ nem nyújt memóriabiztonsági garanciákat, így hajlamosak a hibákra és a biztonsági résekre. A fejlesztő felelős a memória élettartamának kezeléséért ezeken a nyelveken, de összetett és többszálú kódbázisokban ezt könnyebb mondani, mint megtenni.

A C és a C++ együtt több tízmillió kódsort alkot az Android platformon. Ezek a memóriabiztonsági hibák a kódhibák legnehezebben kezelhető forrásaivá válnak, amelyek az Android súlyos biztonsági réseinek körülbelül 70%-át jelentik. E hibák puszta kijavítása nem elegendő a probléma kezeléséhez, és jobb megközelítés lenne, ha először megelőznénk őket.

A memória biztonságának hiánya arra kényszeríti a fejlesztőket, hogy az Android-folyamatokat szigorúan korlátozott és kiváltságtalan homokozókban futtassák. A homokozók azonban drágák az erőforrások tekintetében, többletköltséget emésztenek fel, és késleltetést vezetnek be. A sandboxing nem szünteti meg teljesen a kód sebezhetőségeit, és a hatékonysága csökken a nagy hibasűrűség miatt, így a támadók több sebezhetőséget is összeláncolhatnak.

Egy másik korlátozás, bár nem egyedi a C és C++ esetében, de minden memóriabiztonsági kérdésre érvényes, az, hogy a hibás állapotot ténylegesen a műszeres kódban kell kiváltani ahhoz, hogy észlelni lehessen. Tehát még akkor is, ha a kódod kiválóan tesztelt, a tényleges hiba észrevétlen maradhat. Ha pedig hibákat találnak, azok kijavítása egy másik feladat, amely hosszú és költséges folyamatot foglal magában, amely nem mindig vezet megfelelő javításhoz. Így a hibaészlelés megbízhatatlanná válik, és ezeknek a korlátozásoknak a fényében a hibamegelőzés a jobb megközelítés.

Itt jön képbe a váltás egy olyan memóriabiztos nyelvre, mint a Rust.

Rozsda és előnyei

A Rust memóriabiztonsági garanciákat nyújt a fordítási idejű ellenőrzések kombinációjával az objektum élettartamának/tulajdonjogának érvényesítésére, valamint a futásidejű ellenőrzések kombinációjával, amelyek biztosítják a memória-hozzáférések érvényességét. Ezt a biztonságot úgy érik el, hogy a C és C++ teljesítményével egyenértékű teljesítményt nyújtanak. A rozsda emellett csökkenti a sandbox használatának szükségességét, így a fejlesztők több szabad helyet biztosítanak a biztonságosabb és erőforrás-takarékosabb új funkciók bevezetéséhez.

Noha a Rustnak valóban megvannak az előnyei, nem lehetséges egyik napról a másikra a teljes Android operációs rendszert Rust-ra váltani. És erre talán nincs is szükség, mivel az Android memóriahibáinak nagy része új vagy nemrégiben módosított kódban fordul elő, körülbelül 50%-uk egy évnél fiatalabb. A Google úgy véli, hogy a memóriabiztos nyelvi erőfeszítései a legjobban az új fejlesztésekre összpontosítanak, nem pedig a kiforrott C és C++ kódok újraírására.

A Rust a hibák megelőzésére is összpontosít, nem pedig a hibák észlelésére, ami javítja a kód helyességét. Számos kulcsfontosságú tulajdonsággal rendelkezik, mint például a memória biztonsága, az adatok egyidejűsége, kifejezőbb típusú rendszerek, megváltoztathatatlan alapértelmezés szerint hivatkozások és változók, biztonságosabb egész számok kezelése, jobb hibakezelés a szabványos könyvtárakban és sok minden több.

Mit jelent a Rust-ra váltás az Android számára?

A Google azt állítja, hogy az elmúlt 18 hónapban hozzáadta a Rust támogatást az Android nyílt forráskódú projekthez. De egy új nyelv hozzáadása az Android platformhoz óriási vállalkozás. Néhány eszközláncot és függőséget karban kell tartani, frissíteni kell a tesztinfrastruktúrát és az eszközöket, valamint ki kell képezni a fejlesztőket.

A Google-nak van néhány korai alkalmazói projektje, amelyeket a következő hónapokban megosztanak. De még így is világossá válik, hogy a Rust-támogatás skálázása több operációs rendszerre többéves projekt.

A látottak alapján a Google néhány helyen már használja a Rust-ot. Az Android új Bluetooth-veremének újraírása kódnéven "Gabeldorsche" írják Rust nyelven. A Gabeldorschén az Android 11 idején kezdődött a munka, de még mindig nincs használatban. Androidos Kulcstár 2.0 A modul Rust nyelven íródott, és a binder, az Android IPC-illesztőprogramjának userspace része is. Bár nem kapcsolódik az Androidhoz, Fuksziaúj netstack Rust nyelven is írják.

Az alkalmazásfejlesztők számára a váltás semmit sem változtat azon, hogy Ön, mint alkalmazásfejlesztő hogyan ír alkalmazásokat, vagy hogyan működik a keretrendszer API-k. Ez a kapcsoló csak az operációs rendszer írásmódját érinti. Az Android Developer Relations csapatának egyik tagja szerint, a Google jelenleg sem tervez Rust NDK kiadását. Az alkalmazásfejlesztés támogatott nyelvei továbbra is a Kotlin, a Java, a C és a C++.