Volatility - CheatSheet

Reading time: 21 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks

Якщо вам потрібен інструмент, який автоматизує аналіз пам'яті з різними рівнями сканування та запускає кілька плагінів Volatility3 паралельно, ви можете використовувати autoVolatility3:: https://github.com/H3xKatana/autoVolatility3/

bash
# Full scan (runs all plugins)
python3 autovol3.py -f MEMFILE -o OUT_DIR -s full

# Minimal scan (runs a limited set of plugins)
python3 autovol3.py -f MEMFILE -o OUT_DIR -s minimal

# Normal scan (runs a balanced set of plugins)
python3 autovol3.py -f MEMFILE -o OUT_DIR -s normal

Якщо ви хочете щось швидке і божевільне, що запустить кілька плагінів Volatility паралельно, ви можете використовувати: https://github.com/carlospolop/autoVolatility

bash
python autoVolatility.py -f MEMFILE -d OUT_DIRECTORY -e /home/user/tools/volatility/vol.py # It will use the most important plugins (could use a lot of space depending on the size of the memory)

Встановлення

volatility3

bash
git clone https://github.com/volatilityfoundation/volatility3.git
cd volatility3
python3 setup.py install
python3 vol.py —h

volatility2

Download the executable from https://www.volatilityfoundation.org/26

Команди Volatility

Доступ до офіційної документації в Volatility command reference

Примітка про плагіни “list” та “scan”

Volatility має два основні підходи до плагінів, які іноді відображаються в їхніх назвах. Плагіни “list” намагатимуться навігувати через структури ядра Windows, щоб отримати інформацію, таку як процеси (знайти та пройтися по зв'язаному списку структур _EPROCESS в пам'яті), дескриптори ОС (знайти та перерахувати таблицю дескрипторів, розіменувати будь-які знайдені вказівники тощо). Вони більше-менш поводяться так, як би поводився Windows API, якщо б його попросили, наприклад, перерахувати процеси.

Це робить плагіни “list” досить швидкими, але такими ж вразливими до маніпуляцій зловмисним ПЗ, як і Windows API. Наприклад, якщо зловмисне ПЗ використовує DKOM, щоб відключити процес від зв'язаного списку _EPROCESS, він не з'явиться в Диспетчері завдань, і не з'явиться в pslist.

Плагіни “scan”, з іншого боку, використовують підхід, подібний до карвінгу пам'яті для речей, які можуть мати сенс, коли їх розіменовують як специфічні структури. psscan, наприклад, прочитає пам'ять і спробує створити об'єкти _EPROCESS з неї (він використовує сканування по тегам пулу, яке шукає 4-байтові рядки, що вказують на наявність структури, що цікавить). Перевага полягає в тому, що він може знайти процеси, які завершилися, і навіть якщо зловмисне ПЗ маніпулює зв'язаним списком _EPROCESS, плагін все ще знайде структуру, що залишилася в пам'яті (оскільки вона все ще повинна існувати, щоб процес міг працювати). Недолік полягає в тому, що плагіни “scan” трохи повільніші, ніж плагіни “list”, і іноді можуть давати хибнопозитивні результати (процес, який завершився занадто давно і частини його структури були перезаписані іншими операціями).

З: http://tomchop.me/2016/11/21/tutorial-volatility-plugins-malware-analysis/

Профілі ОС

Volatility3

Як пояснено в readme, вам потрібно помістити таблицю символів ОС, яку ви хочете підтримувати, в volatility3/volatility/symbols.
Пакети таблиць символів для різних операційних систем доступні для завантаження за адресами:

Volatility2

Зовнішній профіль

Ви можете отримати список підтримуваних профілів, виконавши:

bash
./volatility_2.6_lin64_standalone --info | grep "Profile"

Якщо ви хочете використовувати новий профіль, який ви завантажили (наприклад, для linux), вам потрібно створити десь таку структуру папок: plugins/overlays/linux і помістити всередину цієї папки zip-файл, що містить профіль. Потім отримайте номер профілів, використовуючи:

bash
./vol --plugins=/home/kali/Desktop/ctfs/final/plugins --info
Volatility Foundation Volatility Framework 2.6


Profiles
--------
LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64 - A Profile for Linux CentOS7_3.10.0-123.el7.x86_64_profile x64
VistaSP0x64                                   - A Profile for Windows Vista SP0 x64
VistaSP0x86                                   - A Profile for Windows Vista SP0 x86

