Volatility — analiza pamięci RAM w Linuxie
Volatility to otwartoźródłowy framework do analizy zrzutów pamięci RAM (memory forensics). Odtwarza działające procesy, otwarte połączenia sieciowe, załadowane moduły jądra i fragmenty danych, które nigdy nie trafiły na dysk. Po restarcie to wszystko znika — procesy ukryte przez rootkity, połączenia C&C, hasła w pamięci, zdekompresowany malware, historia powłoki. Zrzut RAM wykonany przed restartem zachowuje te dowody do analizy.
Jak działa Volatility?
Proces analizy składa się z dwóch głównych elementów:
- Zrzut pamięci (Memory Dump): Najpierw musimy uzyskać “kopię” całej zawartości pamięci RAM. Można to zrobić za pomocą narzędzi takich jak
LiME(Linux Memory Extractor) lub poprzez zrobienie snapshotu maszyny wirtualnej. - Profil systemu: Volatility musi wiedzieć, jak zinterpretować surowe dane. Każda wersja jądra Linuksa ma nieco inną strukturę danych w pamięci. “Profil” to zestaw informacji, który mówi Volatility, jak znaleźć procesy, połączenia sieciowe itp. w zrzucie z konkretnej wersji systemu (np.
Linux_5_4_0-42-generic_x64).
Podstawowe komendy (wtyczki)
Volatility działa w oparciu o wtyczki. Poniższe przykłady dotyczą Volatility 2. Nowsza wersja, Volatility 3, ma zmienioną składnię (np. vol -f dump.raw linux.pslist) i nie używa profili. Oto kilka z najważniejszych wtyczek Volatility 2:
imageinfo: Próbuje automatycznie zidentyfikować profil systemu na podstawie zrzutu. Pierwszy krok w każdej analizie.pslist: Wyświetla listę procesów działających w momencie zrzutu (podobne dops -ef).pstree: Pokazuje procesy w formie drzewa, co ułatwia znalezienie procesów-rodziców.netscan: Skanuje w poszukiwaniu aktywnych połączeń sieciowych.cmdline: Pokazuje, z jakimi argumentami został uruchomiony dany proces.filescan: Próbuje znaleźć otwarte pliki w pamięci.linux_bash: Odzyskuje historię komend wpisywanych w powłoce bash.
Przykład praktyczny
Wyobraź sobie, że serwer został skompromitowany. Udało Ci się zrobić zrzut pamięci do pliku dump.raw.
-
Identyfikacja systemu:
volatility -f dump.raw imageinfoVolatility sugeruje profil
Linux_5_15_0-generic_x64. -
Listowanie procesów:
volatility -f dump.raw --profile=Linux_5_15_0-generic_x64 pslistNa liście zauważasz podejrzany proces
kworkerds, który wygląda jak literówka mająca naśladować legalny proceskworker. -
Sprawdzenie połączeń sieciowych:
volatility -f dump.raw --profile=Linux_5_15_0-generic_x64 netscanOkazuje się, że proces
kworkerdsutrzymuje aktywne połączenie z adresem IP w Chinach. -
Sprawdzenie linii komend:
volatility -f dump.raw --profile=Linux_5_15_0-generic_x64 cmdlineWidzisz, że proces został uruchomiony z podejrzanymi argumentami:
/tmp/kworkerds -o stratum+tcp://pool.example.com:1234 -u ...- to wygląda na koparkę kryptowalut!
Nowsza wersja jest opisana w artykule o Volatility 3, który obejmuje zaktualizowany interfejs i podejście oparte na tablicach symboli.