Buffer Overflow Nedir?

buffer overflow - arabellek taşması

Buffer Overflow Nedir? 

Buffer overflow (Türkçesiyle arabellek taşması), ilk bakışta yalnızca bir yazılım hatası gibi görünse de, siber güvenlik dünyasının en yıkıcı ve en istismar edilebilir zafiyetlerinden biridir. Bu yazıda buffer overflow’un teknik detaylarından, dünya çapında yankı uyandıran siber saldırılardaki kullanımına, korunma yöntemlerinden güncel tehdit vektörlerine kadar kapsamlı bir analiz bulacaksınız.

Arabellek (Buffer) Nedir?

Programlar çalışırken verileri geçici olarak depolamak için bellekte belirli bloklar kullanır. Bu bloklara “buffer” yani arabellek adı verilir. Örneğin bir web formuna girilen ad-soyad, bir arabelleğe yazılır, daha sonra işlenir. Bu alanlara beklenenden fazla veri gönderildiğinde, sistemin sınırları aşılır ve “taşma” (overflow) meydana gelir.

Bu taşan veri, bitişik bellek alanlarını istila edebilir — örneğin bir fonksiyonun dönüş adresini, yani programın nereye devam edeceğini belirten bilgiyi. Saldırgan, bu adresi değiştirerek, kendi zararlı kodunu çalıştıracak şekilde programın kontrolünü ele geçirebilir.

Arabellek Taşması Nasıl Gerçekleşir?

Aşağıdaki gibi bir C kodu düşünelim:

#include <stdio.h>

void guvenli_degil() {

    char isim[8];  // 8 byte’lık arabellek

    gets(isim);    // Kullanıcı girdisini kontrolsüz şekilde alır

    printf(“Merhaba, %s!\n”, isim);

}

int main() {

    guvenli_degil();

    return 0;

          }        

Eğer kullanıcı 20 karakterlik bir isim girerse, bu 20 karakter bellekte isim değişkeninin dışına taşar. Eğer bu fazladan karakterler, fonksiyonun dönüş adresini de kapsayan alana ulaşırsa, saldırgan, programın kontrolünü ele geçirebilir.

Tarihi Saldırılar: Buffer Overflow’un Sahneye Çıkışı

 1988 – Morris Solucanı: İnternetin İlk Felaketi

Robert Tappan Morris tarafından yayılan Morris Worm, buffer overflow açığını kullanarak 60.000 civarındaki sistemin %10’undan fazlasını etkiledi. Telnet ve sendmail gibi servislerin zaaflarını istismar etti. Sonuç? İnternetin erken yıllarında binlerce sistem çökertildi.

 2001 – Code Red: Web Sunucularını Çökerten Solucan

Microsoft’un Internet Information Services (IIS) yazılımındaki arabellek taşması zafiyeti, yüz binlerce sistemin kontrolünü saldırganlara açtı. Web siteleri tahrif edildi, DDoS saldırıları başlatıldı ve Beyaz Saray sunucusu hedef alındı.

2003 – SQL Slammer: Işık Hızında Yayılan Kabus

Microsoft SQL Server’daki bir buffer overflow açığı, Slammer solucanının yalnızca birkaç dakika içinde dünya çapında 250.000 sistemi enfekte etmesine neden oldu. Internet altyapısının yavaşlamasına ve finansal sistemlerin durmasına yol açtı.

2010 – Stuxnet: Saldırı Kodlarının Santralleri Hedef Aldığı Gün

Stuxnet, İran’ın nükleer tesislerini sabote eden gelişmiş bir solucandı. SCADA sistemlerine saldırmak için buffer overflow başta olmak üzere bir dizi sıfır gün (zero-day) açığını kullandı. Siber savaşın başlangıcı sayılır.

Arabellek Taşmasının Türleri

 Stack-Based Buffer Overflow (Yığın Tabanlı)

Fonksiyonların geçici değişkenleri sakladığı “yığın” bellekte oluşur. Dönüş adresi üzerine yazılarak sistem kontrolü ele geçirilebilir.

 Heap-Based Buffer Overflow (Küme Tabanlı)

Dinamik bellek bölgelerinde (heap) oluşur. Daha uzun süreli veri kontrolü ve kalıcılık sağlar.

 Integer Overflow

Değişken sınırlarının hesap hatasıyla aşılması sonucu oluşur. Özellikle bellek boyutu hesaplamalarında görülür. Örneğin, iki tamsayının çarpımı, bir tamsayı değişkeninin alabileceğinden daha büyük bir değer verdiğinde, bu yanlış hesaplama sonucu ayrılan bellek alanı beklenenden çok daha küçük olabilir. Saldırganın bu küçük alana büyük bir veri bloğu göndermesi, kolaylıkla tampon taşmasına yol açabilir.

Format String Vulnerability

printf() gibi format dizesi fonksiyonları, kontrolsüz bir format dizesiyle kullanıldığında bellek okuma veya yazma işlemlerine olanak tanır. Saldırganlar,” %x” gibi format belirteçleriyle yığın bellekteki bilgileri sızdırabilir ya da “%n” belirteci ile istedikleri bir bellek adresine veri yazarak keyfi kod çalıştırmayı başarabilirler. Return-Oriented Programming (ROP)

