DLL Hijacking: Bir DLL Dosyası Ne Kadar Tehlikeli Olabilir?
Günlük kullandığımız hemen hemen her program, arka planda onlarca belki de yüzlerce DLL çağırır. İşletim sisteminin ve uygulamaların pek çok kritik işlevi bu küçük dosyalara dayanır. Peki bu küçük, dikkat çekmeyen dosyalar yanlış ellerde tüm sistemi ele geçirebilecek bir kapı olabilir mi ? Bu yazıda DLL’lerin ne kadar yaygın ve görünmez olduklarını gösterip, bu görünmezlikten nasıl risk doğabileceğini adım adım inceleyeceğiz.

DLL hijacking, meşru bir uygulamanın Dinamik bağlantı kütüphanesini (DLL) yükleme sürecinin manipüle edilmesiyle kötü amaçlı kod çalıştırılmasını sağlayan bir siber saldırı tekniğidir.
DLL Nedir ?

DLL (Dinamik bağlantı kütüphanesi), birden fazla programın aynı anda farklı işlevleri yerine getirmek için kullanabileceği, yazılım geliştirmede verimliliği ve modülerliği artıran, yeniden kullanılabilir kod ve veriler içeren bir dosyadır. Windows işletim sistemleri için işletim sisteminin işlevselliğinin çoğu DLL tarafından sağlanır. Bu yüzden birçok DLL hijacking saldırısı, işletim sistemi ve uygulamaların DLL’lere yoğun şekilde bağımlı olmasından kaynaklanır.
Neden DLL Kullanılır ?
- Yeniden kullanım (aynı kodu birden fazla uygulama kullanır)
- Güncelleme & yama kolaylığı (Bir güncelleme geldiğinde tüm uygulamaya yerine sadece ilgili dll güncellenir.)
- Daha az yer kaplayan dosyalar (Ana .exe dosyası minimal tutulur)
DLL Nasıl Çalışır ?
Bir yürütülebilir dosya (.exe) çalıştırıldığında ve program bir DLL’e ihtiyaç duyduğunda, işletim sistemi gerekli DLL dosyasını belirli dizinlerde arar. Dosya bulunduğunda belleğe yüklenir ve program tarafından kullanılabilir hale getirilir.
DLL Arama Sırası
DLL gerektirdiği bir durumda, DLL loader sistemde DLL’i aramaya başlar.
Windows işletim sisteminde DLL arama sırası genellikle şu şekildedir:
- Uygulamanın yüklendiği dizin
- Sistem dizini (C:\Windows\System32)
- Windows dizini (C:\Windows)
- Mevcut çalışma (Current) dizini
- Path ortam değişkeninde belirtilen dizinler

