API Hooking II: Volatility
Drobne uzupełnienie do wpisu Wykrywanie API hooking, a konkretnie do możliwości wykorzystania narzędzia Volatility w tym celu. Wspominałem, że istnieje plugin służący do wykrywania API Hooking, ale nie udało mi się go (jeszcze) użyć. Poświęciłem temu tematowi chwilę czasu i udało mi się przekonać całość do działania.
Przygotowanie środowiska
Pierwsza sprawa to pobranie aktualnej wersji narzędzia Volatility. Na stronie “zatrzymało się” ono w rozwoju jakiś czas temu. W rzeczywistości jest jednak rozwijane i nowe pluginy potrzebują jego nowszej wersji. By ją pobrać, należy skorzystać z SVN. Aktualna wersja projektu Volatility Framework dostępna jest na Google Code.
Drugi krok to pobranie odpowiednich pluginów , ich lista dostępna jest tutaj: List of Volatility Plugins. Potrzebny jest plugin Volatility Analyst Pack 0.1. Plugin ten do poprawnego działania potrzebuje dwóch dodatkowych modułów pefile i pydasm.
Wykrywanie API hooking: apihooks
Volatility jest w stanie operować zarówno na zrzutach w formacie raw , jak i Microsoft Crash Dump. Na początku można ze zrzutu pamięci uzyskać informacje o działających w chwili wykonaniu zrzutu procesach, w tym interesującym nas procesie:
volatility pslist-f iat.dd
Name Pid PPid Thds Hnds Time System 4 0 53 161 Thu Jan 01 00:00:00 1970 smss.exe 316 4 3 19 Fri Mar 12 19:53:47 2010 csrss.exe 420 316 10 323 Fri Mar 12 19:53:49 2010 winlogon.exe 496 316 18 510 Fri Mar 12 19:53:49 2010 services.exe 540 496 16 249 Fri Mar 12 19:53:50 2010 lsass.exe 552 496 18 326 Fri Mar 12 19:53:50 2010 svchost.exe 708 540 15 187 Fri Mar 12 19:53:51 2010 svchost.exe 768 540 10 226 Fri Mar 12 19:53:52 2010 svchost.exe 840 540 54 1069 Fri Mar 12 19:53:52 2010 svchost.exe 916 540 4 57 Fri Mar 12 19:53:54 2010 svchost.exe 1000 540 14 212 Fri Mar 12 19:53:54 2010 spoolsv.exe 1092 540 11 119 Fri Mar 12 19:53:55 2010 explorer.exe 1300 1260 13 393 Fri Mar 12 19:53:59 2010 vmusrvc.exe 1440 1300 2 40 Fri Mar 12 19:54:01 2010 ctfmon.exe 1448 1300 1 67 Fri Mar 12 19:54:01 2010 vmsrvc.exe 1844 540 5 43 Fri Mar 12 19:55:03 2010 vpcmap.exe 1960 540 3 27 Fri Mar 12 19:55:04 2010 wscntfy.exe 804 840 1 35 Fri Mar 12 19:55:08 2010 alg.exe 948 540 6 106 Fri Mar 12 19:55:08 2010 HookLibTest.exe 1308 1300 1 24 Fri Mar 12 19:57:36 2010 cmd.exe 1316 1300 1 34 Fri Mar 12 19:57:41 2010 win32dd.exe 1552 1316 1 22 Fri Mar 12 20:04:35 2010
Następnie można uzyskać informacje o istniejących hookach dla procesu 1308 (dla czytelności trochę zmodyfikowałem format):
volatility apihooks -f iat.dd -p 1308 -d temp
Type: IAT
Process: HookLibTest.exe
PID: 1308
Hooked Module: HookLibTest.exe
Hooked Function: USER32.dll!MessageBoxA
From => To/Instruction: [0x408020] => 0x401000
Hooking Module: C:\tools\HookLibTest.exe
Total IAT hooks in user space: 1 Total EAT hooks in user space: 0 Total INLINE hooks in user space: 0 Total IAT hooks in kernel space: 0 Total EAT hooks in kernel space: 0 Total INLINE hooks in kernel space: 0 Completed after 3.18800020218 seconds!
Jak widać hook IAT został bez większych problemów wykryty przez Volatility z VAP.
Plugin ten wykrywa również hooki typu EAT oraz “hot patching”, ale akurat tu mam pewne wątpliwości co do jego skuteczności. Wydaje mi się, że porównanie prawidłowego obrazu pliku wykonywalnego z tym znajdującym się w pamięci jest bardziej skuteczne. Z drugiej strony sprawdziłem listę wykrytych modyfikacji typu “hot patching” uzyskaną z pomocą WinDbg i VAP (inny przypadek, nie dotyczył ani Chrome, ani przykładu z HookLibTest) – nie różniły się od siebie.
Na koniec jedno pytanie: czy ktoś z Was korzysta z narzędzi typu Volatility lub Memoryze?
Oryginał tego wpisu dostępny jest pod adresem API Hooking II: Volatility
Autor: Paweł Goleń