Siber Güvenlik
Buffer Overflow Nedir ve Analizi
Sistemlerde BufferOverFlow nedir, basit olarak nasıl yapılır ve bir BufferOverFlow örneğini bu makalemizde inceleyeceğiz.
Buffer Overflow, arabellek veya tampon bellek taşmasıdır. Arabellek, bir kullanıcıdan veriler alınırken işlem yapılmadan önce verilerin tutulduğu alandır. Buffer Overflow’da biz bu arabellekte tutulan veriler için belirlenen alandan daha büyük veriler girerek bu alanın kapasitesinden daha fazla veri gönderiyoruz. Örneğin bir web sitesine giriş yaparken isim yerine 220 baytlık alan ayrıldıysa ve 300 baytlık bir veri girildiğinde buradaki arabellek taşacaktır. Arabellek taşınca bellekteki diğer veriler 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 belleği taşırırken araya kodlar eklenerek sisteme zarar verilebilir veya sistemde yetkili bir kullanıcı olarak giriş yapılabilir.
Aşağıdaki örnekte Buffer OverFlow’a bir örnek verilmiştir.
Şekil 1
Bellekte 8 baytlık yer ayrılmış bir dizi üzerine 16 baytlık bir veri girişi olduğunda bellek taşacaktır. Şekil 1 örnek amaçlı koyulmuştur. Şekil 2/6 arasında teknik ve kodlarla açıklayacak bir örnek verilmiştir. Kullanılan açık Buffer Overflow açığıdır. EIP program içerisinde uygun bir yere yönlendirilebilir ise STACK içerisinde SHELLCODE çalıştırılarak exploit yazılabilir. Şekil 2’de C kodunun analizi yapılmıştır;
Şekil 2
C koduna bakıldığında programın komut satırından bir isim aldığını, aldığı ismin adresini pointer vasıtasıyla kayıt fonksiyonuna gönderdiğini bu fonksiyon içerisinde 8 baytlık bir dizi açıldığında ve girilen ismin bu diziye kopyalandığı görülmüştür. Program Şekil 3’deki gibi derlenmiştir.
Şekil 3
Programa 8 baytlık bir girdi verildiği zaman program sıkıntısız çalışmaktadır. Girdi olarak 16 bayt verildiği zaman STACK tabanlı taşmadan dolayı Şekil 3’deki hata alınmıştır. GDB ile Manjaro 20.01 işletim sistemi ile analiz yapılmıştır.
Şekil 4
Kodu gdb ile açıp break attıktan sonra üzerine “AAA…” yazılmıştır.
Şekil 5
Program çalıştırılıp EIP üzerine bakıldığı zaman EIP üzerine “AAA…” yazıldığı \x7ff görülmüştür.
Şekil 6
STACK içerisine bakıldığı zaman STACK kısmının da dolduğu görülmüştür. Buradan elde edilen veriler ile yazılmış olan C programında 8 baytlık dizi oluşturulup girdinin kontrol edilmemesi sonucunda hafıza tabanlı aşma açıklığı meydana gelmiştir. Bu açıklıktan yararlanarak program akışını değiştirip uygun Shellcode ile exploit geliştirilebilir.
27.12.2022
Yorumlar
Buffer OverFlow hakkında örnekli gayet güzel bir yazı olmuş. Teşekkürler.
Bilgilendirici bir yazı teşekkürler.