От «сырой» памяти к спасению данных
В предыдущих частях мы предотвратили выключение зараженного компьютера и успешно сняли дамп оперативной памяти. Теперь перед нами лежит файл размером 16 или 32 ГБ — цифровой слепок «места преступления».
Для неподготовленного взгляда это просто гигантский массив байтов. Но для специалиста по форензике — это структурированная экосистема, где всё ещё живут процессы вируса, открытые сетевые соединения и, что самое главное, криптографические ключи, которые могут спасти ваши данные. Это поиск иголки в стоге сена, но у нас есть мощный магнит.
В этой статье мы переходим к практической фазе: использованию Volatility Framework — де-факто стандарта в индустрии для анализа оперативной памяти. Мы пройдем путь от определения версии Windows до извлечения AES-ключей из процесса шифровальщика.
Часть I: Подготовка «Чистой комнаты» (Forensic Workstation)
Золотое правило: НИКОГДА не проводите анализ дампа на машине, с которой он был снят, или на любом другом компьютере в скомпрометированной сети.
Вам потребуется изолированная рабочая станция, предпочтительно на базе Linux (Ubuntu, Debian или специализированный дистрибутив REMnux / Kali Linux).
Почему Linux — лучший выбор для форензики?
- Инструментарий «из коробки»: Утилиты strings, grep, xxd, hexdump являются нативными.
- Безопасность: Вредоносные исполняемые файлы Windows (PE .exe), которые вы можете извлечь из дампа, не запустятся на Linux случайно.
- Производительность: Linux эффективнее работает с огромными файлами, а Volatility работает быстрее и стабильнее.
Рекомендуемая конфигурация станции анализа:
- CPU: 8+ ядер (для параллельной обработки плагинов).
- RAM: 32 ГБ+ (Volatility потребляет много памяти для кэширования структур).
- Storage: NVMe SSD 1 ТБ+ (скорость чтения критична при сканировании 32 ГБ файла).
- Сетевая изоляция: Полный Air-Gap (отсутствие подключения к интернету) или отдельный VLAN без доступа к корпоративной сети.
Часть II: Volatility Framework — Знакомство с инструментом
Volatility — это модульный фреймворк на Python, который умеет «понимать» структуру сырых байтов памяти. Он знает, как Windows хранит список процессов, дескрипторы файлов и ключи реестра.
Как это работает?
Ключевая концепция — Профиль (Profile) или Symbol Table. Это карта, которая объясняет Volatility, по каким смещениям искать системные структуры (KDBG, EPROCESS) для конкретной версии ядра (например, Windows 10 Build 19041).
Установка (Ubuntu/Debian)
Мы будем использовать Volatility 3, так как он значительно быстрее второй версии и не требует ручного создания профилей.
# Обновление и установка зависимостей
sudo apt update
sudo apt install python3 python3-pip git
# Клонирование репозитория
git clone https://github.com/volatilityfoundation/volatility3.git
cd volatility3
# Установка Python-зависимостей
pip3 install -r requirements.txt
# Проверка работоспособности
python3 vol.py --versionЕсли вы используете Kali Linux, инструмент часто предустановлен, но рекомендуется использовать свежую версию из GitHub.
Часть III: Шаг 1 — Разведка (Image Info)
Первый шаг — понять, с чем мы работаем. Если мы применим карту от Windows 7 к памяти Windows 10, мы увидим мусор.
Команда windows.info
В Volatility 3 профили определяются автоматически, но нам нужно убедиться, что фреймворк корректно определил ядро.
python3 vol.py -f /path/to/MEMORY.mem windows.infoПример вывода:
Volatility Foundation Volatility Framework 3.x
Variable Value
Kernel Base 0xf80002c00000
DTB 0x1ad002 <-- Directory Table Base (критично для трансляции адресов)
KDBG 0xf80002c0a0a0
Number of Processors 4
Image Local Date/Time 2026/01/21 14:35:22 UTC
Suggested OS Profile Win10x64_19041Совет: Эта операция может занять время, так как инструмент сканирует файл в поисках сигнатур ядра. Если у вас Volatility 2, используйте команду imageinfo, и это может занять до часа. Volatility 3 делает это за минуты.
Часть IV: Шаг 2 — Охота на процесс (Process Hunting)
Теперь нам нужно найти процесс зловреда. Мы ищем аномалии.
Команда pslist (Список процессов)
python3 vol.py -f MEMORY.mem windows.pslistАнализ вывода:
PID PPID ImageFileName CreateTime ExitTime
...
1024 748 explorer.exe 2026-01-21 11:32:10 N/A
2156 1024 cmd.exe 2026-01-21 14:12:45 N/A
3148 2156 ransomware.exe 2026-01-21 14:12:50 N/A <-- АНОМАЛИЯКоманда pstree (Дерево процессов)
Позволяет увидеть родительско-дочерние связи, что критически важно для понимания вектора атаки.
python3 vol.py -f MEMORY.mem windows.pstreeПример цепочки атаки:
explorer.exe (PID 1024) → cmd.exe (PID 2156) → ransomware.exe (PID 3148)
Признаки вредоносного процесса:
- Имя: Случайный набор символов (asdy78.exe) или мимикрия под системные (scvhost.exe вместо svchost.exe).
- Родитель: cmd.exe или powershell.exe, запущенные из winword.exe (макрос) или explorer.exe.
- Время запуска: Совпадает с началом шифрования файлов.
- SID: Запущен от имени пользователя, но ведет себя как система.
Часть V: Шаг 3 — Извлечение памяти процесса (Memory Dumping)
Мы нашли подозреваемого — PID 3148. Теперь нам нужно «вырезать» его память из общего дампа для детального анализа. Это уменьшит область поиска с 16 ГБ до ~50–100 МБ.
python3 vol.py -f MEMORY.mem windows.dumpfiles --pid 3148 --dump-dir ./output/Или, если процесс уже завершен, но остался в памяти, можно попытаться использовать memmap или dumpfiles с опцией --virtaddr.
Результат: файл pid.3148.dmp в папке output.
Часть VI: Шаг 4 — Поиск ключей (Crypto Analysis)
Самый сложный этап. Ключи шифрования (обычно AES) выглядят как случайный набор байтов, но у них есть структура.
Метод 1: YARA-сканирование
YARA — это инструмент для поиска паттернов. AES Key Schedule (расписание ключей) оставляет характерные следы в памяти (S-Box, Rcon константы).
Пример правила для Volatility:
python3 vol.py -f MEMORY.mem windows.vadyarascan --pid 3148 --yara-rules "strings: $aes_sbox = {63 7C 77 7B F2 6B 6F C5}"Метод 2: Специализированные инструменты (aeskeyfind)
Утилита aeskeyfind ищет математические зависимости, свойственные алгоритму генерации раундовых ключей AES.
# Установка (если нет)
sudo apt install aeskeyfind
# Запуск по дампу процесса (это быстрее, чем по всему образу)
aeskeyfind ./output/pid.3148.dmpУспешный вывод:
FOUND 256-bit AES KEY at offset 0x4d8a40:
6A9B3F2DE8C7B9A32F5D1E8C0A6B3F2DE8F9A0B1C2D3E4F5061728394A5B6C7DМетод 3: Поиск структур (Case Study: 8Base Ransomware)
Некоторые шифровальщики хранят ключи в структурах. Например, 8Base держит в памяти блок, содержащий AES-ключ, зашифрованную версию RSA и контрольную сумму CRC32.
Написав простой Python-скрипт, который сканирует дамп и проверяет CRC32 для каждых 164 байт, можно с высокой точностью найти валидный ключ.
Часть VII: От ключа к файлам
Если вам удалось извлечь 32-байтный AES-ключ (и, возможно, IV — вектор инициализации), вы можете попытаться расшифровать файлы.
Ручной метод: Использование Python-скрипта с библиотекой pycryptodome.
from Crypto.Cipher import AES cipher = AES.new(KEY, AES.MODE_CBC, IV) plaintext = cipher.decrypt(ciphertext)- Готовые утилиты: Часто исследователи выпускают декрипторы, которые требуют только ввода найденного ключа (например, инструменты от Emsisoft или Kaspersky RakhniDecryptor).
Часть VIII: Когда форензика бессильна
Важно быть реалистом. Анализ памяти не является панацеей.
Сценарии провала:
- Процесс завершен и память перезаписана: Если с момента атаки прошло много времени, ОС могла отдать освободившуюся память другим приложениям.
- Modern Evasion: Шифровальщики нового поколения (BlackMatter, BlackCat) используют очистку ключей (RtlSecureZeroMemory) или шифруют их в памяти, расшифровывая только на микросекунды для обработки блока данных.
- Server-Side Generation: Ключ генерируется на сервере хакера, скачивается, используется и удаляется. В памяти его следов может не быть вообще.
Часть IX: План A — Почему бэкапы важнее форензики
Форензика — это всегда План C или D. Это спасательный круг, когда корабль уже тонет.
Правило 3-2-1-1-0
Единственная надежная защита от ransomware в 2026 году — это правильная архитектура резервного копирования.
- 3 копии данных.
- 2 разных носителя.
- 1 копия вне офиса (Cloud/Offsite).
- 1 копия Immutable (Неизменяемая).
- 0 ошибок при проверке восстановления.
Immutable Storage (Object Lock): Технология, позволяющая записать данные так, что их нельзя удалить или изменить в течение заданного времени (например, 30 дней). Даже если хакер получит root-права администратора домена и доступ к консоли бэкапа, он не сможет удалить эти копии.
Итоги
- Не выключайте ПК при атаке.
- Снимайте дамп памяти как можно скорее.
- Используйте Volatility для анализа в безопасной среде.
- Но помните: Immutable Backup — это то, что позволит вам спать спокойно, не надеясь на удачу в поиске байтов.
Изучайте форензику, чтобы понимать врага, но стройте защиту так, чтобы эти знания вам никогда не пригодились на практике.