А АSaturday 7 August 2021

Анализ дампа памяти фреймворком Volatility.

Всем привет.

Криминалистический анализ дампов памяти - метод исследования, который включает в себя поиск и извлечение криминалистических артефактов из физической памяти компьютера (ОЗУ). В памяти компьютера хранится ценная информация о состоянии системы во время выполнения. Создание дампа памяти и его анализ дадут необходимую для расследования информацию, например о том, какие приложения работают в системе, к каким объектам (файлу, реестру и т. д.) эти приложения обращаются, сведения об актив ных сетевых соединениях, загруженных модулях, загруженных драйверах ядра и другую информацию. По этой причине криминалистический анализ дампов памяти используется при реагировании на компьютерные инциденты и анализе вредоносных программ.

Создание дампа памяти – это процесс получения дампа энергозависимой памяти (ОЗУ) в виде энергонезависимого хранилища информации (файла на диске). Существуют различные инструменты, которые позволяют создать дамп памяти физического устройства. Ниже приведен ряд инструментов, которые позволяют создать дамп физической памяти в Windows. Некоторые из них являются коммерческими, а многие можно скачать бесплатно после регистрации. Следующие инструменты работают как на 32-разрядных, так и на 64-разрядных компьютерах:

  • Comae Memory Toolkit (DumpIt) от Comae Technologies (можно скачать бесплатно после регистрации): my.comae.io;
  • Belkasoft RAM Capturer (можно скачать бесплатно после регистрации): belkasoft.com/ram-capturer;
  • FTK Imager от AccessData (можно скачать бесплатно после регистрации): accessdata.com/product-download;
  • Memoryze от FireEye (можно скачать бесплатно после регистрации): www.fireeye.com/services/freeware/memoryze.html;
  • Surge Collect от Volexity (коммерческий): www.volexity.com/products-over-view/surge/;
  • OSForensics от PassMark Software (коммерческий): www.osforensics.com/osforensics.html;
  • WinPmem (бесплатный), часть криминалистического фреймворка Rekall Memory: blog.rekall-forensic.com/search?q=winpmem.

В большинстве случаев вы можете сделать дамп памяти виртуальной машины, приостановив ее. Например, после выполнения образца вредоносного ПО на рабочей станции VMware вы можете приостановить виртуальную машину, которая запишет гостевую память (RAM) в файл с расширением .vmem на диске главного компьютера. В случае с такими приложениями, как VirtualBox, когда дамп памяти нельзя сделать путем приостановки, вы можете использовать утилиту типа DumpIt на гостевом компьютере.

После того как вы сделали дамп памяти зараженной системы, следующим шагом является анализ полученного образа. Volatility представляет собой лучший фреймворк для компьютерной криминалистики с открытым исходным кодом, написанный на Python, позволяющий анализировать и извлекать цифровые артефакты из образа памяти. Volatility может работать на различных платформах (Windows, macOS и Linux). Он поддерживает анализ памяти из 32-разрядных и 64-разрядных версий Windows, MacOS и операционной системы Linux.

Volatility распространяется в нескольких форматах, и его можно скачать на странице www.volatilityfoundation.org/releases. В зависимости от операционной системы, на которой вы собираетесь запускать Volatility, следуйте процедуре установки для соответствующей ОС.

Самый быстрый способ начать работу с Volatility – использовать автономный исполняемый файл. Автономный исполняемый файл распространяется для операционных систем Windows, macOS и Linux. Его преимущество состоит в том, что вам не нужно устанавливать интерпретатор Python или зависимости Volatility, поскольку он поставляется с интерпретатором Python 2.7 и всеми необходимыми зависимостями.

Volatility состоит из ряда плагинов, которые могут извлекать различную информацию из образа памяти. Команда volatility-2.4.standalone.exe -h отображает поддерживаемые плагины.

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

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" imageinfo

Следующая команда использует плагин pslist для вывода списка запущенных процессов из образа памяти, полученного из Windows ХР (32-разрядная версия) с пакетом обновления 3:

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 pslist --output-file=process.txt


Вывод по процессу с PID 684:

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 pslist -p 684

psscan – еще один плагин Volatility, в котором перечислены процессы, запущенные в системе. В отличие от pslist, psscan не обходит двусвязный список объектов _EPROCESS. Вместо этого он сканирует физическую память на предмет подписи объектов процесса. Другими словами, psscan использует иной подход для составления списка процессов по сравнению с плагином pslist. Вы можете подумать, для чего нужен плагин psscan, когда плагин pslist может сделать то же самое? Ответ заключается в технике, используемой psscan. Благодаря подходу, который он использует, он может обнаруживать завершенные и скрытые процессы:

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 psscan -v

