Genel Giriş
Bu hafta,güvenlik toplumdan DLL Hijacking güvenlik açığı hakkında çok şey duyduk. Bu açık bağımsız bir güvenlik araştırmacısı tarafından Microsoft Ofisinde ortaya çıkarılan 0-Day DLL Hijacking ile başladı.
Kısa bir süre sonra, security.nl web sitesi saldırıyı detaylı bir biçimde DLL ve OLE ile ilişkili geniş bir potansiyel saldırı yüzeyini araştıran bir makalede yayınladı.
Bir dinamik bağlantı kitaplığı (DLL), Windows işletim sisteminin temel bir bileşenidir. Bazı DLL’ler, Windows uygulamaları yüklenmeye başlarken kesinlikle gerekli olmaktadır. DLL Uygulama Programlama Arabirimleri (API) ve ek prosedürler gibi kaynaklarla yazılım uygulamalarını sağlamaktadır. Eğer bir saldırgan programın hangi DLL’i kurduğunu kontrol edebilirse, sonrasında saldırgan DLL yükleme süreci içinde kendi zararlı DLL dosyasının aktarımını sağlayabilir. Aslında bu yöntem yeni bir yöntem değil. Bu teknikle alakalı birkaç makale özellikle Microsoft’un hakkında internet üzerinde mevcut bulunuyor.
Kısaca, bu son Microsoft güvenlik açığı 0-Day DLL Hijacking Microsoft Office sistemi içerisinde bulunmayan bir DLL bileşeni arar ve sonuç olarak DLL Hijacking saldırılarına imkan sağlar. Ama detaylı olarak aşağıda göstereceğim gibi, bu tür bir güvenlik açığı Microsoft Office için özel değildir.
Saldırı Detayları
DLL arama emri de Microsoft tarafından belgelenmiştir. Özetlemek gerekirse, sistem yapılandırılmasına bağlı olarak, kullanılan program DLL yüklenirken aranacak dizinlerin sırasına karar verebilir. Bu arama sırası varsayılan olarak aşağıdaki gibidir:
1- Uygulamanın yüklenmiş olduğu dizine
2- Geçerli dizin
3- Sistem dizini, genellikle C:\\\\\\\\Windows\\\\\\\\System32\\\\\\\\ (GetSystemDirectory fonksiyonu bu dizini elde etmeye yarar.)
4- 16 bit sistem dizini - Bu dizinin yolunu almak için özel bir fonksiyon yok, ama aransın.
5- Windows dizini. GetWindowsDirector fonksiyonu bu dizini elde etmeye yarar.
6- PATH ortam değişkeninde listelenen dizinler.
Bu durumda, geçerli dizin sorundur. Bir program mevcut dizinden bir DLL yüklemeye karar verdiği zaman, DLL Hijacking açığının ortaya çıkmasına sebep olabilir.
Örneğin, eğer kullanıcı bir Microsoft Word belgesi açıyorsa, Microsoft Office dosya konumundan doküman için DLL bileşeni yüklemeye çalışır. Saldırgan, belgenin yerine kötü amaçlı bir DLL dosyası yerleştirebilir ve sonuç olarak, Microsoft Office yanlışlıkla kötü amaçlı bir kod yüklemiş olur.
Başka bir deyişle, DLL paylaşımını kullanarak Microsoft Windows kötü amaçlı bir belge dosyası paylaşmış oluyor.
Eğer SafeDllSearchMode etkinse, bir saldırganın bu tekniği kullanması daha zordur. Böyle bir durumda, DLL arama sırası aşağıdaki gibidir:
1- IpFileName fonksiyonu tarafından belirtilen dizin
2- Sistem dizini (GetSystemDirectory fonksiyonu bu dizini elde etmeye yarar.)
3- 16-bit sistem dizini – Bu dizinin yolunu almak için hiçbir özel fonksiyon yoktur, ama aynı zamanda aratılır.
4- Windows dizini (GetWindowsDirectory fonksiyonu bu dizini elde etmeye yarar.)
5- Geçerli dizin
6- PATH ortam değişkeninde listelenen dizinler. Bu “Uygulama Yolları” kayıt defteri anahtarında belirtilen her uygulama başına aynı yolu içermez unutmayın. Uygulama Yolları, DLL arama yolunu hesaplarken anahtar kullanmaz.
Bununla birlikte, geçerli dizin hala dizinler listesinde aranmaya devam eder. Buradaki fark şu, program bir DLL bileşeni için sistem dizinlerini önce arar ve eğer bulursa, o zaman geçerli dizinle çalışmaya devam eder.
Kendimi DLL Hijacking Yönteminden Nasıl Koruyabilirim?
Aşağıda anlatacak olduğum yol DLL Hijacking saldırılarında kurban olmamak için bir yol göstericidir.
Kullanıcılar için, bu saldırıyı önlemenin en iyi yolu satıcıdan son yamayı uygulamaktır. Ayrıca aşağıdaki adımları gerçekleştirerek sisteminizi avlanması daha zor bir hale getirebilirsiniz:
1- Not Defteri’ni açın
2- Aşağıdaki metni kopyalayıp/yapıştırın
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESystemCurrentControlSetControlSession Manager]
"SafeDllSearchMode"=dword:00000001
[HKEY_LOCAL_MACHINESystemCurrentControlSetControlSession Manager]
"CWDIllegalInDllSearch"=dword:ffffffff
3- Sisteminizde "patch.reg" olarak kaydedin.
4- Kaydedilen dosyayı çift tıklayarak Windows üzerinde açın ve “Evet” deyin.
Yukarıdaki komut SafeDllSearchMode etkinleştirir ve geçerli dizinden DLL yükleme işlemini devre dışı bırakır.
Geliştiriciler için, Microsoft’tan önerileri takip edebilirsiniz.
Bizler de öğrenmek ve gösteri amaçlı küçük bir uygulama geliştirdik. Bu araç, oluşturulan yeni süreçleri takip eder. Daha sonra boş bir argüman tarafından SetDllDirectory uygulamasını kullanmaya zorlamak için herhangi bir yeni süreç çalıştırıldığında bu uygulama devreye girecektir. Bu yeni süreçte geçerli dizinde bulunan yani yüklenmiş olan dll dosyasının korunmuş olacağı anlamına gelir.
Uygulamayı buradan edinebilirsiniz.
http://www.cyber-warrior.org/Forum/dll-hijacking-vuln-security-bug-res_572386,0.cwx
Hiç yorum yok: