Google Security Blog’da yayımlanan bir gönderiye göre Pixel 10 serisi, bellek açısından güvenli Rust diliyle yazılmış bir bileşeni hücresel modem yazılımına entegre eden ilk Pixel cihazları olacak. Bu adım kapsamında Rust tabanlı bir Alan Adı Sistemi (DNS) ayrıştırıcısı modem üretici yazılımına ekleniyor. Amaç, güvenilmeyen verilerle çalışan bir bölümde bellek güvenliğiyle ilişkili güvenlik açığı risklerini azaltmak.
Bu adım, Google’ın hücresel iletişim modemini istismara karşı güçlendirme çalışmalarının bir parçası. Şirket, Pixel 9’a bir dizi bellek güvenliği açığına karşı azaltıcı önlemler eklemişti; ancak modem üretici yazılımının karmaşıklığının ve geniş saldırı yüzeyinin ek proaktif önlemler gerektirdiğini düşünüyor. Google, Project Zero’nun daha önce Pixel modemlerinde internet üzerinden uzaktan kod yürütme olanağı elde ettiğini belirtti. Pixel modeminde onlarca megabayt yürütülebilir kod bulunuyor.
Google neden DNS ayrıştırıcısını seçti?
DNS yalnızca tarayıcıların web sitelerini bulmasına yardımcı olmakla sınırlı değil. Modern hücresel iletişim dijital veri ağlarına geçerken, çağrı yönlendirme gibi temel işlemler de DNS hizmetlerine dayanıyor. Bu karmaşık protokol, güvenilmeyen olabilecek verilerin ayrıştırılmasını gerektiriyor. Bu durum, bellek korumasından yoksun bir dille uygulandığında DNS’i hassas bir nokta hâline getiriyor. Gönderiye göre bu risk türü CVE-2024-27227 güvenlik açığıyla ilişkilendirildi.
Google, Rust ile DNS uygulamak için çeşitli açık kaynak paketlerini değerlendirdi ve bakım düzeyi, %75’in üzerindeki test kapsamı ve Rust topluluğundaki yaygınlığı temelinde hickory-proto kütüphanesini seçti. Kütüphane başlangıçta kaynakları sınırlı veya işletim sistemi olmadan çalışan ortamlar için gereken no_std desteğinden yoksundu. Bu nedenle Google, bu desteği kütüphaneye ve bazı bağımlılıklarına ekledi. Çalışma ayrıca rust-url projesindeki URL ayrıştırıcısı için no_std desteği sağladı.
Boyut maliyeti ve mevcut yazılımla entegrasyon
Boyut çalışması, Rust ile yazılmış ara bileşenin 4 kilobayt, core, alloc ve compiler_builtins bileşenlerinin 17 kilobayt, hickory-proto kütüphanesi ile bağımlılıklarının ise 350 kilobayt kullandığını gösterdi. Toplam boyut 371 kilobayta ulaşıyor. Google, Pixel modeminin bellek boyutunun katı kısıtlamalar getirmediğini düşünüyor. Bu nedenle şirket bu aşamada boyutu iyileştirmek yerine topluluk desteğine ve kod kalitesine öncelik verdi. Ancak artışın diğer gömülü sistemler için engel oluşturabileceğini belirtti. Gereksiz işlevleri dışlayan derleme seçenekleriyle boyut gelecekte küçültülebilir.
Rust’ı mevcut C ve C++ kod tabanına entegre etmek için ekip, temel aritmetik işlemleri, dinamik bellek tahsisini ve diller arasındaki bağlantı arayüzlerini doğrulamak amacıyla birim testleri kullandı. Ekip ayrıca Cargo üzerinden ayrı statik kütüphaneler oluşturmak yerine Rust derleme adımlarını doğrudan mevcut derleme sistemine entegre etmeyi seçti. Bunun nedeni, bu yaklaşımın başka Rust bileşenleri eklendikçe ölçeklendirilmesinin daha kolay olması ve sembol çakışması olasılığını azaltması.
Temel derleme sistemi Pigweed’e dayanıyor. Mevcut üretici yazılımındaki bellek tahsis sistemini Rust’taki alloc bileşenine bağlamak ve Rust ile C/C++ arasındaki çökme durumlarının işlenmesini birleştirmek için FFI arayüzleri kullanıldı. Bağlama sırasında, modem için optimize edilmiş memset ve memcpy uygulamalarının compiler_builtins içinden gelen uygulamalarla değiştirilmesi nedeniyle performans ve güç tüketimi sorunu ortaya çıktı. Ekip, bağlama aşamasından önce compiler_builtins dosyalarını statik kütüphaneden kaldırarak sorunu çözdü.
DNS arayüzü ve sonraki adım
Google, DNS yanıtlarını işlemek için C dilinde bir uygulama programlama arayüzü tanımladı ve bunu Rust ile uyguladı. Bileşen, yanıtı ayrıştırdıktan sonra özgün programda kullanılan veri yapılarını güncellemek için mevcut C işlevlerini çağırıyor. Karmaşık veri türleri arasındaki dönüşümler için gereken bağlama kodunu oluşturmak amacıyla bindgen aracı kullanıldı.
Google’a göre Pixel 10 serisi, modemin içine bellek açısından güvenli bir dil entegre eden ilk Pixel cihazları olması nedeniyle önemli bir dönüm noktası. Amaç yalnızca tek bir ayrıştırıcıyı değiştirmek değil. Şirket, projenin gelecekte hücresel iletişim kod tabanına bellek açısından güvenli dillerle yazılmış başka ayrıştırıcıların ve bileşenlerin eklenmesi için bir temel oluşturduğunu düşünüyor.