Czym jest Volatility?

Volatility to zaawansowany, otwartoźródłowy framework do analizy zrzutów pamięci RAM (tzw. memory forensics). Kiedy dochodzi do incydentu bezpieczeństwa, “twardy” dysk to tylko część historii. Pamięć RAM zawiera ulotny, ale niezwykle cenny obraz tego, co działo się w systemie w momencie ataku.

Volatility pozwala analitykom “wejść” do zamrożonego stanu pamięci i odtworzyć działające procesy, otwarte połączenia sieciowe, załadowane moduły jądra, a nawet odzyskać fragmenty danych, które nigdy nie zostały zapisane na dysku. Jest to jedno z najważniejszych narzędzi w dziedzinie Digital Forensics and Incident Response (DFIR).

Dlaczego analiza pamięci jest tak ważna?

Po restarcie systemu, cała zawartość pamięci RAM jest bezpowrotnie tracona. A to właśnie tam znajdują się:

  • Lista uruchomionych procesów (nawet tych ukrytych przez rootkity).
  • Aktywne połączenia sieciowe (np. do serwera C&C atakującego).
  • Hasła i klucze szyfrujące przechowywane w pamięci.
  • Fragmenty zdekompresowanego złośliwego oprogramowania.
  • Wykonywane komendy w powłoce.

Bez analizy pamięci, badanie incydentu jest jak próba rozwiązania zagadki kryminalnej, mając do dyspozycji tylko puste pomieszczenie, a nie miejsce zbrodni z dowodami.

Jak działa Volatility?

Proces analizy składa się z dwóch głównych elementów:

  1. 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.
  2. 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. Oto kilka z najważniejszych:

  • 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 do ps -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.

  1. Identyfikacja systemu:

    volatility -f dump.raw imageinfo
    

    Volatility sugeruje profil Linux_5_15_0-generic_x64.

  2. Listowanie procesów:

    volatility -f dump.raw --profile=Linux_5_15_0-generic_x64 pslist
    

    Na liście zauważasz podejrzany proces kworkerds, który wygląda jak literówka mająca naśladować legalny proces kworker.

  3. Sprawdzenie połączeń sieciowych:

    volatility -f dump.raw --profile=Linux_5_15_0-generic_x64 netscan
    

    Okazuje się, że proces kworkerds utrzymuje aktywne połączenie z adresem IP w Chinach.

  4. Sprawdzenie linii komend:

    volatility -f dump.raw --profile=Linux_5_15_0-generic_x64 cmdline
    

    Widzisz, że proces został uruchomiony z podejrzanymi argumentami: /tmp/kworkerds -o stratum+tcp://pool.example.com:1234 -u ... - to wygląda na koparkę kryptowalut!

Podsumowanie

Volatility to potężny mikroskop, który pozwala zajrzeć w najgłębsze zakamarki działającego systemu. Choć jego obsługa wymaga wiedzy i praktyki, jest to absolutnie niezbędne narzędzie dla każdego, kto poważnie myśli o bezpieczeństwie, reagowaniu na incydenty i analizie złośliwego oprogramowania w środowiskach Linux.