- WhatsApp, 3 milyardan fazla kullanıcısıyla, kötü amaçlı yazılım tehditlerine karşı savunmayı güçlendirmek için Rust tabanlı bir güvenlik katmanı devreye aldı
- Medya tutarlılığı kütüphanesi Rust ile yeniden yazıldı ve milyarlarca cihaz ile tarayıcıya dağıtılarak küresel ölçekte gerçek kullanım doğrulaması tamamlandı
- Mevcut 160 bin satırlık C++ kodu 90 bin satır Rust ile değiştirilirken hem performans hem de bellek verimliliği iyileştirildi
- 2015’teki Stagefright açığı sonrasında medya dosyası işleme sürecinin güvenliğini artırmak için Rust gibi bellek güvenli dillerin benimsenmesi yönünde çalışılıyordu
- Bu değişim, WhatsApp·Messenger·Instagram genelindeki güvenlik stratejisinde bellek güvenli dillere daha fazla ağırlık verilmesi açısından bir dönüm noktası niteliğinde
WhatsApp’ın medya işleme stratejisi
- WhatsApp, 3 milyardan fazla kişinin kullandığı uçtan uca şifreli mesajlaşma hizmeti olarak, süregelen güvenlik tehditlerine karşı stratejisini sürekli geliştirdi
- Kullanıcılar görsel, video ve benzeri medya paylaştığında bunların kötü amaçlı yazılım içermesi mümkün
- Bazı dosyalar işletim sistemi veya uygulamadaki yaması yapılmamış açıkları istismar edebilir
- Bunu önlemek için medya paylaşım özelliğine Rust dili entegre edilerek bellek güvenliği sağlandı
- Bunun, küresel ölçekte en büyük Rust tabanlı kütüphane dağıtım örneklerinden biri olduğu belirtiliyor
2015 Android Stagefright açığı ve alınan önlemler
- 2015’te Android’deki Stagefright açığı, işletim sistemi düzeyindeki medya işleme kütüphanesinde bulunuyordu ve uygulama tarafında düzeltilemezdi
- WhatsApp, kendi C++ kütüphanesi “wamedia” üzerinde değişiklik yaparak MP4 standardına uymayan dosyaları tespit edecek şekilde geliştirdi
- Böylece işletim sistemi güncellemesi olmadan da kullanıcılar korunabildi
- Ancak wamedia’nın güvenilmeyen girdileri otomatik olarak işlemesi, bellek güvenli bir dile geçiş ihtiyacını ortaya koydu
Rust’a geçiş: büyük ölçekli yeniden yazım ve sonuçları
- WhatsApp, mevcut C++ sürümüyle paralel olarak wamedia’nın Rust sürümünü geliştirdi
- Differential fuzzing, entegrasyon testleri ve birim testleriyle iki uygulama arasındaki uyumluluk doğrulandı
- Başlangıçta Rust standart kütüphanesinden kaynaklanan ikili dosya boyutu artışı ve build sistemi uyumluluğu sorunları yaşansa da uzun vadeli bir destek yapısı kuruldu
- Sonuç olarak 160 bin satır C++ → 90 bin satır Rust dönüşümü gerçekleşti; hem performans hem de bellek kullanım verimliliği iyileşti
- Android, iOS, Mac, Web ve giyilebilir cihazlar dahil tüm platformlarda Rust sürümünün tam dağıtımı tamamlandı
- Sonrasında “Kaleidoscope” sistemi devreye alınarak PDF, yürütülebilir dosya gibi riskli dosya türleri tespit edilmeye, ayrıca uzantı sahteciliği ve MIME spoofing belirlenmeye başlandı
WhatsApp’ın güvenlik yaklaşımı
- WhatsApp; uçtan uca şifreleme, şifrelenmiş yedekler, anahtar şeffaflığı ve arama koruma özellikleri dahil olmak üzere çeşitli güvenlik katmanları kullanıyor
- Riskleri belirlemek için CVE açıklamaları, iç ve dış güvenlik denetimleri, fuzzing ve statik analiz, tedarik zinciri yönetimi ve saldırı yüzeyi analizi uygulanıyor
- Bug Bounty programı genişletilerek araştırmacıların WhatsApp ağ protokolünü inceleyebilmesi için Research Proxy sunuldu
- Birçok önemli açığın C/C++ bellek güvenliği sorunlarından kaynaklandığı görülünce üç strateji birlikte uygulanmaya başlandı
- Gereksiz saldırı yüzeyini en aza indirmek
- Kalan C/C++ kodunun güvenlik güvencesini artırmak
- Yeni kod için varsayılan dili bellek güvenli bir dil haline getirmek
Rust benimsemesinin hızlanması ve gelecek yönelim
- Rust, WhatsApp’ın yüksek performanslı ve çapraz platform güvenlik kütüphaneleri geliştirmesini mümkün kılıyor
- Bu değişim, kullanıcının fark etmediği ek bir güvenlik katmanı sağlıyor ve defense-in-depth stratejisinin bir parçası olarak konumlanıyor
- WhatsApp ve Meta güvenlik ekipleri, Rust’ın yüksek etki sağlayacağı alanları genişletiyor ve gelecekte Rust benimsemesini hızlandırmayı planlıyor
1 yorum
Hacker News yorumları
WhatsApp, günde 3 milyar kişinin kullandığı bir mesajlaşma uygulaması
ABD'de pek kullanılmasa da, dünya genelinde temel bir iletişim altyapısı haline gelmiş durumda
Küresel pazara yönelik bir ürün yapmak istiyorsanız, bu kullanıcıların düşünce yapısını ve alışkanlıklarını anlamanız gerekir
Böyle bağımsız insanlardan hâlâ birkaç düzine var
Lütfen WhatsApp'ı daha da kaçınılmaz hale getirecek işlere katkıda bulunmayın
Çoğu insan e-postasını neredeyse hiç kontrol etmiyor
Bir geliştirici topluluğu yürütüyorum ve sık sık grup üye sınırına (1024 kişi) takılıyoruz
Discord ya da Slack'e taşımaya çalışsak da sonunda tekrar WhatsApp'a dönüyoruz
Çünkü operatör veri paketleri sayesinde WhatsApp fiilen ücretsiz
İşletme mesajı spam'iyle ilgili haberler TechCrunch'ta defalarca çıktı ama pratikte neredeyse hiçbir şey değişmedi
Topluluk özelliklerinin UX'i de pek iyi değil
Sonuçta sorunun Facebook ekosistemine bağımlılığın derinleşmesi olduğunu düşünüyorum
Ben 10 yıldır WhatsApp kullanmıyorum ve arkadaşlarımın ya da ailemin çoğu da Signal'e geçti
Avrupa'da hâlâ Viber kullanılan bölgeler var
Rust ile yazılmış kütüphaneler arasında en büyük dağıtım denmiş ama gerçekte Fontations daha büyük olabilir
Chromium'a dahil ve bağımlılıkları da hesaba katılınca kurulu tabanı daha geniş olabilir
Alıntıya bakılırsa WhatsApp, libsignal'ı doğrudan kullanmıyor gibi görünüyor
Örneğin: image-png, CrabbyAvif, qr_code, icu4x
Kodun 160 bin satırdan 90 bin satıra düşmesi güzel ama paralel rollout stratejisi daha da ilginç
Rust ve C++ sürümlerini aynı anda çalıştırıp differential fuzzing ile eşdeğerliği doğrulamaları son derece gerçekçi bir yaklaşım
Mobil istemcilerde binary boyutu önemliyken, build tooling'e yatırım yapmış olmaları etkileyici
Bu sadece nightly build'de mümkün olan bir optimizasyon da olabilir
Böyle bir yeniden yazımda en zor kısım, Rust uygulamasının kendisinden çok mevcut parser'ın hatalarıyla uyumluluğu korumak
Gerçek medya dosyaları çoğu zaman biçim olarak hatalı oluyor; fazla katı parse ederseniz kullanıcı verisi bozulur
differential fuzzing fiilen tek pratik yaklaşım
WhatsApp'ın Rust ile en büyük dağıtımı yaptığı söyleniyorsa, muhtemelen Windows 11'den daha fazla cihazda çalıştığı içindir
Yine de WhatsApp'ın libsignal'ı doğrudan kullanıp kullanmadığı belirsiz
Android'in kendisinde zaten epey Rust tabanlı kod var ve gömülü cihazlarda da yaygın biçimde kullanılıyor
Windows ise hâlâ büyük ölçüde C/C++ merkezli
Rust standart kütüphanesinin eklenmesiyle binary boyutunda artış olduğu söyleniyor ama bunun nasıl çözüldüğü açıkça belirtilmiyor
İlgili commit'ler: commit1, commit2
Asıl sorun boyutun kendisinden çok tekrarlanan Rust bağımlılıkları
C++ ve Rust'ın karıştığı build'lerde her biri kendi libstd'sini dahil ediyor, bu yüzden Bazel gibi birleşik bir build sistemi gerekiyor
Başlangıçta yaklaşık 200KiB ek yükü kabul ettiler ama Buck2'ye geçişle hem boyutu hem de build sürelerini azalttılar
Bu, en güncel clang optimizasyonları ve LTO iyileştirmeleri sayesinde oldu
Signal'in de benzer bir şey yapıp yapmadığını merak ediyorum
libsignal Rust ile uygulanmış durumda ama geri kalan kısımlar hakkında pek bilgim yok
“3 milyar kişiye varsayılan olarak uçtan uca şifreleme sağlıyor” ifadesi vardı ama gerçekte mesajları okuyabildiğine dair haberler de çıkmıştı
Skype da varsayılan olarak şifreliydi ama sunucu ayarına göre bu devre dışı bırakılabiliyordu
Asıl mesele, Meta'nın verileri gözetlemediğine güvenip güvenemeyeceğiniz
Meta'nın phishing ya da ön ödemeli kart dolandırıcılığını engellemezken başka işlere bu kadar heves göstermesi ironik
Rust kullanımının çok sayıda hatayı azaltmış olması etkileyici
C++'ta sayısız tanımsız davranış (UB) var ama Rust bunları yapısal olarak engelliyor
Güçlü tip sistemi sayesinde güvenilirlik ciddi ölçüde artıyor