Debate

GOT ve PLT Üzerinden Fonksiyon Ele Geçirme

Iniciado por Cadaloz · 30 nov 2025 15:10 · 99 Visitas · 1 Respuestas
Autor del tema #0

Giriş ve Dinamik Bağlama İhtiyacı


Modern yazılım geliştirme süreçlerinde, programların ihtiyaç duyduğu tüm kütüphaneleri doğrudan kendi bünyesinde barındırması verimsiz ve esneklikten uzak bir yaklaşım olurdu. Bu nedenle, işletim sistemleri dinamik bağlama mekanizmasını kullanır. Dinamik bağlama, programların çalışma zamanında ihtiyaç duydukları harici kütüphaneleri yüklemesine ve bu kütüphanelerdeki fonksiyonları çağırmasına olanak tanır. Bu sayede disk alanı tasarrufu sağlanır, bellek kullanımı optimize edilir ve yazılım güncellemeleri daha kolay hale gelir. Ancak bu esneklik, beraberinde bazı güvenlik risklerini de getirir. Özellikle Global Offset Tablosu (GOT) ve Prosedür Bağlantı Tablosu (PLT) adı verilen yapılar, dinamik bağlamanın temel taşları olmakla birlikte, aynı zamanda fonksiyon ele geçirme saldırılarının potansiyel hedeflerini oluştururlar.

Global Offset Tablosu (GOT) Nedir?


Global Offset Tablosu (GOT), dinamik olarak bağlantılı programların harici kütüphanelerdeki fonksiyonların ve değişkenlerin adreslerini çalışma zamanında depoladığı özel bir veri yapısıdır. Bir program bir harici fonksiyonu ilk kez çağırdığında, sistem bu fonksiyonun gerçek bellek adresini bulur ve bu adresi GOT içerisine yazar. Daha sonra aynı fonksiyon her çağrıldığında, program doğrudan GOT'daki bu adrese başvurur. Bu mekanizma, fonksiyon adreslerinin her seferinde yeniden çözümlenmesi ihtiyacını ortadan kaldırır ve performansı artırır. GOT, özellikle yazılabilir bir bellek segmentinde bulunur; bu özellik, dinamik bağlamanın gerekliliği olsa da, güvenlik açısından bir zafiyet noktası olarak da görülebilir. Çünkü bir saldırgan bu yazılabilir belleğe erişim sağladığında, GOT girdilerini değiştirerek fonksiyon çağrılarını kendi belirlediği kötü amaçlı kodlara yönlendirebilir.

Procedure Linkage Tablosu (PLT) Nedir?


Prosedür Bağlantı Tablosu (PLT), programın harici fonksiyonları ilk kez çağırmasını yöneten bir dizi küçük kod parçacığıdır. Her harici fonksiyon için PLT'de ayrı bir giriş bulunur. Bir program harici bir fonksiyonu çağırdığında, aslında doğrudan o fonksiyonun adresine değil, öncelikle PLT'deki ilgili girdiye atlar. PLT girişi, ilk çağrıda, dinamik bağlayıcıyı (linker) tetikleyerek fonksiyonun gerçek adresini bulmasını sağlar. Dinamik bağlayıcı, fonksiyonun adresini bulduktan sonra, bu adresi Global Offset Tablosu (GOT) içerisine yazar ve kontrolü gerçek fonksiyona devreder. Sonraki çağrılarda ise PLT girişi, doğrudan GOT'daki güncellenmiş adrese yönlendirme yaparak fonksiyonun hızlıca çağrılmasını temin eder. PLT, GOT ile birlikte çalışarak "tembel bağlama" (lazy binding) prensibini uygular.

GOT ve PLT'nin Birlikte Çalışma Mekanizması


GOT ve PLT, dinamik bağlamanın omurgasını oluşturan ve birbirini tamamlayan iki yapıdır. Program bir harici fonksiyonu (örneğin `printf`) çağırdığında süreç şöyle işler: İlk olarak, kontrol çağrılan fonksiyonun PLT girdisine geçer. PLT girdisi, başlangıçta dinamik bağlayıcıya (linker) atlayan bir dizi komut içerir. Dinamik bağlayıcı, gerekli kütüphaneyi bulur, `printf` fonksiyonunun gerçek bellek adresini belirler ve bu adresi ilgili GOT girdisine yazar. Ardından, dinamik bağlayıcı kontrolü `printf` fonksiyonunun gerçek adresine yönlendirir ve fonksiyon çalışır. Fonksiyonun sonraki tüm çağrılarında ise PLT girdisi, doğrudan GOT'daki önceden çözümlenmiş `printf` adresine atlayarak dinamik bağlayıcıyı atlar. Bu sayede, fonksiyon çözümlenmesi yalnızca bir kez gerçekleşir ve sonraki çağrılar çok daha hızlı gerçekleşir, böylece sistem performansı artar.

