Yığın istismarı alanı, karmaşıklığı ve yüksek etkili güvenlik açıkları potansiyeli nedeniyle her zaman güvenlik araştırmacılarının ilgisini çekmiştir. HitconCTF Elemeleri 2024, “setjmp” olarak adlandırılan bir yığın pwn meydan okuması sunarak bu alanda zorlu bir meydan okuma sundu.
HitconCTF Qualifiers 2024, yılın en zorlu capture the flag etkinliklerinden (CTF) biri olarak işaretlendi. Bir dizi çekirdek ve VM kaçış zorluğu arasında, setjmp zorluğu, görünüşte basit yaklaşımı ancak karmaşık temel mekanizmalarıyla öne çıktı.
Quarkslab’ın bloguna göre, bu zorluk GLIBC 2.31, yani GNU C kütüphanesi çalıştıran bir sistemde klasik yığın istismarı tekniklerini içeriyordu. Temel zorluk, önemli bir bellek tahsisini tetiklemek için scanf() kullanılarak çözülen bir libc işaretçi sızıntısı elde etmekte yatıyordu.
Yığın Sömürü Teknikleri Açıklandı
Setjmp meydan okumasının belirli ayrıntılarına dalmadan önce, GLIBC’nin malloc iç işleyişleri hakkında bazı temel kavramları kavramak çok önemlidir. Azeria Labs’ın malloc iç işleyişleri kılavuzu ve Shellphish’in “how2heap”i gibi kaynaklar değerli içgörüler sağlar. Ek olarak, “Malloc Des Malificarum” yığın istismar teknikleri hakkında tarihsel bağlam sunar. Bu kavramları anlamak, yığın yönetiminde güvenlik açıklarının nasıl istismar edildiğini anlamak için temel oluşturacaktır.
Yığın, dinamik bellek tahsisi için kullanılan bir işlemin bellek alanının kritik bir bileşenidir. malloc() ve free() gibi işlevler aracılığıyla yönetilen yığın, programların ihtiyaç duyduklarında bellek bloklarını tahsis etmelerine ve tahsislerini kaldırmalarına olanak tanır. Bir bellek tahsisi isteği yapıldığında, yığın yöneticisi istenen boyuttaki bir bellek parçasına bir işaretçi döndürür. Bellek serbest bırakıldığında, parçalanmayı önlemek ve hızlı yeniden tahsisi sağlamak için verimli bir şekilde yönetilmelidir.
GLIBC’deki yığın yönetimi, bellek parçalarını verimli bir şekilde düzenlemek için çeşitli tipte bölmeler kullanır: Küçük Bölmeler, 1024 bayta kadar olan parçalar için çift bağlantılı listelerdir, Büyük Bölmeler ise 1024 bayttan büyük parçaları kendi çift bağlantılı listeleriyle işler. Sıralanmamış Bölme, diğer bölmelere hemen uymayan parçalar için bir önbellek görevi görür. Hızlı Bölmeler, yakında yeniden kullanılması beklenen küçük parçalar için tek bağlantılı listelerden oluşur ve Tcache Bölmeleri, tahsisi hızlandırmak için sık kullanılan parçalar için iş parçacığı yerel depolama sağlar.
Her bin türünün, yığın istismar tekniklerini anlamak için hayati önem taşıyan farklı özellikleri ve optimizasyonları vardır. Örneğin, fastbin’ler ve tcache bin’leri hızlı tahsis ve tahsisi kaldırmayı kolaylaştırırken, aynı zamanda istismar edilebilecek güvenlik açıkları da sunarlar.
Yığın Sömürü Teknikleri: Temel Kavramlar
Yığın istismar teknikleri sıklıkla bellek yönetim sistemleri içindeki boş listeleri ve bölmeleri manipüle etmeye odaklanır. Temel istismar ilkelleri arasında, bitişik parçaları veya bölme listesi işaretçilerini değiştirmek için arabellek taşmalarından yararlanan Yığın Taşması; serbest bırakılan bir parçanın hala referans alındığı ve saldırganların belleği sızdırmasına veya değiştirmesine olanak tanıyan Kullanım Sonrası Serbest Bırakma (UAF) ve bellek bozulmasına veya keyfi yazma ilkellerine neden olmak için aynı parçayı iki kez serbest bırakmayı içeren Çift Serbest Bırakma bulunur.
Setjmp meydan okuması bağlamında, yerel olmayan atlamalar için setjmp ve longjmp işlevlerinin kullanımı, yürütme bağlamlarını ve karmaşık kontrol akışlarını yönetmedeki rollerini vurgular. Bu meydan okuma, yığın belleğinde kullanıcı yapılarının çift bağlantılı bir listesinin işlenmesini, kullanıcı oluşturma, silme ve değiştirme işlemlerini gerektirir.
Meydan okuma, istismar stratejisinin merkezinde yer alan hem Use After Free (UAF) hem de Double-Free güvenlik açıklarını içeriyordu. Use After Free senaryosunda, bir kullanıcının referansını yığında bırakması, bellek yapılarının manipüle edilmesine izin veren bir UAF güvenlik açığı yaratıyordu. Double-Free güvenlik açığı, aynı kullanıcıyı iki kez serbest bırakmayı içeriyordu ve gelişmiş bellek manipülasyonuna olanak sağlıyordu.
Saldırganlar, bir UAF güvenlik açığından yararlanarak tcache’deki çift serbest algılamayı atlatabilir ve bellek üzerinde kontrol elde edebilirler. İstismar stratejisi, libc içinde keyfi okuma ve yazma işlemleri gerçekleştirmek için çift serbest koşulunu tetiklemeyi içeriyordu. Saldırganlar, __free_hook’u system() adresiyle üzerine yazarak keyfi komutlar yürütebilirlerdi. Örneğin, /bin/sh kullanıcı adıyla bir kullanıcı oluşturup daha sonra serbest bırakmak, __free_hook’u etkinleştirir ve nihayetinde bir kabuk komutunun yürütülmesine yol açardı.
Pratik Adımlar ve Yığın Kullanım Teknikleri
HitconCTF Qualifiers 2024’teki meydan okuma, yığın istismarında birkaç kritik adımı içeriyordu. Yığın Sızıntısı, bir kullanıcıyı silerek ve ardından yığının temel adresini çıkarmak için serbest bırakılan parçanın içeriklerini okuyarak elde edildi. Bu teknik, araştırmacıların yığının düzeni ve bellek yapısı hakkında fikir edinmelerini sağladı. Bir Libc Sızıntısı gerçekleştirmek için, büyük tahsisler için scanf() kullanılarak büyük bir parça stratejik olarak sıralanmamış bölmeye zorlandı. Parça yerleşimlerinin dikkatli bir şekilde yönetilmesini gerektiren bu süreç, libc temel adresini ortaya çıkardı ve daha fazla istismarı kolaylaştırdı.
Son Exploit, __free_hook’u system() fonksiyonunun adresiyle üzerine yazmaya odaklandı. Bu teknik, hem çift serbest bırakma koşullarından hem de yığın sızıntılarından yararlanarak keyfi komutların yürütülmesini sağladı. /bin/sh kullanıcı adıyla bir kullanıcı oluşturup ardından onu serbest bırakarak, __free_hook kabuk komutunu yürütmek üzere tetiklendi ve bu da exploit’in başarısını etkili bir şekilde gösterdi.
Sonuç olarak, setjmp mücadelesi yığın istismarının karmaşık doğasını ve GLIBC malloc iç yapısının gerektirdiği ayrıntılı anlayışı örneklendirdi. Yığın yapılarına, serbest listelere ve istismar ilkellerine hakim olmanın, güvenlik açıklarını belirlemek ve istismar etmek için karmaşık teknikler geliştirmenin önemini vurguladı. Azeria Labs’ın malloc iç yapısı ve çeşitli çevrimiçi kılavuzlar gibi kaynaklar, uygulamalı deneyim kazanmak ve modern güvenlik zorluklarında gezinme ve üstesinden gelme becerilerini geliştirmek için paha biçilmezdir.