Категория > Новости > Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала - «Новости»
Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала - «Новости»12-01-2021, 00:00. Автор: Капитолина |
Отладка через COM-портHyper-V состоит из нескольких компонентов, краткое описание его структуры можно найти в документации. Для отладки компонентов Hyper-V ты можешь использовать WinDbg либо другой отладчик пользовательского режима или режима ядра, однако для подключения непосредственно к гипервизору необходимо выполнить несколько дополнительных шагов, чтобы настроить рутовый раздел. Для отладки гипервизора Microsoft разработала специальное расширение WinDbg Файл справки WinDbg содержит описание отладки гипервизора через COM-порт (отладка Hyper-V через нуль-модемное кабельное соединение в файле Для начала нужно установить Windows Server 2019 в качестве гостевой ОС и включить компонент Hyper-V. Если напрямую подключиться к виртуальному COM-порту VMware, то при коммуникации пойдут ошибки обмена пакетов (сложно сказать, с чем это связано). Используй какую-нибудь бесплатную утилиту эмуляции COM-порта для стабилизации соединения (я установил утилиту эмулятора COM-порта Free Virtual Serial Ports от HHD-software версии 3.32. Последняя версия 4.12 выдает ошибки, когда vmdemux пытается открыть COM-порт). Общий порядок действий таков.
Отладка по сетиВ Windows Server 2012 и выше появилась возможность отладки гипервизора по сети. Также эта возможность присутствует во всех версиях Windows 10. Для этого в хостовой ОС необходимо выполнить команды, чтобы настроить параметры отладки гипервизора:
bcdedit /set hypervisordebug on
bcdedit /hypervisorsettings NET HOSTIP:192.168.2.1 PORT:50000
Если есть необходимость, для отладки ОС на хосте нужно указать другой порт:
bcdedit /debug yes
bcdedit /dbgsettings net hostip:192.168.2.1В port:50002
После выполнения команд будет отображена строка для подключения. В настройках виртуальной машины VMware нужно установить тип адаптера Host Only, в настройках виртуальной сети (Edit -> Virtual Network Editor) настроить DHCP для этого адаптера и убедиться, что гостевая ОС нормально получает этот адрес, например выполнив команду После этого нужно запустить два экземпляра IDA PRO, выбрать тип отладки KernelMode, указать в Process Option -> Connection string следующие строки, полученные в результате выполнения приведенных выше команд:
net:port=50002,Key=1.2.3.4 — root partition
net:port=50000,Key=5.6.7.8 — hypervisor
Это позволяет одновременно отлаживать root-раздел и гипервизор. Сетевая отладка гораздо проще в конфигурации, дает большую производительность и стабильнее, поэтому я рекомендую использовать ее там, где это возможно. Выполнить некоторые команды WinDbg можно даже без наличия символов. Если какие-то из перечисленных ниже команд не будут доступны, просто повторно загрузи следующие расширения WinDbg:
.load kext
.load kdexts
.load exts
.load ext
Здесь:
2: kd> !vtop 0x10839d000 0xfffffbb3aa6c3e66
Amd64VtoP: Virt fffffbb3aa6c3e66, pagedir 000000010839d000
Amd64VtoP: PML4E 000000010839dfb8
Amd64VtoP: PDPE 000000010a603670
Amd64VtoP: PDE 000000010a604a98
Amd64VtoP: Large page mapped phys 00000001000c3e66
Virtual address fffffbb3aa6c3e66 translates to physical address 1000c3e66.
!pte2va
!ptov <cr3>
Exentry — псевдорегистр, отображающий адрес загрузки модуля гипервизора Отладка с использованием встроенных возможностей vmwp.exeОтладка виртуальной машины может быть выполнена с использованием встроенных возможностей процесса Скрипт также может сконфигурировать параметры загрузчика гостевой ОС при помощи PowerShell direct. Для этого:
Отладка через протокол GDBVMware Workstation поддерживает встроенный GDB-отладчик. Чтобы его включить, нужно добавить несколько строк в конфигурационный файл VMware:
debugStub.listen.guest64 = "TRUE"
debugStub.listen.guest64.remote = "TRUE" — для подключения с других сетевых машин
debugStub.hideBreakpoints = "TRUE"
monitor.debugOnStartGuest64 = "TRUE"— остановка сразу же после включения VM
Затем ты можешь подключить IDA PRO, «Гидру» или Radare2 к активированному серверу GDB. Пример отладки через GDB-протокол будет показан в разделе «Загрузка гипервизора». Отладка эмулятора Windows 10XЭмулятор Windows 10X доступен в магазине Microsoft Store. Этот эмулятор работает на базе Hyper-V. Сам эмулятор запускается как Hyper-V ВМ, Windows 10X — вложенная ВМ. Необходимо смонтировать образ
C:ProgramFilesWindowsAppsMicrosoft.Windows10XEmulatorImage10.0.19578.0Previ_1.0.1.0_x64__8wekyb3d8bbweContent
Скопируй файл в другое место, если у тебя появляются сообщения об ошибках доступа. Имя каталога может отличаться для различных версий эмулятора. До и после монтирования список разделов может выглядеть следующим образом. Состояние системы до монтированияСостояние системы после монтирования Выбери том с меткой VIRT_EFIESP: mountvol Z: ?Volume{12aef83a-6cf2-4ea1-932f-b3a586a65308} Команда Получение дампа ядра Открой Windows device portal — «Отладка». Загрузи live kernel dump, а затем открой его в WinDbg и запусти скрипт Использование скрипта decypher_kdnet_key.py Теперь запусти WinDbg, используя команду Подключение к хостовой ОС Отладка Hyper-V c помощью подмененного загрузчикаНа эту тему опубликованы два исследования: Hyper-V backdoor Дмитрия Олексюка (@d_olex) и Voyager, созданный @_xeroxz. Их суть — в замене загрузочных файлов Windows в целях перехвата процесса загрузки гипервизора и интеграции своих управляющих модулей. Полноценной отладкой это сложно назвать, но с применением этого метода появляется возможность читать и изменять память Hyper-V. Подробности ты найдешь на страницах упомянутых проектов. Загрузи последнюю сборку бэкдора и запусти скрипт Запуск скрипта bootkit_installer.ps1 В гостевой ОС мы можем запустить Доступ к различным структурам данных Hyper-V на гостевой ОС Второй проект, Voyager, может быть загружен с сайта GitHacks. Бинарников он не содержит, поэтому их необходимо скомпилировать с помощью Visual Studio для подходящей версии Windows. После чего запустить файл Загрузка ОС после применения Voyager Для проверки работоспособности можно запустить Проверка работоспособности Voyager Надеюсь, мы увидим в будущем больше примеров для этого проекта. Отладка secure kernelОтладку позволяет выполнить модуль EXDi для LiveCloudKd без включения опции отладки в загрузчике гостевой ОС. Все подробности можно узнать в соответствующей документации. Отладка с помощью Radare2Radare2 — консольное средство отладки, поддерживающее очень много режимов. Мы рассмотрим только отладку ядра Windows. Бинарники можно загрузить с того же github.com по адресу https://github.com/radareorg/radare2/releases. Незначительно изменив исходники, можно получить дополнительную информацию о Hyper-V (модифицированные бинарники приложены к статье). Для начала рекомендую почитать официальные источники, они содержат отличные инструкции. До запуска необходимо скопировать следующие расширения WinDbg x64 в папку с Radare2:
ext.dll
exts.dll
kdexts.dll
kext.dll
Не забудь указать путь к папке с установленным WinDbg x64 в переменной окружения
Radare2 может подключаться к ядру Windows в двух режимах: через интерфейс Radare2 и интерфейс dbgeng.dllСперва необходимо настроить гипервизор в режиме сетевой отладки, как это было описано раньше, и запустить Radare2 следующим образом:
radare2 -d "windbg://-k net:port=50011,key=1.2.3.4"
Запуск Radare2Подключено! Теперь ты можешь выполнять стандартные команды WinDbg, используя префикс Выполнение стандартных команд отладчика Radare2 и встроенный протоколМожно попробовать подключиться к гипервизору по сети, выполнив команду
Используя данные протокола отладки, можно получить дополнительную информацию о загруженном модуле Hyper-V. Получение дополнительной информации о загруженном модуле Hyper-V Иногда Radare2 не может подключиться к COM-порту и виснет. В этом случае нужно просто сперва подключиться обычным WinDbg-отладчиком, отключиться и подсоединиться с помощью Radare2. Перейти обратно к новости |