Úvod do forenzní analýzy paměti

Kurz CZ.NIC, Petr Břehovský

Paměť

Je zdrojem spousty zajímavých informací, najdeme v ní:

  • běžící a nedávno ukončené procesy

  • navázaná síťová spojení (sokety)

  • vykonané příkazy

  • klíče použité k šifrování disku

  • injektovaný škodlivý kód

  • komunikaci mezi uživateli

  • dešifrované emaily

  • historii procházení Internetu

  • cache (clipboard, SAM databáze, editované soubory)

  • soubory namapované do paměti

  • event logy

Současný malware i současné metody neoprávněného přístupu využívané útočníky jsou založeny pokud možno pouze na práci v operační paměti, nebo je malware na disku zašifrován a decryptuje se až v paměti. Útočníci se tak snaží vyhnout detekčním mechanizmům analyzujícím práci s diskem (antiviru), viz. Stuxnet, SamSam anebo Cobalt Kitty.

Existují celé frameworky: Empire, CobaltStrike anebo PowerSploit

Zdroj

Volatility umí pracovat s následujícími formáty paměti.

  • RAW

  • Hibernační soubor

  • Snímek virtuálního stroje

  • Microsoft crash dump

Odkazy na aplikace

Hibernační soubory

  • Virtuální stroj, .vmem (po uspání stroje)

  • Windows, %SystemDrive%/hiberfil.sys

Crash Dump

Ve Windows k nalezení v ceste, %WINDIR%/MEMORY.DMP

Do formátu (raw) vhodného k analýze pomocí volatility lze konvertovat crashdump, hibernační soubor, virtualbox core dump, vmware snapshot a firewire relaci pomocí volatility pluginu imagecopy.

python2 vol.py –f hiberfil.sys imagecopy –O hiberfil.raw

Pokud nezafunguje plugin imagecopy, použijte hibr2bin.exe

Volatility

Základní příkaz ke zjištění informací o aplikaci

python2 vol.py --info

Základní příkaz pro zjištění informací o obrazu paměti

python2 vol.py -f <cesta k obrazu pameti> imageinfo

Obecný příkaz ke zjištění informací z obrazu paměti

python2 vol.py -f <cesta k obrazu pameti> --profile=<profil OS> <plugin> [ARG]

Dump injectovaného kódu

python2 vol.py -f <cesta k obrazu pameti> --profile <OS profil> vaddump -b <offset> -D <cesta ke slozce pro dump>/

Workflow

Základní otázky jsou:

  1. Co běželo?

  2. Co to dělalo? (k jakým prostředkům to mělo přístup)

  3. Jaká to mělo práva

Detailnější postup

  • Identifikace podezřelého procesu

  • Analýza knihoven podezřelého procesu

  • Analýza síťové komunikace

  • Identifikace perzistence

  • Uložení dat k následné analýze

Identifikujte podezřelý proces

pslist – zobrazí běžící procesy (projde spojový seznam běžících procesů), obvykle neukáže ukončené, nebo skryté procesy

pstree – zobrazí navíc vztah rodiče a potomka, přepínač -v přidává podrobnější informace

psscan – zobrazí další procesy nezobrazené pslistem (ukončené, skryté- odlinkované procesy) , které ale stále existují v nealokovaném adresním prostoru (skenuje paměť na přítomnost _EPROCESS objektů)

psxview – porovnává všechny další možné zdroje informací o procesech (vhodný k identifikaci skrytých procesů)

Seznam DLL načtených procesem:

dlllist - podobné jako pslist, prochází obousměrný spojový seznam z _PEB (process environment block) (LoadCount není nikdy -1 0xFFFF pro knihovny načítané z běhu resp. pomocí explicitního volání LoadLibrary, ale je -1 pro knihovny načítané podle IAT Import Address Table)

!!! Je velmi zvláštní když kalkulačka načítá z běhu knihovny pro práci se sítí (WS2_32.dll).

ldrmodules - prochází soubory namapované v paměti a porovnává se seznamy (podobný princip jako psxview)

Analyzujte síťovou komunikaci

connections – zobrazí otevřená spojení prohledáváním seznamu v tcpip.sys (x86/x64 WinXP a Win2003 Server) connscan – hledá „connection“ objekty ve fyzické paměti (x86/x64 WinXP a Win2003 Server)

sockets - zobrazí otevřené sockety ze seznamu v tcpip.sys (x86/x64 WinXP a Win2003 Server) sockscan - hledá „socket“ objekty ve fyzické paměti (x86/x64 WinXP a Win2003 Server)

netscan - hledá „socket“ a „connection“ objekty ve fyzické paměti, rozlišuje mezi IPv4 a IPv6 (WinVista, Win2008 Server, Win7)

Filesystem

mftparser – extrahuje MFT (Master File Table) záznamy tak, že v paměti vyhledává FILE a BAAD signatury, kterými tyto tabulky vždy začínají; dostaneme seznam souborů na disku

filescan – aktuálně otevřené soubory dumpfiles - dump obsahu souboru z paměti (nemusí být kompletní)

Registry

hivelist – vypíše seznam všech registrových hives a jejich virtuálních adres

hivescan - proskenuje paměť na všechny objekty typu _CMHIVE

hivedump - vypíše všechny klíče z hivu printkey - vypíše hodnoty konkrétního klíče (přepínač -K )

dumpregistry - vyexportuje celý hive v binární podobě (viz. regripper https://github.com/keydet89/RegRipper3.0)

hashdump - vypíše LM/NTLM hashe hesel uživatelských účtů

lsadump – vypíše z registrů dešifrovaná LSA tajemství

userassist - vypíše často spouštěné programy

Hledání malware

yarascan – vyhledává procesy se zadanou signaturou python2 vol.py -f stuxnet.vmem --profile stuxnet yarascan --yara-file=stuxnet.yar

malfind - hledá stránky paměti s právy PAGE_EXECUTE_READWRITE a zobrazí dissasemblované náhledy (jedná se o indikátor injektovaného kódu, protože pokud je kód normálně nahrán do paměti, má tato oblast paměti nastavenou operačním systémem ochranu PAGE_EXECUTE_WRITECOPY)

Resources

Last updated