RootedCON є найважливішою подією в сфері кібербезпеки в Іспанії та однією з найважливіших в Європі. З метою популяризації технічних знань, цей конгрес є гарячою точкою зустрічі для професіоналів у сфері технологій та кібербезпеки в усіх дисциплінах.
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)
Volatility має два основні підходи до плагінів, які іноді відображаються в їхніх назвах. Плагіни “list” намагатимуться навігувати через структури ядра Windows, щоб отримати інформацію, таку як процеси (знаходити та проходити через зв'язаний список структур _EPROCESS в пам'яті), дескриптори ОС (знаходити та перераховувати таблицю дескрипторів, розіменовувати будь-які знайдені вказівники тощо). Вони більше-менш поводяться так, як би поводився API Windows, якщо б його попросили, наприклад, перерахувати процеси.
Це робить плагіни “list” досить швидкими, але такими ж вразливими до маніпуляцій зловмисним ПЗ, як і API Windows. Наприклад, якщо зловмисне ПЗ використовує DKOM, щоб відключити процес від зв'язаного списку _EPROCESS, він не з'явиться в Диспетчері завдань, і не з'явиться в pslist.
Плагіни “scan”, з іншого боку, використовують підхід, схожий на карвінг пам'яті для речей, які можуть мати сенс, коли їх розіменовують як специфічні структури. psscan, наприклад, прочитає пам'ять і спробує створити об'єкти _EPROCESS з неї (він використовує сканування тегів пулу, яке шукає 4-байтові рядки, що вказують на наявність структури, що цікавить). Перевага полягає в тому, що він може виявити процеси, які завершили роботу, і навіть якщо зловмисне ПЗ втручається в зв'язаний список _EPROCESS, плагін все ще знайде структуру, що залишилася в пам'яті (оскільки вона все ще повинна існувати, щоб процес міг працювати). Недолік полягає в тому, що плагіни “scan” трохи повільніші, ніж плагіни “list”, і іноді можуть давати хибнопозитивні результати (процес, який завершив роботу занадто давно і частини його структури були перезаписані іншими операціями).
Як пояснено в readme, вам потрібно помістити таблицю символів ОС, яку ви хочете підтримувати, в volatility3/volatility/symbols.
Пакети таблиць символів для різних операційних систем доступні для завантаження за адресами:
Якщо ви хочете використовувати новий профіль, який ви завантажили (наприклад, для linux), вам потрібно створити десь таку структуру папок: plugins/overlays/linux і помістити всередину цієї папки zip-файл, що містить профіль. Потім отримайте номер профілів, використовуючи:
У попередньому фрагменті ви можете побачити, що профіль називається LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64, і ви можете використовувати його для виконання чогось на зразок:
Звідси: На відміну від imageinfo, який просто надає пропозиції профілю, kdbgscan призначений для точного визначення правильного профілю та правильного адреси KDBG (якщо їх кілька). Цей плагін сканує підписи KDBGHeader, пов'язані з профілями Volatility, і застосовує перевірки на адекватність, щоб зменшити кількість хибнопозитивних результатів. Число перевірок на адекватність та обсяг виводу залежать від того, чи може Volatility знайти DTB, тому, якщо ви вже знаєте правильний профіль (або якщо у вас є пропозиція профілю від imageinfo), переконайтеся, що ви його використовуєте.
Завжди звертайте увагу на кількість процесів, які знайшов kdbgscan. Іноді imageinfo та kdbgscan можуть знайти більше ніж один підходящий профіль, але лише дійсний матиме деякі пов'язані процеси (Це тому, що для витягнення процесів потрібна правильна адреса KDBG).
Блок відладки ядра, відомий як KDBG у Volatility, є критично важливим для судово-медичних завдань, які виконуються Volatility та різними відладчиками. Ідентифікований як KdDebuggerDataBlock і типу _KDDEBUGGER_DATA64, він містить важливі посилання, такі як PsActiveProcessHead. Це конкретне посилання вказує на голову списку процесів, що дозволяє перерахувати всі процеси, що є основою для ретельного аналізу пам'яті.
OS Information
#vol3 has a plugin to give OS information (note that imageinfo from vol2 will give you OS info)./vol.py-ffile.dmpwindows.info.Info
The plugin banners.Banners can be used in vol3 to try to find linux banners in the dump.
./vol.py-ffile.dmpwindows.hashdump.Hashdump#Grab common windows hashes (SAM+SYSTEM)./vol.py-ffile.dmpwindows.cachedump.Cachedump#Grab domain cache hashes inside the registry./vol.py-ffile.dmpwindows.lsadump.Lsadump#Grab lsa secrets
volatility--profile=Win7SP1x86_23418hashdump-ffile.dmp#Grab common windows hashes (SAM+SYSTEM)volatility--profile=Win7SP1x86_23418cachedump-ffile.dmp#Grab domain cache hashes inside the registryvolatility--profile=Win7SP1x86_23418lsadump-ffile.dmp#Grab lsa secrets
Memory Dump
Дамп пам'яті процесу вилучить все з поточного стану процесу. Модуль procdump лише вилучитькод.
RootedCON є найактуальнішою подією в сфері кібербезпеки в Іспанії та однією з найважливіших в Європі. З метою просування технічних знань, цей конгрес є гарячою точкою зустрічі для професіоналів у сфері технологій та кібербезпеки в усіх дисциплінах.
Спробуйте знайти підозрілі процеси (за назвою) або неочікувані дочірні процеси (наприклад, cmd.exe як дочірній процес iexplorer.exe).
Може бути цікаво порівняти результат pslist з результатом psscan, щоб виявити приховані процеси.
python3vol.py-ffile.dmpwindows.pstree.PsTree# Get processes tree (not hidden)python3vol.py-ffile.dmpwindows.pslist.PsList# Get process list (EPROCESS)python3vol.py-ffile.dmpwindows.psscan.PsScan# Get hidden process list(malware)
volatility--profile=PROFILEpstree-ffile.dmp# Get process tree (not hidden)volatility--profile=PROFILEpslist-ffile.dmp# Get process list (EPROCESS)volatility--profile=PROFILEpsscan-ffile.dmp# Get hidden process list(malware)volatility--profile=PROFILEpsxview-ffile.dmp# Get hidden process list
Вивантаження процесу
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --pid <pid> #Dump the .exe and dlls of the process in the current directory
python3vol.py-ffile.dmpwindows.cmdline.CmdLine#Display process command-line arguments
volatility--profile=PROFILEcmdline-ffile.dmp#Display process command-line argumentsvolatility--profile=PROFILEconsoles-ffile.dmp#command history by scanning for _CONSOLE_INFORMATION
Команди, виконані в cmd.exe, керуються conhost.exe (або csrss.exe на системах до Windows 7). Це означає, що якщо cmd.exe буде завершено зловмисником до отримання дампу пам'яті, все ще можливо відновити історію команд сесії з пам'яті conhost.exe. Для цього, якщо в модулях консолі виявлено незвичну активність, пам'ять відповідного процесу conhost.exe слід дампувати. Потім, шукаючи рядки в цьому дампі, можна потенційно витягнути команди, використані в сесії.
Середовище
Отримайте змінні середовища кожного запущеного процесу. Можуть бути цікаві значення.
python3vol.py-ffile.dmpwindows.envars.Envars [--pid <pid>]#Display process environment variables
volatility--profile=PROFILEenvars-ffile.dmp [--pid <pid>]#Display process environment variablesvolatility --profile=PROFILE -f file.dmp linux_psenv [-p <pid>] #Get env of process. runlevel var means the runlevel where the proc is initated
Привілеї токенів
Перевірте наявність привілейованих токенів у несподіваних службах.
Може бути цікаво перерахувати процеси, які використовують деякі привілейовані токени.
#Get enabled privileges of some processespython3vol.py-ffile.dmpwindows.privileges.Privs [--pid <pid>]#Get all processes with interesting privilegespython3 vol.py -f file.dmp windows.privileges.Privs | grep "SeImpersonatePrivilege\|SeAssignPrimaryPrivilege\|SeTcbPrivilege\|SeBackupPrivilege\|SeRestorePrivilege\|SeCreateTokenPrivilege\|SeLoadDriverPrivilege\|SeTakeOwnershipPrivilege\|SeDebugPrivilege"
#Get enabled privileges of some processesvolatility--profile=Win7SP1x86_23418privs--pid=3152-ffile.dmp|grepEnabled#Get all processes with interesting privilegesvolatility --profile=Win7SP1x86_23418 privs -f file.dmp | grep "SeImpersonatePrivilege\|SeAssignPrimaryPrivilege\|SeTcbPrivilege\|SeBackupPrivilege\|SeRestorePrivilege\|SeCreateTokenPrivilege\|SeLoadDriverPrivilege\|SeTakeOwnershipPrivilege\|SeDebugPrivilege"
SIDs
Перевірте кожен SSID, що належить процесу.
Може бути цікаво перерахувати процеси, які використовують SID з привілеями (та процеси, які використовують SID деякої служби).
./vol.py-ffile.dmpwindows.getsids.GetSIDs [--pid <pid>]#Get SIDs of processes./vol.py-ffile.dmpwindows.getservicesids.GetServiceSIDs#Get the SID of services
volatility--profile=Win7SP1x86_23418getsids-ffile.dmp#Get the SID owned by each processvolatility--profile=Win7SP1x86_23418getservicesids-ffile.dmp#Get the SID of each service
Handles
Корисно знати, до яких інших файлів, ключів, потоків, процесів... процес має дескриптор (відкритий)
./vol.py-ffile.dmpwindows.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--profile=Win7SP1x86_23418dlllist--pid=3152-ffile.dmp#Get dlls of a procvolatility--profile=Win7SP1x86_23418dlldump--pid=3152--dump-dir=.-ffile.dmp#Dump dlls of a proc
Строки за процесами
Volatility дозволяє нам перевірити, до якого процесу належить рядок.
Windows відстежує програми, які ви запускаєте, за допомогою функції в реєстрі, яка називається UserAssist keys. Ці ключі записують, скільки разів кожна програма була виконана і коли вона була запущена востаннє.
RootedCON є найактуальнішою подією в сфері кібербезпеки в Іспанії та однією з найважливіших в Європі. З метою популяризації технічних знань, цей конгрес є гарячою точкою зустрічі для професіоналів у сфері технологій та кібербезпеки в усіх дисциплінах.
./vol.py-ffile.dmpwindows.svcscan.SvcScan#List services./vol.py-ffile.dmpwindows.getservicesids.GetServiceSIDs#Get the SID of services
#Get services and binary pathvolatility--profile=Win7SP1x86_23418svcscan-ffile.dmp#Get name of the services and SID (slow)volatility--profile=Win7SP1x86_23418getservicesids-ffile.dmp
Мережа
./vol.py-ffile.dmpwindows.netscan.NetScan#For network info of linux use volatility2
volatility--profile=Win7SP1x86_23418netscan-ffile.dmpvolatility--profile=Win7SP1x86_23418connections-ffile.dmp#XPand2003onlyvolatility--profile=Win7SP1x86_23418connscan-ffile.dmp#TCPconnectionsvolatility--profile=Win7SP1x86_23418sockscan-ffile.dmp#Opensocketsvolatility--profile=Win7SP1x86_23418sockets-ffile.dmp#Scannerfortcpsocketobjectsvolatility--profile=SomeLinux-ffile.dmplinux_ifconfigvolatility--profile=SomeLinux-ffile.dmplinux_netstatvolatility--profile=SomeLinux-ffile.dmplinux_netfiltervolatility--profile=SomeLinux-ffile.dmplinux_arp#ARP tablevolatility --profile=SomeLinux -f file.dmp linux_list_raw #Processes using promiscuous raw sockets (comm between processes)
volatility--profile=SomeLinux-ffile.dmplinux_route_cache
Реєстровий хів
Друк доступних хівів
./vol.py-ffile.dmpwindows.registry.hivelist.HiveList#List roots./vol.py-ffile.dmpwindows.registry.printkey.PrintKey#List roots and get initial subkeys
volatility--profile=Win7SP1x86_23418-ffile.dmphivelist#List rootsvolatility--profile=Win7SP1x86_23418-ffile.dmpprintkey#List roots and get initial subkeys
volatility--profile=Win7SP1x86_23418printkey-K"Software\Microsoft\Windows NT\CurrentVersion"-ffile.dmp# Get Run binaries registry valuevolatility-ffile.dmp--profile=Win7SP1x86printkey-o0x9670e9d0-K'Software\Microsoft\Windows\CurrentVersion\Run'
Вивантаження
#Dump a hivevolatility--profile=Win7SP1x86_23418hivedump-o0x9aad6148-ffile.dmp#Offset extracted by hivelist#Dump all hivesvolatility--profile=Win7SP1x86_23418hivedump-ffile.dmp
Файлова система
Монтування
#See vol2
volatility--profile=SomeLinux-ffile.dmplinux_mountvolatility--profile=SomeLinux-ffile.dmplinux_recover_filesystem#Dump the entire filesystem (if possible)
Сканування/дамп
./vol.py-ffile.dmpwindows.filescan.FileScan#Scan for files inside the dump./vol.py-ffile.dmpwindows.dumpfiles.DumpFiles--physaddr<0xAAAAA>#Offset from previous command
volatility--profile=Win7SP1x86_23418filescan-ffile.dmp#Scan for files inside the dumpvolatility--profile=Win7SP1x86_23418dumpfiles-n--dump-dir=/tmp-ffile.dmp#Dump all filesvolatility--profile=Win7SP1x86_23418dumpfiles-n--dump-dir=/tmp-Q0x000000007dcaa620-ffile.dmpvolatility--profile=SomeLinux-ffile.dmplinux_enumerate_filesvolatility--profile=SomeLinux-ffile.dmplinux_find_file-F/path/to/filevolatility--profile=SomeLinux-ffile.dmplinux_find_file-i0xINODENUMBER-O/path/to/dump/file
Master File Table
# I couldn't find any plugin to extract this information in volatility3
Файлова система NTFS використовує критично важливий компонент, відомий як таблиця майстер-файлів (MFT). Ця таблиця містить принаймні один запис для кожного файлу на томі, охоплюючи також саму MFT. Важливі деталі про кожен файл, такі як розмір, мітки часу, дозволи та фактичні дані, інкапсульовані в записах MFT або в областях, що знаходяться зовні MFT, але на які посилаються ці записи. Більше деталей можна знайти в офіційній документації.
SSL Keys/Certs
#vol3 allows to search for certificates inside the registry
./vol.py -f file.dmp windows.registry.certificates.Certificates
#vol2 allos you to search and dump certificates from memory
#Interesting options for this modules are: --pid, --name, --ssl
volatility --profile=Win7SP1x86_23418 dumpcerts --dump-dir=. -f file.dmp
Шкідливе ПЗ
./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 для шкідливого ПЗ з github: https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9
Створіть директорію rules і виконайте його. Це створить файл під назвою malware_rules.yar, який міститиме всі правила yara для шкідливого ПЗ.
Можливо зчитати історію bash з пам'яті. Ви також можете скинути файл .bash_history, але він був вимкнений, ви будете раді, що можете використовувати цей модуль волатильності.