tcache Stashing Exploitation

QuantumRuh

Onbaşı
Admin
Katılım
23 Kasım 2025
Mesajlar
1,003
Reaksiyon puanı
59
tcache Bellek Yönetimine Giriş

Modern işletim sistemlerinde bellek yönetimi, uygulamaların performansını doğrudan etkileyen kritik bir unsurdur. glibc kütüphanesinin sağladığı `malloc` ve `free` fonksiyonları, programcıların bellek tahsis etme ve serbest bırakma işlemlerini kolaylaştırır. Ancak bu kolaylık, altında yatan karmaşık mekanizmalar nedeniyle güvenlik zafiyetlerine de kapı aralayabilir. `tcache`, bu mekanizmalardan biridir ve küçük boyutlu bellek bloklarının hızlı bir şekilde tahsis edilmesi ve serbest bırakılması için tasarlanmış bir önbellek katmanıdır. Her iş parçacığına (thread) özel bir `tcache` listesi bulunur. Bu tasarım, performansı artırırken, kötü niyetli saldırganlar tarafından manipüle edildiğinde ciddi güvenlik riskleri yaratabilir.

tcache Mekanizmasının Temelleri

`tcache` mekanizması, `malloc` çağrısı yapıldığında öncelikle iş parçacığına özel önbelleği kontrol eder. Eğer istenen boyut için uygun bir bellek bloğu `tcache`'te mevcutsa, bu blok hızlıca döndürülür. Bellek serbest bırakıldığında ise, yine `tcache`'e eklenir. Bu sistem, aynı boyuttaki bellek parçalarının tekrar tekrar tahsis edilip serbest bırakılması durumunda sistem çağrısı yükünü azaltır ve performansı önemli ölçüde artırır. Her `tcache` listesi, belirli boyut aralıkları için ayrılmış "bin" adı verilen koleksiyonlardan oluşur. `tcache` binleri genellikle tek yönlü bağlantılı listeler şeklinde çalışır ve yeni serbest bırakılan bellek bloklarını listenin başına ekler. Bu yapı, bellek sömürü teknikleri için hedef haline gelir.

tcache Stashing Saldırısının Arkasındaki Mantık

tcache stashing saldırısı, `tcache`'in bu hızlı ve basit yapısından faydalanarak arbitray write (rastgele yazma) primitifini elde etmeyi amaçlar. Saldırgan, genellikle double free (çift serbest bırakma) veya use-after-free (serbest bırakma sonrası kullanım) gibi temel bellek bozulması zafiyetlerini kullanarak `tcache` listelerinin iç yapısını manipüle eder. Amaç, `tcache` binine belirli bir bellek adresini birden fazla eklemek veya `tcache` içindeki işaretçileri kontrol etmek suretiyle, sonraki bir `malloc` çağrısının saldırganın hedeflediği bir adresi döndürmesini sağlamaktır. Başka bir deyişle, bellekte hassas bir konumun üzerine yazabilmek için oraya bir bellek bloğu tahsis ettirmeye çalışırız.

Saldırı Vektörleri: tcache Manipülasyonu Nasıl Başlar?​


tcache manipülasyonu genellikle bir double free zafiyeti ile başlar. Bir bellek bloğu serbest bırakıldığında `tcache`'e eklenir. Eğer aynı blok tekrar serbest bırakılırsa, `tcache` listesinde aynı işaretçi iki kez yer alır. Bu durum, `tcache`'in "dolması" ve belleği ana heap'e iade etmesi gerektiğinde karmaşıklık yaratır. Saldırgan, bu çift serbest bırakmayı kullanarak `tcache` listesine kendi kontrolündeki bir adresin işaretçisini ekleyebilir. Örneğin, bir `chunk` serbest bırakılır, daha sonra bir başkası serbest bırakılarak `tcache` doldurulur ve ilk `chunk` tekrar serbest bırakılır. Bu noktada, `tcache`'in `fd` (forward pointer) alanı saldırgan tarafından manipüle edilebilir hale gelir.

Hedeflenen Bir Yazma Primitifi Elde Etmek​


tcache stashing saldırısında hedeflenen yazma primitifini elde etmek için, `tcache` listesinin kontrolü ele geçirildikten sonra birkaç adım atılır. Saldırgan, ilk olarak double free veya UAF ile `tcache` listesine kendi belirlediği bir sahte adresin işaretçisini yerleştirir. Örneğin, bir fonksiyonun GOT tablosundaki bir giriş veya stack üzerindeki bir return adresi gibi kritik bir konumu hedefleyebilir. Daha sonra, art arda `malloc` çağrıları yaparak `tcache`'teki sahte işaretçinin tahsis edilmesini sağlar. Sonuç olarak, bu `malloc` çağrısı, saldırganın istediği hassas konumu döndürür. Böylece, saldırgan o bellek bölgesine veri yazarak programın akışını veya davranışını değiştirebilir.

tcache Stashing Saldırılarına Karşı Savunma Yöntemleri

glibc geliştiricileri, `tcache` stashing gibi saldırılara karşı koymak için çeşitli savunma mekanizmaları uygulamıştır. En bilinen savunmalardan biri, glibc 2.32 sürümünde tanıtılan "Safe Linking" özelliğidir. Safe Linking, `tcache` listelerindeki `fd` ve `bk` (forward/backward) işaretçilerini basit bir XOR operasyonu ile gizler veya "şifreler". Bu, saldırganın rastgele bir adresi doğrudan liste içine enjekte etmesini zorlaştırır. İşaretçiler, her `malloc` veya `free` işleminde belirli bir adresle XOR'lanarak "gizlenir" ve "gösterilir". Ek olarak, bellek yönetimiyle ilgili güvenlik açıklarını tespit etmek için Address Sanitizer (ASan) gibi araçların kullanılması da kritik öneme sahiptir.

Modern Sistemlerde tcache Stashing'in Önemi​


tcache stashing, her ne kadar yeni glibc sürümlerinde Safe Linking gibi mitigasyonlarla zorlaştırılmış olsa da, hala modern sistemlerde kritik bir sömürü tekniği olarak önemini korumaktadır. Özellikle eski glibc sürümlerini kullanan sistemlerde veya Safe Linking'in devre dışı bırakıldığı özel derlemelerde etkili bir saldırı vektörü olmaya devam eder. Ayrıca, bu teknik, daha karmaşık exploit zincirlerinin bir parçası olarak sıklıkla kullanılır. Örneğin, bir Information Leak (bilgi sızıntısı) ile birlikte kullanılarak Safe Linking'in XOR anahtarını elde etmek ve ardından `tcache` stashing'i kullanarak arbitray write elde etmek mümkündür. Bu nedenle, güvenlik araştırmacılarının ve yazılım geliştiricilerinin `tcache`'in çalışma prensiplerini ve sömürü potansiyelini anlamaları hayati önem taşır.
 
Geri
Üst Alt