Bu sıralama, DLL hijacking için kritik bir öneme sahiptir. Bu arama işlemi sırasında, aranan masum DLL konumuna kendi kötü amaçlı dll’lerimizi enjekte edebiliriz. DLL hijacking saldırısının temeli de buradan gelmektedir.
DLL Hijacking Nedir?
DLL hijacking türkçe adıyla DLL kaçırma, siber güvenlikte karşılaşılan ciddi tehditlerden biridir. Saldırganlar meşru bir uygulamanın dinamik bağlantı kütüphanelerini (DLL) yükleme sürecini manipüle ederek kötü amaçlı kod çalıştırırlar. Bu yöntem, hatalı yapılandırılmış arama yolları veya yazılabilir dizinler gibi zayıf konfigürasyonlardan faydalanır ve yetki yükseltme (Privilege Escalation) veya kalıcı erişim sağlamak (Persistence) için kullanılabilir.
DLL Hijacking Nasıl Çalışır ?
Temel fikir, işletim sisteminin DLL’leri bulup yüklemek için kullandığı arama sırasını kötüye kullanmaktır. Örneğin uygulama “eren.dll” adlı bir kütüphane arıyorsa, saldırgan aynı isimle ve içinde zararlı bir payload barındıran bir DLL oluşturur. Eğer orijinal eren.dll arama sırasında daha sonra kontrol edilen bir dizinde bulunuyorsa, saldırgan kendi kötü amaçlı DLL’ini loder’in ilk baktığı dizine yerleştirir. Sonuç olarak işletim sistemi orijinal dosya yerine saldırganın DLL’ini yükler ve zararlı kod çalıştırılmış olur.
Yaygın DLL Hijacking Teknikleri
- Missing DLL Load
- Search Order Hijacking
- Phantom DLL Hijacking
- DLL Sideloading
Missing DLL Load
Sistemde bir uygulamanın ihtiyaç duyduğu DLL’in doğru yerde bulunmaması / eksik olması sonucunda ortaya çıkan durumdur. Saldırgan eksik olan DLL dosyasının taklidini aranan konuma yerleştirerek zararlıyı çalıştırabilir.
Örneğin: eren.exe adlı uygulama helper.dll’e ihtiyaç duyar ve yüklemeye çalışır fakat kurulum eksikse loader diğer arama konumlarını kontrol edecektir. Saldırgan direkt olarak dosyanın arandığı konuma helper.dll yerleştirirse zararlı çalışacaktır.
Search Order Hijacking
En klasik ve oldukça yaygın bir DLL hijacking yöntemidir. Saldırgan bir programın DLL arama sırasını istismar ederek aynı isimde zararlı bir DLL’in orijinal DLL yerine yüklenmesini sağlamaktır.
Phantom DLL Hijacking
Saldırgan, var olmayan bir DLL dosyasını araması sonucunda ortaya çıkar. Saldırgan eksik modülün arandığı konuma kendi zararlı DLL’ini koyarsa uygulama dosyayı çalıştıracaktır.
Örneğin: eren.exe adlı uygulama, bir güncelleme sonrası artık helper.dll’i doğrudan kullanmıyor. Ancak eğer uygulama yine de bu DLL’i arayıp çalıştırmaya çalışıyorsa, saldırgan DLL’in arandığı konuma aynı isimde zararlı bir DLL yerleştirerek uygulamanın kötü amaçlı kodu yüklemesini sağlayabilir.
DLL Sideloading
Bu teknik, meşru bir uygulamayı bulunduğu klasörle birlikte okuma/yazma izinleri açık olan bir dizine kopyalayarak bulunduğu klasörde(current) çalıştırdığı DLL’in kötü amaçlı versiyonunun çalıştırılmasını sağlama yöntemidir. Örneğin eren.exe adlı bir uygulama, çalıştırıldığında bulunduğu dizindeki helper.dll’i yükleyip kullanıyor. Saldırgan eren.exe’nin çalıştırdığı DLL ile aynı ada sahip zararlı payload içeren helper.dll dosyasını tmp gibi yazma/okuma izinlerinin olduğu farklı bir klasöre koyup uygulamayı tmp klasöründen çalıştırırsa, işletim sistemi zararlı DLL dosyasını çalıştıracaktır.
UYGULAMA
DLL hijacking’in ne olduğunu ve saldırı vektörlerini öğrendik. Şimdi pratikte bir saldırgan gözünden DLL hijacking’in nasıl yapıldığını sanal makine üzerinde test ederek görelim.
İlk olarak DLL hijacking zafiyetini test edebileceğimiz bir uygulama seçmemiz gerekiyor. Bunun için sistemde yazma/okuma izinlerimizin açık olduğu dosyaları tespit etmemiz gerekiyor. Bu noktada işimizi çok hızlandıracak bir kaynak var: HijackLibs.

Sistemde hangi programların hangi DLL’leri çağırdığını ve bu DLL’lerin açıklarını kategorize eden açık kaynaklı bir veri tabanıdır. Buradan potansiyel zafiyetli DLL’lerini keşfedebilir ayrıca sitenin sağladığı YARA kurallarını kullanarak bu zayıf DLL dosyalarını otomatik tespit edebilecek kurallar oluşturup önlem alabiliriz.
Bu senaryoda DLL hijacking tespiti ve saldırısı için “Siofra” isimli github tool’unu kullanacağız.
Siofra nedir ?
Siofra, Windows programlarındaki DLL hijacking güvenlik açıklarını tespit etmek ve bunlardan yararlanmak için tasarlanmış bir araçtır.
Önemli özellikleri:
- PE/EXE analiz ve bağımlılık çıkarma
- Uygulamanın hangi DLL’leri nereden arayacağını simüle edip hijack açıklarını raporlama.
- Hedeflenen DLL adı için infect modu ile payload’lu DLL üretme.
- Hem disk hem de runtime davranışı incelemeye yönelik modlar.
1. Zafiyet Analizi
Normalde bir saldırı senaryosuna başlamadan önce hedef sistem hakkında hem dışarıdan hem de içeriden kapsamlı keşif ve bilgi toplama yapılması yaparız. Ancak bu senaryomuzda hedefimiz tüm Windowslarda varsayılan olarak bulunan Explorer uygulamasına yönelik bir zafiyeti kullanmak olacaktır. Bu yüzden adımlarımızı Explorer uygulamasında açık olduğunu bilerek ilerleteceğiz.
İlk olarak DLL hijacking zafiyeti olduğunu düşündüğümüz uygulama üzerinde Siofra ile zafiyet taraması yapacağız.

