Google внедрила Rust в модем Pixel 10 для повышения безопасности устаревшего кода

Rust модемы безопасность Google Pixel управление памятью arstechnica.com

Сотовые модемы — это сложные черные ящики устаревшего кода, но Google делает их безопаснее с помощью Rust. — arstechnica.com

Современные операционные системы для смартфонов имеют множество механизмов для повышения безопасности, но ничто из этого не помогает, когда злоумышленники нацеливаются на модем. Команда Google Project Zero продемонстрировала возможность удаленного выполнения кода на модемах телефонов Pixel через Интернет, что побудило Google пересмотреть подходы к защите этой жизненно важной низкоуровневой системы. Решением стало не переписывание программного обеспечения модема, а внедрение более безопасного компонента на базе Rust в модем Pixel 10.

Сотовые модемы — это нечто вроде черного ящика. Базовая полоса пропускания вашего телефона — это собственная операционная система, работающая на устаревшем коде на C и C++, что делает ее все более привлекательной поверхностью для атак. Основная проблема заключается в том, что управление памятью в этих системах затруднено и часто приводит к небезопасному с точки зрения памяти прошивочному коду на серийных устройствах. Это может позволить злоумышленникам использовать серьезные уязвимости, такие как переполнение буфера и утечки памяти, для компрометации устройств.

Итак, это не очень хорошо — почему мы до сих пор используем этот материал? Частично проблема заключается в инерции встраиваемых систем. Компании десятилетиями разрабатывают прошивку модемов на основе спецификаций 3GPP, поэтому на данный момент накопился большой технический долг. Модемы также должны работать в режиме реального времени для эффективной отправки и приема данных, а код на C/C++ быстр.

Демонстрационная атака Google на модем Exynos в Pixel — далеко не единственная. Исследователи Project Zero за последние годы выявили более двух десятков уязвимостей в модемах Exynos, 18 из которых были классифицированы как «серьезные». Естественно, после обнаружения проблемы были исправлены, но сложность кода модема практически гарантирует, что внутри скрываются другие уязвимости, готовые быть использованными злоумышленником.

Переход на Rust

Сделать модемы безопаснее означает устранить эти лазейки в управлении памятью, и Rust является отличным кандидатом для этого. Конечно, Rust — не первый язык с безопасным управлением памятью. Python, C# и другие также имеют более безопасные системы управления памятью, но они полагаются на сборку мусора. Сборка мусора может сканировать активную память во время работы программ для поиска и освобождения неиспользуемой памяти. Это безопаснее, но и медленнее, что недопустимо для прошивки модема в реальном времени.

,

В Rust нет медленного сборщика мусора. Вместо этого он использует механизм, называемый заимодателем (borrow checker), который обеспечивает безопасность памяти на этапе компиляции. Этот строгий набор правил гарантирует, что вы не сможете «забыть» освободить память — код просто не скомпилируется, если правила работы с памятью нарушены. Именно это делает Rust языком с безопасным управлением памятью.

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

Для защиты модема Pixel от атак нулевого дня Google сосредоточилась на DNS-парсерe. Поскольку сотовые функции мигрировали в сети передачи данных, DNS стал основной частью работы телефонов. Google объясняет, что DNS требует разбора недоверенных данных, что делает его серьезной проблемой безопасности, но это та проблема, которую можно решить с помощью Rust.

Google выбрала библиотеку DNS с открытым исходным кодом на Rust под названием hickory-proto, которая не отличается особой оптимизацией, но имеет широкое распространение и поддержку. Модем в телефонах Pixel не является средой с ограниченной памятью, что позволило команде добавить компонент на Rust для повышения безопасности работы DNS в существующем коде. Команда удалила стандартные зависимости библиотеки, что позволило скомпилировать ее в машинный код для более быстрой работы, после чего она была встроена в существующий код модема на C/C++. В общей сложности компоненты на Rust добавили 371 КБ, что приемлемо для модема Pixel.

В рамках этой системы любая попытка вызвать уязвимость путем манипулирования памятью натыкается на «стену» Rust — она не может быть затронута вредоносными DNS-пакетами. Телефоны Pixel 10 — первые, поставляемые с этой более безопасной реализацией модема. Google надеется, что эта работа позволит другим платформам внедрить аналогичные улучшения, однако компания отмечает, что размер выбранной библиотеки Rust может стать проблемой для более простых встраиваемых систем. Возможно, в будущем это удастся решить, сделав библиотеку более модульной. Google также рассматривает эту работу как основу для постепенной интеграции большего числа компонентов с безопасным управлением памятью в сотовую базовую полосу.

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

Похожие новости: