Обновлённые данные Android за 2025 год показывают, что уязвимости, связанные с безопасностью памяти, впервые сократились до менее чем 20% от общего числа уязвимостей — одновременно с расширением использования Rust в новых и активно развиваемых частях платформы. Согласно анализу, опубликованному в блоге Google Security Blog 12 ноября 2025 года, переход с C и C++ на Rust не только снижает риски безопасности, но и ускоряет проверку кода и повышает стабильность изменений.
Данные основаны на изменениях в коде Android — как непосредственно разрабатываемом Google, так и в открытом исходном коде сторонних организаций, — и охватывают языки C, C++, Java, Kotlin и Rust. Поскольку анализ был опубликован за несколько месяцев до конца 2025 года, Google пояснила, что стандартное 90-дневное окно исправления делает результаты очень близкими к окончательным показателям, при этом при необходимости исправления могут выполняться быстрее.
Повышенная безопасность и более быстрая поставка
Google внедрила Rust в Android в качестве прямой альтернативы C и C++ для низкоуровневого программирования, сохранив сопоставимый уровень контроля и предсказуемости, но значительно снизив риски, связанные с безопасностью памяти. Анализ указывает на резкий рост объёма нового кода на Rust при одновременном более медленном и устойчивом снижении объёма нового кода на C++, пока объём недавно добавленного кода на Rust не приблизился к объёму кода на C++. Это позволило надёжнее сравнивать два пути разработки.
Google использовала фреймворк DORA для измерения производительности и стабильности. Чтобы уменьшить сложности сравнения языков, она сосредоточилась на изменениях сопоставимого размера и на схожих группах разработчиков, работающих над платформой Android, а также отслеживала динамику во времени по мере роста использования Rust.
Изменения на Rust сопоставимого размера требуют примерно на 20% меньше проверок, чем аналогичные изменения на C++. В настоящее время на проверку кода также тратится примерно на 25% меньше времени. Google предполагает, но не утверждает наверняка, что заметное улучшение между 2023 и 2024 годами связано с ростом опыта команды Android в работе с Rust.
Что касается стабильности, изменения на Rust среднего и большого размера демонстрируют примерно в четыре раза более низкий показатель отката, чем изменения на C++. Google подчёркивает, что сокращение числа откатов отражает не только качество изменений, но и повышает производительность, поскольку откат может привести к повторной работе, дополнительным проверкам, повторной сборке, подготовке отчётов по итогам инцидентов и нарушению работы других команд.
Расширение Rust за пределы системных служб и библиотек
Google заявляет, что поддержка Rust стала зрелой для создания системных служб и библиотек Android, поэтому компания работает над расширением его использования на другие уровни экосистемы:
- Ядро: ядро Linux 6.12 для Android стало первым ядром Google с включённой поддержкой Rust, а также содержит первый производственный драйвер на Rust. Google продолжает сотрудничество с Arm и Collabora над драйвером графического процессора, работающим в режиме ядра.
- Прошивки: Google считает, что повышенные привилегии, ограничения производительности и ограниченность некоторых защитных мер делают прошивки высокорисковыми и сложными для защиты. Компания говорит, что использует Rust в прошивках уже несколько лет и предоставила сообществу учебные материалы и код, уделяя особое внимание сотрудничеству с Arm в рамках Rusted Firmware-A.
- Приложения Google: протокол Nearby Presence, используемый для безопасного и конфиденциального обнаружения локальных устройств через Bluetooth, реализован на Rust внутри Google Play Services. Протокол безопасных сообщений MLS через RCS также будет включён в приложение Google Messages в одном из будущих выпусков.
- Chromium: парсеры PNG и JSON, а также обработчики веб-шрифтов были заменены реализациями с безопасной обработкой памяти, написанными на Rust, что упрощает для инженеров Chromium работу с данными из интернета при соблюдении Rule of 2.
Уязвимость, которая едва не дошла до пользователей
Несмотря на акцент на преимуществах Rust, Google рассматривает случай, близкий к регистрации первой уязвимости безопасности памяти на Rust в Android. Линейное переполнение буфера в CrabbyAVIF было обнаружено до выхода в публичный выпуск, а исправлению присвоили идентификатор CVE-2025-48530, чтобы обеспечить ему высокий приоритет и отслеживать его попадание в каналы выпуска.
Анализ показал, что аллокатор Scudo Hardened Allocator сделал эксплуатацию уязвимости гарантированно невозможной благодаря защитным страницам вокруг вторичных выделений. Scudo также превратил переполнение из тихого повреждения памяти в явное аварийное завершение, что помогло обнаружить проблему. Вместе с тем инцидент выявил недостаток системы отчётов о сбоях: она недостаточно чётко указывала, что сбой вызван переполнением, из-за чего сортировка и реагирование замедлились. Google сообщает, что этот недостаток был устранён и теперь система подаёт явный сигнал при переполнениях в защитные страницы Scudo.
Почему Rust остаётся важным несмотря на наличие unsafe?
Google не считает запрет небезопасного кода — будь то в C, C++ или Rust — практичным решением для разработки операционных систем из-за необходимости работать с программными интерфейсами и оборудованием. Поэтому компания разрабатывает расширенный модуль о небезопасном коде в рамках обучения Comprehensive Rust, чтобы научить разработчиков оценивать безопасность такого кода и неопределённое поведение, использовать комментарии о безопасности и заключать небезопасные части в безопасные абстракции.
Основываясь примерно на пяти миллионах строк Rust на платформе Android и одном потенциальном случае, устранённом до выпуска, Google оценивает плотность уязвимостей, связанных с безопасностью памяти, в Rust примерно в 0,2 уязвимости на миллион строк. Компания сравнивает это с исторической плотностью около 1 000 уязвимостей на миллион строк в C и C++, что, по её оценке, означает снижение более чем в 1000 раз. Также Google отмечает, что около 4% кода написано внутри блоков unsafe{}, однако утверждает, что предположение о подверженности каждой небезопасной строки тем же рискам, что существуют в C или C++, завышает оценку опасности, поскольку большинство проверок Rust продолжают действовать, небезопасный код можно инкапсулировать, а сам он подвергается дополнительному аудиту.
Google приходит к выводу, что внедрение Rust меняет традиционное уравнение, связывавшее повышение безопасности с дополнительными затратами производительности, процедур или скорости выпуска функций. При сохранении важности C и C++, а также программных и аппаратных защитных механизмов в рамках многоуровневой защиты компания считает, что переход на Rust одновременно обеспечивает более безопасный и эффективный путь вместо того, чтобы сначала ускорять разработку, а затем устранять последствия.