Компания Google внедрила Rust-код в прошивку радиомодуля (baseband) смартфонов Pixel 10. Специалисты заменили реализацию протокола DNS на библиотеку hickory-proto, которая известна по разработке DNS-сервера Hickory, применяемого, в частности, в инфраструктуре Let’s Encrypt.
Безопасность baseband-модема
Внедрение hickory-proto стало частью стратегии по усилению защиты baseband-модема. В современных сотовых сетях этот компонент активно использует DNS, например, при обработке переадресации вызовов. Поскольку DNS — сложный протокол, требующий разбора входящих данных, которым нельзя доверять, он становится потенциальной точкой входа для злоумышленников.
Google уже сталкивалась с серьезными проблемами в этой области. Так, в 2024 году была обнаружена уязвимость CVE-2024–27227, которая позволяла вызвать переполнение буфера при обработке специально подготовленных DNS-ответов.
Преимущества Rust и риски
Использование парсера на языке Rust должно значительно сократить поверхность атаки. Это минимизирует риски эксплуатации уязвимостей, связанных с ошибками при низкоуровневой работе с памятью. Компания рассматривает этот кейс как первый шаг к повсеместному внедрению языков, обеспечивающих безопасную работу с памятью, в критические компоненты системы.
Технические вызовы и оптимизация
Основной проблемой стало увеличение объема кода. Библиотека Hickory-proto изначально не проектировалась для встраиваемых систем:
- Общий размер интегрированных компонентов составил 371 КБ.
- Из них 350 КБ приходится на саму Hickory-proto и ее зависимости.
- 17 КБ заняли вспомогательные функции, извлеченные из стандартной библиотеки.
- 4 КБ составила прослойка для обработки ответов от DNS-серверов.
Для модемов Pixel текущее увеличение на 300+ КБ допустимо, так как оно укладывается в аппаратные ограничения. Однако для более ограниченных встраиваемых систем Google планирует оптимизировать библиотеку. В будущем разработчики Hickory-proto хотят внедрить флаги компиляции, позволяющие оставлять только необходимый функционал, что поможет существенно уменьшить размер итоговой прошивки.






