Güvenlik analistleri, geçen hafta ABD Ulusal Güvenlik Ajansı’nın (NSA) yazılım geliştiricilerin koddaki bellekle ilgili güvenlik açıklarını azaltmak için C#, Go, Java, Ruby, Rust ve Swift gibi dilleri benimsemeyi düşünmeleri yönündeki bir önerisini memnuniyetle karşıladılar.

NSA, bunları bilgisayar dilinin bir parçası olarak belleği otomatik olarak yöneten “bellek için güvenli” diller olarak tanımladı. NSA, bellek güvenliğini uygulamak için programcıya güvenmediklerini ve bunun yerine bellek hatalarına karşı koruma sağlamak için derleme zamanı ve çalışma zamanı kontrollerinin bir kombinasyonunu kullandıklarını söyledi.

Bellek İçin Güvenli Diller Örneği

NSA’nın 10 Kasım tarihli biraz alışılmadık danışma belgesi, C ve C++ gibi yaygın olarak kullanılan dillere şu şekilde işaret etti: programcılara çok fazla güvenmek not ettiği bellekle ilgili hatalar yapmamak, yazılımlardaki güvenlik açıklarının en önemli nedeni olmaya devam ediyor. Önceki çalışmalar—tek tek 2019’da Microsoft ve başka bir 2020’de Google NSA, Chrome tarayıcısıyla ilgili — örneğin, her ikisi de güvenlik açıklarının %70’inin bellek güvenliği sorunları olduğunu tespit etti.

NSA, “C ve C++ gibi yaygın olarak kullanılan diller, bellek referansları üzerinde gerekli kontrolleri yapmak için programcıya büyük ölçüde güvenirken, bellek yönetiminde çok fazla özgürlük ve esneklik sağlar” dedi. Bu genellikle, arabellek taşma hataları, bellek ayırma sorunları ve yarış koşulları gibi basit hatalara bağlı, yararlanılabilir güvenlik açıklarıyla sonuçlanır.

NSA danışma belgesinde, C#, Go, Java, Ruby, Rust, Swift ve diğer bellek açısından güvenli dillerin bu sorunların riskini tamamen ortadan kaldırmadığını söyledi. Örneğin çoğu, bellekte güvenli olmayan ve programcının potansiyel olarak güvenli olmayan bir bellek yönetimi işlevi gerçekleştirmesine izin veren en az birkaç sınıf veya işlev içerir. Bellek açısından güvenli diller bazen potansiyel olarak güvenli olmayan bellek işlevleri içeren dillerde yazılmış kitaplıkları da içerebilir.

Ancak NSA, bu uyarılara rağmen, bellek açısından güvenli dillerin, zayıf ve dikkatsiz bellek yönetiminden kaynaklanan yazılımlardaki güvenlik açıklarını azaltmaya yardımcı olabileceğini söyledi.

Synopsys Siber Güvenlik Araştırma Merkezi’nin baş güvenlik stratejisti Tim Mackey, NSA’nın tavsiyesini memnuniyetle karşılıyor. Belleğe zarar vermeyen dillerin kullanımının aslında çoğu uygulama için varsayılan dil olması gerektiğini söylüyor. “Pratik amaçlar için, harika yeni özellikler programlamak yerine bellek yönetimi sorunlarına odaklanmak için geliştiricilere güvenmek, yenilik için bir vergi anlamına gelir” diyor. Mackey, bellek açısından güvenli programlama dilleri ve ilişkili çerçevelerle, uygun bellek yönetimini sağlayanların uygulama geliştiricileri değil, dilin yazarları olduğunu söylüyor.

Vardiya Zor Olabilir

NSA, gelişmiş bir yazılım geliştirme ortamını bir dilden diğerine kaydırmanın zor olabileceğini kabul etti. Programcıların yeni dili öğrenmesi gerekecek ve bu süreçte büyük olasılıkla acemi hataları ve verimlilik artışları olacak. Kullanılabilir bellek güvenliğinin kapsamı da dile göre önemli ölçüde değişebilir. Bazıları yalnızca minimum bellek güvenliği sunarken, diğerleri bellek erişimi, tahsisi ve yönetimi konusunda önemli korumalar sunar.

