Современные операционные системы смартфонов имеют множество механизмов для повышения безопасности, но ни один из них не помогает, когда злоумышленники атакуют модем. Команда Google Project Zero продемонстрировала возможность удаленного исполнения кода на модемах телефонов Pixel через интернет, что побудило Google просмотреть подходы к защите этой жизненно важной низкоуровневой системы. Решением стало не полное переписывание программного обеспечения модема, а интеграция более безопасного компонента на основе Rust в модем Pixel 10.
![]()
Соты модемы часто являются настоящим «черным ящиком». Базовая полоса пропускания телефона – это собственная операционная система, работающая на устаревшем коде C и C++. Это делает ее все более привлекательной поверхностью для атак. Основная проблема заключается в том, что управление памятью в таких системах чрезвычайно сложно, и это часто приводит к появлению в прошивках устройств кода с проблемами безопасности памяти. Это позволяет злоумышленникам использовать серьезные уязвимости, такие как переполнение буфера и утечки памяти, для компрометации устройств.
Почему же до сих пор используются такие устаревшие технологии? Отчасти это обусловлено инерцией встроенных систем. Компании разрабатывают прошивки модемов на основе спецификаций 3GPP уже десятилетиями, поэтому скопился значительный технический долг. К тому же модемы должны работать в режиме реального времени для эффективной передачи и получения данных, а код C/C++ быстрый.
Демонстрационная атака Google на модем Pixel на базе Exynos – далеко не единственная. Исследователи Project Zero обнаружили более двух десятков уязвимостей модемов Exynos за последние годы, 18 из которых были классифицированы как «серьезные». Конечно, после обнаружения проблемы исправлялись, но сложность кода модема практически гарантирует, что внутри скрываются многочисленные уязвимости, готовые к эксплуатации злоумышленниками.
Сделать модемы более безопасными означает устранить эти пробелы в управлении памятью, и Rust является отличным кандидатом для этой задачи. Конечно, Rust – не первый язык с безопасным управлением памятью. Python, C# и другие имеют более безопасные системы управления памятью, но они полагаются на сборщик мусора. Собиратель мусора может сканировать активную память во время работы приложений, чтобы находить и освобождать неиспользованную память. Это безопаснее, но медленнее, а для прошивки модема, работающей в режиме реального времени, это неприемлемо.


