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.
API Hooking II: Volatility
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?
Jeśli po mojej prezentacji na dzisiejszym spotkaniu OWASP kogoś zainteresował temat ogólnie pojętego forensic, być może zainteresują go również starsze wpisy dotyczące tego tematu. Nazbierało się tego trochę, więc małe przypomnienie części z poruszanych t
Przesłany: Jun 10, 20:54