Google впровадила новий DNS-парсер, написаний на Rust, у прошивку модема Pixel 10. Це рішення спрямоване на зменшення ризиків, пов’язаних із помилками в пам’яті, і посилення захисту від атак на рівні базового модема.
Google продовжує зміцнювати безпеку своїх пристроїв Pixel і цього разу зробила крок глибше на рівень прошивки. Компанія інтегрувала DNS-парсер, написаний на Rust, безпосередньо в модем. Мета проста – зменшити ризики, пов’язані з помилками пам’яті, і поступово перевести критичні компоненти на більш безпечні технології.
Інженер команди Pixel Цзячен Лу пояснив, що новий парсер дозволяє прибрати цілий клас вразливостей, які традиційно виникають у небезпечних для пам’яті мовах.
«Новий парсер DNS на базі Rust значно знижує ризики безпеки, усуваючи цілий клас вразливостей у ризикованій області, а також закладаючи основу для ширшого впровадження коду, безпечного для пам’яті, в інших областях», – зазначив він.
Першими цю зміну отримають смартфони Pixel 10. Це перший пристрій лінійки, де Rust використовується безпосередньо в модемі. Рішення не з’явилося з нуля. Воно продовжує серію кроків, які Google робить уже кілька років, щоб захистити базовий рівень зв’язку. Ще наприкінці 2023 року компанія активно впроваджувала санітайзери Clang, зокрема:
Overflow Sanitizer (IntSan)
BoundsSanitizer (BoundSan)
Вони допомагають ловити помилки під час виконання, включаючи небезпечну поведінку з пам’яттю.
У 2024 році Google також детально описала додаткові механізми захисту модема. Вони спрямовані на боротьбу з атаками через 2G і базову смугу, де часто використовуються класичні вразливості на кшталт переповнення буфера для отримання віддаленого виконання коду.
Паралельно компанія активно просуває Rust у всій екосистемі Android. За внутрішніми даними Google, частка вразливостей, пов’язаних із пам’яттю, уже знизилася до менше ніж 20% від загальної кількості знайдених проблем.
Для нової реалізації обрали саме DNS. Причина в тому, що цей протокол лежить в основі сучасного мобільного зв’язку. Навіть базові функції, такі як переадресація викликів, сьогодні залежать від DNS. І якщо він реалізований небезпечно, це відкриває шлях до атак, включаючи доступ за межі пам’яті, як це вже було у випадку CVE-2024-27227.
У Google прямо зазначають, що перехід на Rust дозволяє скоротити поверхню атаки і зробити обробку DNS значно безпечнішою. Для реалізації використали бібліотеку hickory-proto. Це повноцінний DNS-клієнт і сервер на Rust, який довелося адаптувати під вбудовані системи та середовище «голого заліза». Окремо компанія створила власний інструмент cargo-gnaw. Він потрібен для керування залежностями, яких у цьому проєкті понад 30.
При цьому інженери визнають, що рішення поки не ідеальне. Rust-бібліотека DNS не оптимізована для пристроїв із обмеженою пам’яттю, тому одним із наступних кроків стане зменшення розміру коду через модульність і вибіркову компіляцію.
Технічно інтеграція виглядає так: Google зберегла C-інтерфейс для розбору DNS-відповідей, але реалізувала його на Rust. Функція повертає код у вигляді числа, а отримані дані далі передаються в існуючі структури пам’яті через C-функції. Це дозволило поєднати нову безпечну логіку з уже наявною інфраструктурою без повного переписування системи.
У підсумку Google фактично змінює підхід до безпеки. Замість постійного виправлення багів компанія намагається прибрати саму причину їх появи. І якщо цей підхід приживеться, то в найближчі роки можна очікувати ще більше критичних компонентів Android, переписаних на Rust.