Jest miejsce na wstrzykiwanie kodu między aplikacją a jej zewnętrznymi bibliotekami. Robienie tego nie jest z natury złe, ale jest świetnym sposobem na wyrządzenie krzywdy.

Kiedy programiści muszą rozszerzyć funkcjonalność programu, dla którego nie mają kodu źródłowego, często sięgają po biblioteki DLL. Jest to niekonwencjonalny sposób, aby program zrobił coś, do czego nie jest przeznaczony.

Rzecz w tym, że hakerzy również używają tej techniki z niewłaściwych powodów, takich jak wykorzystywanie nieszkodliwych aplikacji jako broni lub łamanie oprogramowania. Czym jest przechwytywanie bibliotek DLL i jak to właściwie działa?

Co to jest biblioteka DLL?

Uruchomienie każdej aplikacji zależy od niektórych plików poza kodem podstawowym. Te pliki zewnętrzne zawierają kod i dane, których program potrzebuje do prawidłowego działania. Gdy którykolwiek z tych plików zewnętrznych zniknie, program może mieć problemy ze stabilnością lub wręcz odmówić uruchomienia.

W systemie operacyjnym Windows te zewnętrzne pliki nazywane są bibliotekami DLL lub bibliotekami dołączanymi dynamicznie. Biblioteki dołączane dynamicznie to podstawowe składniki systemu operacyjnego Windows, zapewniające kod i zasoby wielokrotnego użytku, które można współdzielić w wielu aplikacjach.

Pliki zewnętrzne w systemie Windows są znane jako biblioteki. Istnieją dwa rodzaje bibliotek: dynamiczne i statyczne. Biblioteki dynamiczne są ładowane w czasie wykonywania, a biblioteki statyczne w czasie kompilacji. DLL to biblioteka dynamiczna.

Co to jest przechwytywanie bibliotek DLL?

Zahaczanie bibliotek DLL to technika obejmująca przechwytywanie i modyfikowanie wywołań funkcji, które programy lub procesy wykonują w bibliotece DLL. Głównie konfiguracja Man-in-The-Middle jest ustanowiony, gdy hak znajduje się pomiędzy programem a bibliotekami DLL, które wywołuje. Wszystkie lub ukierunkowane wywołania funkcji są następnie śledzone i zmieniane.

Oto przykład przepływu pracy polegającego na przechwytywaniu bibliotek DLL:

  1. Atakujący analizuje wywołania funkcji wykonane przez program i pliki DLL, od których jest zależny.
  2. Atakujący tworzy hak za pomocą jednej z wielu technik implementacji, takich jak zaczepianie IAT, zaczepianie inline, zaczepianie COM itp.
  3. Zdarza się wykonanie dowolnego kodu.
  4. Oryginalne wykonanie wywołania funkcji może się zdarzyć lub nie.
  5. Atakujący zaciera ślady, usuwając hak i cofając wszystkie dokonane zmiany.

Przechwytywanie bibliotek DLL to wyrafinowana technika, którą można wykorzystać zarówno dla dobra (takich jak rozszerzenie funkcjonalności programu, debugowanie i logowanie) lub złych (takich jak obejście środków bezpieczeństwa, kradzież poufnych danych, wykonanie dowolnego kodu i pisanie gier wideo hacki).

Jak działa przechwytywanie bibliotek DLL?

Przed przystąpieniem do implementacji dołączania bibliotek DLL ważne jest, aby wyjaśnić podstawy. Cofnijmy się o krok i zobaczmy, co się stanie, gdy program wykona wywołanie funkcji do biblioteki DLL.

Gdy program wywołuje funkcję w bibliotece DLL, system operacyjny najpierw wyszukuje w niej nazwę funkcji Importuj tabelę adresów programu i pobiera adres funkcji z adresu eksportu biblioteki DLL Tabela.

Po rozwiązaniu adresu funkcji program może przejść do adresu funkcji, aby uzyskać do niej dostęp i ją wykonać. Zaczepianie bibliotek DLL polega na przechwyceniu tego procesu i przekierowaniu wywołania funkcji do innej funkcji. Istnieje kilka sposobów implementacji przechwytywania bibliotek DLL. Przyjrzyjmy się najczęściej stosowanym technikom jego wdrażania.

