Linux Yazılım Güvenliği

Yığın Taşmaları (Stack Overflow)

Bu bölümde, oldukça sık rastlanan bir durum olan, yığın tampon taşmasını (stack buffer overflow), sonuçlarını ve alınabilecek önlemleri inceleyeceğiz.

Tampon (buffer) verilerin, genellikle geçici bir süre, saklandığı ardışıl bellek alanıdır. Tamponlar yığın (stack) üzerinde sıklıkla kullanılmaktadır.

Tampona veriler yazılırken, kontrolsüz bir şekilde, tamponun sınırlarının aşılması durumunda tampon taşması (buffer overflow) oluşur. Tampon taşması kullanılarak çalışan bir programın yani prosesin davranışı, dışarıdan müdahale edilerek, bilinçli bir şekilde değiştirilebilir. Bu tür müdahalelere genel olarak tampon taşma saldırısı (buffer overflow attack) denilmektedir.

Tampon taşması ile yapılan saldırılar genel olarak iki biçimde olmaktadır. Birinci durumda prosese dışarıdan kod enjekte (code injection) edilmeye çalışılırken, ikinci durumda yalnızca akışın değiştirilmesi hedeflenmektedir. Bu iki durumu incelemeden önce yığının kullanımına bir göz atalım.

Not: İncelemelerimizde 32 bit mimari hedefli sembolik makina kodu kullanacağız. 64 bitlik bir sistem kullanıyorsanız derleyicinize m32 anahtarı geçirerek 32 bitlik kod üretmesini sağlayabilirsiniz. 64 bitlik sistemde 32 bitlik kod üretebilmek ve çalıştırabilmek için ekstradan paketlere ihtiyaç duyulacaktır. Ubuntu 14.04.1 LTS için libc6-i386 ve lib32stdc++-4.8-dev paketleri sisteme kurulmuştur.