![]() |
|
|||||||
| Üye Ol | SSS | Sxe indir | Sosyal Gruplar | Takvim | Resim Galerisi | Etiketler | Bütün Forumları okunmuş kabul et |
İşletim Sistemleri bölümünde Windows Kümeleme Korumasını Aşma konusu , Windows heap overflows açığı geçtiğimiz bir kaç yılda çok popülerleşti. Dökümanlara göre bu iç yapı ve Windows kümeleme mekanizmasını tutan, "Third Generation Exploitation" (3. nesil sörümürü) yada "Windows Heap Overflows" olarak tanıtıldı. Ayrıca kümeleme-tabanlı tampon bellek taşımasını (buffer overflow) tetikleyen ...
![]() |
|
|
LinkBack | Konu Seçenekleri |
|
|
#1 (permalink) |
|
Banlandı
Giriş: 13-06-2006
Yaş: 21
Mesajlar: 1.850
Rep Puanı: 250
![]() ![]() ![]() E-Güven: (0/0)
|
Windows heap overflows açığı geçtiğimiz bir kaç yılda çok popülerleşti. Buna rağmen, Windows 2003 ve sonraki sürümler,Windows XP SP2 gibi sistemlerin sunulmasıyla,hacker ların kümeleme sömürüsü (heap explotation) yapmasını engelleyen yeni bir güvenlik anlayışı ve seviyesi getirdi.Dökümanlara göre bu iç yapı ve Windows kümeleme mekanizmasını tutan, "Third Generation Exploitation" (3. nesil sörümürü) yada "Windows Heap Overflows" olarak tanıtıldı. Ayrıca kümeleme-tabanlı tampon bellek taşımasını (buffer overflow) tetikleyen (sömüren) bir yol olarak sunuldu. Dökümanlarda sunulan teknikler bu açıklara olan güveni arttırdı."Reliable Windows Exploits" (Güvenilir Windows Sömürüsü). Kümeleme sömürüsü (heap exploit) günümüzde Windows XP,Windows XP SP1 ve Windows 2000 gibi sistemlerde çok iyi uygulanabilmektedir. Dökümanlara göz attığımızda, neden klasik kümeleme sömürüleri ilkelerinin yeni Windows sürümlerinde çalışmadığını hatırlayacağız. Ardından sizlere bu koruma seviyesini aşmak için yeni bir yöntem sunucağız.To trigger a memory overwrite (hafıza üzerine yazmayı tetikleme). Another Way to Bypass Heap Protections (kümeleme korumasını aşmak için farklı bir yol) Bu yöntemdeki amaç,varsayılan kümele işleminde saklanan özel yapıları izleyerek hafızanın son 4 byte tına veri yazmaktır. Varsayılan kümeleme işlemi,bununla birlikte sistemin oluşturduğu diğer kümelemeler, bir çok uygulamanın (Windows APIs) bilgi saklaması ve çevresine sunması için kullanılmaktadır.Dinamik (değişken) bağlantılı bir DLL (uyuglama uzantısı) sistemde yüklendiğinde , bu DLL nin ana fonksiyonu (DLLMain yada benzeri...) çağrılır ve sıkla veriler bu işlem kümesinde depolanan veri alınabilir.Peki bu sırada hafızanın üzerine yazılan veri miktarı nedir? Gerçek şu ki en basit uygulamalar bile örneğin Windows Notdefteri, bir çok kütüphanelere (DLL) ihtiyaç duyması özellikle çok ilginçtir.Eğer biz varsayılan kümeleri denetlersek, ana işlem parçasının uygulanmaya (thread) başlamadan önce,farkedicez ki güzel bir miktarda küme hafızamızda unitelenmiş.40 byte (ki 8 byte tı başlık için ayrılmış) lık bu hafıza ünitemize kısa bir bakış attığımızda aşağıdatarif edilen yapıya sahip olduğunu görebiliriz. ![]() A sonraki 40 byte lık yapının adresini işaret etmektedir. B önceki 40 byte lık yapının adresini işaret etmektedir. NOT: Eğer işlemi bir çeşit hata ayıklayıcısı (debugger) ile gerçekleştirirseniz,bu yapılar 56 byte uzunluğuna gelicektir.Sistem doğal olarak kümenin sonuna 16 byte ekleyerek uygulamanın bir çeşit hata ayıklayıcısı ile çalıştırıldığını belirler. İlk fark edilebilir olay A ve B nin ön ve arka pointer larda rol almasıdır.Ayrıca bu yapıda X olarak tanımlanan kritik bir bölüm oluşturulur.Bu kritik bölüm başladığında 40-byte lık bir yapıyıla birleşir -- Biz buna bağlanmış yapı diyeceğiz -- ve kritik bölümde bazı parçaları tutmak üzere oluşturulur.bu yapıların bir kısmı ntdll.dll adlı veri bölümünde yer almaktadır.Bu yapıların hepsi kullanıldığında , bağlanmış yapılar varsayılan (default) küme içerisinde oluşturulur.Lütfen aşağıdaki şekli inceliyelim. ![]() Bu çift bağlantılı liste bize küme yönetim rütünleri tarafından tutulan serbest parça yollarını hatırlatmaktadır.Bir kritik bölümün yıkımı boyunca,birleştirilmiş bağ yapıları onların listesinden silinecektir.eğer A ve B yi kaldırırsak , hafızaya 4-byte uzunluğunda bir parça üzerine yazabileceğiz.Biz bu bağlanmamış işlemlerin içindeki (saldıracağımız) kodu rahatlıkla bulablieceğiz. Aşağıdaki assembly satırları RtlDeleteCriticalSection (ntdll.dll sürüm 5.1.2600.2180) tarafından uygulandı: mov [eax], ecx ; eax=B mov [ecx+4], eax ; ecx=A Bu satırlar muhtemelen daha önce bahsettiğimiz bir çok şeyi size hatırlatmıştır.Gerçekte,temel prensip klasik (heap overflow exploitation) sömürülerden biridir.Eğer parça pointer ları daha fazla kullanamıyorsak,bağlı listedeki diğer pointer ları kullanmalıyız.Bu noktada çok şanslıyız çünkü ,bu yapılar işlem kümelerinde çok geneldir ve kesinlikle adam akıllı kontrol edilmez.Üstelik,kritik bölümler işlem yok edilirken sık sık yıkılır ve bu sayede üzerine veri yazılımı kolay gerçekleşir. |
|
|
|