Fonksiyon Ele Geçirme (Hijacking) Temelleri


Fonksiyon ele geçirme, bir programın belirli bir fonksiyonu çağırdığında, kontrolü beklenen fonksiyona değil, bir saldırganın belirlediği başka bir fonksiyona veya kötü amaçlı koda yönlendirme işlemidir. Bu teknik, güvenlik araştırmalarında ve aynı zamanda kötü niyetli saldırılarda sıklıkla kullanılır. Saldırganlar bu yöntemi kullanarak, programın davranışını manipüle edebilir, ayrıcalıkları yükseltebilir, gizli bilgilere erişebilir veya programın çökmesine neden olabilir. GOT ve PLT, dinamik bağlama sürecindeki merkezi rolleri nedeniyle fonksiyon ele geçirme saldırıları için ideal hedeflerdir. Özellikle GOT'un yazılabilir olması, bir saldırganın bu tabloya müdahale etmesini ve kayıtlı fonksiyon adreslerini değiştirmesini mümkün kılar. Bu tür saldırılar, güvenlik duvarlarını aşmak, sandboxing mekanizmalarını atlatmak veya mevcut exploit'leri daha etkili hale getirmek için kullanılabilir.

GOT Üzerinden Fonksiyon Ele Geçirme Teknikleri


GOT üzerinden fonksiyon ele geçirme, genellikle bir bellek bozulması güvenlik açığının (örneğin arabellek taşması) ardından, saldırganın rastgele yazma yeteneği kazandığında uygulanır. Bir saldırgan, programın GOT'una yazma erişimi sağladığında, meşru bir fonksiyonun adresini kötü amaçlı kodunun veya saldırganın kontrolündeki başka bir fonksiyonun adresiyle değiştirebilir. Örneğin, programdaki bir `exit()` çağrısının GOT girişi, saldırganın `system("sh")` gibi bir komut çalıştıran kendi kodunun adresine yönlendirilirse, program `exit()` yerine saldırganın komutunu çalıştıracaktır. Bu, hata ayıklayıcılar kullanılarak veya daha gelişmiş exploit geliştirme teknikleriyle, hedef programın bellek düzenini analiz ederek ve GOT'un konumunu bularak gerçekleştirilir. Saldırgan, genellikle programın zafiyetini kullanarak önce rastgele yazma ilkelini elde eder, ardından bu ilkeyi GOT girişini değiştirmek için kullanır ve böylece fonksiyon çağrı akışını ele geçirir.

PLT ve GOT Hijacking'den Korunma Yöntemleri


PLT ve GOT üzerinden gerçekleşen fonksiyon ele geçirme saldırılarına karşı çeşitli güvenlik mekanizmaları geliştirilmiştir. En önemli korumalardan biri RELRO (Relocation Read-Only) adı verilen özelliktir. RELRO, Global Offset Tablosu'nu (GOT) kısmen veya tamamen salt okunur yaparak saldırganların çalışma zamanında GOT girişlerini değiştirmesini engeller. Tam RELRO, GOT'un tamamını başlatma sonrasında salt okunur hale getirir ve böylece çoğu GOT hijacking saldırısını önler. Bununla birlikte, ASLR (Address Space Layout Randomization) bellek adreslerini rastgele hale getirerek GOT gibi önemli yapıların konumunu tahmin etmeyi zorlaştırır. Veri Yürütme Koruması (DEP/NX bit), saldırganın enjekte ettiği kodun yürütülmesini engeller. Ayrıca, derleyici ve işletim sistemi seviyesindeki güvenlik yamaları ve güncellemeler, bilinen zafiyetleri kapatarak bu tür saldırılara karşı direnci artırır. Bu koruma mekanizmaları, katmanlı bir savunma sağlayarak sistem güvenliğini güçlendirir.
#1
Çok güzel ve açıklayıcı bir anlatım olmuş, elinize sağlık! Özellikle GOT ve PLT'nin hem dinamik bağlamadaki kritik rolünü hem de fonksiyon ele geçirme saldırılarındaki hedef olma potansiyelini bu kadar net ortaya koymanız, konuyu yeni öğrenenler için de tecrübeli arkadaşlar için de oldukça faydalı olacaktır.

RELRO gibi koruma yöntemlerinin detayına girmeniz de güvenlik bakış açısıyla çok değerli. Bu tür derinlemesine teknik paylaşımlar forumumuza büyük katkı sağlıyor, teşekkürler tekrar.

Debes haber iniciado sesión para responder.

0 citas seleccionadas