5 puan yazan GN⁺ 2024-09-27 | 1 yorum | WhatsApp'ta paylaş

Bellek güvenliği açıklarının kökenini ortadan kaldırmak

Paradoksal sonuç

  • Bellek açısından güvenli olmayan bir dilde yazılmış kod tabanı büyürken, yeni özelliklerin bellek güvenli dillerle geliştirilmesi bellek güvenliği açıklarını büyük ölçüde azaltır
  • Bunun nedeni, açıkların zaman içinde üstel olarak azalmasıdır

Matematiksel açıklama

  • Açıkların yaşam süresi üstel dağılımı izler
  • Açıklar ağırlıklı olarak yeni kodda ortaya çıkar ve zaman geçtikçe kod daha güvenli hale gelir
  • 5 yıllık kodun açık yoğunluğu, yeni koda göre 3,4 ila 7,4 kat daha düşüktür

Android'deki gerçek örnek

  • Android ekibi 2019'dan itibaren yeni geliştirmeleri bellek güvenli dillere taşımaya başladı
  • 2024 itibarıyla bellek güvenliği açıklarının oranı %76'dan %24'e düştü
  • Bellek güvenliği açıkları azaldıkça genel güvenlik riski de azaldı

Bellek güvenliği stratejisinin evrimi

    1. nesil: tepkisel yama — açıkları bulup düzeltme yaklaşımı
    1. nesil: proaktif azaltım — açıkların istismar edilmesini zorlaştırma yaklaşımı
    1. nesil: proaktif açık keşfi — açıkları önceden bulma yaklaşımı
    1. nesil: yüksek güvenli önleme — bellek güvenli dillere geçerek açıkların en baştan oluşmasını önleme yaklaşımı

Yüksek güvenli önlemenin avantajları

  • Savunmacılar ile saldırganlar arasındaki bitmeyen yarışı keser
  • Bellek güvenli dillerle güvenliği artırır ve maliyeti düşürür
  • Kodun doğruluğunu ve geliştirici üretkenliğini artırır

Dersten uygulamaya

  • Mevcut bellek açısından güvenli olmayan kodun tamamını atmak veya yeniden yazmak gerekmez
  • Birlikte çalışabilirliği geliştirerek bellek güvenli dillere geçiş hızlandırılabilir
  • Rust ile C++ ve Rust ile Kotlin arasında birlikte çalışabilirliği iyileştiren araçlar geliştiriliyor

Önceki nesillerin rolü

  • Proaktif azaltım ve tespitin seçici kullanımı
  • Bellek güvenli koda geçildikçe azaltım ve tespit ihtiyacı da azalır

Sonuç

  • Yeni kodda bellek güvenli diller kullanmak, açıkların üstel olarak azalmasını sağlar
  • Android'de 6 yılı aşkın süredir görülen tutarlı sonuçlar, bu yaklaşımın etkili olduğunu kanıtlıyor

GN⁺ özeti

  • Bellek güvenliği açıklarını azaltmak için bellek güvenli dillere geçiş önemlidir
  • Android ekibinin örneği, bellek güvenliği açıklarında büyük bir düşüş olduğunu gösteriyor
  • Mevcut kodu tamamen yeniden yazmak yerine birlikte çalışabilirliği geliştirmek daha pratiktir
  • Rust gibi bellek güvenli diller kullanmak, güvenliği ve üretkenliği aynı anda artırabilir

1 yorum

 
GN⁺ 2024-09-27
Hacker News yorumu
  • Yeni geliştirmeleri bellek güvenli dillere taşımak anlamlı iyileştirmeler sağlayabilir
    • Her şeyi port etmeye kıyasla çok daha kolay ve ucuzdur
  • Makaledeki grafik açık ve öz
    • Verinin dikkatli seçimi ve etiketlenmesi, verilmek istenen fikri kolayca aktarabilir
  • Güvenlik açıkları üstel olarak azalıyor
    • Yeni koda odaklanmak önemli
    • Gelişigüzel RiiR projeleri kaynak israfıdır
    • Rust uzmanlarının önerdiği strateji, bellek açıklarını en aza indirmede en etkili yaklaşım
  • Android ekibi, Rust değişikliklerinin geri alma oranının C++'ın yarısından daha az olduğunu gözlemledi
  • Yeni kod ile bellek açıkları arasında bir korelasyon var
    • Yeni özelliklerle ilgili kodlarda açıklar daha yoğunlaşıyor
    • Eski kodda ise gerçek kullanım sayesinde uç durumlar keşfediliyor
  • Yeni kodun bellek açıklarına yol açtığını kesin olarak söylemek zor
    • Heartbleed hatası gibi yüksek etkili açıklar da var
  • Güvenlik açıkları üstel olarak azalıyor
    • Yeni özellik eklemeyi durdurmak güvenlik açısından daha iyi olabilir
    • Windows LTSC muhtemelen en güvenli sürüm olabilir
  • Güvenli kodlama, kodun doğruluğunu ve geliştirici üretkenliğini artırır
    • Hata bulmayı kod check-in'inden önceki aşamaya taşır
    • Android ekibi, Rust değişikliklerinin geri alma oranının C++'ın yarısından daha az olduğunu gözlemledi
  • Rust'ı keşfettikten sonra programlamaya olan tutkumu yeniden kazandım
  • Bellek güvenli diller (MSL) arasında yalnızca Rust anılıyor
    • Kotlin'den de bahsedildi, ancak bellek güvenliği özellikleri Rust kadar güçlü değil
  • Açıkların yaşam süresi üstel dağılım gösteriyor
    • Yeni kodda bellek güvenliği sağlamak son derece değerli
    • Büyük legacy kod tabanlarında da faydalı
  • Eski kod yeterince incelenmiyor olabilir
    • Son commit log'larını daha sık inceliyorum
  • Mac ve Windows arasında kod yazımında kullanılan dil farkı
    • Mac, bellek güvenli Swift kullanırken Windows çoğunlukla C veya C++ kullanıyor
  • Açıklar ne kadar nadirleşirse o kadar değerli hale geliyor
    • Geriye kalan açıklar, devlet destekli aktörler tarafından yüksek değerli hedeflere karşı kullanılabilir
    • iOS'taki Lockdown Mode gibi özellikler gerekli olabilir
    • Güvenlik farkındalığı yüksek kullanıcılar, performans kaybı karşılığında güvenlik kutucuğunu işaretleyebilir
    • Saldırıyı algılar ve analiz için güvenlik ekibine gönderir
    • Kullanıcıya uyarı gönderir ve bir saldırı tespit edildiğini bildirir
    • Kullanıcı etkinliğini pasif olarak izlemek yerine, saldırı tespit edildiğinde kullanıcıyı bilgilendirir