Merhabalar, bu yazımda sizlere DLL Hijacking saldırısından bahsedeceğim. Sonrasında örnek bir saldırı senaryosunda Dll Hijacking saldırısının nasıl yapılabileceğini ekran görüntüleri ile anlatmaya çalışacağım.

Kısaca DLL dosyalarının ne olduğundan bahsetmek istiyorum : DLL dosyaları, içerisinde bulundurduğu kod satırları ve fonksiyonlar ile sahibi olan programın&yazılımın çalışmasını ve işlevini yerine getirebilmesini sağlar. Çalışacak olan programlar (örneğin .exe dosyaları) gerektiğinde bu DLL dosyalarını kullanarak işlevlerini yerine getirirler.

DLL Hijacking saldırısını anlatacak olursam : Bu saldırıda saldırgan, DLL’in arandığı dizinleri bulur. Aranılan DLL dosyası, arandığı ilk dizinde değil ise : zararlı DLL dosyası oluşturularak arandığı ilk dizine yerleştirilir. Bu sayede kurban “baris.exe” programını çalıştırmak istediğinde sistem gerçek baris.DLL yerine, zararlı payload’ı içeren DLL dosyası olan baris.DLL dosyasını çalıştırmış olur.



Programların çalışabilmesi için gerekli olan DLL dosyalarının tam bir konumu belirtilmez. Windows, DLL Arama Sırası ile DLL dosyasını arar, bulur ve çalıştırır.

DLL Arama Sırası ;

1. Uygulamanın yüklendiği dizin

2. Sistem dizini

3. 16-bit sistem dizini

4. Windows dizini

5. Geçerli çalışma dizini (CWD)

6. PATH ortam değişkeninde listelenen dizinler

https://support.microsoft.com/tr-tr/help/2389418/secure-loading-of-libraries-to-prevent-dll-preloading-attacks

Örnek bir saldırı senaryosunda, düşük yetkili bir kullanıcı ile bir sisteme sızdığımızı varsayalım. Ve bu sistemde zararlı DLL dosyamızı çalıştırabilmeyi istiyoruz.

CMD kod satırında, “icacls” komutu ile birlikte hangi dizinlerde hangi yetkilere sahip olduğumuzu sorgulamakla başlayabiliriz. Sistemde yetkili bir kullanıcı olmadığımız için zararlımızı sisteme etki edebilecek şekilde çalıştıramayabiliriz.

Bu komut ile, CMD’yi hangi kullanıcı ile açtıysak ve hangi dizini belirttiysek o dizin üzerinde hangi yetkilere sahip olduğumuzu görüntüleyebiliyoruz. Hatta erişimimiz var ise seçtiğimiz dosyalarda kendimize yazma&okuma vs. yetkileri de verebiliriz.

Örnek kullanımlar ve detaylı bilgilendirme için Microsoftun hazırladığı dökümana göz gezdirebilirsiniz ;

https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/icacls

Sonrasında AccessChk tool’unu kullanarak sızmış olduğumuz sistemde, seçtiğimiz kullanıcı tipi ile hangi dizinlerde yazma, okuma izinlerimizin olduğunu öğrenebiliriz.

Örneğin bu komut ile, sistemde “Authenticated Users” yetkisine sahip olan kullanıcıların hangi dizinlerde yazma yetkileri vs. olduğunu sorgulattık. Bu komut satırında ki -u, -w, -d ve diğer parametrelerin ne işe yaradığını ve nasıl kullanılabileceğine göz gezdirmek için Microsoftun hazırlamış olduğu dökümana göz gezdirebilirsiniz ;

https://docs.microsoft.com/en-us/sysinternals/downloads/accesschk

Sahip olduğumuz kullanıcıda hangi yetkilere sahip olduğumuzu öğrendik. Hangi tipte olan kullanıcıların(System, Administrator,User) hangi dizinlerde ne yetkileri olduğunu da görüntüledik. Yeteri kadar bilgiyi topladığımızı düşünüyorum. Artık saldırı vektörümüze geçiş yapabiliriz.

