Libc Protections
Last updated
Last updated
AWS Hacking öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
Malloc, belleği 8 bayt (32-bit) veya 16 bayt (64-bit) gruplar halinde ayırır. Bu, 32-bit sistemlerde parçaların sonunun 0x8 ile, 64-bit sistemlerde ise 0x0 ile hizalanması gerektiği anlamına gelir. Güvenlik özelliği, her parçanın bir bin'den bir işaretçi kullanmadan önce bu belirli konumlarda doğru hizalandığını kontrol eder.
64-bit sistemlerde parça hizalama zorunluluğu, Malloc'un güvenliğini önemli ölçüde artırarak sahte parçaların yerleştirilmesini yalnızca her 16 adresten 1'ine sınırlamaktadır. Bu, özellikle kullanıcının girdi değerleri üzerinde sınırlı kontrolü olduğu senaryolarda istismar çabalarını karmaşıklaştırır ve saldırıları daha karmaşık ve başarılı bir şekilde gerçekleştirilmesi zor hale getirir.
__malloc_hook Üzerinde Fastbin Saldırısı
Malloc'daki yeni hizalama kuralları, __malloc_hook
ile ilgili klasik bir saldırıyı da engeller. Önceden, saldırganlar parça boyutlarını manipüle ederek bu işlev işaretçisini geçersiz kılabilir ve kod yürütme elde edebilirlerdi. Artık, katı hizalama gereksinimi, bu tür manipülasyonların geçerli olmamasını sağlar, yaygın bir istismar yolunu kapatır ve genel güvenliği artırır.
İşaretçi Karıştırma, bellek yönetim işlemlerinde fastbin ve tcache Fd işaretçilerini korumak için kullanılan bir güvenlik geliştirmesidir. Bu teknik, sızdırılmış bellek bilgisi gerektirmeyen veya bilinen konumlara göre doğrudan bellek konumlarını manipüle eden belirli bellek istismar taktiklerini önlemeye yardımcı olur (göreli geçersiz kılmalar).
Bu tekniğin özü bir obfuscation formülüdür:
New_Ptr = (L >> 12) XOR P
L, işaretçinin Depolama Yeridir.
P, gerçek fastbin/tcache Fd İşaretçisidir.
XOR işlemi öncesinde depolama yerinin (L) 12 bit sağa kaydırılmasının nedeni kritiktir. Bu manipülasyon, bellek adreslerinin en az anlamlı 12 bitinin belirleyici doğasında var olan bir zayıflığı ele alır; bu bitler genellikle sistem mimarisi kısıtlamaları nedeniyle tahmin edilebilir. Bitleri kaydırarak, tahmin edilebilir kısım denklemin dışına çıkar, yeni, karıştırılmış işaretçinin rastgeleliğini artırır ve böylece bu bitlerin tahmin edilebilirliğine dayanan istismarların önüne geçer.
Bu karıştırılmış işaretçi, programların kullandığı adresleri rastgeleleştiren Adres Alanı Düzeni Rastgeleleştirmesi (ASLR) tarafından sağlanan mevcut rastgeleliği kullanır, bu da saldırganların bir sürecin bellek düzenini tahmin etmesini zorlaştırır.
Demangling işlemi, orijinal adresi geri almak için aynı XOR işlemini kullanmayı içerir. Burada, karıştırılmış işaretçi formülde P olarak ele alınır ve değişmemiş depolama yeri (L) ile XORlandığında, orijinal işaretçi ortaya çıkar. Karıştırma ve demangling'deki bu simetri, sistemin işaretçileri önemli bir ek yük olmadan verimli bir şekilde kodlayıp çözmesini sağlar ve bellek işaretçilerini manipüle eden saldırılara karşı güvenliği önemli ölçüde artırır.
İşaretçi karıştırma, yığın yönetiminde kısmi ve tam işaretçi geçersiz kılmalarını önlemeyi amaçlar, bu da güvenlikte önemli bir geliştirmedir. Bu özellik, istismar tekniklerini birkaç şekilde etkiler:
Bayt Göreli Geçersiz Kılmaların Önlenmesi: Önceden, saldırganlar bir işaretçinin bir kısmını değiştirerek yığın parçalarını farklı konumlara yönlendirebilirlerdi, bu teknik sızdırmasız Roman Evi istismarında belirgindi. İşaretçi karıştırma ile, böyle göreli geçersiz kılmalar şimdi bir yığın sızıntısı gerektiriyor, başarı olasılıklarını önemli ölçüde azaltıyor.
Tcache Bin/Fastbin Saldırıların Zorluğunun Artması: Fastbin veya tcache girişlerini manipüle ederek işlev işaretçilerini (örneğin, __malloc_hook
) geçersiz kılmaya yönelik yaygın saldırılar engellenir. Örneğin, bir saldırı, bir LibC adresini sızdırmayı, bir parçayı tcache bin'ine serbest bırakmayı ve ardından Fd işaretçisini __malloc_hook
'a yönlendirmek için geçersiz kılmayı içerebilir. İşaretçi karıştırma ile, bu işaretçilerin doğru bir şekilde karıştırılması gerekir, doğru manipülasyon için bir yığın sızıntısı gerektirir, böylece istismar engelini yükseltir.
Yığın Dışı Konumlarda Yığın Sızıntıları Gereksinimi: Yığın dışı alanlarda (yığın, .bss bölümü veya PLT/GOT gibi) sahte bir parça oluşturmak da işaretçi karıştırma gereksinimi nedeniyle bir yığın sızıntısı gerektirir. Bu, bu alanları istismar etmenin karmaşıklığını artırır, LibC adreslerini manipüle etme gereksinimiyle benzerlik gösterir.
Yığın Adreslerini Sızdırmak Daha Zor Hale Gelir: İşaretçi karıştırma, fastbin ve tcache binlerindeki Fd işaretçilerinin yığın adres sızıntıları için kaynak olarak kullanılabilirliğini kısıtlar. Ancak, sıralanmamış, küçük ve büyük binlerdeki işaretçiler karıştırılmamış kalır, bu nedenle adres sızdırmak için hala kullanılabilir. Bu değişim, saldırganları istismar edilebilir bilgi için bu binleri keşfetmeye yönlendirir, ancak bazı teknikler hala bir sızıntıdan önce işaretçileri demangling yapmaya izin verebilir, ancak kısıtlamalarla birlikte.
Sürecin daha iyi bir açıklaması için orijinal gönderiyi buradan kontrol edin.
İşaretçileri karıştırma ve demangling için kullanılan formül:
New_Ptr = (L >> 12) XOR P
Burada L depolama yeri ve P Fd işaretçisidir. L 12 bit sağa kaydırıldığında, P'nin en anlamlı bitlerini açığa çıkarır, çünkü XOR işlemi, bitler kendileriyle XORlandığında 0 çıktısı verir.
Algoritmadaki Ana Adımlar:
En Anlamlı Bitlerin İlk Sızıntısı: Kaydırılmış L ile P'yi XORlayarak, etkili bir şekilde P'nin en üst 12 bitini elde edersiniz çünkü kaydırılan L kısmı sıfır olacak ve P'nin karşılık gelen bitleri değişmeyecektir.
İşaretçi Bitlerinin Geri Kazanımı: XOR işlemi tersinir olduğundan, sonucu ve operandlardan birini bilmek diğer operandı hesaplamanızı sağlar. Bu özellik, bilinen bit setlerini karıştırılmış işaretçinin parçalarıyla ardışık olarak XORlayarak P için tüm bit setini çıkarmak için kullanılır.
İteratif Demangling: Süreç tekrarlanır, her seferinde bir önceki adımdan elde edilen P'nin yeni keşfedilen bitlerini kullanarak karıştırılmış işaretçinin bir sonraki segmentini çözmek için, tüm bitler geri kazanılana kadar.
Belirleyici Bitlerin İşlenmesi: L'nin son 12 biti kaybolur, ancak bunlar belirleyicidir ve işlem sonrası yeniden inşa edilebilir.
Bu algoritmanın bir uygulamasını burada bulabilirsiniz: https://github.com/mdulin2/mangle
İşaretçi koruma, glibc'de saklanan işlev işaretçilerini korumak için kullanılan bir istismar azaltma tekniğidir, özellikle atexit()
gibi kütüphane çağrılarıyla kaydedilenler. Bu koruma, işaretçileri bir sır ile XORlayarak ve bit kaydırma uygulayarak karıştırmayı içerir. Bu mekanizma, saldırganların işlev işaretçilerini geçersiz kılarak kontrol akışını ele geçirmesini önlemeyi amaçlar.
İşaretçi Koruma İşlemlerini Anlamak: İşaretçilerin karıştırılması (mangling), işaretçiyi 64-bit bir sır ile XORlayarak ve ardından 0x11 bit sola kaydırarak yapılan PTR_MANGLE
makrosu kullanılarak gerçekleştirilir. Orijinal işaretçiyi geri kazanmak için ters işlem PTR_DEMANGLE
ile yapılır.
Saldırı Stratejisi: Saldırı, saldırganın karıştırma için kullanılan sırrı çıkarmak için hem orijinal hem de karıştırılmış işaretçilerin bilinmesi gereken bir bilinen-düz metin yaklaşımına dayanır.
Bilinen Düz Metinleri İstismar Etme:
Sabit İşlev İşaretçilerini Belirleme: glibc kaynak kodunu veya başlatılmış işlev işaretçi tablolarını (örneğin, __libc_pthread_functions
) inceleyerek, bir saldırgan tahmin edilebilir işlev işaretçilerini bulabilir.
Sırrı Hesaplama: __pthread_attr_destroy
gibi bilinen bir işlev işaretçisi ve işlev işaretçi tablosundaki karıştırılmış versiyonu kullanılarak, sır, karıştırılmış işaretçiyi ters kaydırarak (sağa kaydırma) ve ardından işlevin adresi ile XORlayarak hesaplanabilir.
Alternatif Düz Metinler: Saldırgan, 0 veya -1 gibi bilinen değerlerle işaretçileri karıştırmayı deneyerek, bunların bellek içinde tanınabilir desenler üretip üretmediğini görmek için deney yapabilir, bu desenler bellek dökümlerinde bulunduğunda sırrı açığa çıkarabilir.
Pratik Uygulama: Sırrı hesapladıktan sonra, bir saldırgan işaretçileri kontrollü bir şekilde manipüle edebilir, bu da libc temel adresi bilgisi ve rastgele bellek konumlarını okuma yeteneği ile çoklu iş parçacıklı bir uygulamada İşaretçi Koruma korumasını aşmayı sağlar.
AWS Hacking öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)