Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5
Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости
Справочник от А до Я
HTML, CSS, JavaScript
Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы
Помогли мы вам |
Hyper-V состоит из нескольких компонентов, краткое описание его структуры можно найти в документации. Для отладки компонентов Hyper-V ты можешь использовать WinDbg либо другой отладчик пользовательского режима или режима ядра, однако для подключения непосредственно к гипервизору необходимо выполнить несколько дополнительных шагов, чтобы настроить рутовый раздел.
Для отладки гипервизора Microsoft разработала специальное расширение WinDbg hvexts.
, которое, к сожалению, не входит в дистрибутив и доступно только партнерам Microsoft (поскольку этому расширению требуются символы для модуля гипервизора, которые Microsoft не предоставляет). Также в каталоге winxp
, находящемся в папке WinDbg, есть расширение nvkd.
, которое предназначено для отладки расширений виртуального коммутатора Hyper-V.
Файл справки WinDbg содержит описание отладки гипервизора через COM-порт (отладка Hyper-V через нуль-модемное кабельное соединение в файле debugger.
), подразумевающее наличие двух физических машин. Также гипервизор можно отладить, если запустить его в любом поддерживаемом программном обеспечении виртуализации. Далее мы будем использовать VMware Workstation.
Для начала нужно установить Windows Server 2019 в качестве гостевой ОС и включить компонент Hyper-V. Если напрямую подключиться к виртуальному COM-порту VMware, то при коммуникации пойдут ошибки обмена пакетов (сложно сказать, с чем это связано). Используй какую-нибудь бесплатную утилиту эмуляции COM-порта для стабилизации соединения (я установил утилиту эмулятора COM-порта Free Virtual Serial Ports от HHD-software версии 3.32. Последняя версия 4.12 выдает ошибки, когда vmdemux пытается открыть COM-порт).
Общий порядок действий таков.
Создай COM-порт для виртуальной машины VMware (Hardware -> Add -> Serial port -> Use named pipe). Введи .pipecom_1
.
Для настройки отладки введи в командной строке опции отладки гипервизора:
bcdedit /hypervisorsettings serial DEBUGPORT:1 BAUDRATE:115200
bcdedit /set hypervisordebug on
Затем нужно ввести параметры отладки хостовой ОС (будет использован тот же COM-порт):
bcdedit /set dbgtransport kdhvcom.dll
bcdedit /dbgsettings serial DEBUGPORT:1 BAUDRATE:115200
bcdedit /debug on
Дополнительно (для отладки загрузки гипервизора — см. соответствующий раздел статьи):
Bcdedit /set bootdebug on
Ниже приведен список модулей отладки, присутствующих в Windows:
kdcom.dll
kdhvcom.dll
kd1934.dll
kdhv1394.dll
kdusb.dll
kdnet.dll (разные производители сетевых карт — разные модули)
kd.dll
В нашем случае мы используем kdhvcom.
.
Перезагрузи Windows Server 2019. Загрузка остановится и будет ждать подключения отладчика.
Открой HHD software Free Virtual Serial Ports, выбери File, затем Create Pipe Port. В поле Pipe name укажи то же значение, что было раньше заполнено для виртуальной машины, — .pipecom_1
. Чекбокс Create pipe должен быть отключен (в противном случае будет создан новый именованный канал, а не выполнено подключение к существующему). Нажми OK.
Виртуальный COM-порт нужно создавать после запуска виртуальной машины, иначе ты увидишь ошибку, что канал не был создан (VMware создает канал после запуска ВМ).
Запусти утилиту vmdemux (находится в папке с WinDbg x64) с указанием имени только что созданного COM-порта в качестве одного из параметров:
vmdemux.exeВ -srcВ com:port=com2,baud=115200
Утилита создаст два именованных канала: Vm0
для гипервизора и Vm1
для root-раздела.
Ты можешь подключить WinDbg Preview к каждому каналу для тестирования:
WinDBGx.exe -k com:port=.pipeVm0,pipe,reconnect,resets=0 – гипервизор
Подключение WinDbg к созданным нами каналамПосле этого можно открыть файл hvix64.exe в IDA PRO, выбрать WinDbg в качестве отладчика и указать в process options -> connection string: com:port=.pipeVm0,pipe,resets=0
.
Выбери Process Attach, нажми Same.
Отладчик остановится внутри гипервизора.
По сравнению с Windows Server 2012 (R2) в актуальной версии серверной винды появился новый модуль — kdstub.
. Ранние версии гипервизора статически линковались с библиотекой отладки и имели достаточно большой размер (2–3 Мбайт), размер текущей версии (10.0.17763.1577) гипервизора hvix64.
— 1230 Кбайт. В случае сетевой отладки kdstub.
будет заменен подходящим отладочным модулем, например kd_02_8086.
.
Во всех подробностях настройка отладки через COM-порт в среде Hyper-V описана в статье Саара Амара (@AmarSaar).
В 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 для этого адаптера и убедиться, что гостевая ОС нормально получает этот адрес, например выполнив команду ipconfig /
. Опция bcdeditВ /
позволяет использовать IP-адрес операционной системы. В этом случае настройка 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
Здесь:
lm
— просмотр загруженных модулей (обычно hv и модуль отладки);k
— просмотр стека;d
, e
— чтение/запись данных по виртуальных адресам;!d
, !e
— чтение/запись данных в физической памяти;r
— отображение значений регистров;!vtop
— трансляция виртуальных адресов в физические. Сперва нужно получить содержимое регистра cr3
и использовать его как первый параметр. Виртуальный адрес — второй параметр.
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>
dx
— расширение доступно тоже, но с некоторыми ограничениями (из-за отсутствия символов): @$debuggerRootNamespace.Debugger.State.PseudoRegisters.General
. Exentry — псевдорегистр, отображающий адрес загрузки модуля гипервизора (hvix64).
Отладка виртуальной машины может быть выполнена с использованием встроенных возможностей процесса vmwp.
(на одну ВМ один экземпляр). Эту возможность впервые упомянул на форуме OSR online один из архитекторов Hyper-V Джейк Ошинс (Jake Oshins). Более подробно описал Рафаэль Ривера (Rafael Rivera — @WithinRafael) в своем блоге. Я обновил скрипт Риверы и выложил его на GitHub.
Скрипт также может сконфигурировать параметры загрузчика гостевой ОС при помощи PowerShell direct. Для этого:
Выключи гостевую ОС.
Укажи параметры для скрипта hyperv-dbg-2019.
.
Запусти скрипт от имени администратора (или отключи UAC).
Запусти WinDbg следующей командой:
WinDBG -k net:port=50010,target=127.0.0.1,key=1.2.3.4
Выполни команду break (Ctrl-Break), после которой отладчик остановится внутри гостевой ОС. Теперь можно исследовать ВМ, используя стандартные команды WinDbg, но в моих экспериментах интенсивная отладка (например, трассировка) несколько раз приводила к тому, что все зависало.
VMware 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 доступен в магазине Microsoft Store. Этот эмулятор работает на базе Hyper-V. Сам эмулятор запускается как Hyper-V ВМ, Windows 10X — вложенная ВМ.
Необходимо смонтировать образ flash.
(просто два раза щелкнуть мышью на файле), с которым работает эмулятор и который расположен в папке по следующему пути:
C:ProgramFilesWindowsAppsMicrosoft.Windows10XEmulatorImage10.0.19578.0Previ_1.0.1.0_x64__8wekyb3d8bbweContent
Скопируй файл в другое место, если у тебя появляются сообщения об ошибках доступа. Имя каталога может отличаться для различных версий эмулятора. До и после монтирования список разделов может выглядеть следующим образом.
Выбери том с меткой VIRT_EFIESP:
mountvol Z: ?Volume{12aef83a-6cf2-4ea1-932f-b3a586a65308}
bcdedit /store "Z:efiMicrosoftbootBCD" /dbgsettings
Команда bcdedit /enum all /v /store "Z:efiMicrosoftbootBCD"
покажет опции загрузочной записи операционной системы эмулятора. Чтобы у нас появилась возможность отладки гостевой ОС, понадобится дамп ядра, который можно получить с использованием встроенных функций эмулятора.
Открой Windows device portal — «Отладка». Загрузи live kernel dump, а затем открой его в WinDbg и запусти скрипт decypher_kdnet_key.
. Скрипт найдет параметры kdnet
и закодирует в формате Base36.
Теперь запусти WinDbg, используя команду windbgx.
. В результате ты сможешь подключиться к ОС хоста.
На эту тему опубликованы два исследования: Hyper-V backdoor Дмитрия Олексюка (@d_olex) и Voyager, созданный @_xeroxz. Их суть — в замене загрузочных файлов Windows в целях перехвата процесса загрузки гипервизора и интеграции своих управляющих модулей. Полноценной отладкой это сложно назвать, но с применением этого метода появляется возможность читать и изменять память Hyper-V. Подробности ты найдешь на страницах упомянутых проектов.
Загрузи последнюю сборку бэкдора и запусти скрипт bootkit_installer.
в хостовой ОС (протестировано в виртуальной среде на Windows Server 2019 внутри VMware Workstation). Перезагрузим хостовую ОС и увидим следующую картину.
В гостевой ОС мы можем запустить backdoor_client.
и получить доступ к различным структурам данных Hyper-V.
Второй проект, Voyager, может быть загружен с сайта GitHacks. Бинарников он не содержит, поэтому их необходимо скомпилировать с помощью Visual Studio для подходящей версии Windows. После чего запустить файл launch.
, который заменит загрузочные файлы Windows. После перезагрузки мы увидим следующую картину.
Для проверки работоспособности можно запустить example.
внутри гостевой ВМ.
Надеюсь, мы увидим в будущем больше примеров для этого проекта.
Отладку позволяет выполнить модуль EXDi для LiveCloudKd без включения опции отладки в загрузчике гостевой ОС. Все подробности можно узнать в соответствующей документации.
Radare2 — консольное средство отладки, поддерживающее очень много режимов. Мы рассмотрим только отладку ядра Windows. Бинарники можно загрузить с того же github.com по адресу https://github.com/radareorg/radare2/releases.
Незначительно изменив исходники, можно получить дополнительную информацию о Hyper-V (модифицированные бинарники приложены к статье). Для начала рекомендую почитать официальные источники, они содержат отличные инструкции.
До запуска необходимо скопировать следующие расширения WinDbg x64 в папку с Radare2:
ext.dll
exts.dll
kdexts.dll
kext.dll
Не забудь указать путь к папке с установленным WinDbg x64 в переменной окружения _NT_DEBUGGER_EXTENSION_PATH
. Вот некоторые команды для тестирования успешности подключения:
pd
— дизассемблирование;xq @0x<address>
— отображение региона памяти;v
— переключение в режим GUI.Radare2 может подключаться к ядру Windows в двух режимах: через интерфейс dbgeng.
и с использованием собственного протокола winkd.
Сперва необходимо настроить гипервизор в режиме сетевой отладки, как это было описано раньше, и запустить Radare2 следующим образом:
radare2 -d "windbg://-k net:port=50011,key=1.2.3.4"
Запуск Radare2Подключено! Теперь ты можешь выполнять стандартные команды WinDbg, используя префикс =!
.
Можно попробовать подключиться к гипервизору по сети, выполнив команду radare2
. Я получил ошибку открытия UDP-сокета, хотя netstat
показал, что порт открыт. Возможно, это ошибка настройки на моем стенде, но исправить ее мне не удалось. В связи с этим будем использовать отладку через COM-порт. Для этого нужно настроить гипервизор так, как это было описано раньше, запустить vmdemux
и подключить Radare2 к именованному каналу:
Используя данные протокола отладки, можно получить дополнительную информацию о загруженном модуле Hyper-V.
Иногда Radare2 не может подключиться к COM-порту и виснет. В этом случае нужно просто сперва подключиться обычным WinDbg-отладчиком, отключиться и подсоединиться с помощью Radare2.
|
|