Rust в ядре Android: как безопасный код идёт к миллиардам устройств

25.10.2026 · Авторская колонка

Больше десяти лет binder оставался самым лакомым куском для взломщиков Android: через этот механизм межпроцессного взаимодействия проходит буквально всё — от открытия камеры до платежа в банковском приложении. Здесь чаще всего находили use-after-free, и именно binder обычно открывал эксплойт-цепочки. Теперь правила меняются: как ожидают, версия binder на Rust постепенно вытеснит C-реализацию из ядра Android. Звучит как строчка из технической заметки, а по сути — нехарактерный для Linux шаг: работающий код ядра целенаправленно переписывают ради безопасности на уровне языка.

Дверь, через которую проходит всё — включая взломщиков

Binder — это нервная система Android. Вызов камеры, отправка сообщения, обращение к системным сервисам, разговор приложения с интерфейсом — всё это межпроцессное взаимодействие, и всё оно идёт через binder. Каждое из миллиардов устройств буквально живёт через него: ядро обрабатывает эти обращения непрерывно и для всех процессов сразу.

Плохая новость в том, что исторически binder написан на C, а C ошибок с памятью не прощает. Выход за границы буфера, повторное освобождение, use-after-free — классика жанра, которую в нём находили с завидной регулярностью. Исследователи Google Project Zero не раз публиковали разборы именно binder-уязвимостей, а на рынке эксплойтов такие баги ценились дорого: один use-after-free мог стать первым звеном цепочки, ведущей к полному контролю над устройством. Масштаб проблемы Google признаёт давно: порядка 70% серьёзных уязвимостей в Android — ошибки безопасности памяти. А binder — самая нагруженная и, значит, самая атакуемая часть ядра.

Годы ревью и главный полигон

Работа над Rust-версией binder шла в рамках проекта Rust-for-Linux, и путь занял годы. Патчи прошли многочисленные итерации ревью, а параллельно вызревала сама инфраструктура поддержки Rust в ядре — её приняли в основную ветку Linux в конце 2022 года. Binder при этом стал главным полигоном, где проверялась практическая пригодность языка.

Ожидается, что Rust-реализация достигнет функционального паритета с C-версией и со временем займёт место C-драйвера в ядре Android. Подчеркну: это задача принципиально другого сорта. Не новый драйвер с нуля, а замена многолетнего, отлаженного, работающего кода.

«Работает — не трогай» больше не работает

Долгие годы в мире ядра царил железный аргумент: работает — не трогай. Переписывание боевого кода считалось риском худшим, чем старые баги. История с binder этот аргумент пошатнула — выгода от языковых гарантий оказалась весомее консерватизма. Компилятор Rust на этапе сборки отсекает use-after-free, double free и гонки за память: целые классы уязвимостей перестают существовать, а не закрываются патчами по мере находок.

Эффект уже измеримый. Google отмечала заметное снижение доли memory-safety уязвимостей по мере роста доли Rust в новом коде Android, а в новых Rust-компонентах такие CVE практически не появлялись. Rust-версия binder задаёт шаблон миграции для остального ядра: на языке уже пишутся первые драйверы, а дискуссия в сообществе сместилась с «нужен ли Rust в ядре» на «как именно его принимать». Для миллиардов устройств это значит, что главный исторический вектор атак может закрываться не очередным патчем второго вторника месяца, а конструктивно — на уровне самого языка.

Причём тут Россия

Напрямую история с binder российские ОС не затрагивает — это андроидовская специфика. «Аврора» от Open Mobile Platform построена на базе Sailfish и живёт по собственной модели IPC, а сертифицированные серверные и настольные дистрибутивы — Astra Linux, ALT, РЕД ОС — используют стандартное ядро Linux, где binder как компонент просто отсутствует.

Но связь есть, и она в другом. Поддержка Rust уже в основной ветке ядра — значит, вместе с обновлениями она будет попадать и в отечественные дистрибутивы. С поправкой, разумеется, на сертификацию, длительные циклы поддержки и естественное отставание версий. В прикладной разработке Rust у нас давно не экзотика: язык используют для нагруженных сервисов, растут сообщество и образовательные программы. Ограничения тоже понятны — осторожность инфраструктурных команд. Однако для объектов критической информационной инфраструктуры логика Google универсальна: память-безопасные языки закрывают целый класс инцидентов ещё на этапе компиляции. И этот урок в России вполне применим — от банковских систем до промышленного софта.

Вывод

Rust-binder — эпизод скромный по объёму кода и громкий по последствиям. Впервые безопасность перестаёт быть бесконечной гонкой патчей: часть уязвимостей отныне написать просто нельзя. И сама постановка задачи — менять работающий код, когда новый исключает целые классы багов, — это сигнал для всей индустрии. Спорить о том, придёт ли Rust в ядро, уже поздно: он там. Гораздо интереснее другое — какая подсистема будет следующей.