Ви можете завантажити профілі для Linux та Mac з https://github.com/volatilityfoundation/profiles

У попередньому фрагменті ви можете побачити, що профіль називається LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64, і ви можете використовувати його для виконання чогось на зразок:

bash
./vol -f file.dmp --plugins=. --profile=LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64 linux_netscan

Виявлення профілю

volatility imageinfo -f file.dmp
volatility kdbgscan -f file.dmp

Відмінності між imageinfo та kdbgscan

Звідси: На відміну від imageinfo, який просто надає пропозиції профілю, kdbgscan призначений для позитивної ідентифікації правильного профілю та правильного адреси KDBG (якщо їх кілька). Цей плагін сканує підписи KDBGHeader, пов'язані з профілями Volatility, і застосовує перевірки на адекватність, щоб зменшити кількість хибнопозитивних результатів. Число перевірок на адекватність та обсяг виводу залежать від того, чи може Volatility знайти DTB, тому, якщо ви вже знаєте правильний профіль (або якщо у вас є пропозиція профілю від imageinfo), переконайтеся, що ви використовуєте його.

Завжди звертайте увагу на кількість процесів, які знайшов kdbgscan. Іноді imageinfo та kdbgscan можуть знайти більше ніж один підходящий профіль, але лише дійсний матиме деякі пов'язані процеси (Це тому, що для витягнення процесів потрібна правильна адреса KDBG).

bash
# GOOD
PsActiveProcessHead           : 0xfffff800011977f0 (37 processes)
PsLoadedModuleList            : 0xfffff8000119aae0 (116 modules)
bash
# BAD
PsActiveProcessHead           : 0xfffff800011947f0 (0 processes)
PsLoadedModuleList            : 0xfffff80001197ac0 (0 modules)

KDBG

Блок налагодження ядра, відомий як KDBG у Volatility, є критично важливим для судово-медичних завдань, які виконуються Volatility та різними налагоджувачами. Ідентифікований як KdDebuggerDataBlock і типу _KDDEBUGGER_DATA64, він містить важливі посилання, такі як PsActiveProcessHead. Це конкретне посилання вказує на голову списку процесів, що дозволяє перерахувати всі процеси, що є основою для ретельного аналізу пам'яті.

OS Information

bash
#vol3 has a plugin to give OS information (note that imageinfo from vol2 will give you OS info)
./vol.py -f file.dmp windows.info.Info

Плагін banners.Banners може бути використаний у vol3 для спроби знайти linux банери в дампі.

Хеші/Паролі

Екстрактуйте SAM хеші, кешовані облікові дані домену та секрети lsa.

bash
./vol.py -f file.dmp windows.hashdump.Hashdump #Grab common windows hashes (SAM+SYSTEM)
./vol.py -f file.dmp windows.cachedump.Cachedump #Grab domain cache hashes inside the registry
./vol.py -f file.dmp windows.lsadump.Lsadump #Grab lsa secrets

Memory Dump

Дамп пам'яті процесу вилучить все з поточного стану процесу. Модуль procdump лише вилучить код.

volatility -f file.dmp --profile=Win7SP1x86 memdump -p 2168 -D conhost/

Процеси

Список процесів

Спробуйте знайти підозрілі процеси (за назвою) або неочікувані дочірні процеси (наприклад, cmd.exe як дочірній процес iexplorer.exe).
Може бути цікаво порівняти результат pslist з результатом psscan, щоб виявити приховані процеси.

bash
python3 vol.py -f file.dmp windows.pstree.PsTree # Get processes tree (not hidden)
python3 vol.py -f file.dmp windows.pslist.PsList # Get process list (EPROCESS)
python3 vol.py -f file.dmp windows.psscan.PsScan # Get hidden process list(malware)

Дамп процесу

bash
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --pid <pid> #Dump the .exe and dlls of the process in the current directory

Командний рядок

Щось підозріле було виконано?

bash
python3 vol.py -f file.dmp windows.cmdline.CmdLine #Display process command-line arguments

Команди, виконані в cmd.exe, керуються conhost.exe (або csrss.exe на системах до Windows 7). Це означає, що якщо cmd.exe буде завершено зловмисником до отримання дампу пам'яті, все ще можливо відновити історію команд сесії з пам'яті conhost.exe. Для цього, якщо в модулях консолі виявлено незвичну активність, пам'ять відповідного процесу conhost.exe слід дампувати. Потім, шукаючи рядки в цьому дампі, можна потенційно витягнути команди, використані в сесії.