Mevcut kod parçalarını (gadget) zincirleyerek yeni kötü amaçlı işlemler yapılmasını sağlar. Modern işletim sistemlerinin DEP/ASLR korumalarını aşmakta kullanılır.

Buffer Overflow’un Etkileri

 Uygulama Çökmesi

Programlar istikrarını kaybeder, sistem çöker.

 Yetkisiz Kod Çalıştırma

Saldırgan, komut satırını ele geçirerek sistemde keyfi işlem yapabilir.

 Veri Sızıntısı ve Erişim

Hassas bilgiler sızdırılır, veritabanları ele geçirilir.

Botnet’e Katılma

Sistemler, başka saldırılarda kullanılmak üzere zombileştirilir.

Buffer Overflow ve Günümüz

 Güvenli Kodlama

  • gets(), strcpy() gibi tehlikeli fonksiyonlardan kaçının. gets_s() fonksiyonu, printf() fonksiyonuna benzer şekilde kullanıcı girdisini kabul eder. gets() fonksiyonu, kullanıcıdan veri okurken hedef arabelleğin boyutunu kontrol etmez. Bu nedenle, kullanıcı, arabelleğe daha fazla veri girmeye çalışır ve bu, verinin sınırları aşarak bitişik kullanılabilir bellek alanlarını yazmasına yol açar. Bu nedenle, bu, fgets() veya gets_s gibi arabellek sınırlarını kontrol eden kullanımı için güvenli bir c kullanımı kaplayan iki potansiyel güvenlik riski içerir.
  • Girdi uzunluklarını her zaman kontrol edin.
  • Modern diller (Rust, Go) kullanarak bellek güvenliği sağlayın.

 Derleyici Koruma Özellikleri

  • Stack canaries: Stack Canaries, dönüş adresi öncesine rastgele değerler yerleştirerek taşmayı tespit eder. Saldırganlar, bu korumayı atlamak için canary değerini sızdırmaya veya doğrudan yığın taşımasını atlayarak dolaylı yollarla kod çalıştırmaya çalışabilirler.
  • DEP (Data Execution Prevention): DEP, belleğin veri bölümlerinin çalıştırılmasını engeller. Bu korumayı aşmak için saldırganlar, Return-Oriented Programming (ROP) gibi teknikler kullanır. ROP, mevcut çalıştırılabilir kod parçacıklarını (“gadgets”) kullanarak karmaşık işlemler gerçekleştirmeyi sağlar.
  •  ASLR (Address Space Layout Randomization): ASLR, bellek adreslerini rastgeleleştirerek saldırganın dönüş adresini tahmin etmesini zorlaştırır. Saldırganlar bu korumayı, başka bir zafiyetten (örneğin bilgi sızıntısı) yararlanarak programın bellek adreslerini sızdırarak aşmaya çalışırlar.

Güvenlik Testleri

  • Statik/Dinamik : Coverity, SonarQube.
  • Fuzzing : AFL, libFuzzer ile rastgele girdi testi.
  • Dynamic Analysis : OWASP ZAP.

 Güncel Kalmak

  • Yazılımların ve işletim sistemlerinin düzenli olarak güncellenmesi, açığın kapatılması için kritiktir.
  • CVE takip sistemleriyle bilinen açıkları gözlemleyin.  

Buffer Overflow ve Günümüz

Her ne kadar buffer overflow artık basit metotlarla yapılamasa da, günümüzde hâlâ sofistike saldırıların temel taşı olmaya devam ediyor. Saldırganlar ROP, NOP sled, shellcode, polymorphic kodlar gibi gelişmiş tekniklerle korumaları aşmaya çalışıyorlar.

Ayrıca:

  • IoT cihazları
  • Gömülü sistemler
  • Zayıf yazılım geliştirme süreçleri

gibi platformlar, bu tür açıklara karşı hâlâ savunmasız.

Sonuç: “Bu Kod Güvenli Görünüyor” Demek, En Büyük Hata

Bir buffer overflow saldırısı, sisteminizi sessizce ele geçirebilir. Görünürde her şey çalışıyor olabilir… ta ki saldırgan root erişimi elde edene kadar.

Siber güvenlikte hafife alınan en büyük tehlikelerden biri, “Benim kodumda olmaz” özgüvenidir.

Eğer sistemlerinizin dayanıklı olmasını istiyorsanız:

  • Yazılım geliştiricilerinizin eğitimi
  • Kod denetimi ve analiz süreçleri
  • Sürekli güncelleme ve test politikaları olmazsa olmazdır.

Buffer Overflow doğrudan RAM ile ilgilidir RAM hakkında bilgi almak isterseniz

RAM Analizi Nedir?~ Magnet RAM Capture-Volatility3~ Kurulum ve Uygulama   bu yazıyı okuyabilirsiniz.

 

About The Author

No Responses

Reply