Bu komut, seçtiğimiz iexplorer.exe dosyasının DLL yükleme davranışını simüle eder. Hangi DLL’leri hangi sırayla aradığını inceler ve hedef DLL’in gerçekten hangi dizinde bulunduğunu kontrol eder. Eğer loader, DLL’in bulunduğu dizinden önce başka bir dizini arıyorsa, araç o dosyayı “Vulnerable” etiketiyle rapor olarak bizlere veriyor.
Ekran görüntüsünde 3 adet DLL hijacking yapabileceğimiz dosya gözüküyor. Biz burada iertutil.dll dosyasını istismar etmeye çalışacağız. Explorer iertutil.dll dosyasını ilk önce “C:\Program Files\Internet Explorer” dizininin altında arıyor. Fakat iertutil.dll dosyasının orijinal konumu “C:\Windows\System32” dizini.
Neden Bu Bir DLL Hijacking Açığı ?
Buradaki temel sorun, uygulamanın DLL’i tam yol yerine sadece isimle çağırıp işletim sisteminin default arama sırasına güvenmesi.
Nasıl İstismar Edilir ?
Eğer biz iertutil.dll isimli zararlı bir DLL dosyası oluşturursak ve bunu programın ilk baktığı konuma yani “C:\Program Files\Internet Explorer” dizininin altına yerleştirirsek loader ilk olarak orijinal DLL konumu yerine farklı bir dizini kontrol ettiği için aradığı DLL’i bulduğunu düşünüp bizim zararlı DLL dosyamızı çalıştıracaktır.
2. Zararlı DLL Dosyasının Oluşturulması
Hedef makinedeki açığı istismar etmek için kendi zararlı dosyamızı oluşturmamız gerekiyor. Ben bu senaryoda kali linux’ta yer alan msfvenom aracını kullanarak saldırgan bilgisayarına reverse shell bağlantısı açan bir dll payload’ı oluşturacağım. Konumuz payload’ların nasıl oluşturulacağı olmadığı için sadece görselini ekleyeceğim.

3. Zararlı Dosyayı Hedef Bilgisayara Yerleştirme
Hedef bilgisayara payload’ımızı bu şekilde gönderirsek, işlemler sonucunda payload çalışacaktır fakat payloadımız orijinal iertutil.dll’in yaptığı işi gerçekleştirmeyeceği için explorer çalışmayacaktır. Bunu çözmek için yine Siofra aracımızı kullanacağız;

Görselde görünen komut, Orijinal iertutil.dll dosyamızın bir kopyasını alınır ve payload.dll dosyasını çalıştıracak şekilde tekrardan oluşturulur. Son olarak oluşturduğumuz yeni zararlı iertutil.dll dosyasını uygulamanın DLL’i ilk aradığı konum olan “C:\Program Files\Internet Explorer” dizininin altına koyuyoruz.

Aşağıdaki GIF’te görüldüğü üzere Explorer her çalıştırıldığında arka planda zararlı bizim payloadımız tetikleniyor ve reverse shell sağlıyor. Zararlı payload’ı doğrudan çalıştırmak yerine gerçek DLL üzerine yazdığımız için explorer normal işleyişinde çalışmaya devam etti. Bu yöntemle zararlımızın kullanıcı tarafından fark edilmesi zorlaşmış oluyor.

Önleme ve Azaltma Stratejileri (Mitigation)
DLL Hijacking saldırılarını tamamen önlemek her zaman mümkün olmasa da, alınacak önemlerle bu risk büyük ölçüde azaltılabilir.
- DLL Kontrolü
Tüm uygulama ve DLL dosyaları dijital olarak imzalanmalı, çalışma sırasında imza değeri doğrulanmalı. Böylece sistem, orijinal DLL dosyasıyla değiştirilmiş DLL dosyasını fark edebilecektir.
2. Dosya Sistem İzinleri
C:\Program Files ve C:\Windows gibi sistem dizinlerinde kullanıcıların yetkileri kısıtlanmalıdır.
3. Güvenli DLL Yükleme Yöntemleri
SetDefaultDllDirectories veya LoadLibraryEx gibi güvenli API’leri kullanarak DLL yüklenmesi sağlanmalıdır. Ayrıca DLL’ler çağırılacağı zaman tam dosya yolu belirtilerek varsayılan arama yoluna bırakılmamalıdır.
4. Yazılım Güncellemeleri
İşletim sistemi ve yazılımları düzenli olarak güncellenmelidir. Bilinen DLL Hijacking zafiyetleri içeren dosyalara yama uygulanmalıdır.
DLL Hijacking’in diğer mitigation yöntemleri ve daha fazlası için MITRE ATT&CK sayfasına göz atabilirsiniz.
Sonuç
DLL hijacking nadir görülen bir saldırı türü olsa da kullanıldığında hem basit hem de etkili bir saldırı vektörüdür. Doğru mühendislik ve yöntemlerle büyük ölçüde önlenebilir. Bu yazıda DLL’in ne olduğunu, saldırganların bu kütüphaneleri nasıl istismar ettiğini ve savunma yöntemlerini pratik örneklerle birlikte ele aldım. Umarım faydalı olmuştur.