DLL Hijacking saldırısı için “Siofra” tool’unu kullanacağım.

Step 1 : İlk olarak DLL Hijacking zafiyeti içeren bir program seçmemiz gerekiyor. Bu senaryoda sistemde yetkimizin olduğu klasörlerdeki programları aramamız en mantıklısı olacaktır. Kullanacağım komut ise ;

Siofra64.exe –mode file-scan -f ” C:\Program Files\Internet Explorer\iexplorer.exe” –enum-dependency –dll-hijack

Bu komut ile seçmiş olduğum .exe dosyasının kullanacağı DLL dosyalarını hangi dizinde aradığını ve aslında DLL dosyasının hangi dizinde olduğuna bakıyor ve buna göre bir zafiyet içeriyorsa bize Vulnerable başlığı ile sonucu gösteriyor.

Ekran görüntüsünde gördüğümüz üzere, iexplorer.exe çalıştığında iertutil.dll dosyasınu arıyor. Ve ilk olarak arandığı yer C:\Program Files\Internet Explorer\ dizini altında. Ama iertutil.dll dosyası aslında C:\Windows\System32\ dizinin altında. Bu da demek oluyorki, biz iertutil.dll isimli zararlı bir DLL oluşturup bunu C:\Program Files\Internet Explorer\ dizinin altına koyarsak, iexplorer.exe çalıştığında ilk olarak bu dizine bakılacağı için bizim zararlı DLL dosyamız çalışacak.

Step 2 : Bu adımda ise zararlı DLL dosyamı oluşturacağım. Aslında kullanılacak olan DLL dosyasını seçtikten sonra, zararlı hangi tipte olacak ve ne çalışacak bilgilerini yazacağım. Bu senaryoda ben zararlı DLL dosyası çalıştığında arka planda hesap makinesininde çalışmasını sağlayacağım. Kullandığım komut ;

Siofra64.exe –mode infect -f “C:\Windows\System32\iertutil.dll” -o iertutil_infect.dll –payload-type process –payload-path “C:\Windows\System32\calc.exe”

Step 3 : Çalıştırdığım komut ile zararlı DLL dosyasını oluşturdum.

Step 4 : iexplore.exe programı çalışacağı zaman iertutil.dll’in ilk arandığı dizine, oluşturduğum zararlı DLL dosyamı kopyalıyorum.

Step 5 : İsmini iertutil.dll olarak değiştirdim, çünkü iexplore.exe çalıştığı zaman iertutil.dll isminde bir DLL dosyası arayacak.

Step 6 : GIF dosyasından da görüldüğü gibi, İnternet Explorer her çalıştığında arka tarafta hesap makinesi de açılıyor. Zararlı payload’ı gerçek DLL dosyasının üzerine yazmamız bu yüzden önemli. İnternet Explorer herhangi bir sorun yaşamadan açılıyor ve arka planda zararlımızda çalışıyor. Fark edilmesi oldukça zor yani (:

Gerçek olabilecek senaryoda, zararlı DLL dosyasını her çalıştığında bizim cihazımıza bir Connection(Bağlantı) oluşturacak şekilde hazırladığımızı varsayalım. Bu sayede kurban, normal bir program çalıştırdığını düşünecek fakat o program çalıştığı zaman direkt cihazımıza bağlantı kurulacak.

Hatta DLL Hijacking saldırısını, sistem başlatıldığında otomatik olarak başlayan programlara(Örneğin Steam,Spotify,iTunes) enjekte edebilirsek, kurban sistemini her açtığında direkt olarak cihazımız ile bağlantı kurulabilmesini bile sağlayabiliriz.

Umarım sizler için açıklayıcı ve eğitici bir yazı olmuştur.

Keyifli hackingler!