Buffer Overflow Zafiyeti
Bu yazımda buffer overflow zafiyetinden bahsedeceğim. Keyifli okumalar.
Merhaba arkadaşlar bu yazımda sizlere buffer overflow zafiyetinden bahsedeceğim. Ardından C programla dilinde küçük bir örneğini yapacağız.
Buffer overflow, arabellek veya tampon bellek taşması olarak Türkçeye çevrilebilmektedir. Arabellek, bir kullanıcıdan veriler alınırken işlem yapılmadan önce verilerin bekletildiği alandır. Buffer overflow’da biz bu arabellekte veriler için belirlenen alandan daha büyük veriler girerek bu alanı taşırıyoruz. Örneğin bir web sitesine giriş yaparken kullanıcı adına 100 baytlık alan ayrıldıysa, 200 baytlık bir veri girildiğinde buradaki arabellek taşacaktır. Arabellek taşınca bellekteki diğer verilerde bundan etkilenecektir. Bu işlemde işlem yaptığımız sistemin kaynak kodlarına bağlı olarak doğrudan yetki kazanılabilmektedir. Başka bir yöntem ise tampon belliği taşırırken araya kodlar enjekte ederek sisteme zarar verilebilir veya sistemde yetkili bir kullanıcı olarak giriş yapılabilir. Şimdi örneğimize bakalım ve onun üzerinde buffer overflow zafiyetini inceleyelim.
Yukarıdaki C kodunda basit bir giriş işlemi yapılmaktadır. Programı biraz inceleyelim. İlk önce “parola” ve “bool” adında iki değişken oluşturduk. Parola değişkenimizin boyutunu 10 karakter olarak belirledik. Parola değişkeninin ardından bool değişkenini oluşturduğumuz için arabellekte bu değişkenler ard arda tutulacaktır. Bellek taşması gerçekleştiğinde “bool” değişkeni bundan etkilenecektir. Sonrasında kullanıcıdan giriş yapabilmesi için parola istiyoruz. Eğer parolayı yanlış girerse ekrana “Yanlış Parola” yazılacak ardından bir sonraki if bloğuna geçecektir. Bool değişkeni de 0 olduğu için if bloğu çalışmayacak ve giriş yapılamayacaktır. Eğer parola doğru girilirse bool değeri 1 olarak değişecek ve giriş işlemi başarıyla yapılacaktır. Şimdi programı çalıştırarak kontrol edelim.
Gördüğünüz gibi parolayı doğru girdik ve giriş işlemi başarılı şekilde gerçekleşti.
Parolayı yanlış girdiğimizde ise giriş işlemi başarısız oldu. Şimdi tampon belleği taşırarak giriş yapmayı deneyeceğiz.
Parola için belirlenen uzunluktan daha fazla karakter gireceğiz ve böylece “bool” değişkeni üzerinde değişiklik olmasında sebep olacağız.
Parola kısmına belirlenenden daha büyük bir veri girdik. İlk başta program düzgün şekilde çalışmaya devam etti. Parolayı kontrol etti ve bize yanlış bir parola girdiğimizi belirtti. Ardından İf bloğuna geldiğinde hiçbir şey yapmaması gerekirken giriş işlemini başarılı şekilde gerçekleştirdi. Çünkü tampon bellek taştı ve “bool” değişkeni üzerinde değişiklik oluşmasına sebep oldu ve başarıyla giriş yaptık.
Buffer overflow zafiyetini önlemek için c ve c++ gibi bellek yönetimi gereken programlama dilleri üzerinde projeler geliştirilirken kullanılan fonksiyonlara dikkat edilmeli. Örneğimizde kullandığımız gets fonksiyonu arabellek taşmasına sebep olacak bir fonksiyondur. Bu ve benzeri fonksiyonları kullanmak zorunda kalırsanız da dışarıdan bir veri alırken verilerin büyüklüğü kontrol edilmelidir. Bellekte ayırdığınız alana göre kullanıcıdan aldığınız verilerin büyüklüğüne sınır getirebilirsiniz.
Yazımın sonuna geldik umarım sizler için faydalı bir yazı olmuştur.