Rust включений до основних мов для розробки платформи Android

Компанія Google оголосила про включення мови програмування Rust до мов, допустимих для розробки платформи Android. Компілятор мови Rust був включений до дерева вихідних текстів Android ще в 2019 році, але підтримка цієї мови залишалася експериментальною. Одними з перших компонентів на Rust, які планується постачати в Android, є нові реалізації механізму міжпроцесної взаємодії Binder та Bluetooth-стеку.

Впровадження Rust зроблено в рамках проекту з посилення захищеності, просування прийомів безпечного програмування та підвищення ефективності виявлення проблем під час роботи з пам'яттю в Android. Зазначається, що близько 70% усіх небезпечних уразливостей, виявлених в Android, викликані помилками при роботі з пам'яттю. Застосування мови Rust, яка сфокусована на безпечній роботі з пам'яттю та забезпечує автоматичне керування пам'яттю, дозволить знизити ризик появи вразливостей, спричинених помилками при роботі з пам'яттю, такими як звернення до області пам'яті після її звільнення та вихід за межі буфера.

Безпечна робота з пам'яттю забезпечується в Rust під час компіляції через перевірку посилань, відстеження володіння об'єктами та облік часу життя об'єктів (області видимості), а також оцінку коректності доступу до пам'яті під час виконання коду. Rust також надає засоби для захисту від цілих переповнень, вимагає обов'язкової ініціалізації значень змінних перед використанням, краще обробляє помилки в стандартній бібліотеці, застосовує концепцію незмінності посилань і змінних за умовчанням, пропонує сильну статичну типізацію для мінімізації логічних помилок.

В 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

Додати коментар або відгук