- 24 Kasım 2025
- 1,229
- 47
Format String ile GOT Overwrite
Format string güvenlik açıkları, programcının kullanıcı girdisini doğrudan bir format fonksiyonuna (printf, sprintf, fprintf vb.) geçirmesi sonucu ortaya çıkar. Bu durum, saldırganın programın bellek içeriğini okumasına ve hatta değiştirmesine olanak tanır. Temel prensip, format string'in beklediği argüman sayısını manipüle ederek bellek adreslerine erişmektir. Örneğin, "%x" format belirteci, yığındaki bir değeri onaltılık tabanda yazdırır. "%n" ise, şimdiye kadar yazılan karakter sayısını belirtilen adrese yazar. Bu güçlü özellik, kötü niyetli kullanıcının hedef sistemde kontrolü ele geçirmesine kadar varan sonuçlar doğurabilir.
GOT (Global Offset Table), programın kullandığı harici fonksiyonların adreslerini tutan bir tablodur. Program her harici fonksiyonu çağırdığında, gerçek adresi GOT'tan okur. GOT overwrite tekniği, bu tablodaki bir fonksiyon adresini saldırganın kontrolündeki bir adresle değiştirmeyi amaçlar. Böylece, program o fonksiyonu çağırdığında, aslında saldırganın belirlediği kodu çalıştırır. Bu işlem genellikle format string güvenlik açıkları aracılığıyla gerçekleştirilir. Saldırgan, "%n" format belirtecini kullanarak GOT'taki bir adrese istediği değeri yazar, böylece fonksiyonun adresi değiştirilmiş olur.
GOT overwrite saldırısının başarılı olması için bazı ön koşullar gereklidir. Öncelikle, programda bir format string güvenlik açığı bulunmalıdır. İkincisi, saldırganın GOT'un adresini bilmesi veya bulabilmesi gerekir. Üçüncüsü, saldırganın çalıştırmak istediği kodun (shellcode) bellekte bir yerde bulunması veya programın halihazırda kullandığı bir fonksiyonun adresinin bilinmesi gerekir. Bu koşullar sağlandığında, saldırgan format string açığını kullanarak GOT'taki hedef fonksiyonun adresini değiştirir ve programın akışını kendi kontrolüne alır.
Format string güvenlik açıkları ve GOT overwrite saldırılarından korunmak için çeşitli yöntemler mevcuttur. En temel önlem, kullanıcı girdisini doğrudan format fonksiyonlarına geçirmemek ve her zaman format string'i programcı tarafından tanımlanmış sabit bir string olarak kullanmaktır. Ayrıca, derleyici ve işletim sistemi tarafından sağlanan güvenlik önlemleri de kullanılabilir. Bunlar arasında ASLR (Address Space Layout Randomization) ve DEP (Data Execution Prevention) gibi teknikler bulunur. ASLR, bellek adreslerini rastgele hale getirerek GOT'un adresini tahmin etmeyi zorlaştırırken, DEP ise belirli bellek bölgelerinde kod çalıştırılmasını engelleyerek shellcode enjeksiyonunu engeller.
Günümüzde modern derleyiciler ve işletim sistemleri, format string güvenlik açıklarını ve GOT overwrite saldırılarını engellemek için çeşitli güvenlik mekanizmaları sunar. Ancak, bu mekanizmalar her zaman yeterli olmayabilir ve bazı durumlarda bypass edilebilirler. Bu nedenle, programcıların güvenlik açıklarına karşı bilinçli olması ve güvenli kod yazma prensiplerine uyması son derece önemlidir. Özellikle, kullanıcı girdisinin dikkatli bir şekilde doğrulanması ve filtrelenmesi, güvenlik açıklarının oluşmasını önlemek için kritik öneme sahiptir.
Format string güvenlik açıkları ve GOT overwrite saldırıları, geçmişte birçok büyük güvenlik ihlaline neden olmuştur. Bu tür açıklar, genellikle web sunucuları, e-posta sunucuları ve diğer kritik sistemlerde bulunmuştur. Saldırganlar, bu açıkları kullanarak sistemlere erişim sağlamış, hassas verileri çalmış ve hatta sistemlerin kontrolünü ele geçirmişlerdir. Bu nedenle, bu tür güvenlik açıklarının ciddiyetinin farkında olmak ve gerekli önlemleri almak büyük önem taşır.
Sonuç olarak, format string güvenlik açıkları ve GOT overwrite saldırıları, programlama dillerindeki temel bir güvenlik sorununu temsil eder. Bu tür açıklardan korunmak için, programcıların güvenli kod yazma prensiplerine uyması, kullanıcı girdisini dikkatli bir şekilde doğrulaması ve modern güvenlik mekanizmalarını kullanması gereklidir. Aksi takdirde, sistemler ciddi güvenlik riskleriyle karşı karşıya kalabilir ve önemli veri kayıpları yaşanabilir.
