Анализ оперативной памяти с Volatility
Этот урок знакомит с анализом дампа оперативной памяти — там видно то, чего нет на диске.
Volatility — открытый фреймворк для анализа дампов оперативной памяти: он реконструирует процессы, соединения, модули и другие структуры ядра из «сырого» снимка RAM.
Память — это «фотография» работающей системы в момент инцидента. В ней видны запущенные процессы (включая скрытые), сетевые соединения, внедрённый код, командные строки, иногда пароли и ключи. Особенно ценна память при fileless-атаках, которые почти не касаются диска. Когда вредонос живёт только в RAM — например, инъекция в легитимный процесс или нагрузка, развёрнутая прямо из PowerShell в памяти, — диск может выглядеть чистым, и единственный способ увидеть угрозу — снять и разобрать дамп.
Рамка прежняя: дамп снимают со своей или корпоративной системы с правом доступа либо с учебного образа. Память содержит и приватные данные (открытые документы, переписку, ключи), поэтому обращение с дампом регулируется теми же нормами (138/272 УК, 152-ФЗ), а сам дамп хранят как улику — с хешем и в цепочке хранения.
Сначала — дамп памяти
Чтобы анализировать память, её сперва снимают на живой системе (по порядку летучести — одной из первых). Инструменты: AVML, LiME (Linux), WinPmem, FTK Imager (Windows). Результат — файл-дамп, который затем разбирают Volatility на отдельной машине.
Принцип order of volatility прост: что исчезнет первым — снимают первым. RAM теряется при выключении, сетевые соединения и запущенные процессы — почти мгновенно, а диск переживёт перезагрузку. Поэтому при реагировании на инцидент память часто фиксируют раньше, чем делают образ диска. Сам процесс снятия неизбежно немного меняет память (инструмент сбора тоже занимает RAM) — это нормально, главное использовать минимально инвазивный, заранее проверенный инструмент и зафиксировать факт и время снятия в протоколе.
Что показывает Volatility
Фреймворк состоит из плагинов, каждый извлекает свой тип артефактов:
# Volatility 3: список процессов из дампа
vol -f memory.dmp windows.pslist
# Скрытые процессы (сравнение списков ядра)
vol -f memory.dmp windows.psscan
# Сетевые соединения на момент снимка
vol -f memory.dmp windows.netscan
# Командные строки запущенных процессов
vol -f memory.dmp windows.cmdline
# Признаки инъекции кода в процессы
vol -f memory.dmp windows.malfind| Плагин | Что даёт |
| pslist / pstree | дерево процессов |
| psscan | скрытые/завершённые процессы |
| netscan | сетевые соединения |
| malfind | инъекции кода |
| dlllist / handles | загруженные модули, дескрипторы |
Особенно полезен pstree: он показывает родительско-дочерние связи, и аномалии в них — мощный сигнал. Например, winword.exe, породивший powershell.exe, или powershell.exe, запустивший cmd.exe с подозрительными аргументами, выдают цепочку «фишинговый документ → нагрузка». Команда malfind ищет регионы памяти с правами на запись и исполнение и без привязки к файлу на диске — типичный признак внедрённого шелл-кода; найденный регион можно выгрузить и прогнать через антивирус или YARA.
Как работает под капотом
В дампе памяти нет «процессов» как таковых — есть байты. Volatility знает внутренние структуры данных ОС (например, список EPROCESS в Windows) и «накладывает» их на дамп, реконструируя объекты. Поэтому важен профиль/символы нужной версии ОС: без них фреймворк не поймёт раскладку структур. pslist идёт по официальному связанному списку процессов, а psscan сканирует память на сигнатуры структур — так находят процессы, скрытые руткитом из списка.
Дамп RAM (байты) | v Volatility накладывает структуры ОС EPROCESS-список -> процессы таблицы сокетов -> соединения регионы памяти -> инъекции (malfind)
Сопоставление двух взглядов на одни данные — основа обнаружения скрытого. Руткит может «отцепить» свой процесс от двусвязного списка ядра (приём DKOM), и тогда pslist его не покажет. Но структура EPROCESS всё ещё лежит в памяти, и psscan, ищущий её по сигнатуре, её найдёт. Расхождение между результатами двух плагинов и есть улика: процесс, видимый сканом, но отсутствующий в списке, почти наверняка прячут намеренно. В Volatility 3 вместо ручного выбора профиля используются символы (ISF) под конкретную сборку ОС — поэтому версию системы фиксируют заранее.
Что ещё достают из памяти
Возможности форензики RAM шире, чем список процессов. Плагин filescan восстанавливает объекты файлов, открытых на момент снимка, а dumpfiles выгружает их содержимое — иногда так достают документ, который вредонос держал открытым, или сам исполняемый файл, уже стёртый с диска. Через handles и mutantscan находят именованные мьютексы — многие семейства вредоносов создают характерный мьютекс, чтобы не запуститься дважды, и его имя становится отличным IOC. В Windows реестр частично загружен в память, и hivelist/printkey позволяют прочитать актуальные ключи автозапуска прямо из дампа, даже если на диске их успели подчистить.
Особая ценность памяти — секреты в открытом виде. Пока система работает, в RAM лежат расшифрованные ключи шифрования, токены сессий, иногда пароли и кешированные учётные данные. Для расследования это может быть единственный способ прочитать зашифрованный диск (если успели снять память до выключения) или подтвердить, под какой учёткой действовал злоумышленник. Именно поэтому к дампу относятся как к крайне чувствительной улике: он содержит приватные данные, его доступ ограничивают, хранят с хешем и в цепочке хранения, а работают строго в правовой рамке (138/272 УК, 152-ФЗ).
Частые ошибки
- Снять память слишком поздно. После перезагрузки её уже нет.
- Анализировать память на той же машине. Дамп разбирают на отдельной системе, чтобы не вносить изменений.
- Игнорировать psscan. pslist не покажет скрытые процессы — нужен скан.
- Не зафиксировать версию ОС. Без корректных символов разбор будет неверным.
- Не смотреть дерево процессов. Аномальные пары «родитель → потомок» выдают атаку быстрее списка.
Итоги
- Память хранит процессы, соединения, инъекции и иногда ключи — критично при fileless-атаках.
- Память сначала снимают (AVML/LiME/WinPmem) по порядку летучести, затем разбирают Volatility на отдельной машине.
- Плагины pslist/psscan/netscan/malfind/pstree дают процессы (в т.ч. скрытые), соединения, инъекции и аномалии в дереве.
- Дамп — это улика с приватными данными: его хранят с хешем, в цепочке хранения и в правовой рамке.