İçeriğe geç
parazade

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?
İçindekiler
  1. Buffer overflow nedir?
  2. Basit bir benzetme
  3. Nasıl önlenir?

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.

İlgili terimler

Uzaktan Kod Çalıştırma(Remote Code Execution)Uzaktan kod çalıştırma (Remote Code Execution, RCE), saldırganın ağ üzerinden, fiziksel erişim olmadan hedef sistemde kendi seçtiği kodu çalıştırabilmesini sağlayan güvenlik açığı türüdür ve genellikle kritik seviyede sınıflandırılır.Güvenli Kodlama(Secure Coding)Güvenli kodlama, yazılımı geliştirirken enjeksiyon, yetki hatası ve veri sızıntısı gibi güvenlik açıklarının oluşmasını baştan önleyen yazım alışkanlıkları ve ilkeler bütünüdür.SASTSAST (Static Application Security Testing), bir uygulamanın kaynak kodunu ya da derlenmiş kodunu çalıştırmadan inceleyerek güvenlik açıklarını arayan statik uygulama güvenliği testidir.ExploitExploit, bir yazılımdaki, işletim sistemindeki ya da cihazdaki güvenlik açığını kullanarak saldırganın izinsiz erişim, kod çalıştırma veya yetki yükseltme gibi sonuçlar elde etmesini sağlayan kod ya da yöntemdir.Çökme(Crash)Çökme (crash), bir programın ya da sistemin beklenmedik bir hata nedeniyle aniden çalışmayı durdurması ve kapanmasıdır. Uygulamanın kendiliğinden kapanması, donup yanıt vermemesi ya da işletim sisteminin hata ekranı göstermesi tipik belirtilerdir.JavaJava, Sun Microsystems tarafından 1995'te yayımlanan, bugün Oracle tarafından geliştirilen, nesne yönelimli ve platformdan bağımsız bir programlama dilidir; kod Java Sanal Makinesi (JVM) üzerinde çalışır.RustRust, bellek güvenliğini çöp toplayıcıya ihtiyaç duymadan derleme anında denetleyen, hızlı ve sistem seviyesinde çalışan bir programlama dilidir. C ve C++'ın kullanıldığı alanlara güvenli bir alternatif olarak öne çıkar.İşletim Sistemi(Operating System)İşletim sistemi, bilgisayar ya da telefonun donanımını yöneten ve uygulamaların bu donanımı kullanabilmesini sağlayan temel yazılımdır. Windows, macOS, Linux, Android ve iOS en yaygın örneklerdir.