Ek olarak, kuruluşların güvenlik ve performans arasında ne kadar ödün vermeye istekli olduklarını düşünmeleri gerekecektir. NSA, “Bellek güvenliği, performans ve esneklik açısından maliyetli olabilir” diye uyardı. “Aşırı düzeyde doğal korumaya sahip diller için, kontroller ve korumalar nedeniyle programın basitçe derlenmesini sağlamak için önemli miktarda çalışma gerekebilir.”

Vulcan Cyber’de kıdemli teknik mühendis olan Mike Parkin, bir uygulamayı bir dilden diğerine taşımaya çalışırken sayısız değişkenin devreye girdiğini söylüyor. Parkin, “En iyi senaryoda, geçiş basittir ve bir kuruluş bunu nispeten acısız bir şekilde başarabilir” diyor. “Diğerlerinde, uygulama, orijinal dilde önemsiz olan ancak yeni dilde yeniden oluşturmak için kapsamlı ve pahalı geliştirme gerektiren özelliklere dayanıyor.”

Mackey, belleğe zarar vermeyen dillerin kullanılmasının da uygun yazılım testine duyulan ihtiyacın yerini almadığı konusunda uyarıyor. Bir programlama dilinin bellek açısından güvenli olması, üzerinde geliştirilen dilin veya uygulamaların hata içermediği anlamına gelmez.

Mackey, hem eski dili hem de yeni dili zaten anlayan personeliniz yoksa, bir programlama dilinden diğerine geçmek riskli bir tekliftir, diyor. “Böyle bir geçiş en iyi, uygulama bir ana sürüm güncellemesinden geçerken yapılır; aksi takdirde, geçiş çabasının bir parçası olarak istenmeyen hataların ortaya çıkma potansiyeli vardır” diye belirtiyor.

Mackey, kuruluşların dilleri değiştirmek söz konusu olduğunda mikro hizmetleri kullanmayı düşünmelerini önerir. Mackey, “Bir mikro hizmet mimarisiyle, uygulama kapsayıcılı bir dizi hizmete ayrıştırılır” diyor. “Bir programlama dili açısından bakıldığında, her bir mikro hizmetin aynı uygulama içindeki diğer hizmetlerle aynı programlama dilinde programlanmasını doğal olarak gerektiren hiçbir şey yoktur.”

Harekete Geçmek

Statista’nın son verileri gösteriyor ki birçok geliştirici zaten kullanıyor bellek için güvenli kabul edilen diller. Örneğin, yaklaşık üçte ikisi (%65,6) JavaScript kullanıyor, yaklaşık yarısı (%48,06) Python kullanıyor, üçte biri Java kullanıyor ve yaklaşık %28’i C# kullanıyor. Aynı zamanda, önemli bir oran hala C++ (%22,5) ve C (%19,25) gibi güvenli olmayan dilleri kullanıyor.

SANS Teknoloji Enstitüsü araştırma dekanı Johannes Ullrich, “Bence birçok kuruluş, yalnızca bellek güvenliği sorunu için değil, aynı zamanda genel geliştirme ve bakım kolaylığı için de C/C++’dan uzaklaşıyor” diyor. “Ancak yine de uzun yıllar boyunca korunması gereken eski kod tabanları olacak.”

NSA’nın danışmanlığı, bu noktada tavsiyesini neyin tetiklemiş olabileceğine dair çok az fikir verdi. Ancak Netenrich’in baş tehdit avcısı John Bambenek, kuruluşların bunu görmezden gelmemesini tavsiye ediyor. “Bellek güvenlik açıkları ve saldırıları 1990’lardan beri yaygındır, bu nedenle genel olarak bu iyi bir tavsiyedir” diyor. “Bununla birlikte, bu NSA’dan geldiği için, bu tavsiyenin daha fazla aciliyet kazanması gerektiğine ve onların sahip olduğu ve bizim sahip olmadığımız bilgilere göre yönlendirildiğine inanıyorum.”



siber-1