При изучении процессов может быть полезно определить родительские/дочерние связи между процессами. В ходе исследования вредоносных программ это поможет вам понять, какие еще процессы связаны с вредоносным процессом. Плагин pstree отображает связи родительских и дочерних процессов, используя выходные данные из pslist и форматируя их в виде дерева. В следующем примере при запуске плагина pstree для зараженного образа памяти отображается связь процессов; дочерний процесс имеет отступ вправо и начинается с периодов:

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 pstree --output-file=prctree.txt

Злоумышленник может установить драйвер ядра для запуска в пространстве ядра и изменить теги пула или любое другое поле в _POOL_HEADER. Изменяя тег пула, злоумышленник может помешать правильной работе плагинов, которые полагаются на сканирование тегов пула. Другими словами, изменяя тег пула, можно скрыть процесс от psscan. Чтобы преодолеть эту проблему, плагин psxview использует извлечение информации о процессе из разных источников. Он перечисляет процесс семи разными способами. Сравнивая выходные данные из разных источников, можно обнаружить несоответствия, вызванные вредоносным ПО. На следующем скриншоте psxview перечисляет процессы, используя семь различных методов:

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 psxview --apply-rules

Вы также можете отфильтровать результаты для определенного типа объекта (Файл, Ключ, Процесс, Мьютекс и т. д.), используя опцию -t. Плагин используется для вывода списка мьютексов (mutex), открытых процессом (с pid 588):

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 handles -p 588 -t Mutant

В следующем примере образа памяти, зараженного руткитом TDL3, процесс svchost.exe (pid 884) имеет открытые дескрипторы файлов для вредоносной библиотеки DLL и драйвера ядра, связанного с руткитом:

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 handles -p 884 -t File

Чтобы вывести список загруженных модулей (исполняемых файлов и библиотек DLL), вы можете использовать плагин dlllist. Плагин dlllist также отображает полный путь, связанный с процессом:

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 dlllist -p 1300

Плагин ldrmodules сравнивает информацию о модуле из трех списков PEB (в памяти процесса) с информацией из структуры данных, находящейся в памяти ядра, известной как дескрипторы виртуальных адресов (virtual address descriptor – VAD): 

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 ldrmodules -p 1300

В следующем примере образа памяти, зараженного вредоносным ПО, подключаемый модуль procdump используется для сброса исполняемого файла вредоносного процесса svchost.exe (pid 956). При помощи опции -D (--dump-dir) вы указываете имя каталога, в который выгрузите исполняемые файлы. Файл назван на основе pid процесса, такого как executable.PID.exe:

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 procdump -p 956 -D C:\JeaDemo

Следующая команда показывает пример использования плагина connections для вывода на экран активных подключений из дампа памяти:

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 connections

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 connscan

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 netscan

Чтобы вывести на экран раздел реестра, подразделы и его значения, вы можете использовать плагин printkey, предоставляя желаемый путь к ключу реестра, используя аргумент -K (--key): 

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 printkey -K "Microsoft\Windows\CurrentVersion\Run"

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 printkey -K "Software\Microsoft\Windows\CurrentVersion\Run"

Плагины Volatility, такие как userassist, shellbags и shimcache, анализируют эти ключи реестра, содержащие двоичные данные, и отображают информацию в гораздо более удобочитаемом формате. Раздел реестра Userassist содержит список программ, которые были выполнены пользователем в системе, и время, когда программа была запущена:

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 userassist

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

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 shimcache

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 shellbags

Чтобы вывести список служб и информацию о них, например отображаемое имя, тип службы и тип запуска, из образа памяти, можно использовать плагин svcscan: 

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 svcscan

Плагин cmdscan перечисляет команды, выполняемые cmd.exe:

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 cmdscan

Плагин cmdscan отображает команды, выполненные злоумышленником. Чтобы понять, была команда выполнена успешно или нет, можно использовать плагин consoles:

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 consoles

Что осталось в истории web-браузера:

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 iehistory

Что осталось в буфере обмена:

:volatility-2.4.standalone.exe -f "Clone of WinXP_ZverCD.vmem" --profile=WinXPSP3x86 clipboard


Так что изучайте плагины фреймворка и память ПК. Удачи. 

В подготовке поста использовались материалы из книги Монаппа К. А., Анализ вредоносных программ / пер. с анг. Д. А. Беликова. – М.: ДМК Пресс, 2019. 



1 comment:

Anonymous said...

+1: vol.py -f target.vmem --profile Win10x64_18362 screenshot -D shot/

Post a Comment

А что вы думаете по этому поводу?

Версия на печать

Популярное