Google představen nedávno sklon programovací jazyk Rez mezi povolenými jazyky pro vývoj systému Android.
Vzhledem k tomu, že kompilátor Rust byl zahrnut do zdrojového stromu Androidu v roce 2019, jazyková podpora však zůstala experimentální. Některé z prvních komponentů Rust dodávaných do systému Android jsou nové implementace meziprocesového komunikačního mechanismu Binder a zásobníku Bluetooth.
Realizace Rust byla provedena v rámci projektu na posílení bezpečnosti, propagovat techniky bezpečného kódování a zlepšit efektivitu identifikace problémů při práci s pamětí v systému Android. Je pozorováno, že přibližně 70% všech nebezpečných zranitelností identifikovaných v systému Android je způsobeno chybami při práci s pamětí.
Používání jazyka Rust, že se zaměřuje na bezpečnou správu paměti a poskytuje automatickou správu paměti, sníží riziko zranitelnosti způsobené chybami během zpracování paměti, jako je přístup do oblasti paměti po jejím uvolnění a překročení limitů vyrovnávací paměti.
Zabezpečené zpracování paměti je v Rustu zajištěno v době sestavování kontrolou odkazů, sledováním vlastnictví objektu a životem (rozsahem) objektu a také hodnocením správnosti přístupu k paměti za běhu.
Rez také poskytuje prostředky na ochranu proti přetečení integer, vyžaduje před použitím povinnou inicializaci hodnot proměnných, lépe zpracovává chyby ve standardní knihovně, standardně přijímá koncept odkazů a neměnných proměnných a nabízí silné statické zápisy, které minimalizují logické chyby.
V systému Android je zabezpečená správa paměti poskytována v jazycích Kotlin a Java již podporováno, ale není vhodné pro vývoj systémových komponent z důvodu vysoké režie.
Rust umožňuje dosáhnout výkonu blízkého jazykům C a C ++, což umožňuje jeho použití k vývoji nízkoúrovňových částí platformy a komponent pro propojení s hardwarem.
Aby byla zajištěna bezpečnost kódu C a C ++, používá Android izolaci izolovaného prostoru, statickou analýzu a fuzzing testy. Schopnosti izolace izolovaného prostoru jsou omezené a dosáhly hranice svých schopností (další fragmentace procesů není z hlediska spotřeby zdrojů praktická).
Mezi omezeními používání karantény zmiňují vysokou režii a vyšší spotřebu paměti způsobenou nutností generovat nové procesy, jakož i další latenci spojenou s používáním IPC.
Sandbox zároveň neodstraňuje chyby zabezpečení v kódu, ale pouze snižuje rizika a komplikuje útok, protože vykořisťování vyžaduje identifikaci ne jedné, ale několika chyb zabezpečení.
Metody testování kódu jsou omezené, protože k detekci chyb je třeba vytvořit podmínky pro projevení problému. Není možné pokrýt všechny možné možnosti, takže mnoho chyb zůstává bez povšimnutí.
U systémových procesů v systému Android Google dodržuje „pravidlo dvou“Podle který žádný přidaný kód nesmí splňovat více než dvě ze tří podmínek- Pracujte s neověřenými vstupními daty, používejte nezabezpečený programovací jazyk (C / C ++) a spusťte bez izolace tvrdé karantény (se zvýšenými oprávněními).
Z tohoto pravidla vyplývá, že kód pro zpracování externích dat musí být snížen na nejméně privilegovaný (izolovaný) nebo zapsán v zabezpečeném programovacím jazyce.
Google nemá za cíl přepsat kód C / C ++ existující v Rustu, ale plánuje použít tento jazyk k vývoji nového kódu.
Má smysl použít Rust pro nový kód, protože statisticky většina chyb se objeví v novém nebo nedávno upraveném kódu. Zejména přibližně 50% chyb paměti zjištěných v systému Android je detekováno v kódu napsaném před méně než rokem.
zdroj: https://security.googleblog.com
Je ironií, že když váš největší konkurent přijme něco, co jste pomohli vyvinout pro své vlastní účely ... Rust je na vzestupu.