С целью уменьшения количества ошибок, связанных с безопасностью памяти, Google объявил, что Android будет поддерживать Rust в низкоуровневом системном коде ОС. Об этом 6 апреля сообщили члены команды разработчиков Android в блоге Google Security.
Безопасность памяти
Команда разработчиков Android заявила, что будет использовать Rust для разработки низкоуровневого кода OC.
Приложения на Android могут быть написаны с использованием Java и Kotlin, но эти языки не обладают «контролем и предсказуемостью» языков более низкого уровня, таких как C, C++ и Rust.
Rust обеспечит безопасность памяти при производительности равной C и C ++. При этом последние не предоставляют таких же гарантий безопасности и требуют надежной изоляции.
Правило двух
Все процессы Android изолированы, и чтобы решить, требует ли функциональность дополнительной изоляции и лишения прав, инженеры Google следуют «правилу двух».
Правило двух гласит: при наличии трех вариантов, разработчики могут выбрать только два из них:
- ненадежные материалы;
- небезопасный язык реализации;
- высокая привилегия.
Для Android это означает, что если код написан на C или C++ и анализирует ненадежный ввод, он должен находиться в жестко ограниченной и непривилегированной песочнице.
Однако песочница не устраняет уязвимости в коде, и ее эффективность снижается из-за высокой плотности ошибок. Это позволяет злоумышленникам объединять несколько уязвимостей в цепочку.
Безопасные для памяти языки, такие как Rust, помогают преодолеть эти ограничения. Они снижают количество ошибок в коде и уменьшают потребность в песочнице.
Переписывать старое не будут
По данным Google, половина ошибок памяти связана с кодом младше одного года. Следовательно Rust можно использовать в новом коде и не переписывать код старше одного года.
«Даже если бы мы привлекли к переписке кода всех разработчиков из команды Android, изменить десятки миллионов строк кода просто невозможно», – заявила команда. «То, что в старом коде редко встречаются ошибки памяти, может стать для кого-то неожиданным фактом, но мы обнаружили, что старый код не нуждается в срочном улучшении».
Ожидаемые улучшения
По словам Google, одно из преимуществ Rust – наличие дополнительных ограничений и проверок, таких как принудительная инициализация переменных. Это может предотвратить до 5% уязвимостей безопасности в Android.
Компания ожидает, что Rust также модернизирует ряд языковых аспектов, и это приведет к повышению корректности кода:
- Улучшение безопасность памяти за счет комбинации проверок компилятора и времени выполнения.
- Параллелизм данных предотвратит скачки данных.
- Выразительная система типов Rust поможет избежать ошибок логического программирования.
- Ссылки и переменные по умолчанию неизменяемы – это позволит разработчикам следовать принципу безопасности с наименьшими привилегиями. Компилятор Rust поможет избежать случайных аннотаций изменяемости.
- Компилятор потребует от пользователей проверку ошибок даже для функций, которые не возвращают нужное значение.
- Инициализация потребует, чтобы все переменные были инициализированы перед использованием.
- Безопасная обработка целых чисел – очистка от переполнения включена для отладочных сборок Rust по умолчанию. Если программист намерен вычислять переполнение, то он указывает функцию wrapping_add, если не намерен – saturating_add.
Разработчики Google работали над добавлением поддержки Rust в Android в течение последних 18 месяцев и обещают продемонстрировать некоторые из проектов в ближайшее время.
Напомним, что в феврале этого года Google заявила, что поощряет разработчиков переходить на безопасные языки программирования, чтобы предотвратить ошибки памяти, которые составляют 70% уязвимостей в безопасности Android.