- 8 Nis 2020
- 221
- 73
Yazılım açıkları, bilgisayar sistemlerini ve ağları tehdit eden en yaygın güvenlik risklerinden biridir. Bu açıklardan yararlanmak için tasarlanmış saldırılar, hassas verileri ele geçirmek, sistemleri bozmak veya hatta kontrolünü ele geçirmek için kullanılabilir.
Sömürü azaltma kontrolleri, yazılım açıklarından yararlanmayı zorlaştırarak veya imkansız hale getirerek bu riski azaltmaya yardımcı olan güvenlik özellikleridir. Bu kontroller, yazılım geliştiricileri, derleyiciler ve işletim sistemi üreticileri tarafından uygulanabilir.
Sömürü azaltma kontrolleri üç ana kategoriye ayrılabilir:
- Windows Defender Exploit Guard (yalnızca Windows işletim sistemi için)
- Derleme zamanı kontrolleri
- İşletim sistemi kontrolleri
- İşletim Sistemi Korumaları:
- Bellek koruması (ASLR, DEP, NX bit)
- Adres alanı düzeni rastgeleleştirme (ASLR)
- Veri yürütme engellemesi (DEP)
- Yığın Koruması (GS, SSP)
- Sistem çağrısı filtreleme
- Derleme Zamanı Kontrolleri:
- Derleyici ve derleyici seçenekleri
- Derleme zamanı korumaları (FORTIFY_SOURCE, Stack Smashing Protection)
Windows Defender Exploit Guard, Windows işletim sistemlerinde bulunan bir dizi sömürü azaltma özelliğidir. Bu özellikler, yazılım açıklarından yararlanmayı zorlaştırmak için birlikte çalışır.
Windows Defender Exploit Guard'ın özelliklerinden bazıları şunlardır:
- Saldırı Yüzeyini Azaltma: Bu özellik, yaygın olarak kullanılan saldırı vektörlerini bloke ederek sistemin saldırı yüzeyini azaltmaya yardımcı olur.
- Kontrol Akışı Koruması: Bu özellik, bir programın içindeki yürütme akışını izleyerek saldırganların kötü amaçlı kodu çalıştırmasını önlemeye yardımcı olur.
- Akıllı Güvenlik Grafiği: Bu özellik, Microsoft'un tehdit istihbaratını kullanarak saldırıları tanımlamaya ve engellemeye yardımcı olur.
Derleme zamanı kontrolleri, derleyici tarafından kodda uygulanan güvenlik özellikleridir. Bu kontroller, yazılım açıklarından yararlanmayı zorlaştırmak için kodu değiştirerek veya sınırlayarak çalışır.
Derleme zamanı kontrollerinden bazıları şunlardır:
- Yığın Kırma Koruması (SSP): Bu özellik, yığın taşması saldırılarını önlemeye yardımcı olur.
- Adres Alanı Düzeni Rastgeleleştirme (ASLR): Bu özellik, önemli veri yapılarının bellek adreslerini rastgele hale getirerek saldırganların bunları hedeflemesini zorlaştırır.
- Veri Yürütme Engellenmesi (DEP): Bu özellik, veri belleğindeki kodun yürütülmesini engeller.
İşletim sistemi kontrolleri, işletim sistemi tarafından sağlanan güvenlik özellikleridir. Bu kontroller, yazılım açıklarından yararlanmayı zorlaştırmak için belleği, yürütmeyi ve sistemi korumak için tasarlanmıştır.
İşletim sistemi kontrollerinden bazıları şunlardır:
- Kullanıcı Hesap Kontrolü (UAC): Bu özellik, saldırganların kötü amaçlı yazılım yüklemesini veya sisteme izinsiz değişiklikler yapmasını önlemeye yardımcı olur.
- Güvenlik Duvarı: Bu özellik, izinsiz gelen ve giden trafiği engellemeye yardımcı olur.
- Antivirüs yazılımı: Bu yazılım, virüsleri, solucanları ve diğer kötü amaçlı yazılım türlerinden sistemleri korumaya yardımcı olur.
- W^X, bellekteki sayfaları ya yazılabilir ya da yürütülebilir olarak işaretleyen bir güvenlik özelliğidir.
- Bu, yığın bellekteki kod yürütülmesini önleyerek saldırıları zorlaştırır.
- AMD 64-bit işlemcilerde kullanılan No-eXecute (NX) biti ve Intel işlemcilerde kullanılan eXecute Disable (XD) biti, W^X'ın donanım tabanlı bir uygulamasıdır.
- Bazı saldırılar, Return-Oriented Programming (ROP) ve return-to-libc gibi teknikler kullanarak W^X'ı atlatabilir.
- Bazı W^X uygulamalarında, özellik devre dışı bırakılabilir
DEP, bellekteki belirli alanlarda kod yürütülmesini önleyen bir güvenlik özelliğidir. Bu, yığın gibi alanlarda kötü amaçlı kod yürütülmesini engellemeye yardımcı olur.
DEP, bellek sayfalarını ya yazılabilir ya da yürütülebilir olarak işaretler. Kodun yalnızca yürütülebilir olarak işaretlenmiş sayfalarda çalıştırılmasına izin verilir. Yürütülemez olarak işaretlenmiş bir alanda kod çalıştırılmaya çalışılırsa, bir istisna oluşturulur ve kod çalışmaz.
DEP, mükemmel değildir ve bazı saldırılar tarafından atlatılabilir. Örneğin, Return-Oriented Programming (ROP) ve return-to-libc gibi teknikler kullanan saldırılar, DEP'i atlatabilir.
DEP'i etkinleştirmek için aşağıdaki adımları izleyin:
- Başlat -> Çalıştır -> "sysdm.cpl" yazın ve Enter'a basın.
- Gelişmiş -> Performans -> Ayarlar -> Veri Yürütme Engellemesi sekmesine gidin.
- Burada DEP'i yalnızca temel Windows programları ve hizmetleri için veya tüm programlar ve hizmetler için (açıkça listeledikleriniz hariç) etkinleştirebilirsiniz.
- Bir işlem sırasında gerçekleşen beklenmedik durumlara verilen isimdir. Anormallikler veya programın kararlılığını etkileyebilecek kasıtlı hata oluşturma girişimleri de dahildir.
- SEH, özel durumların ele alınmasını sağlayan bir mekanizmadır.
- Özel durum oluştuğunda, SEH devreye girer ve özel durumu çözmeye çalışır.
- Çözülemezse, program çökebilir.
- SEH'in güvenliğini artıran bir derleme zamanı seçeneğidir.
- Güvenli olduğu bilinen özel durum işleyicilerinin bir listesini oluşturur.
- Yalnızca bu listedeki işleyicilerin kullanılmasına izin verir.
- Saldırganların kötü amaçlı kod çalıştırmak için SEH'i ele geçirmesini zorlaştırır.
- Mükemmel değildir ve bazı saldırılar tarafından atlatılabilir.
- Yalnızca derleme zamanında etkinleştirilebilir.
- SEHOP, Windows Server 2008 ve Vista'da tanıtılan bir güvenlik özelliğidir.
- Saldırganların özel durum işleyicilerini (SEH) ele geçirmesini ve kötü amaçlı kod çalıştırmak için kullanmasını zorlaştırır.
- SEH zincirinin sonuna özel bir sembolik kayıt ekler.
- Bir özel durum işleyicisine kontrol verilecek önce, bu sembolik kaydın erişilebilir olduğundan emin olmak için zincir kontrol edilir.
- Eğer zincir bozulmuşsa (örneğin, bir saldırgan tarafından değiştirilmişse), SEHOP işlemi durdurur ve saldırıyı engeller.
- Bazı uygulamalar SEHOP ile uyumlu olmayabilir.
- Etkinleştirilmesi bazı programların çökmesine neden olabilir.
- Yığın kanaryası (Microsoft dünyasında güvenlik çerezi de denir), derleme zamanında korumaya ihtiyaç duyduğu düşünülen işlevlere kod ekleyen bir güvenlik kontrolüdür.
- Yığın taşması saldırılarını tespit etmeye ve engellemeye yardımcı olur.
- İşlev çağrısı sırasında:
- Bir işlev çağrıldığında, dönüş işaretçisi olarak bilinen bir adres yordam yığınına yerleştirilir.
- Her işlev çağrısı, yordam yığınında kendi yığın çerçevesini alır.
- Yığın çerçevesi, argümanlar, tampon alanı ve dönüş işaretçisi gibi değişkenleri depolamak için kullanılan küçük bir bellek alanıdır.
- Kanaryanın yerleştirilmesi:
- Yığın kanaryası, dönüş işaretçisinin üzerine, yığın çerçevesine rastgele bir değer olarak eklenir.
- Saldırı tespiti:
- Bir saldırgan yığın taşması saldırısı ile dönüş işaretçisinin üzerine yazmaya çalışırsa, önce kanaryanın üzerine yazması gerekir.
- Kanaryanın değeri rastgele olduğu için, saldırgan doğru değeri bilmez ve genellikle kanaryayı bozar.
LFH nedir?
- LFH, Windows XP SP2/3 ve Windows Server 2003'te tanıtılan bir bellek yönetim tekniğidir.
- Windows Vista ve sonraki sürümlerde varsayılan olarak kullanılır.
- Yığın parçalanmasını azaltarak ve güvenliği artırarak bellek yönetimini daha verimli hale getirir.
- Yığınların yönetimini sağlar:
- LFH, bellek bloklarının tahsisi ve serbest bırakılmasından sorumludur.
- 32-bit kodlama ile güvenli blok tahsisi:
- Blok tahsis edilirken, 32-bit kodlama kullanarak güçlü bir bütünlük kontrolü gerçekleştirir.
- Bu, _Heap_Base yapısında depolanan bir değeri XOR işlemiyle yapılır.
- XP SP2 ve Server 2003'teki standart yığınları koruyan 8-bit çerezden çok daha güvenlidir.
- Belirli blok boyutları için kullanılır:
- LFH, 8 bayttan büyük ancak 16 KB'den büyük olmayan blokları tahsis etmek için kullanılabilir.
- 16 KB'den büyük tahsisler standart yığın kullanır.
- 128 kova sistemi:
- Tahsisler, 128 kovaya önceden belirlenmiş blok boyutları kullanılarak gerçekleştirilir.
- 7 kova grubu vardır ve her grup aynı ayrıntı düzeyine sahiptir.
- Windows XP SP2 ve Windows Server 2003'te tanıtılan bir güvenlik kontrolüdür.
- Bellek blokları serbest bırakılmadan önce, işaretçilerin doğru şekilde ayarlandığından emin olarak yığın bozulmalarını ve saldırıları engellemeye yardımcı olur.
- İşaretçilerin kontrolü:
- Bir bellek bloğu serbest bırakılmadan önce, Güvenli Unlinking, blokla ilişkili ileri ve geri işaretçilerin doğru şekilde ayarlandığını kontrol eder.
- Bu, saldırganların sahte işaretçiler kullanarak blokları birbirine bağlamasını zorlaştırır.
- Kod örneği:
- Gönderdiğiniz görseldeki kod şu şekilde çalışır:
- (B->Flink)->Blink=B: Sonraki bloğun geriye dönük işaretçisi, geçerli bloğa işaret etmelidir.
- (B->Blink)->Flink=B: Önceki bloğun ileriye dönük işaretçisi de geçerli bloğa işaret etmelidir.
- Gönderdiğiniz görseldeki kod şu şekilde çalışır:
- Yığın bozulmalarını ve saldırıları engellemeye yardımcı olur.
- Heap protection için kullanılan 8-bit güvenlik çerezlerinden daha güçlü bir koruma sağlar.
- Bazı durumlarda atlatılabilir.
- En iyi koruma için çerezler, PEB randomizasyonu, ASLR ve diğer kontrollerle birlikte kullanılması gerekir.
- Saldırganların bellekteki belirli konumları hedeflemesini zorlaştırarak saldırıları engellemeye yardımcı olan bir güvenlik tekniğidir.
- Bellekteki programların, DLL'lerin ve diğer verilerin yükleneceği yerleri rastgele hale getirir.
- Microsoft Visual Studio 2005 veya sonraki sürümlerde /DYNAMICBASE bağlantı seçeneği etkinleştirilerek derlenen uygulamalar ASLR'den faydalanabilir.
- DLL'ler ve PE (Portable Executable) dosyaları ASLR'ye katılabilir.
- Rastgele yükleme adresleri:
- ASLR'ye katılan PE dosyalarına, 256 olası konumdan rastgele bir yükleme adresi atanır.
- Bu adres, sistem her yeniden başlatıldığında değişir.
- Yığın ve yığının rastgeleleştirilmesi:
- Her çalıştırmada, yığın 32 olası konumdan birine yüklenir ve ardından yığın işaretçisi 2048 bayta kadar bir değerle azaltılarak daha da rastgele hale getirilir.
- Yığın 16384 olası konumdan birine yerleştirilebilir.
- Heap de 32 olası konumdan birine yüklenir.
ROP ve JOP nedir?
- Saldırganlar tarafından, bellekteki mevcut kod parçacıklarını (gadget'lar) kullanarak kötü amaçlı kod çalıştırmak için kullanılan tekniklerdir.
- Saldırganlar, yığın işaretçisini (stack pointer) yığından başka bir bellek alanına yönlendirerek bu saldırıları gerçekleştirirler.
- AntiROP, hassas işlevler çağrılmadan önce yığın işaretçisinin yığın bölgesi içinde olup olmadığını kontrol eder.
- Yığın işaretçisi yığın dışındaysa, saldırı girişimi olarak kabul edilir ve engellenir.
- Bu, saldırganların DEP (Veri Yürütme Engellemesi) gibi korumaları atlatmasını zorlaştırır.
- Dan Rosenberg, yığın işaretçisini VirtualProtect() işlevi çağrılmadan önce yığına geri döndürerek AntiROP korumasını atlatmanın mümkün olduğunu gösterdi.
- Bu, AntiROP'un mükemmel olmadığını ve bazı saldırılar tarafından atlatılabileceğini göstermektedir.