Duyuru

2024’te En Hızlı Büyüyen Siber Güvenlik Şirketi Ödülümüzü Aldık

Detaylı Bilgi Detaylı Bilgi
12 Temmuz 2020

DLL Injection Nedir? Nasıl Gerçekleşir?

DLL Injection Nedir? Nasıl Gerçekleşir?

DLL (dinamik bağlantı kitaplığı), bir program tarafından varolan fonksiyonları çağırmak için kullanılan Windows kütüphane dosyasıdır. DLL Injection ise, bir DLL dosyasını bir process’in adres alanı içerisinde çalıştırarak, o process’in çalışmasını manipüle etmek amacıyla kullanılan bir tekniktir.

Böylece, hedef sistem üzerinde özel hazırlanmış bir DLL dosyası aracılığıyla, rastgele komut çalıştırılabilir. DLL Injection saldırılarının çoğu, tersine mühendislik saldırıları için yapılır. Ayrıca, hedef sistem üzerinde hak ve yetki yükseltmek (privilege escalation) amacıyla da bu yönteme başvurulabilir.

DLL INJECTION İŞLEMİ NASIL GERÇEKLEŞİR?

Bir process’e DLL enjekte etme işlemi, aşağıdaki adımlardan oluşur:

DLL INJECTION — TEKNİK DETAYLAR

DLL Injection işlemi gerçekleştirmek amacıyla, ekibimizden Ramin Karimkhani tarafından geliştirilmiş olan DLLInjector adlı araca Github üzerinden ulaşabilirsiniz. DLL Injection işleminin teknik detayları aşağıda yer almaktadır (C# programlama dili ile geliştirilmiş olan bu araçta yer alan fonksiyonlar, Windows Kernel32 kütüphanesi kullanılarak çağrılmıştır):

DLL enjekte edilecek olan process’i ele almak için OpenProcess() fonksiyonu kullanılır. Bu fonksiyon ile bir DLL enjekte edilecek olan process belirlenir ve injection işleminin yapılabilmesi için, bu fonksiyon aracılığıyla process gerekli yetkilerle ele alınır. Resim 1’de process erişim bayrakları yer almaktadır. Bu bayraklar bir process’in hangi yetkilerle ele alınması gerektiğini belirler. Seçeceğimiz bir process’e DLL enjeksiyonu yapabilmek için OpenProcess fonksiyonu ile birlikte; CreateThread, QueryInformation, VMOperation, VMWrite ve VMRead bayrakları kullanılmalıdır. DLLInjector aracında OpenProcess fonksiyonu, bir process’i tüm yetkilerle ele alacak şekilde ayarlanmıştır.

Bir DLL dosyasını process belleğine yüklemek için LoadLibraryA fonksiyonu kullanılır. LoadLibraryA, kernel32.dll üzerinden çağrılabilir. Bunun için GetProcAddress() fonksiyonu kullanılır. Bu fonksiyon, belirtilen bir kütüphane üzerinden, bir fonksiyon veya bir değişkenin adresini almak amacıyla kullanılır.

Hedef process’in sanal belleğinden yer ayırmak için VirtualAllocEx() fonksiyonu kullanılır. Bu fonksiyonun parametreleri kullanılarak; hedef process, ayrılacak bellek alanının başlangıç adresi, bellek alanı uzunluğu, bellek ayırma türü ve ayrılacak sayfa için bellek izinleri belirtilir.

Ele alınan process’in ayrılan bellek alanına, enjekte edilecek olan DLL dosyasının yolunu yazmak için WriteProcessMemory() fonksiyonu kullanılır.

CreateRemoteThread fonksiyonu, bir process’in sanal bellek alanında thread oluşturur. Bu fonksiyon kullanılarak LoadLibraryA fonksiyonu, process’in ayrılan sanal bellek alanında bir thread olarak çalıştırılır. Böylece DLL Injection işlemi tamamlanır.

DLLInjector ARACI KULLANILARAK HEDEF SİSTEMDEN METERPRETER ALMA

Hedef sistemde çalışan herhangi bir process’e DLL enjekte edebilmek için, process’in ID değeri alındı.

Msfvenom ile oluşturulan meterpreter DLL dosyası hedef sisteme yüklendi. Ardından DLLInjector aracı, Process ID ve DLL dosyasının yolu belirtilerek çalıştırıldı.

DLL dosyası çalıştı ve hedef process üzerinden bir meterpreter oturumu elde edildi.

Resim 3.4 — Meterpreter Process’i

Bunlar İlginizi Çekebilir

Güvenli Yazılım Geliştirme Nedir?

Siber Güvenlik Terimleri

17 Ocak 2021

Güvenli Yazılım Geliştirme Nedir?

Devamını Oku
MAC Adresi Nedir?

Siber Güvenlik Terimleri

30 Mart 2021

MAC Adresi Nedir?

Devamını Oku
Honeypot Nedir?

Siber Güvenlik Terimleri

5 Temmuz 2021

Honeypot Nedir?

Devamını Oku