Шифровальщики | 21 января 2026

Анализ инцидента: Ищем иголку в стоге сена с помощью Volatility (Часть 3)

Анализ инцидента: Ищем иголку в стоге сена с помощью Volatility (Часть 3)

От «сырой» памяти к спасению данных

В предыдущих частях мы предотвратили выключение зараженного компьютера и успешно сняли дамп оперативной памяти. Теперь перед нами лежит файл размером 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 — это то, что позволит вам спать спокойно, не надеясь на удачу в поиске байтов.

Изучайте форензику, чтобы понимать врага, но стройте защиту так, чтобы эти знания вам никогда не пригодились на практике.

Как вам статья?

Следующий пост

Охота за «Золотым ключом»: Криптография шифровальщиков и извлечение ключей дешифровки из оперативной памяти

Техническое руководство по извлечению AES-ключей ransomware из оперативной памяти. Анализ архитектуры гибридного шифрования, использование aeskeyfind и Volatility

22 января 2026