Saturday, April 19, 2008

Microsoft Works 7 Exploit'i ve JavaScript HeapSpray

Dün Çince bir blogda, tüm güvenlik güncelleştirmeleri yapılmış Windows XP SP2 kurulu makinede, IE7 ile ilgili linke tıklandığında WkImgSrv.dll’de oluşan basit bir crash bildirildi.

Crash’a sebebiyet verense, WkImgSrv.dll activex bileşenindeki WksPictureInterface değerine, negatif bir sayının atanmasıydı.

WkImgSrv .WksPictureInterface = -1

IE’ye debugger attach edip baktığımızda, yukarıdaki kod çalıştırıldığında EIP = 0x0F52EF6A geçerli olmayan bir hafıza bölgesindeki kodları çalıştırmak istiyor ve crash oluyor.

Çok zararsız gibi gözükmesine rağmen, aradan 1-2 saat geçmeden, aynı açık kullanılarak, ilgili linke tıklandığında shellcode çalıştırabilen ikinci bir exploit yayınlandı.

Nasıl oluyor da, bu denli basit gözüken bir hata EIP (Extended Instruction Pointer) kontrol edilemediği halde, shellcode çalıştırabiliyordu?

Saldırganın, EIP adresini değiştirip, shellcode’un olduğu bölgeye yönlendirme şansı yok fakat shellcode’u EIP adresine taşıma olasılığı var. JavaScript destekli browser ile yapılabilen bu yönteme HeapSpray deniyor. Bu yöntemde, JavaScript New Array() metodu kullanılarak, istenilen adrese ulaşılıncaya kadar heap hafızasında alan yaratılıyor ve saldırgan kırılma noktasına gelmeden önce hafızada 0x1A000000 adresine kadar heap blokları yaratıyor ve her bloğun içini NOP (0x90 no-operation) ile doldurup, sonuna shell kodu yazıyor. Bu durumda EIP 0x1A000000‘den küçük bir adreste nereye yönlenirse yönlensin, saldırganın NOP bloklarına düşmüş ve oradan da shell kodu çalıştırılmış oluyor.

Bu akıllıca saldırı yöntemini ilk olarak SkyLined rumuzu ile tanınan bir güvenlik uzmanı buldu ve bu yöntem, günümüzde bu tip açıkların exploit edilebilmesine olanak sağlayan tek yöntem olarak devam ediyor.

Bu saldırı türü Vista yüklü sistemleri de etkiliyor. Vista ile gelen yeni ASLR (Address Space Layout Randomization) teknolojisi de bu türde saldırıları durduramıyor. Çünkü daha önce bahsettiğimiz gibi; zaten saldırgan, EIP’i yönlendirmek için jmp reg32 gibi bir atak vektörüne ihtiyaç duymuyor.

Geçtiğimiz günlerde VMWare tarafından satın alınan Determina Corp.‘nin güvenlik uzmanlarından Alexander Sotirov, Black Hat Europe 2007’de, bu konu hakkında “Heap Feng Shui in JavaScript” adını verdiği çok detaylı bir sunum yapmıştı. İlgilenenlerin okumasını şiddetle öneririz.

Bu güvenlik açığının yaması henüz çıkmadı ve tahminimizce en az 1-2 hafta daha gecikecek gibi duruyor. Peki, yama gelene kadar bu açığa nasıl önlem alabiliriz?

Yapmanız gereken 00E1DB59-6EFD-4CE7-8C0A-2DA3BCAAD9C6 clsid sınıfı için kill bit oluşturmak. Kill bit işlemini, herhangi bir başka activex bileşenini durdurmak için de kullanabilirsiniz. Bunun için tek bilmeniz gereken CLSID değeridir.




No comments:

Post a Comment