Середовище

Отримайте змінні середовища кожного запущеного процесу. Можуть бути цікаві значення.

bash
python3 vol.py -f file.dmp windows.envars.Envars [--pid <pid>] #Display process environment variables

Привілеї токенів

Перевірте наявність привілейованих токенів у несподіваних службах.
Може бути цікаво перерахувати процеси, які використовують деякі привілейовані токени.

bash
#Get enabled privileges of some processes
python3 vol.py -f file.dmp windows.privileges.Privs [--pid <pid>]
#Get all processes with interesting privileges
python3 vol.py -f file.dmp windows.privileges.Privs | grep "SeImpersonatePrivilege\|SeAssignPrimaryPrivilege\|SeTcbPrivilege\|SeBackupPrivilege\|SeRestorePrivilege\|SeCreateTokenPrivilege\|SeLoadDriverPrivilege\|SeTakeOwnershipPrivilege\|SeDebugPrivilege"

SIDs

Перевірте кожен SSID, що належить процесу.
Може бути цікаво перерахувати процеси, які використовують SID з привілеями (та процеси, які використовують деякий SID служби).

bash
./vol.py -f file.dmp windows.getsids.GetSIDs [--pid <pid>] #Get SIDs of processes
./vol.py -f file.dmp windows.getservicesids.GetServiceSIDs #Get the SID of services

Handles

Корисно знати, до яких інших файлів, ключів, потоків, процесів... процес має дескриптор (відкритий)

bash
vol.py -f file.dmp windows.handles.Handles [--pid <pid>]

DLLs

bash
./vol.py -f file.dmp windows.dlllist.DllList [--pid <pid>] #List dlls used by each
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --pid <pid> #Dump the .exe and dlls of the process in the current directory process

Рядки за процесами

Volatility дозволяє нам перевірити, до якого процесу належить рядок.

bash
strings file.dmp > /tmp/strings.txt
./vol.py -f /tmp/file.dmp windows.strings.Strings --strings-file /tmp/strings.txt

Це також дозволяє шукати рядки всередині процесу, використовуючи модуль yarascan:

bash
./vol.py -f file.dmp windows.vadyarascan.VadYaraScan --yara-rules "https://" --pid 3692 3840 3976 3312 3084 2784
./vol.py -f file.dmp yarascan.YaraScan --yara-rules "https://"

UserAssist

Windows відстежує програми, які ви запускаєте, за допомогою функції в реєстрі, яка називається UserAssist keys. Ці ключі записують, скільки разів кожна програма була виконана і коли вона була запущена востаннє.

bash
./vol.py -f file.dmp windows.registry.userassist.UserAssist

Сервіси

bash
./vol.py -f file.dmp windows.svcscan.SvcScan #List services
./vol.py -f file.dmp windows.getservicesids.GetServiceSIDs #Get the SID of services

Мережа

bash
./vol.py -f file.dmp windows.netscan.NetScan
#For network info of linux use volatility2

Реєстровий хів

Друк доступних хівів

bash
./vol.py -f file.dmp windows.registry.hivelist.HiveList #List roots
./vol.py -f file.dmp windows.registry.printkey.PrintKey #List roots and get initial subkeys

Отримати значення

bash
./vol.py -f file.dmp windows.registry.printkey.PrintKey --key "Software\Microsoft\Windows NT\CurrentVersion"

Дамп

bash
#Dump a hive
volatility --profile=Win7SP1x86_23418 hivedump -o 0x9aad6148 -f file.dmp #Offset extracted by hivelist
#Dump all hives
volatility --profile=Win7SP1x86_23418 hivedump -f file.dmp

Файлова система

Монтування

bash
#See vol2

Сканування/дамп

bash
./vol.py -f file.dmp windows.filescan.FileScan #Scan for files inside the dump
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --physaddr <0xAAAAA> #Offset from previous command

Master File Table

bash
# I couldn't find any plugin to extract this information in volatility3

