SeNZeRo
Özel Üye
- 8 Eyl 2016
- 5,100
- 14
Merhaba arkadaşlar. Bu yazımda DLL Hijacking saldırısının ne olduğunu, nasıl korunacağımızı ve nasıl yapıldığını inceleyeceğiz. Öncelikle DLL kavramının ne olduğunu öğrenerek başlayalım.
DLL Nedir ?
DLL, Dynamic Link Library nin baş harfleri kullanılarak oluşturulan bir kısaltmadır. Türkçe karşılığı ise Dinamik Link Kütüphanesi dir. DLL dosyalarının uzantısı .dll dir.
Microsoft tarafından geliştirilen DLL dosyalarının amacı, birden çok programın aynı işlemi yapmak için kullandığı fonksiyonları tek dosyada birleştirmektir. Program için gerekli olan fonksiyonların önce kendi içinde araması, bulamazsa dinamik link kütüphanesi nde yani DLL dosyasına aramasıdır.
Böylelikle her fonksiyonu farklı dosyadan almak yerine tek dosyadan alması programın kullandığı bellek boyutunu en aza indirerek programın ve bilgisayarın daha hızlı çalışmasını sağlar.
DLL Hijacking Nedir ?
Windows üzerinde çalışan programların ihtiyaç duyduğu DLL dosyalarını arama ve yükleme işlemlerinde ortaya çıkan bir zafiyettir. Programlar gerekli olan DLL dosyalarının tam yolunu belirtmezlerse Windows DLL yi belli bir sıralama ile arayacaktır. Öncelikli olarak Windows uygulamanın ilk yüklendiği dizini arar. Kötü niyetli kişi (hacker) daha önceden kullanılacak DLL yolunu tespit eder ve kendi hazırladığı DLL dosyası ile değiştirir ise hacker amacına ulaşmış olur. Sisteme sızma işlemini gerçekleştirmiş olur ve DLL Hijacking zafiyet gerçekleşmiş olur.
DLL Hijacking zafiyeti daha çok karşı taraftan size gönderilen Word, Powerpoint, Windows programları vb gibi dosyalarla size bulaşır. Eğer gönderilen dosyayı açarsanız harici bir DLL doyası yüklenir ise hacker in bilgisayarınıza uzaktan erişim sağlamasına yol açmış olursunuz. Günümüzde eskisi kadar kullanılmasa da hala kullanan kişiler mevcut.
DLL Arama Mantığı Nasıl ?
Windows önce programın yüklendiği dizinde arama yapar sonra diğer dizinlere geçer. Bundan daha önceden bahsetmiştim. Şimdi tam anlamıyla Windows DLL ararken hangi mantığı izlediğini aşağıdan öğrenebilirsiniz.
Uygulama klasörü sistem klasörlerinden daha yüksek önceliğe sahip olduğundan eğer bir uygulama, sistem DLL' lerini kullanma maksadıyla kurulduysa, bir saldırgan kurulum dizininde bir DLL yerleştirebilir (ki varsayılanı C:\Program Files dizinidir) ve kod yürütebilir.
DLL Hijacking Örneği:
Şimdi de örnek olarak bir DLL hijacking uygulaması yapalım. Hedef uygulama olarak BGinfo uygulamasını seçiyorum. BGinfo uygulamasının çalışması için gerekli olan DLL Riched32.dll dosyasıdır. Biz Riched32.dll dosyası kendi yaptığımız zararlı DLL dosyası ile değiştirirsek ve BGinfo uygulaması ile aynı dizinde olursa Windows arama mantığından dolayı diğer dizinlere geçmeden ilk olarak uygulamanın bulunduğu dizine bakacaktır. Bundan dolayı bizim yerleştirdiğimiz zararlı DLL dosyası çalışacak ve sistem üzerinde uzaktan kod çalıştırma yetkisine sahip olacağız.
Windows 8.1 Pro makinemde bginfo.exe yüklendiğinde göründüğü gibi:
Oluşturduğum "kötü amaçlı" Riched32.dll aşağıdaki kodu kullanarak yaptım:
Kodları bir main.cpp dosyasına kaydederek Linux'ta derlenebilir (ben de Fedora'da yapmıştım). Derleme işlemi için gereken komutlar aşağıdadır:
Ancak, bunu yapmak için Mingw32'ye ihtiyacınız olacak. Sistemde yüklü olarak gelmeyenler, aşağıdaki komutu kullanarak yükleyebilirsiniz.
Derleme komutları main.dll adlı bir dosya oluşturacak ve istediğiniz gibi yeniden adlandırabilirsiniz. DLL yüklendiğinde, calc.exe'nin çalışmasına neden olacak, bu komutun yürütülmesinin mümkün olduğunu ve DLL Hijacking işleminin başarılı olduğunu gösterecektir.
DLL Hijacking Saldırılarına Karşı Korunma Yolları:
DLL Nedir ?
DLL, Dynamic Link Library nin baş harfleri kullanılarak oluşturulan bir kısaltmadır. Türkçe karşılığı ise Dinamik Link Kütüphanesi dir. DLL dosyalarının uzantısı .dll dir.
Microsoft tarafından geliştirilen DLL dosyalarının amacı, birden çok programın aynı işlemi yapmak için kullandığı fonksiyonları tek dosyada birleştirmektir. Program için gerekli olan fonksiyonların önce kendi içinde araması, bulamazsa dinamik link kütüphanesi nde yani DLL dosyasına aramasıdır.
Böylelikle her fonksiyonu farklı dosyadan almak yerine tek dosyadan alması programın kullandığı bellek boyutunu en aza indirerek programın ve bilgisayarın daha hızlı çalışmasını sağlar.
DLL Hijacking Nedir ?
Windows üzerinde çalışan programların ihtiyaç duyduğu DLL dosyalarını arama ve yükleme işlemlerinde ortaya çıkan bir zafiyettir. Programlar gerekli olan DLL dosyalarının tam yolunu belirtmezlerse Windows DLL yi belli bir sıralama ile arayacaktır. Öncelikli olarak Windows uygulamanın ilk yüklendiği dizini arar. Kötü niyetli kişi (hacker) daha önceden kullanılacak DLL yolunu tespit eder ve kendi hazırladığı DLL dosyası ile değiştirir ise hacker amacına ulaşmış olur. Sisteme sızma işlemini gerçekleştirmiş olur ve DLL Hijacking zafiyet gerçekleşmiş olur.
DLL Hijacking zafiyeti daha çok karşı taraftan size gönderilen Word, Powerpoint, Windows programları vb gibi dosyalarla size bulaşır. Eğer gönderilen dosyayı açarsanız harici bir DLL doyası yüklenir ise hacker in bilgisayarınıza uzaktan erişim sağlamasına yol açmış olursunuz. Günümüzde eskisi kadar kullanılmasa da hala kullanan kişiler mevcut.
DLL Arama Mantığı Nasıl ?
Windows önce programın yüklendiği dizinde arama yapar sonra diğer dizinlere geçer. Bundan daha önceden bahsetmiştim. Şimdi tam anlamıyla Windows DLL ararken hangi mantığı izlediğini aşağıdan öğrenebilirsiniz.
- - Programın yüklendiği dizin
[*]- C: \ Windows \ System32
[*]- C: \ Windows \ System
[*]- C: \ Windows
[*]- Geçerli çalışma dizini
[*]- PATH ortam değişkeni sistemindeki dizinler
[*]- Kullanıcı PATH ortam değişkenindeki dizinler
Uygulama klasörü sistem klasörlerinden daha yüksek önceliğe sahip olduğundan eğer bir uygulama, sistem DLL' lerini kullanma maksadıyla kurulduysa, bir saldırgan kurulum dizininde bir DLL yerleştirebilir (ki varsayılanı C:\Program Files dizinidir) ve kod yürütebilir.
DLL Hijacking Örneği:
Şimdi de örnek olarak bir DLL hijacking uygulaması yapalım. Hedef uygulama olarak BGinfo uygulamasını seçiyorum. BGinfo uygulamasının çalışması için gerekli olan DLL Riched32.dll dosyasıdır. Biz Riched32.dll dosyası kendi yaptığımız zararlı DLL dosyası ile değiştirirsek ve BGinfo uygulaması ile aynı dizinde olursa Windows arama mantığından dolayı diğer dizinlere geçmeden ilk olarak uygulamanın bulunduğu dizine bakacaktır. Bundan dolayı bizim yerleştirdiğimiz zararlı DLL dosyası çalışacak ve sistem üzerinde uzaktan kod çalıştırma yetkisine sahip olacağız.
Windows 8.1 Pro makinemde bginfo.exe yüklendiğinde göründüğü gibi:
Oluşturduğum "kötü amaçlı" Riched32.dll aşağıdaki kodu kullanarak yaptım:
Kod:
#include <windows.h>
int fireLazor()
{
WinExec("calc", 0);
return 0;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason, LP**** lpvReserved)
{
fireLazor();
return 0;
}
Kodları bir main.cpp dosyasına kaydederek Linux'ta derlenebilir (ben de Fedora'da yapmıştım). Derleme işlemi için gereken komutlar aşağıdadır:
Kod:
i686-w64-mingw32-g++ -c -DBUILDING_EXAMPLE_DLL main.cpp
i686-w64-mingw32-g++ -shared -o main.dll main.o -Wl,--out-implib,main.a
Ancak, bunu yapmak için Mingw32'ye ihtiyacınız olacak. Sistemde yüklü olarak gelmeyenler, aşağıdaki komutu kullanarak yükleyebilirsiniz.
Kod:
sudo dnf install mingw32-gcc-c++.x86_64
Ayrıca ihtiyacınız olacak
sudo dnf install mingw32-winpthreads*
Derleme komutları main.dll adlı bir dosya oluşturacak ve istediğiniz gibi yeniden adlandırabilirsiniz. DLL yüklendiğinde, calc.exe'nin çalışmasına neden olacak, bu komutun yürütülmesinin mümkün olduğunu ve DLL Hijacking işleminin başarılı olduğunu gösterecektir.
DLL Hijacking Saldırılarına Karşı Korunma Yolları:
- DLL Hijacking saldırısından korunmanın en iyi yolu tam, net, kesin bir DLL dosyası yolu belirtmektir. Harici kütüphaneler dahil ederken güvenli bir şekilde dahil edilmelidir.
[*]Okuma, yazma izinlerini kontrol etmek.
[*]Ağ paylaşımlarından kütüphanelerin yüklenmesini devre dışı bırakmak.
[*]WebClient servisini devre dışı bırakmak.
[*]Frewall ile 139. ve 445. portları engellemek.
[*]Güncellemeleri ve patchleri sürekli olarak yüklemek.
Son düzenleme: