Google рассказала об итогах внедрения в платформу Android 13 поддержки разработки на Rust

Инженеры Google поделились первыми итогами внедрения в платформу Android поддержки разработки на языке Rust. По их словам, около 21% от добавленного нового компилируемого кода написано на Rust, а 79% — на C/C++. 

c68b47d958049dc516a016fa8ac16457.png

В репозитории Android Open Source Project, где развиваются исходные тексты платформы Android, насчитывается примерно 1.5 млн строк кода на Rust. Он связан с новыми компонентами, в том числе хранилищем криптографических ключей Keystore2, стеком для UWB-чипов (Ultra-Wideband), реализацией протокола DNS-over-HTTP3, фреймворком виртуализации AVF (Android Virtualization Framework), экспериментальными стеками для Bluetooth и Wi-Fi.

46573f964c211ad4817e27387be271e3.png

Пока язык Rust применяется в основном при разработке нового кода и для постепенного усиления безопасности наиболее незащищённых и жизненно важных программных компонентов, чтобы избежать ошибок при работе с памятью. 

У Google нет цели перевести всю платформу на Rust, поэтому старый код остаётся на C/C++, а борьба с ошибками в нём производится через fuzzing-тестирование, статический анализ и техники, подобные задействованию типа MiraclePtr (обвязка над raw-указателями, выполняющая дополнительные проверки обращения к освобождённым областям памяти), системе распределения памяти Scudo (безопасная замена malloc/free) и механизмов выявления ошибок при работе с памятью HWAsan (Hardware-assisted AddressSanitizer), GWP-ASAN и KFENCE.

Инженеры отметили снижение числа уязвимостей из-за ошибок при работе с памятью по мере внедрения нового кода. Доля вызванных проблемами с памятью уязвимостей сократилось с 76% в 2019 году до 35% в 2022 году. Если в 2019 году было выявлено 223 таких уязвимостей, то в 2020 — уже 150, в 2021 — 100, а в 2022 — 85. Все уязвимости были найдены в коде на C/C++. В этом году связанные с памятью уязвимости впервые перестали доминировать.

00c3f2f595d702b4a185a868a6ff6911.png

В общей статистике отмечается снижение числа критических проблем и ошибок, которые могут эксплуатироваться удалённо.

2e508a66a6a28c95839e0a9b6c5b6a45.png

Однако сохраняется и доля опасных проблем среди уязвимостей, вызванных ошибками при работе с памятью, хотя она постепенно уменьшается вместе с общим снижением числа таких проблем.

165abe9edc32596571349e403df6a6ba.png

Инженеры заявили о зависимости между объёмом нового кода, небезопасно работающего с памятью, и числом уязвимостей, связанных с памятью. Это говорит о том, что основное внимание при внедрении техник безопасного программирования следует уделять новому коду, а не переписыванию существующего, так как основная масса выявляемых уязвимостей приходится на новый код.

В 2021 году Google, Microsoft, Huawei, Mozilla и AWS основали некоммерческую организацию Rust Foundation, которая занимается развитием языка Rust.

© Habrahabr.ru