Windows Driver Zafiyeti Avına Statik Analiz Aracı

mrcupcake adlı bir araştırmacı Windows kernel driver'larını fuzzing yaparken ilginç bir şey fark etti: en tehlikeli zafiyetler çökmeler değil, tasarımdan gelen hatalar. Özellikle keyfi çekirdek belleği okuyan/yazan driver'lar, cihazı açabilen herkes tarafından kullanılabiliyor.

El ile yüzlerce imzalı.sys dosyasını incelemek yavaş olduğu için, kendine bir zorluk koydu: hiçbir driver çalıştırmadan, tek günde statik bir zafiyeti avı aracı yap. driverhunter doğdu.

Araç üç şey yapıyor. Birincisi, PE import tablosunu parse ediyor ve her ASCII string'i tehlikeli API'ler için tarayor. String taraması önemli çünkü pek çok driver MmGetSystemRoutineAddress ile rutinleri dinamik olarak çözdüğü için, bu çağrılar import tablosunda görünmüyor. İkincisi, IOCTL kodlarını çıkarıyor ve hangi kontrol kodlarının hangi işlevleri tetiklediğini eşleştiriyor. Üçüncüsü, bu IOCTL'lerin çekirdek belleğine doğrudan erişim sağlayıp sağlamadığını kontrol ediyor.

Araştırma, heuristic'lerin neden yanıltıcı olabileceğini de ortaya koyuyor. Bir API'nin import tablosunda olması ya da bir string'de görünmesi, gerçekten bir zafiyet anlamına gelmeyebiliyor. Bağlam önemli. Örneğin ProbeForRead çağrısı her zaman kötü değildir; ama doğru parametre kontrolü olmadan, bellek dışı erişime yol açabilir.

Bu tür araçlar, BYOVD (Bring Your Own Vulnerable Driver) saldırılarını tespit etmek için kritik. İmzalı driver'lar Windows Defender'ı atlatabildiği için, statik analiz hızlı bir ilk filtre oluşturuyor. Kodun kendisi açık kaynak değilse de, yaklaşım, PE parsing, string matching, IOCTL extraction, kendi araçlarını yapmak isteyenler için bir yol haritası sunuyor.

konu hakkında tepkinizi verebilirsiniz