GOT Üzerinden Fonksiyon Zinciri Değiştirme

QuantumRuh

Onbaşı
Admin
Katılım
23 Kasım 2025
Mesajlar
1,003
Reaksiyon puanı
59

GOT Nedir ve Neden Önemlidir?​


Global Offset Table (GOT), Linux ve diğer Unix benzeri işletim sistemlerinde dinamik bağlama sürecinin kritik bir bileşenidir. Programların çalışırken dışarıdan paylaşımlı kütüphanelerdeki fonksiyonlara erişimini sağlayan bu tablo, aslında fonksiyon adreslerinin depolandığı bir veri yapısıdır. Bir programın içinde çağrılan bir kütüphane fonksiyonu ilk kez çağrıldığında, gerçek adresi GOT üzerine yazılır ve sonraki çağrılar doğrudan bu adresi kullanır. Bu mekanizma, hem belleğin verimli kullanılmasını sağlar hem de bir kütüphane güncellendiğinde tüm bağımlı programların yeniden derlenmesini gerektirmeksizin çalışmaya devam etmesine olanak tanır. Başka bir deyişle, GOT, program ile paylaşımlı kütüphaneler arasındaki köprüyü oluşturur.

Dinamik Bağlama ve GOT İlişkisi​


Dinamik bağlama, programların tüm bağımlı kütüphaneleri çalışma zamanında yüklemesini sağlayan bir tekniktir. Bu yöntem, statik bağlamanın aksine, program boyutunu küçültür ve aynı kütüphanenin birçok program tarafından paylaşılmasına imkan tanır. Dinamik bağlama sürecinde, Procedure Linkage Table (PLT) ve GOT birlikte çalışır. PLT, bir fonksiyon çağrıldığında GOT'a yönlendiren bir "trambolin" görevi görür. Fonksiyon ilk kez çağrıldığında, PLT aracılığıyla dinamik bağlayıcı devreye girer, fonksiyonun gerçek adresini bulur ve bu adresi GOT'daki ilgili yere yazar. Sonraki çağrılarda ise PLT, doğrudan GOT'daki güncel adrese atlama yapar. Bu sayede, fonksiyon adresleri verimli bir şekilde çözümlenmiş olur.

Fonksiyon Zinciri Değiştirmenin Temelleri​


Fonksiyon zinciri değiştirme, programın normalde çağıracağı bir kütüphane fonksiyonunun yerine, çalışma anında başka bir fonksiyonu çağırmasını sağlamak anlamına gelir. Bu teknik, genellikle "fonksiyon kancalama" (hooking) olarak da bilinir. Temelinde yatan fikir, bir fonksiyonun gerçek adresini içeren GOT girdisini, saldırganın veya analizcinin belirlediği farklı bir fonksiyonun adresiyle değiştirmektir. GOT, genellikle yazılabilir bir bellek bölümünde yer aldığından, bu tür değişiklikler çalışma zamanında kolayca gerçekleştirilebilir. Başka bir deyişle, hedef fonksiyonun bellek adresini gösteren işaretçiyi başka bir işaretçiyle güncelleyerek, programın kontrol akışını değiştirmek mümkündür. Bu, derinlemesine sistem analizi için önemli bir araçtır.

GOT Üzerinden Manipülasyon Teknikleri​


GOT üzerinden manipülasyon teknikleri, genellikle paylaşımlı kütüphane fonksiyonlarına yapılan çağrıları kendi kontrolümüze almayı içerir. Bu süreç genellikle şu adımları takip eder: İlk olarak, değiştirilmek istenen hedef fonksiyonun GOT içindeki girdisi bulunur. Ardından, bu GOT girdisinin adresi, yeni çağrılmasını istediğimiz fonksiyonun (bizim yazdığımız kanca fonksiyonu) adresiyle üzerine yazılır. Bu işlem, genellikle programın bellek alanına erişebilen araçlar (örneğin, bir hata ayıklayıcı veya enjekte edilmiş kötü amaçlı bir kod) kullanılarak yapılır. Sonuç olarak, program hedef fonksiyonu çağırdığında, gerçek fonksiyon yerine bizim manipüle ettiğimiz fonksiyona yönlendirilir. Bu durum, hem güvenlik araştırmalarında hem de kötü niyetli saldırılarda kullanılabilir.

Pratik Uygulamalar ve Kullanım Alanları​


GOT üzerinden fonksiyon zinciri değiştirme, birçok pratik alanda kendine yer bulur. Örneğin, hata ayıklama sırasında belirli kütüphane çağrılarını izlemek, parametrelerini loglamak veya dönüş değerlerini değiştirmek için kullanılabilir. Performans analizi araçları, belirli fonksiyonların çalışma sürelerini ölçmek amacıyla bu tekniği kullanabilir. Ayrıca, yazılım testi süreçlerinde, gerçek kütüphane çağrılarını "sahte" (mock) fonksiyonlarla değiştirerek test ortamını izole etmek mümkündür. Güvenlik alanında ise, IDS (İzinsiz Giriş Tespit Sistemi) ve IPS (İzinsiz Giriş Önleme Sistemi) gibi araçlar, potansiyel kötü amaçlı faaliyetleri tespit etmek veya engellemek için kritik sistem çağrılarını kancalayabilir. Bu nedenle, teknik çok yönlü bir çözüm sunar.

Güvenlik Riskleri ve Savunma Yöntemleri​


GOT üzerinden fonksiyon zinciri değiştirme, güçlü bir teknik olmasına rağmen ciddi güvenlik riskleri barındırır. Kötü niyetli aktörler, bu tekniği kullanarak bir programın kritik fonksiyonlarını (örneğin, `system()` veya `execve()`) kendi kötü amaçlı kodlarına yönlendirebilirler. Bu durum, ayrıcalık yükseltme, kod enjeksiyonu veya hassas veri sızıntısı gibi saldırılara yol açabilir. Bu risklere karşı geliştirilen savunma yöntemlerinden biri RELRO (Relocation Read-Only) adı verilen bir güvenlik mekanizmasıdır. RELRO, dinamik bağlama tamamlandıktan sonra GOT'u salt okunur hale getirerek çalışma zamanında manipülasyonu engeller. Ek olarak, ASLR (Address Space Layout Randomization) gibi teknikler, GOT'un bellek adresini rastgeleleştirerek saldırganların hedefi bulmasını zorlaştırır.

Etik Yaklaşımlar ve En İyi Pratikler​


GOT üzerinden fonksiyon zinciri değiştirme gibi güçlü tekniklerin kullanımı, beraberinde önemli etik sorumluluklar getirir. Bu tür manipülasyonlar, güvenlik araştırmaları, hata ayıklama veya yasal yazılım geliştirme gibi meşru amaçlar için kullanılabilir. Ancak, başkalarının sistemlerine yetkisiz erişim sağlamak, kötü amaçlı yazılım geliştirmek veya veri çalmak gibi etik olmayan ve yasa dışı faaliyetler için kullanılması kesinlikle kabul edilemez. Bu nedenle, bu tür teknikleri öğrenen veya uygulayan herkesin, ilgili yasaları, gizlilik politikalarını ve etik prensipleri göz önünde bulundurması gerekir. Şeffaflık ve sorumluluk, bu tür güçlü araçları kullanırken benimsenmesi gereken en iyi pratiklerdir.
 
Geri
Üst Alt