Buffer Overflow Nedir?
Yayın: · Son güncelleme:
Buffer Overflow Nedir? Kısaca
Buffer overflow (arabellek taşması), bir programın belleğe ayrılan alandan daha fazla veri yazması sonucu komşu bellek bölgelerini bozmasıdır. Program çökebilir ya da saldırgan bu hatayı kod çalıştırmak için kullanabilir.

Buffer overflow nedir?
Buffer overflow, programın belirli bir boyutta ayırdığı bellek alanına (arabellek) sığmayacak kadar veri yazılmasıdır. Taşan veri, yan taraftaki bellekte duran başka değişkenlerin ya da programın akışını belirleyen bilgilerin üzerine yazılır. Sonuç çoğu zaman çökme, kötü durumda ise uzaktan kod çalıştırmadır.
Basit bir benzetme
Sekiz kişilik bir masaya on iki kişi oturtmaya çalıştığınızı düşünün. Fazla dört kişi yan masaya taşar ve oradaki düzeni bozar. Örneğin kullanıcı adı için 16 karakterlik yer ayıran bir program, 200 karakterlik bir girdiyi uzunluk kontrolü yapmadan kopyalarsa aynı şey bellekte olur.
Bu hata en çok C ve C++ gibi belleği programcının yönettiği dillerde görülür. Python, Java, C# ve Rust gibi dillerde dilin kendi kontrolleri bu tür taşmaların büyük bölümünü engeller.
Nasıl önlenir?
Geliştirici tarafında en önemli adım, her kopyalama ve okuma işleminde uzunluğu kontrol etmektir. Güvensiz eski fonksiyonlar yerine sınır denetimi yapan sürümler kullanılır, kod statik analiz araçlarıyla taranır. Mümkünse bellek güvenli bir dil seçilir.
İşletim sistemleri de ek kalkanlar sunar. Adres alanı rastgeleleştirme (ASLR) ve veri alanlarında kod çalıştırmayı engelleyen DEP gibi korumalar, bir taşmanın istismarını zorlaştırır. Kullanıcı olarak yapmanız gereken, bu korumaları içeren güncel işletim sistemi ve uygulama sürümlerini kullanmaktır.
Sıkça Sorulan Sorular
Buffer overflow her zaman güvenlik açığı mıdır?
Her taşma istismar edilemez ama her taşma bir hatadır. Kimi yalnızca programı çökertir, kimi saldırgana kod çalıştırma imkânı verir. Bu yüzden hepsi ciddiye alınır.
Stack overflow ile buffer overflow aynı mı?
Aynı değildir. Stack overflow genellikle yığın belleğinin tükenmesidir, örneğin sonsuz özyinelemede. Buffer overflow ise belirli bir arabelleğin sınırının aşılmasıdır ve yığında ya da heap'te olabilir.