Анализ дампа памяти и файла подкачки. Выполнил работу: Бершауэр В.В. Группа БИТ-191. Дисциплина: Инструментальное обеспечение компьютерно-технической экспертизы. **Ход работы:** ## Часть 1. Анализ дампа памяти и файла подкачки реальной машины. Для снятия дампа памяти вместе с файлом подкачки была выбрана утилита FTK Imager. FTK Imager – это бесплатный инструмент, выпущенный компанией «AccessData». Используется для создания файлов образов дисков и их монтирования, устройств хранения, позволяет выполнять анализ структуры диска, восстанавливать данные, находить потерянные файлы или искать данные путем сканирования образа диска. Для снятия дампа памяти и файла подкачки необходимо перейти в меню "File", далее нажать кнопку "Capture Memory": ![](https://hackmd.io/_uploads/SkJkbyu83.png) Далее программа предложит выбрать путь, по которому будет создан дамп памяти. Выбрав опцию «Include pagefile», вместе с дампом памяти будет создан файл подкачки: ![](https://hackmd.io/_uploads/Hk2eZk_8n.png) После нажатия кнопки «Capture Memory» начнется создание дампа и по завершению процесса появится уведомление о успешном снятии дампа: ![](https://hackmd.io/_uploads/HJVbZJ_Lh.png) **Основными утилитами для анализа будут являться Volatility Framework, утилита Strings и bulk_extractor. Вспомогательной - WinHex (шестнадцатиричный редактор).** 1. Volatility Framework — это полностью открытая коллекция инструментов, реализованная на Python, для извлечения цифровых артефактов из образцов энергозависимой памяти. Volatility рабо-тает на любой операционной системе, поддержи-вающей Python. При помощи Volatility возможно проанализировать дамп оперативной памяти, используя плагины. Плагин – это скрипт, написанный на языке Python, позволя-ющий найти ту или иную информацию в файле. Файл подкачки инструмент исследовать не может. Это связано с тем, что файл подкачки представляет собой непрерывные блоки данных, без какой-либо структуры. В Volatility 3 достаточно указать путь до директории дампа оперативной памяти, не учитывая профиль. Вместо них используются таблицы символов, они генерируются автоматически при каждом использо-вании плагина, если таковое необходимо. Для её работы необходимо установить Python версии 3.7.0, определенные библиотеки Python, для поддержки Volatility 3, и наличие самого исходного кода Vola-tility 3. Для анализа дампа оперативной памяти в Volatility, на операционной системе Windows, сначала необходимо перейти в директорию с исходным кодом Volatility, скаченного с github. Далее воспользоваться следующим синтаксисом: «py -3.7 vol.py -f [путь до директории, в которой находится исследуемый дамп оперативной памяти] [наименование плагина, с учетом того, с какой операционной системы дамп оперативной памяти был изъят]». С помощью ключа -f передается путь до файла. Py означает запуск python.exe, [-3.7] – версию Python, если в системе их установлено несколько, vol.py – скрипт Volatility. 2. Strings – это утилита, применяемая для поиска печатаемых строк в двоичных файлах. Она выводит последовательности печатаемых символов, обнару-женных в заданном файле. Программа является автономной, не требует установки и запускается с помощью исполняемого файла. Утилита корректно работает только на 64-х разрядной системе. Для анализа файлов подкачки, на операционной системе Windows, используя инструмент Strings, необходимо перейти в директорию с исполняемым файлом, скаченным с официального сайта Microsoft . Далее воспользоваться следующим синтаксисом: «strings64.exe [путь до файла подкачки] | findstr /i [регулярное выражение или набор символов]». «findstr» выполняет поиск шаб-лонов текста в файлах, ключ /i – игнорирует регистр символов при поиске строки. 3. bulk_extractor — это программа, написанная на языке C++, которая сканирует образ диска, файл или каталог с файлами и извлекает полезную информацию без разбора файловой системы или структур файловой системы. Результаты сохраняются в файлах функций, которые можно легко проверить, проанализировать или обработать с помощью автоматизированных инструментов. bulk_extractor также создает гистограммы найденных функций, поскольку более распространенные функции, как правило, более важны. Программа предустановлена в дистрибутиве Kali Linux. 4. WinHex – это полнофункциональный шестнадцатеричный редактор, который позволяет увидеть информацию, которую некоторые программы скрывают или не позволяют просмотреть. Утилита содержит редактор дисков, браузер директорий для FAT12, FAT16, FAT32 и NTFS, RAM редактор, позволяющий редактировать виртуальную память процессоров, интерпретатор данных, который распознает двадцать разнообразных типов данных, а еще есть возможность редактирования структур данных при помощи шаблонов. **Анализ дампа и файла подкачки с помощью утилит на OS Windows.** Версия операционной системы, с которой были извлечен файл подкачки и дамп оперативной памяти – Windows 10 Pro, 64-x разрядная, сборка 19041.2965, объём ОЗУ – 8 гигабайт. Размер файла подкачки - 4 гигабайта. Плагин windows.info отображает некоторые общие сведения о системе, включая номер сборки и системное время, корневой каталог системы: Используемая команда: py vol.py -f D:\mempage\memdump.mem windows.info. ![](https://hackmd.io/_uploads/rkVZYkuI3.png) Ещё одним вариантом определения номера сборки является плагин windows.verinfo. Он отображает информацию о версии из заголовков PE файлов (PE — формат исполняемых файлов, объектного кода и динамических библиотек (DLL), используемый в 32- и 64-разрядных версиях операционной системы Microsoft Windows). Но не все файлы содержат корректную часть номера сборки. Используемая команда: py vol.py -f D:\mempage\memdump.mem windows.verinfo. ![](https://hackmd.io/_uploads/BJjL9kO8n.png) В памяти содержаться кусты реестра Windows. Volatility сканирует дамп и ищет найденные разделы реестра. Плагин windows.registry.printkey.Printkey с указанием ключа через параметр –key позволяет вывести значения конкретного раздела реестра: ![](https://hackmd.io/_uploads/BJfW2yOU3.png) Следующий плагин – envars. Он отображает переменные среды процесса, которые хранятся в его памяти. Из вывода плагина можно получить информацию о процессоре и имени пользователя. Чтобы найти локального пользователя, можно, например, выполнить поиск по значению «OneDrive»: ![](https://hackmd.io/_uploads/HyVa6y_82.png) Чтобы извлечь информацию о процессоре, необходимо выполнить поиск по значению «PROCESSOR»: ![](https://hackmd.io/_uploads/S1N00J_In.png) Имя компьютера: ![](https://hackmd.io/_uploads/HytAJx_Lh.png) Домашняя папка пользователя: ![](https://hackmd.io/_uploads/rkrEbedIh.png) Volatility может предоставить информацию о запущенных процессах. Плагин «pslist» просматривает двусвязный список, на который указывает PsActiveProcessHead: ![](https://hackmd.io/_uploads/ByZzzguL2.png) Offset(V) – показывает смещение, ImageFileName – имя процесса, PID – идентификатор процесса, PPID – идентификатор родительского процесса, Threads – количество потоков, Handles – количество дескрипторов. Помимо процессов, Volatility способна отображать загруженные dll файлы, а также их пути. Для этого применяется плагин «dlllist». Он проходит по двусвязному списку _LDR_DATA_TABLE_ENTRY структур, на который указывает PEB (InLoadOrderModuleList). С помощью этого плагина, можно найти вредоносные dll библиотеки, с последующей выгрузкой и анализом на специализированных ресурсах: ![](https://hackmd.io/_uploads/r1LxEedUn.png) Возможно отобразить dll файлы для определенного процесса, необходимо использовать ключ --pid. ![](https://hackmd.io/_uploads/SkqxSx_U2.png) Для просмотра списка драйверов ядра, загруженных в систему, используется плагин «modules». Это проходит по двусвязному списку структур LDR_DATA_TABLE_ENTRY, на которые указывает PsLoadedModuleList. ![](https://hackmd.io/_uploads/r1Y18xuUh.png) Плагин cmdline перечисляет аргументы командной строки процесса: ![](https://hackmd.io/_uploads/SyZnUl_U3.png) Для сканирования сетевой активности в Volatility используется плагин «netscan». Он находит конечные точки TCP, конечные точки UDP, различает IPv4 и IPv6, печатает локальный и удаленный IP-адрес (если применимо), локальный и удаленный порт (если применимо), время, когда сокет был связан или, когда соединение было установлено, и текущее состояние (для соединений TCP): ![](https://hackmd.io/_uploads/SJivueuLh.png) Используя утилиту strings и регулярные выражения, соответствующие запросу, можно найти в файле подкачки: Список всех путей: ![](https://hackmd.io/_uploads/rk2FFeuLn.png) Утилита strings, может искать какие-либо URL – адреса. Она сканирует весь файл на совпадение заданным ему форматом, в данном случае «http». Необходимо учитывать, что операционная система Windows хранит множество адресов электронной почты и URL – адресов, являющихся системными, то есть они могут не относиться к активности пользователя. ![](https://hackmd.io/_uploads/HkvX5e_L2.png) Используя регулярное выражение «^.*@.*\.ru» либо «^.*@.*\.com» можно найти адреса электронной почты: ![](https://hackmd.io/_uploads/HyqFqx_Ih.png) **Анализа дампа и файла подкачки с помощью утилит на OS Linux.** Для начала нужно обновить pip: ![](https://hackmd.io/_uploads/BJU2slOLn.png) Скачаем исходный код Volatility3 с github: ![](https://hackmd.io/_uploads/ByzZ3guU3.png) Далее установить необходимые зависимости из текстового файла в исходном коде Volatility3: ![](https://hackmd.io/_uploads/B1TN2gOU3.png) Вывод плагина windows.info: ![](https://hackmd.io/_uploads/HyKUaedLh.png) Все плагины работают точно так же, как и на windows поскольку volatility написана на python и может работать везде, где можно установить интерпретатор python 3.7. На Linux для анализа можно использовать Bulk Extractor. -j = 6 - количество потоков. Через ключ -o указывается папка, в которую будут записываться результаты сканирования: ![](https://hackmd.io/_uploads/SyZ0Cg_In.png) Все данные, полученные в результате сканирования, распределены по текстовым документам, которые представляют из себя отчёт: ![](https://hackmd.io/_uploads/S1eSf-O8n.png) Была найдена почта в отчетном файле email: ![](https://hackmd.io/_uploads/Sk_mmbd82.png) Ip адреса (было выведено первые 10 найденных ip адресов): ![](https://hackmd.io/_uploads/HJ1wm-d82.png) Сетевые домены: ![](https://hackmd.io/_uploads/B16s7-dI3.png) Найденные номера телефонов: ![](https://hackmd.io/_uploads/H1e1VZuI2.png) Найденные url адреса: ![](https://hackmd.io/_uploads/rJiPEZuIn.png) В дистрибутивах Linux утилита Strings также предустановлена. Анализ файла подкачки с помощью неё именно на Linux намного удобнее, нежели на Windows. Список всех путей в файле подкачки: Регулярное выражение: ![](https://hackmd.io/_uploads/rJnrL-_I2.png) ![](https://hackmd.io/_uploads/HkiNH-O8h.png) Поиск переменных среды: Регулярное выражение: ![](https://hackmd.io/_uploads/SJ5vLbd82.png) ![](https://hackmd.io/_uploads/B1diHb_Un.png) Результат неудовлетворителен. Вероятно, что это из-за компресии файла подкачки. Для решения этой проблемы необходимо воспользоваться программой для декомпрессии. Поиск URL-адресов: Регулярное выражение:![](https://hackmd.io/_uploads/H1GYLWOUn.png) ![](https://hackmd.io/_uploads/SkYzUWOI2.png) Поиск адресов электронной почты: Регулярное выражение: ![](https://hackmd.io/_uploads/Hk5AIZO82.png) ![](https://hackmd.io/_uploads/Bk9-vbdU2.png) ## Часть 2. Анализ дампа памяти и файла подкачки виртуальной машины. Дамп оперативной памяти и файл подкачки были сняты при помощи FTK Imager на виртуальной машине с операционной системой Win10: ![](https://hackmd.io/_uploads/H1qL0MO83.png) Перенеся дамп и файл подкачки на основную машину, воспользуемся Volatility 3 для анализа. Первым делом, плагин windows.info: ![](https://hackmd.io/_uploads/SkJs0M_8h.png) Чтобы удостоверится, что дамп памяти был снят действительно с виртуальной машины, сравним номера сборок: ![](https://hackmd.io/_uploads/B1sFJXuL3.png) ![](https://hackmd.io/_uploads/H1Yj1m_I2.png) Номера сборок совпадают. Также проверим Ip адрес: ![](https://hackmd.io/_uploads/ByFVx7uLh.png) ![](https://hackmd.io/_uploads/HyOrgQ_In.png) Также совпадают. В списке процессов видны процессы виртуальной машины: ![](https://hackmd.io/_uploads/HyT2e7u8h.png) ![](https://hackmd.io/_uploads/r1h1bXO8n.png) Используя плагин envars и ключевое слово "COMPUTERNAME" найдём имя компьютера: ![](https://hackmd.io/_uploads/BkIw-7u8n.png) Файл подкачки оказался пустым: ![](https://hackmd.io/_uploads/SkdV7Q_Ih.png) ## Часть 3. Снятие дампа памяти при работающей виртуальной машине. Дамп памяти был снят при помощи FTK Imager с одной работающей виртуальной машиной. Воспользуемя плагином windows.pslist для поиска процессов: ![](https://hackmd.io/_uploads/SyOLaWdL2.png) Были найдены процессы,связанные с виртульной машиной. Экспорт дампа одного из процессов VirtualBoxVM.exe и анализ его при помощи того же bulk_extractor дал некорректные результаты.