Rust уключаны ў лік асноўных моў для распрацоўкі платформы Android

Кампанія Google абвясціла аб уключэнні мовы праграмавання Rust у лік моў, дапушчальных для распрацоўкі платформы Android. Кампілятар мовы Rust быў уключаны ў дрэва зыходных тэкстаў Android яшчэ ў 2019 годзе, але падтрымка дадзенай мовы заставалася эксперыментальнай. Аднымі з першых кампанентаў на Rust, якія плануецца пастаўляць у Android, з'яўляюцца новыя рэалізацыі механізму міжпрацэснага ўзаемадзеяння Binder і Bluetooth-стэка.

Укараненне Rust праведзена ў рамках праекта па ўзмацненню абароненасці, прасоўванні прыёмаў бяспечнага праграмавання і павышэнню эфектыўнасці выяўлення праблем пры працы з памяццю ў Android. Адзначаецца, што каля 70% з усіх небяспечных уразлівасцяў, выяўленых у Android, выкліканыя памылкамі пры працы з памяццю. Ужыванне мовы Rust, якая сфакусаваная на бяспечнай працы з памяццю і забяспечвае аўтаматычнае кіраванне памяццю, дазволіць зменшыць рызыку з'яўлення ўразлівасцяў, выкліканых памылкамі пры працы з памяццю, такімі як зварот да вобласці памяці пасля яе вызвалення і вынахад за межы буфера.

Бяспечная праца з памяццю забяспечваецца ў Rust падчас кампіляцыі праз праверку спасылак, адсочванне валодання аб'ектамі і ўлік часу жыцця аб'ектаў (вобласці бачнасці), а таксама праз адзнаку карэктнасці доступу да памяці падчас выканання кода. Rust таксама дае сродкі для абароны ад цэлалікіх перапаўненняў, патрабуе абавязковай ініцыялізацыі значэнняў зменных перад выкарыстаннем, лепш апрацоўвае памылкі ў стандартнай бібліятэцы, ужывае канцэпцыю нязменнасці (immutable) спасылак і зменных па змаўчанні, прапануе моцную статычную тыпізацыю для мінімізацыі лагічных памылак.

У Android бяспечная праца з памяццю забяспечваецца ва ўжо падтрымоўваных мовах Kotlin і Java, але яны не падыходзяць для распрацоўкі сістэмных кампанентаў з-за вялікіх накладных выдаткаў. Rust дае магчымасць дамагчыся прадукцыйнасці блізкай да моў C і З++, што дазваляе выкарыстоўваць яго для распрацоўкі нізкаўзроўневых частак платформы і кампанентаў для ўзаемадзеяння з абсталяваннем.

Для забеспячэння бяспекі кода на C і C++ у Android ужываецца sandbox-ізаляцыя, статычны аналіз і fuzzing-тэставанне. Магчымасці sandbox-ізаляцыі абмежаваныя і дасягнулі мяжы сваіх магчымасцяў (далейшае драбненне на працэсы немэтазгодна з пункта гледжання спажывання рэсурсаў). З абмежаванняў ужывання sandbox згадваюцца вялікія накладныя выдаткі і рост спажывання памяці, выкліканыя неабходнасцю спараджэння новых працэсаў, а таксама ўзнікненне дадатковых затрымак, злучаных з выкарыстаннем IPC.

Пры гэтым sandbox не ўхіляе ўразлівасці ў кодзе, а толькі змяншае рызыкі і ўскладняе правядзенне нападу, бо для эксплуатацыі патрабуецца выяўленне не адной, а некалькіх уразлівасцяў. Метады на аснове тэсціравання кода абмежаваны тым, што для выяўлення памылак неабходна стварэнне ўмоў для праявы праблемы. Ахапіць усе магчымыя варыянты не ўяўляецца магчымым, таму многія памылкі застаюцца незаўважанымі.

Для сістэмных працэсаў у Android кампанія Google прытрымліваецца «правілы двух», у адпаведнасці з якім любы код, які дадаецца, павінен падпадаць не больш, чым пад дзве ўмовы з трох: праца з неправеранымі ўваходнымі дадзенымі, выкарыстанне небяспечнай мовы праграмавання (C/C++) і выкананне без цвёрдай sandbox-ізаляцыі (наяўнасць павышаных прывілеяў). З гэтага правіла вынікае, што код для апрацоўкі вонкавых дадзеных павінен альбо быць зрэзаны да мінімальных прывілеяў (ізаляваны), альбо быць напісаны на бяспечнай мове праграмавання.

Google не ставіць перад сабой мэту перапісаць на Rust ужо наяўны код C/C++, а плануе выкарыстоўваць дадзеную мову для распрацоўкі новага кода. Выкарыстоўваць Rust для новага кода мае сэнс, бо па статыстыцы большасць памылак усплывае ў новым ці нядаўна змененым кодзе. У прыватнасці, каля 50% выяўленых памылак працы з памяццю ў Android выяўляюцца ў кодзе, напісаным менш за год таму.

Rust уключаны ў лік асноўных моў для распрацоўкі платформы Android


Крыніца: opennet.ru

Дадаць каментар