При расследовании компьютерного инцидента первостепенное значение имеет анализ содержимого оперативной памяти и жесткого диска скомпрометированной машины. При этом содержимое памяти, как правило, представляет наибольший интерес, так как зачастую вредоносы и хакерские инструменты либо вообще не имеют файлового тела, либо этот файл хорошо обфусцирован и его исследование потребует дополнительных затрат времени. Поэтому крайне важно сохранить содержимое памяти скомпрометированного узла.
В рамках статьи мы будем говорить об исследовании дампов памяти ОС Windows с использованием инструментов, предназначенных для работы с этой операционной системой.
Делаем дамп
Для начала нам необходимо сделать дамп памяти взломанного узла. Прежде чем приступать к работе с инструментами создания дампов, нужно подготовить флешку, размер который будет превышать объем оперативной памяти на машине. Поэтому не стоит рассчитывать записать записать дамп с машины с 16 Гб RAM на носитель размером в 8 Гб.
Существует множество различных инструментов для выполнения дампов. Мы в качестве примера воспользуемся бесплатным FTK Imager, который можно загрузить по адресу https://www.exterro.com/digital‑forensics‑software/ftk‑imager
Для создания дампа памяти FTK Imager загружает в ядро ОС драйвер устройства (понимаем, что потребуются права локального админа) и начинает последовательно читать память, отображая объект ядра \Device\PhysicalMemory. С точки зрения пользователя, процесс создания дампа с помощью FTK Imager выглядит просто и интуитивно понятно.
После запуска утилиты выберите File → Capture Memory… Далее укажите имя файла дампа и диск для сохранения. Также можно включить использование pagefile.sys:

