💣 DLL Hijacking – przejmowanie kontroli przez manipulację bibliotekami
DLL Hijacking, znany także jako DLL Injection w kontekście przechwytywania ładowania bibliotek, to technika ataku polegająca na zmuszeniu aplikacji systemu Windows do załadowania złośliwej biblioteki DLL zamiast tej oczekiwanej.
To skuteczny sposób na osiągnięcie uruchomienia kodu z uprawnieniami aplikacji – często z wysokim poziomem dostępu, jeśli proces ma uprawnienia administratora.
🧠 Jak działa DLL Hijacking?
Windows, podczas uruchamiania aplikacji, dynamicznie ładuje potrzebne biblioteki DLL w określonej kolejności wyszukiwania.
Jeśli aplikacja odwołuje się do pliku DLL bez podania pełnej ścieżki, Windows:
- Szuka pliku w folderze aplikacji.
- Potem w katalogach systemowych (System32, Windows).
- Następnie w katalogach zdefiniowanych przez
PATH.
👉 Jeśli napastnik umieści złośliwą bibliotekę DLL w jednym z katalogów przeszukiwanych jako pierwsze, aplikacja może nieświadomie ją załadować.

🔥 Praktyczny scenariusz ataku
- Ofiara pobiera aplikację z niezweryfikowanego źródła.
- Aplikacja wymaga DLL, np.
example.dll, ale nie dostarcza jej w folderze. - Napastnik tworzy własny plik
example.dll, który wykonuje złośliwy kod. - Umieszcza go w tym samym folderze co EXE.
- Podczas uruchamiania aplikacji, system ładuje złośliwą bibliotekę → wykonuje się kod atakującego.
🧪 Czym różni się DLL Hijacking od innych technik?
| Technika | Charakterystyka |
|---|---|
| DLL Hijacking | Wymuszenie załadowania złośliwej biblioteki |
| DLL Injection | Wstrzyknięcie DLL do działającego procesu |
| Side-Loading | Legalna aplikacja ładuje DLL z tej samej ścieżki |
| Binary Planting | Tworzenie fałszywych plików wykonywalnych lub DLL w dostępnych lokalizacjach |
🧬 Przykład ataku DLL Hijacking
Złośliwy kod w DLL:
#include <windows.h>
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
if(fdwReason == DLL_PROCESS_ATTACH) {
MessageBoxA(NULL, "Kod atakującego uruchomiony!", "Hijack", MB_OK);
}
return TRUE;
}
Po skompilowaniu i nazwaniu jako missing.dll, wystarczy umieścić plik w tym samym folderze co aplikacja, która tego pliku poszukuje.
🧰 Narzędzia do wykrywania i testów
- ProcMon (Sysinternals) – monitorowanie ładowanych bibliotek DLL
- Process Explorer – analiza aktywnych procesów i zależności DLL
- DLLSpy / DllHijackScanner – narzędzia do skanowania aplikacji pod kątem luk hijackingu
- CFF Explorer / PE Studio – do analizy binarek i zależności
🛡️ Jak się chronić przed DLL Hijacking?
Dla programistów:
- 🔒 Używaj pełnych ścieżek do DLL w kodzie (
LoadLibraryExz flagąLOAD_LIBRARY_SEARCH_SYSTEM32) - 📦 Umieszczaj potrzebne DLL w tym samym folderze co EXE
- 🚫 Zablokuj ładowanie DLL z niezaufanych ścieżek (
SetDllDirectory(NULL)) - 🧪 Testuj aplikacje pod kątem brakujących DLL i kolejności ładowania
Dla administratorów i użytkowników:
- ✅ Instaluj aplikacje tylko z zaufanych źródeł
- 🧼 Ogranicz prawa zapisu do katalogów aplikacji (brak możliwości podmiany plików)
- 🔍 Monitoruj podejrzane biblioteki w katalogach użytkownika
- 👮 Używaj narzędzi typu EDR / HIPS do kontroli integralności plików
🧠 Znane przypadki ataków
- 🔐 CVE-2010-3130 – Microsoft Windows Search Path Vulnerability
- 💼 Aplikacje Microsoft Office były narażone na DLL Hijacking przez pliki osadzone w dokumentach
- 🧳 Wiele aplikacji turystycznych i biznesowych (np. VPN) było podatnych na hijacking przez DLL side-loading
⚠️ DLL Hijacking i złośliwe instalatory
Złośliwi aktorzy często podszywają się pod legalne aplikacje (np. Adobe, Notepad++, Chrome), tworząc fałszywe instalatory z dołączoną DLL zawierającą trojana lub backdoora. Użytkownik nieświadomie uruchamia aplikację → złośliwa DLL aktywuje się natychmiast.
💡 DLL Hijacking a oprogramowanie typu LOLBins
Techniki hijackingu bywają używane w Living off the Land Binaries (LOLBins), np.:
schtasks.exe,msiexec.exe,rundll32.exe– uruchamiane z nieautoryzowanymi DLL- Złośliwe skrypty PowerShell ładowane dynamicznie przez
Add-Typelub COM
🔍 Jak wykrywać incydenty hijackingu?
- 🚩 Podejrzane komunikaty w logach (np. „could not find DLL”)
- 📊 Anomalie w logach EDR (uruchomienie DLL spoza folderów systemowych)
- 🔗 Nieznane DLL w katalogach aplikacji (szczególnie
%AppData%,%Temp%) - 🧠 Analiza rejestru (np. wpisy w
AppInit_DLLs)
🧩 Podsumowanie
DLL Hijacking to bardzo skuteczna, a jednocześnie często niezauważana technika ataku, umożliwiająca wykonanie kodu bez potrzeby exploitowania samego binarnego pliku aplikacji. Wymaga jedynie manipulacji kolejnością ładowania DLL i uprawnień do zapisu w odpowiednim katalogu.