Może to być dość techniczne, więc może pomóc, jeśli ty jesteś zaawansowanym użytkownikiem systemu Windows lub w inny sposób dobrze rozumiesz wewnętrzne elementy systemu Windows.

Zaczepianie IAT

Hakowanie IAT to skuteczna technika szeroko stosowana przez autorów szkodliwego oprogramowania w celu obejścia środków bezpieczeństwa i uniknięcia wykrycia. Tablica adresów importu (IAT) to struktura danych ładowana do pamięci za każdym razem, gdy tworzony jest nowy proces. IAT zawiera nazwy wszystkich zaimportowanych wywołań funkcji i ich adresy w pamięci.

Kiedy program wywołuje funkcję w DLL, nazwa funkcji jest najpierw wyszukiwana w IAT i jeśli adres pamięci wspomnianej funkcji nie zostanie znaleziony w IAT, to jest ustalany na podstawie adresu eksportu biblioteki DLL Tabela.

Jest to struktura danych, w której wszystkie funkcje eksportowane przez bibliotekę DLL są odwzorowywane na ich adresy pamięci. W przechwytywaniu IAT przeciwnik może modyfikować IAT procesu i zastępować uzasadnione mapowania funkcji ze złośliwymi, zakłócając w ten sposób zamierzoną operację i powodując, że program wykonuje się samowolnie kod.

Oto jak wygląda ogólny przebieg ataku w hakowaniu IAT:

  1. Program wykonuje wywołanie funkcji.
  2. Adres funkcji znajduje się w IAT.
  3. Ponieważ IAT został uzależniony; adres funkcji został zmieniony i załadowana została lokalizacja pamięci szkodliwej funkcji.
  4. Program przeskakuje do lokalizacji szkodliwej funkcji i wykonywany jest dowolny kod.
  5. Na koniec wykonywane jest oryginalne wywołanie funkcji.

Zahaczanie w linii

Przechwytywanie wbudowane to technika przechwytywania bibliotek DLL, która polega na zmianie kodu źródłowego funkcji docelowej w celu skierowania jej wykonania do funkcji specjalnej. Inline hooking, w przeciwieństwie do hookingu IAT, bezpośrednio zmienia kod funkcji docelowej, dając atakującemu dokładniejszą kontrolę nad zachowaniem funkcji docelowej.

Na powyższym diagramie zauważ, jak zmodyfikowano legalną funkcję, aby wskazać złośliwą funkcję. Po wykonaniu wszystkich instrukcji w złośliwej funkcji wykonywana jest instrukcja skoku, aby powrócić do prawidłowej funkcji, aby zakończyła ona wykonywanie.

Przeciwnicy wykorzystują przechwytywanie inline, aby wprowadzić trwałe zmiany w programie, takie jak zmiana parametrów lub wartość zwracana przez funkcję.

Objazdy firmy Microsoft

Firma Microsoft Research opracowała wewnętrzny pakiet dołączania bibliotek DLL, Detours. Umożliwia programistom śledzenie i modyfikowanie wywołań funkcji wykonywanych przez program. Objazdów można używać do różnych zadań, w tym między innymi: oprzyrządowania, testowania i naprawiania błędów.

Przeciwnicy wykorzystują Detours do przeprowadzania ataków polegających na wstrzykiwaniu bibliotek DLL i hakowaniu, a programiści często używają ich do rozszerzania funkcjonalności swoich aplikacji. Możesz dowiedzieć się więcej o pakiecie Objazdy na stronie oficjalne repozytorium GitHub.

Teraz już wiesz, jak działa przechwytywanie bibliotek DLL

Przechwytywanie bibliotek DLL to wyrafinowana technika, która stosowana z właściwych powodów może zwiększyć możliwości aplikacji lub pomóc w debugowaniu i optymalizacji oprogramowania. Niestety, zahaczanie jest częściej postrzegane jako technika kontradyktoryjna niż rozwojowa. Dlatego ważne jest, abyś przyjął i stosował się do najlepszych praktyk w zakresie bezpieczeństwa, zapewniając, że Twoje aplikacje są bezpieczne i wolne od ataków, takich jak przechwytywanie i wstrzykiwanie.