После нажатия Capture Memory будет создан файл дампа.
Реконструируем действия пользователя
Возможно несколько ситуаций, когда нам потребуется восстановить действия пользователя на компьютере. Если мы анализируем устройство потерпевшего, то информация о действиях пользователя может нам подсказать как произошло заражение или как действовал злоумышленник, получивший удаленный доступ к данному узлу.
Если же речь идет об устройстве злоумышленника, то такой анализ позволит понять, какие действия он выполнял, и возможно найти свидетельства незаконной деятельности. Кроме того, если расследуется «обычный» криминал, не связанный с компьютерными преступлениями, то анализ действий пользователя устройства позволит узнать с кем он переписывался, какие данные и кому отправлял и т. д.
В качестве основного инструмента мы будем использовать фреймворк Volatility (https://github.com/volatilityfoundation/volatility3). Это самый распространённый фреймворк для извлечения цифровых артефактов из образцов энергозависимой памяти.
Процесс установки фреймворка достаточно прост, достаточно воспользоваться pip:
$ pip install volatility3
Итак, у нас есть дамп памяти, полученный с атакованной машины. Для начала попробуем узнать какие хэши пользователь есть в этом дампе. Для этого воспользуемся ключом hashdump:
$ vol ‑f MemDump.DMP windows.hashdump

Эта информация может быть полезна для дальнейшего расследования. Но нас все‑таки больше интересует что происходило на машине пользователя.
Для начала осмотрим какие процессы были запущены в момент снятия дампа.
$ vol ‑f MemDump.DMP windows.pstree

Скорее всего таких процессов будет довольно много, поэтому нужно или выводить список по частям или сразу указать, какой именно процесс мы ищем.
Вывод плагина содержит не только имя активного процесса, но и его уникальный идентификатор, идентификатор родительского процесса, количество ассоциированных с процессом дескрипторов и потоков, время создания процесса и, если процесс завершился, то время выхода.
В случае, если нас интересуют также завершившиеся процессы, то необходимо использовать ключ psscan.
$ vol ‑f MemDump.DMP windows.psscan
Теперь мы можем искать программы, запущенные пользователем в момент создания дампа или завершившиеся незадолго до этого. Но что делать, если нужно найти программы, завершившиеся раньше? Для таких ситуаций у Volatility есть плагин userassist, извлекающий информацию о программах, которые пользователь часто запускает. Среди них могут оказаться и те, с которыми пользователь недавно работал.
Для этого необходимо воспользоваться ключом userassist
$ vol ‑f MemDump.DMP windows.userassist

На выводе команды мы видим, что userassist показывает полный путь к исполняемому файлу, счетчик запусков, продолжительность взаимодействия пользователя с программой, а также дату и время последнего обновления раздела реестра.
Ищем офис
Очень часто при расследовании особый интерес вызывают офисные документы. В случае заражения вредоносами, они проникают в систему через макросы в офисных файлах. К тому, же не лишним будет узнать какие последние документы смотрел пользователь.
Предположим, что в списке процессов мы нашли WINWORD.EXE. Данный процесс имеет идентификатор 1592. Далее мы попробуем узнать, какие именно ресурсы использовал данный процесс. Для этого воспользуемся плагином handles, который мы запустим с опциями ‑p и ‑t для того, чтобы отобразить только те ресурсы, которые связаны с файлами.
$ vol ‑f MemDump.DMP windows.handles ‑p 1592 ‑t File

В представленном фрагменте вывода команды мы видим упоминание некоего DOCM файла. Давайте попробуем найти этот файл в дампе памяти. Для этого нам потребуется плагин filescan с помощью которого мы составим список всех файлов и их расположение.
$ vol ‑f MemDump.DMP windows.filescan > filescan.txt
В созданном файле мы видим физическое смещение, по которому был найден файл, некоторые его атрибуты и полный путь к файлу на диске. А вот и наш файл.

Зная физическое смещение искомого файла, мы можем воспользоваться плагином dumpfiles чтобы извлечь его из памяти. С помощью опции ‑Q укажем физическое смещение, а с помощью ‑D каталог, в который нужно сохранить файл.
$ vol ‑f MemDump.dmp windows.dumpfiles ‑Q 0×0000000101a113f0 ‑D 'D:\files'

В результате мы получили два новых файла file.None.0xfffffa80282a6b80.vacb
и file.None.0xfffffa80258625f0.dat
.
По сути, эти файлы являются контейнерами, в которых размещается содержимое файла и данные. Чтобы получить оригинальный файл, можно попробовать переименовать контейнер, заменив расширение. В случае, если это действительно файл соответствующего формата, вы сможете открыть извлеченный файл в нужном приложении. Только не забывайте, что этот файл может содержать опасный макрос и запускать его можно только в изолированной виртуальной машине или песочнице.
Заключение
В завершении статьи подведем небольшой итог выполненным действиям. Мы с помощью утилиты FTK Imager сделали дамп памяти скомпрометированного узла. Затем посмотрели пользовательские хеши и список процессов, в котором обнаружилось упоминание Winword. Далее мы решили выяснить, какие документы в нем открывались. Узнав имя файла мы попытались получить его содержимое с помощью filescan. И в итоге нам удалось получить искомый офисный файл из дампа.
Конечно, это только один из возможных наборов действий, которые приходится выполнять при анализе дампов памяти. Но тем не менее это вполне реальный сценарий, который может пригодиться в реальном расследовании.
Таким образом, анализ дампов памяти позволяет шаг за шагом восстанавливать действия пользователя и находить ключевые доказательства. Но, как видно, это лишь часть инструментов, с которыми приходится работать специалисту по компьютерной криминалистике.
Если вы хотите подробнее разобраться в практических методах и увидеть, как такие задачи решаются в реальном времени, приглашаем вас на бесплатные уроки курса «Компьютерная криминалистика»:
9 сентября в 20:00 — «Вложенная виртуализация. Анализ памяти». Рассмотрим, как правильно работать с дампами в сложных сценариях.
22 сентября в 20:00 — «Фишинговая атака как старт инцидента. Реакция SOC‑аналитика». Узнаем, как строится расследование с самого начала.
Чтобы оставаться в курсе актуальных технологий и трендов, подписывайтесь на Telegram‑канал OTUS.