{{#endtab}}

{{#tab name="vol2"}}

bash
volatility --profile=Win7SP1x86_23418 mftparser -f file.dmp

{{#endtab}} {{#endtabs}}

Файлова система NTFS використовує критично важливий компонент, відомий як таблиця майстер-файлів (MFT). Ця таблиця містить принаймні один запис для кожного файлу на томі, охоплюючи також саму MFT. Важливі деталі про кожен файл, такі як розмір, мітки часу, дозволи та фактичні дані, інкапсульовані в записах MFT або в областях, що знаходяться зовні MFT, але на які посилаються ці записи. Більше деталей можна знайти в офіційній документації.

SSL Ключі/Сертифікати

bash
#vol3 allows to search for certificates inside the registry
./vol.py -f file.dmp windows.registry.certificates.Certificates

Шкідливе ПЗ

bash
./vol.py -f file.dmp windows.malfind.Malfind [--dump] #Find hidden and injected code, [dump each suspicious section]
#Malfind will search for suspicious structures related to malware
./vol.py -f file.dmp windows.driverirp.DriverIrp #Driver IRP hook detection
./vol.py -f file.dmp windows.ssdt.SSDT #Check system call address from unexpected addresses

./vol.py -f file.dmp linux.check_afinfo.Check_afinfo #Verifies the operation function pointers of network protocols
./vol.py -f file.dmp linux.check_creds.Check_creds #Checks if any processes are sharing credential structures
./vol.py -f file.dmp linux.check_idt.Check_idt #Checks if the IDT has been altered
./vol.py -f file.dmp linux.check_syscall.Check_syscall #Check system call table for hooks
./vol.py -f file.dmp linux.check_modules.Check_modules #Compares module list to sysfs info, if available
./vol.py -f file.dmp linux.tty_check.tty_check #Checks tty devices for hooks

Сканування з yara

Використовуйте цей скрипт для завантаження та об'єднання всіх правил yara для шкідливого ПЗ з github: https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9
Створіть директорію rules і виконайте його. Це створить файл під назвою malware_rules.yar, який міститиме всі правила yara для шкідливого ПЗ.

bash
wget https://gist.githubusercontent.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9/raw/4ec711d37f1b428b63bed1f786b26a0654aa2f31/malware_yara_rules.py
mkdir rules
python malware_yara_rules.py
#Only Windows
./vol.py -f file.dmp windows.vadyarascan.VadYaraScan --yara-file /tmp/malware_rules.yar
#All
./vol.py -f file.dmp yarascan.YaraScan --yara-file /tmp/malware_rules.yar

РІЗНЕ

Зовнішні плагіни

Якщо ви хочете використовувати зовнішні плагіни, переконайтеся, що папки, пов'язані з плагінами, є першим параметром, що використовується.

bash
./vol.py --plugin-dirs "/tmp/plugins/" [...]

Autoruns

Завантажте його з https://github.com/tomchop/volatility-autoruns

volatility --plugins=volatility-autoruns/ --profile=WinXPSP2x86 -f file.dmp autoruns

Mutexes

./vol.py -f file.dmp windows.mutantscan.MutantScan

Символічні посилання

bash
./vol.py -f file.dmp windows.symlinkscan.SymlinkScan

Bash

Можливо читати історію bash з пам'яті. Ви також можете скинути файл .bash_history, але він був вимкнений, ви будете раді, що можете використовувати цей модуль волатильності

./vol.py -f file.dmp linux.bash.Bash

Хронологія

bash
./vol.py -f file.dmp timeLiner.TimeLiner

Драйвери

./vol.py -f file.dmp windows.driverscan.DriverScan

Отримати буфер обміну

bash
#Just vol2
volatility --profile=Win7SP1x86_23418 clipboard -f file.dmp

Отримати історію IE

bash
#Just vol2
volatility --profile=Win7SP1x86_23418 iehistory -f file.dmp

Отримати текст з блокнота

bash
#Just vol2
volatility --profile=Win7SP1x86_23418 notepad -f file.dmp

Скриншот

bash
#Just vol2
volatility --profile=Win7SP1x86_23418 screenshot -f file.dmp

Майстер-завантажувальний запис (MBR)

bash
volatility --profile=Win7SP1x86_23418 mbrparser -f file.dmp

Майстер-запис завантаження (MBR) відіграє важливу роль в управлінні логічними розділами носія, які структуровані з різними файловими системами. Він не тільки містить інформацію про розташування розділів, але й містить виконуваний код, що діє як завантажувач. Цей завантажувач або безпосередньо ініціює процес завантаження ОС другого етапу (див. завантажувач другого етапу), або працює в гармонії з записом завантаження тома (VBR) кожного розділу. Для детальнішої інформації зверніться до сторінки MBR у Вікіпедії.

Посилання

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks