Снятие дампа памяти

Почему RAM — самый ценный и самый хрупкий источник улик, и как снять её копию, ничего не испортив.

Дамп памяти (memory dump) — это побайтовая копия содержимого оперативной памяти работающего компьютера, сохранённая в файл для последующего криминалистического анализа.

Эта тема разбирается строго в рамках легальной цифровой криминалистики: расследование на собственных системах организации, реагирование на инцидент с разрешения владельца, учебная лаборатория. Несанкционированный доступ к чужим системам наказуем (в РФ — ст. 272 УК РФ). Дальше речь только о защите и корректном сборе улик.

Зачем это знать защитнику

Когда сработала сигнализация SIEM или антивирус, первая мысль неопытного аналитика — «перезагрузить и почистить». Это худшее, что можно сделать. На жёстком диске вредоносное ПО оставляет минимум следов: современные техники работают в памяти (fileless), не записывая исполняемый файл на диск вовсе. Расшифрованные строки, ключи шифрования вымогателя, активные сетевые соединения злоумышленника, список запущенных процессов и даже введённые с клавиатуры команды — всё это живёт в RAM и исчезает в момент выключения питания. Дамп памяти фиксирует «фотографию» атаки в разгар, давая защитнику то, чего нет больше нигде.

Важно понимать и обратную сторону: дамп — это не панацея, а один слой улик. Он отвечает на вопрос «что происходило прямо сейчас», но плохо отвечает на «что было час назад». Поэтому в зрелом процессе реагирования память сопоставляют с логами, образом диска и сетевым трафиком — каждый источник закрывает слепые зоны другого.

Что именно удаётся восстановить

Чтобы оценить ценность процедуры, полезно держать в голове список того, что аналитик реально достаёт из дампа исправной системы:

  • Полный список процессов — включая те, что уже завершились, но чьи структуры ещё не затёрты.
  • Сетевые соединения и слушающие порты — с какими адресами шёл обмен в момент снятия.
  • Загруженные модули и драйверы — в том числе подозрительные, не подписанные.
  • Командные строки и история консоли — что и с какими аргументами запускалось.
  • Расшифрованные данные и секреты — то, что на диске лежит зашифрованным, в памяти открыто.

Ни один из этих артефактов нельзя получить, если сначала выключить машину. Отсюда и категоричность правила: дамп — раньше всего.

Live-сбор против «мёртвого» анализа

Классическая дисковая форензика — это dead acquisition: систему обесточивают, диск снимают и копируют на стенде, где исследуемые данные неизменны. С памятью так нельзя: выключение уничтожает объект исследования. Поэтому форензика RAM — это всегда live acquisition, сбор на работающей системе. Платой за это становится принципиальная невоспроизводимость: второй дамп той же машины будет уже другим, ведь память непрерывно меняется. Аналитик принимает это и компенсирует строгой документацией: время, инструмент, версия, хеш — всё фиксируется, чтобы суд доверял единственному снимку.

Порядок волатильности

Ключевой принцип сбора улик сформулирован в RFC 3227 (Guidelines for Evidence Collection): собирай от самого недолговечного к самому стойкому. Чем быстрее данные исчезают, тем раньше их нужно зафиксировать.

ПриоритетИсточникСрок жизни
1Регистры и кэш CPUнаносекунды
2Таблицы маршрутизации, ARP, статистика соединенийсекунды
3Оперативная память (RAM)до выключения питания
4Временные файлы, swap/pagefileминуты–часы
5Данные на дискедни–годы
6Резервные копии, архивыдолговременно

Поэтому в правильном плане реагирования дамп RAM снимают до образа диска и до любых перезагрузок.

Как снимают дамп живой системы

Снятие памяти — это live acquisition: машину нельзя выключать, иначе улики пропадут. Инструмент-агент читает физическую память через драйвер ядра и пишет её в файл на внешний носитель (не на исследуемый диск, чтобы не затирать его свободные секторы). Типичные инструменты в лаборатории: WinPmem, Belkasoft RAM Capturer, FTK Imager (Windows); LiME и AVML (Linux). Команда-иллюстрация для Linux-стенда:

sudo insmod lime.ko "path=/mnt/usb/mem.lime format=lime"

Здесь LiME загружается как модуль ядра и сбрасывает физическую память в файл формата lime на подключённую флешку. Объём дампа равен объёму RAM: 16 ГБ памяти — 16 ГБ файла.

Хеш и целостность

Сразу после снятия дамп хешируют, чтобы доказать в суде, что файл не меняли. Защитник вычисляет контрольную сумму и фиксирует её в протоколе:

sha256sum /mnt/usb/mem.lime > mem.lime.sha256

Любая повторная проверка должна давать тот же хеш — это и есть цепочка сохранности улик (chain of custody).

Как это работает под капотом

Обычное приложение видит только виртуальную память — изолированное адресное пространство, которое процессор через таблицы страниц отображает на физические страницы RAM. Дамп же снимает физическую память целиком: страницы всех процессов, ядра, драйверов и кэша вперемешку. Поэтому аналитику потом нужен инструмент (Volatility), который заново разбирает структуры ядра и восстанавливает, какая страница какому процессу принадлежит.

Чтобы понять масштаб «фотографии», прикинем размер дампа и время записи на флешку простым расчётом на стандартной библиотеке Python:

ram_gb = 16
usb_speed_mbps = 40  # МБ/с, типичная USB-флешка

size_mb = ram_gb * 1024
seconds = size_mb / usb_speed_mbps

print(f"Размер дампа: {size_mb} МБ")
print(f"Время записи: ~{seconds:.0f} секунд ({seconds/60:.1f} мин)")

Вывод:

Размер дампа: 16384 МБ
Время записи: ~410 секунд (6.8 мин)

Эти минуты важны: пока агент читает память, система живёт и память меняется — дамп всегда слегка «смазан» (page smearing). Это нормально и учитывается при анализе.

Риски процедуры

Снятие дампа — вмешательство в живую систему, и у него есть издержки, о которых защитник обязан помнить:

  • Принцип Локара. Сам инструмент сбора загружается в память и оставляет след — это неизбежно, поэтому действия документируют.
  • Анти-форензика. Продвинутое вредоносное ПО может прятаться от драйвера чтения памяти; поэтому дамп дополняют другими источниками.
  • Стабильность. Загрузка драйвера ядра в скомпрометированную систему теоретически способна вызвать сбой — на критичных серверах процедуру согласуют заранее.

Как защититься

С точки зрения готовности организации «защита» здесь — это способность вообще получить дамп тогда, когда он понадобится:

  • Заранее подготовьте набор форензик-инструментов на read-only носителе и инструкцию для дежурной смены.
  • Пропишите в плейбуке инцидента: сначала дамп RAM, потом образ диска, перезагрузка — в последнюю очередь.
  • Фиксируйте хеши и время каждого действия — без цепочки сохранности улика бесполезна.
  • Тренируйте процедуру на тестовом стенде, а не впервые во время реальной атаки.

Итоги

  • RAM хранит fileless-вредоносы, ключи и активные соединения, которых нет на диске.
  • Порядок волатильности (RFC 3227): память собирают раньше диска и до выключения.
  • Дамп снимают live-инструментом на внешний носитель и сразу хешируют.
  • Сбор всегда чуть «смазан» и оставляет след — это документируют ради цепочки сохранности.
Проверьте себя
1. Почему оперативную память снимают раньше образа жёсткого диска?
AПамять меньше по объёму и снимается быстрее
BДанные в RAM волатильны и исчезают при выключении питания
CДиск нельзя копировать на работающей системе
DТак требует антивирус
2. Зачем сразу после снятия дампа вычисляют его SHA-256 хеш?
AЧтобы сжать файл
BЧтобы доказать целостность и неизменность улики (цепочка сохранности)
CЧтобы зашифровать дамп от злоумышленника
DЧтобы ускорить анализ в Volatility