ВОССТАНОВЛЕНИЕ ПАМЯТИ ВИРТУАЛЬНОЙ МАШИНЫ ИЗ РАСШИРЕННОГО ОБРАЗА ПАМЯТИ БАЗОВОЙ СИСТЕМЫ НА ПЛАТФОРМЕ WINDOWS Овчинников А. А. студент 5 курса Математико-механического факультета СПбГУ, [email protected] Аннотация Важной частью компьютерного криминалистического анализа (digital forensics) является исследование образов памяти. Вместе с массовым распространением средств виртуализации появляется необходимость в новых методах анализа образов памяти, снятых с систем, на которых запущены виртуальные машины. В работе предложен подход к получению физической памяти гостевой системы из образа памяти базовой системы (host system), что позволяет в дальнейшем применить стандартные техники анализа памяти. Введение Основными задачами компьютерного криминалистического анализа является изучение вычислительных устройств и носителей информации в целях поиска и фиксирования доказательств (например, в ходе расследования гражданских или уголовных дел). Типичный процесс экспертизы состоит из следующих основных шагов: Захват (acquisition) образа данных на цифровом устройстве Результатом этого шага может быть образ жесткого диска, файловой системы, образ памяти и т.п. Анализ данных Информация, представляющая интерес, может быть различной по виду и содержанию: история посещений веб-браузеров, журналы программ обмена мгновенными сообщениями, удаленные файлы различного типа и многое другое. Для извлечения и анализа данных могут применяться такие методы, как карвинг([3]) или стохастическое моделирование ([5]). Подготовка отчёта о собранных артефактах По окончании этапа анализа формируется отчёт с подробным описанием всех использованных средств, методов и полученными результатами. Использование расширенного образа памяти Анализ образа памяти (memory forensics, live RAM forensics) в данный момент является важной частью криминалистического анализа. Образ (дамп) памяти захватывается на работающей системе, после чего анализируется. В памяти может быть найдено большое количество информации, которую трудно или невозможно получить, располагая только жёстким диском: расшифрованные файлы или пароли, распакованные вредоносные программы, открытые в момент захвата образа сетевые подключения. Особый интерес при исследовании процесса представляет его адресное пространство, восстановление которого позволяет приступить к более тщательному анализу. Но обладая исключительно образом памяти, значительная часть адресного пространства зачастую не может быть восстановлена, так как процесс может также использовать файлы подкачки и отображаемые в память файлы. Таким образом, некоторые части виртуального адресного пространства не хранятся в физической памяти операционной системы. Поэтому предлагается использовать т.н. «расширенный» образ памяти, то есть образ, дополненный файлом подкачки системы, а также исполняемым файлом и файлами динамических библиотек, которые использует процесс. Таким образом, появляется возможность восстановить значительную часть пользовательского адресного пространства процесса. Исследование запущенных виртуальных машин Современные технологии виртуализации позволяют создавать и использовать независимые системы, которые в то же время будут работать на одном физическом оборудовании. Гипервизоры, работающие на основе базовой (хостовой) ОС, также называемые гипервизорами «второго типа», позволяют запускать произвольные операционные системы внутри уже запущенных. Данные средства могут быть использованы злоумышленниками для создания «чистой», легко настраиваемой среды, в которой можно осуществлять преступную деятельность, не оставляя улик на хостовой системе. А используя зашифрованный раздел для хранения файлов виртуальной машины на жестком диске можно полностью скрыть ее наличие на компьютере. Также средства виртуализации широко применяются в серверном сегменте. Использование исключительно оффлайн-методов исследования (как анализ жестких дисков и журналов) в случае таких инцидентов как взлом и распространение вредоносного кода серьезно ограничивает эффективность анализа. А использованию анализа памяти в таких случаях препятствует как раз наличие технологий виртуализации, которые не позволяют применить стандартные техники и утилиты. На данный момент ни одна из имеющихся утилит для работы с образами памяти не умеет извлекать информацию о виртуальных машинах, запущенных на хост-системе. Предлагается осуществлять анализ образа памяти на наличие запущенных виртуальных машин, и в случае их наличия производить извлечение данных о гостевой системе. В частности, предлагается извлекать оперативную память гостевой системы для дальнейшего применения стандартных методов анализа памяти. Восстановление физической памяти гостевой системы на примере QEMU QEMU ([9])— свободная программа с открытым исходным кодом для эмуляции аппаратного обеспечения различных платформ (x86, x86_64, MIPS, SPARC и т.д.). Далее предполагаем, что виртуальное адресное пространство процесса QEMU было восстановлено из расширенного образа памяти системы Windows 7 x64, и дальнейшие действия будут производится именно с восстановленным адресным пространством ([1]). Структура RAMBlock Различные фрагменты адресуемой памяти в QEMU хранится в виде двусвязного списка ram_list, описываемого структурой RAMList. Каждый элемент в списке представляет собой структуру RAMBlock (её описание находится в файле include/cpu-all.h дерева исходных кодов QEMU), описывающую конкретный фрагмент памяти: это может быть и физическая память, и видеопамять, и системный BIOS. typedef struct RAMBlock { struct MemoryRegion *mr; uint8_t *host; ram_addr_t offset; ram_addr_t length; uint32_t flags; char idstr[256]; struct { struct RAMBlock *tqe_next; struct RAMBlock * *tqe_prev; } next; } RAMBlock; Рисунок 1. Структура RAMBlock Требуется найти структуру RAMBlock (см. Рис. 1), которая отвечает за отображение физической памяти. После исследования исходного кода было установлено, что у блока, описывающего физическую память гостевой машины идентификатор idstr равен «pc.ram». Поэтому логичным шагом является поиск в образе памяти процесса данной строки. После нахождения смещения идентификатора, можно получить смещение предполагаемой структуры типа RAMBlock. Получив очередное смещение, требуется проверка (валидация) того, что по данному смещению находится действительная структура RAMBlock. Проверка потенциальных структур RAMBlock Можно выделить несколько правил для валидации структур RAMBlock: 1. Поле mr должно являться действительным ненулевым указателем в адресном пространстве пользователя процесса. То есть для Windows на платформе x64 должно выполняться соотношение 0 < mr < 0x8000'0000'0000 при общем размере поля в 8 байт. 2. Для поля host должно выполняться аналогичное соотношение: 0 < host < 0x8000'0000'0000. 3. Поле offset должно быть равно 0 для физической памяти. 4. Как уже было сказано, поле, описываемое массивом символов idstr должно содержать идентификатор «pc.ram». Еще одной особенностью данного поля является то, что кроме первых шести байтов, представляющих собой строку «pc.ram», оставшиеся 250 байт являются нулевыми байтами. Это связано с тем, что память для блока RAMBlock выделяется с помощью функции mmap с параметром MAP_ANON, который приводит к принудительной инициализации нулями выделяемой памяти. 5. Поле next должно содержать корректные ссылки на другие структуры RAMBlock, описывающие регионы памяти, отличные от физической. Данные правила позволяют достаточно точно определить, какие из найденных смещений являются действительными смещениями структур RAMBlock. Общий алгоритм восстановления физической памяти Алгоритм восстановления физической памяти из гостевой машины под управлением QEMU в общем виде выглядит следующим образом: 1. 2. 3. 4. 5. 6. 7. Поиск процессов QEMU Восстановление адресного пространства процесса QEMU из расширенного образа памяти Поиск идентификатора «pc.ram» Нахождение смещения предполагаемой структуры RAMBlock Проверка валидности структуры Для каждой валидной структуры RAMBlock — получение значений полей host (виртуальный адрес блока памяти в адресном пространстве QEMU) и length (размер данного блока). Чтение блока длины length начиная с виртуального адреса host в адресном пространстве процесса QEMU. После восстановления памяти описанным образом следует провести проверку корректности восстановленной памяти. Для этих целей был использован Volatility Framework — известное программное средство для анализа образов памяти, снятых с систем под управлением Windows и Linux. Восстановленные данные были опознаны Volatility как образ памяти, а также были успешно найдены все запущенные в гостевой машины процессы. Заключение В работе описан метод извлечения физической памяти гостевой машины, запущенной под управлением QEMU, из образа памяти базовой системы. После успешного извлечения появляется возможность применить стандартные методы анализа образов памяти для исследования гостевой системы. Описанный метод можно обобщить на другие средства виртуализации с исходным кодом (VirtualBox, KVM, Xen), что позволит проводить эффективный анализ инцидентов, произошедших на виртуализированных и облачных платформах. Литература 1. А. Овчинников, Расширенный анализ образа памяти на платформе Windows // Материалы всероссийской научной конференции по проблемам информатики «СПИСОК-2012», 2012, С. 38-43. 2. М. Руссинович, Внутреннее устройство Microsoft Windows (4-ое издание), 2008 3. A. Merola, Data Carving Concepts // SANS Institute, 2008 4. A. Schuster. Searching for Processes and Threads in Microsoft Windows Memory Dumps // Digital Forensic Research Workshop, Digital Investigation, 2006. 5. J. Grier, Detecting data theft using stochastic forensics // Digital Investigation, 2011. 6. J. Kornblum. Using Every Part of the Buffalo in Windows Memory Analysis // Digital Investigation Journal, 2007. 7. J. S. Okolica, G. L. Peterson. Windows operating systems agnostic memory analysis // Digital Forensic Research Workshop, 2010. 8. M. Burdach. An Introduction to Windows Memory Forensic, 2005, URL: http://bandwidthco.com/whitepapers/compforensics/memory/Introducti on%20To%20Windows%20Memory%20Forensic.pdf 9. QEMU – open source processor emulator, URL: http://qemu.org