LunAtlas - Şimdilik Dünya İçin
Arabellek Aşımı Saldırısı Nedir? Arabellek Aşımı Saldırısı Nedir?
   Arabellekler, verileri bir konumdan diğerine aktarılırken taşıma için geçici olarak tutan bellek depolama alanlarıdır. Arabellek taşması esnasında, taşınan veri hacmi arabelleğin depolama kapasitesini... Arabellek Aşımı Saldırısı Nedir?

   Arabellekler, verileri bir konumdan diğerine aktarılırken taşıma için geçici olarak tutan bellek depolama alanlarıdır. Arabellek taşması esnasında, taşınan veri hacmi arabelleğin depolama kapasitesini aştığında meydana gelir. Sonuç olarak, verileri arabelleğe almaya çalışan program, verileri bitişik bellek konumlarının üzerine yazarak hatalı sonuçlar üretir. Bu noktada örnek vermem gerekirse, bir kullanıcı giriş doğrulama sisteminin olduğunu varsayalım. Diyelim ki şifre için belirli bir uzunluk yani bellek alanı ayrılmış olsun, örneğin 6 karakter (6 byte boyutunda). Herhangi bir işlem belirtilen 6 byte uzunluğundan daha fazlaysa, örneğin 12 byte, program arabellek sınırını aşan verileri işleyebilir. Bu yüzden de doğrulama hatalı bir biçimde çalışabilir ve buna bağlı olarak sisteme zarar verebilir.

   Burada kısaca arabellek saldırısının adımlarını ele almak istiyorum. Arabellekler, genel olarak depolanmış fonksiyonların dönüş adresinde veya buraya yakın bir bellek konumunda bulunur. İlk olarak, arabellek üzerine saldırı yapacak olan kişi, arabellek boyutunu ve arabellek-dönüş arasındaki tahmini mesafeyi belirler. Sonrasında ise, arabellek dönüş adresinin ayarlayabilmek için kabuk kodla(shellcode) veya herhangi bir şey ile doldurulur. Burada asıl amaç dönüş adresini ayarlamak olduğu için eklenen girdinin ne olduğu çok önemli değildir. Dönüş adresi bu yol ile belirlendikten sonra, arabellek ile arasında tespit edilen boşluk adresi, eklenen kabuk kod üzerine yazılır. Sonrasında ise, yani ilgili fonksiyon çalıştırıldığında ve sonuç üretilip geri dönüş verdiğinde, sonuç saldırganın işaretlemiş olduğu bellek alanına (adresine) atlayacaktır. Buna bağlı olarak bir açık oluşmuş olur ve ilgili kabuk kodu saldırı işleminin ayrıcalıkları ile çalışır ve saldırı gerçekleşmiş olur.

   Son olarak arabellek saldırılarının nasıl önlenebileceğini ele almak istiyorum. Bu konuyu iki başlık altında ele alabiliriz. Bunlardan ilki Derleme Zamanında Yapılan Savunmalardır. Yeni nesil programlar kodlanırken, programın muhtemel yaşayabileceği saldırıları ön izleyip bu saldırılara göre program mimarisi oluşturmak saldırı ihtimalini düşürecektir. Ayrıca dinamik yapılar sayesinde de bu tür saldırılardan korunabiliriz. Örneğin C dili gibi biraz daha statik bir ortamı ele alırsak, C dilinde bulunan karakter dizileri arabellek taşma saldırıları için uygun bir ortam hazırlayabilirler. Bunu da ilgili yapıları düzenli olarak kontrol ederek, derleyici sayısını arttırarak ve fonksiyonlar için giriş ve çıkış kodlarını oluşturarak engelleyebiliriz. Diğer başlığımız ise Çalışma Zamanında Yapılan Savunmalardır. Burada, program yazılmış ve çalışır bir durumdayken saldırıya uğradığında saldırı gerçekleşmektedir. İlk olarak saldırı altında bulunan arabellek yığınındaki kodların yürütülmesini engellemeliyiz ki arabellek taşımını engelleyebilelim. Sonrasında ise veri yapıları içindeki kilit konumlar değiştirilmelidir. Bunun sebebi daha önce ele almış olduğumuz gibi, saldırganın yapacağı tahminleri engellemektir. Son olarak, bellek yapıları içerisinde bulunan zayıf yani kritik bölgelere koruma sayfalarını eklemeliyiz. Bu sayede de yapılacak herhangi bir saldırının gerçekleşmesini engellemektir.

Avatar

Ali Rahmi Atalay

Şuana kadar yazılan hiç yorum yok.

İlk yorumu siz yapmak ister misiniz?

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir