Следующая новость
Предыдущая новость

Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала

25.12.2020 16:33
Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала

Содержание статьи

  • Отладка через COM-порт
  • Отладка по сети
  • Отладка с использованием встроенных возможностей vmwp.exe
  • Отладка через протокол GDB
  • Отладка эмулятора Windows 10X
  • Отладка Hyper-V c помощью подмененного загрузчика
  • Отладка secure kernel
  • Отладка с помощью Radare2
  • Radare2 и интерфейс dbgeng.dll
  • Radare2 и встроенный протокол
  • Cutter
  • QEMU
  • Ghidra + плагин ret-sync
  • Загрузка гипервизора
  • Поиск символьной информации
  • Утилиты
  • Гипервызовы
  • Вывод

Ги­пер­визор про­изводс­тва кор­порации Microsoft, как и любая дру­гая прог­рамма, соз­дан людь­ми, а зна­чит, содер­жит опре­делен­ное количес­тво оши­бок. Поиск этих оши­бок — занятие не толь­ко увле­катель­ное, но и полез­ное: во‑пер­вых, Microsoft рас­полага­ет собс­твен­ной прог­раммой Bug Bounty (о ее осо­бен­ностях я рас­ска­жу чуть ниже), а во‑вто­рых… Во‑вто­рых, зна­ния об уяз­вимос­тях и недоку­мен­тирован­ных воз­можнос­тях при­ложе­ний цен­ны сами по себе. В сегод­няшней статье мы рас­смот­рим прин­ципы отладки гипер­визора Hyper-V и раз­берем­ся в его осо­бен­ностях.

Ги­пер­визор ком­пании Microsoft исполь­зует­ся в боль­шом чис­ле ком­понен­тов Windows и, как любой слож­ный про­дукт, не лишен допущен­ных при раз­работ­ке оши­бок. Чис­ло уяз­вимос­тей, най­ден­ных в этом про­дук­те толь­ко в 2020 году, сос­тавило 21.

В 2020 году в Hyper-V была обна­руже­на 21 уяз­вимость

Для Hyper-V Microsoft пред­лага­ет от­дель­ную прог­рамму баг‑баун­ти, раз­мер вып­лат которой может дос­тигать 250 тысяч дол­ларов. Одна­ко сто­ит упо­мянуть, что Microsoft не работа­ет со стра­нами, которые находят­ся в сан­кци­онном спис­ке США. Рос­сия фор­маль­но при­сутс­тву­ет в этом спис­ке, поэто­му сле­дует про­являть осмотри­тель­ность, ког­да отправ­ляешь информа­цию об уяз­вимос­тях в Microsoft, если ты еще ни разу не получал воз­награж­дение нап­рямую от вен­дора. Луч­ше вос­поль­зовать­ся услу­гами пос­редни­ка, ина­че ты можешь стол­кнуть­ся с тем, что обна­ружен­ная тобою уяз­вимость вдруг одновре­мен­но будет най­дена дру­гой ком­пани­ей или иссле­дова­телем. И неваж­но, что уяз­вимость оста­валась в про­дук­те нес­коль­ко лет (этот вари­ант был про­верен на прак­тике).

Что­бы искать уяз­вимос­ти в Hyper-V, нуж­но вла­деть метода­ми отладки это­го гипер­визора. Акту­аль­ные спо­собы отладки и будут темой сегод­няшней статьи. Для этих целей мож­но исполь­зовать эму­лято­ры, под­держи­вающие вло­жен­ную вир­туали­зацию (такие как VMware Workstation или сам Hyper-V), либо обыч­ный компь­ютер или ноут­бук.

Термины

  • Ги­пер­визор — ком­понент Hyper-V, отве­чающий за фун­кци­они­рова­ние под­систе­мы аппа­рат­ной вир­туали­зации про­цес­сора (hvix64.exe — Intel, hvax64.exe — AMD, hvaa64.exe — ARM). В статье рас­смат­рива­ется гипер­визор для про­цес­соров Intel.
  • Ги­пер­вызов (hypercall) — вызов задан­ной фун­кции в гипер­визоре с помощью инс­трук­ции vmcall\vmmcall\hvc (в зависи­мос­ти от про­изво­дите­ля про­цес­сора);
  • root-раз­дел — Windows Server 2019 с вклю­чен­ным ком­понен­том Hyper-V;
  • гос­тевой раз­дел (вир­туаль­ная машина, ВМ) — опе­раци­онная сис­тема, запущен­ная в сис­теме вир­туали­зации Hyper-V;
  • VMCS (virtual-machine control structure) — струк­тура, опре­деля­ющая логику работы гипер­визора;
  • VMX root — режим, в котором работа­ет гипер­визор;
  • VMX non-root — режим, в котором работа­ет опе­раци­онная сис­тема и обслу­жива­емое ею прик­ладное прог­рам­мное обес­печение;
  • VM exit — переход из VMX non-root в VMX root при выпол­нении инс­трук­ций или усло­вий, задан­ных в VMCS или заложен­ных непос­редс­твен­но в логику работы про­цес­сора.

Отладка через COM-порт

Hyper-V сос­тоит из нес­коль­ких ком­понен­тов, крат­кое опи­сание его струк­туры мож­но най­ти в до­кумен­тации. Для отладки ком­понен­тов Hyper-V ты можешь исполь­зовать WinDbg либо дру­гой отладчик поль­зователь­ско­го режима или режима ядра, одна­ко для под­клю­чения непос­редс­твен­но к гипер­визору необ­ходимо выпол­нить нес­коль­ко допол­нитель­ных шагов, что­бы нас­тро­ить рутовый раз­дел.

Для отладки гипер­визора Microsoft раз­работа­ла спе­циаль­ное рас­ширение WinDbg hvexts.dll, которое, к сожале­нию, не вхо­дит в дис­три­бутив и дос­тупно толь­ко пар­тне­рам Microsoft (пос­коль­ку это­му рас­ширению тре­буют­ся сим­волы для модуля гипер­визора, которые Microsoft не пре­дос­тавля­ет). Так­же в катало­ге winxp, находя­щем­ся в пап­ке WinDbg, есть рас­ширение nvkd.dll, которое пред­назна­чено для отладки рас­ширений вир­туаль­ного ком­мутато­ра Hyper-V.

Файл справ­ки WinDbg содер­жит опи­сание отладки гипер­визора через COM-порт (отладка Hyper-V через нуль‑модем­ное кабель­ное соеди­нение в фай­ле debugger.chm), под­разуме­вающее наличие двух физичес­ких машин. Так­же гипер­визор мож­но отла­дить, если запус­тить его в любом под­держи­ваемом прог­рам­мном обес­печении вир­туали­зации. Далее мы будем исполь­зовать VMware Workstation.

Для начала нуж­но уста­новить Windows Server 2019 в качес­тве гос­тевой ОС и вклю­чить ком­понент Hyper-V. Если нап­рямую под­клю­чить­ся к вир­туаль­ному COM-пор­ту VMware, то при ком­муника­ции пой­дут ошиб­ки обме­на пакетов (слож­но ска­зать, с чем это свя­зано). Исполь­зуй какую‑нибудь бес­плат­ную ути­литу эму­ляции COM-пор­та для ста­били­зации соеди­нения (я уста­новил ути­литу эму­лято­ра COM-пор­та Free Virtual Serial Ports от HHD-software вер­сии 3.32. Пос­ледняя вер­сия 4.12 выда­ет ошиб­ки, ког­да vmdemux пыта­ется открыть COM-порт).

Об­щий порядок дей­ствий таков.

  1. Соз­дай COM-порт для вир­туаль­ной машины VMware (Hardware → Add → Serial port → Use named pipe). Вве­ди \.pipecom_1.

    Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала
    Соз­дание COM-пор­та для вир­туаль­ной машины
  2. Для нас­трой­ки отладки вве­ди в коман­дной стро­ке опции отладки гипер­визора:

    bcdedit /hypervisorsettings serial DEBUGPORT:1 BAUDRATE:115200bcdedit /set hypervisordebug on

    За­тем нуж­но ввес­ти парамет­ры отладки хос­товой ОС (будет исполь­зован тот же COM-порт):

    bcdedit /set dbgtransport kdhvcom.dllbcdedit /dbgsettings serial DEBUGPORT:1 BAUDRATE:115200bcdedit /debug on

    До­пол­нитель­но (для отладки заг­рузки гипер­визора — см. соот­ветс­тву­ющий раз­дел статьи):

    Bcdedit /set bootdebug on

    Ни­же при­веден спи­сок модулей отладки, при­сутс­тву­ющих в Windows:

    kdcom.dll kdhvcom.dll kd1934.dll kdhv1394.dll kdusb.dll kdnet.dll (разные производители сетевых карт — разные модули) kd.dll

    В нашем слу­чае мы исполь­зуем kdhvcom.dll.

  3. Пе­резаг­рузи Windows Server 2019. Заг­рузка оста­новит­ся и будет ждать под­клю­чения отладчи­ка.

  4. От­крой HHD software Free Virtual Serial Ports, выбери File, затем Create Pipe Port. В поле Pipe name ука­жи то же зна­чение, что было рань­ше запол­нено для вир­туаль­ной машины, — \.pipecom_1. Чек­бокс Create pipe дол­жен быть отклю­чен (в про­тив­ном слу­чае будет соз­дан новый име­нован­ный канал, а не выпол­нено под­клю­чение к сущес­тву­юще­му). Наж­ми OK.

    Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала
    Соз­дание нового пор­та

    Вир­туаль­ный COM-порт нуж­но соз­давать пос­ле запус­ка вир­туаль­ной машины, ина­че ты уви­дишь ошиб­ку, что канал не был соз­дан (VMware соз­дает канал пос­ле запус­ка ВМ).

  5. За­пус­ти ути­литу vmdemux (находит­ся в пап­ке с WinDbg x64) с ука­зани­ем име­ни толь­ко что соз­данно­го COM-пор­та в качес­тве одно­го из парамет­ров:

    vmdemux.exe -src com:port=com2,baud=115200

    Ути­лита соз­даст два име­нован­ных канала: Vm0 для гипер­визора и Vm1 для root-раз­дела.

    Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала
    Ути­лита vmdemux соз­даст два име­нован­ных канала
  6. Ты можешь под­клю­чить WinDbg Preview к каж­дому каналу для тес­тирова­ния:

    WinDBGx.exe -k com:port=.pipeVm1,pipe,reconnect,resets=0 – root-разделWinDBGx.exe -k com:port=.pipeVm0,pipe,reconnect,resets=0 – гипервизор

    Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала
    Под­клю­чение WinDbg к соз­данным нами каналам
  7. Пос­ле это­го мож­но открыть файл hvix64.exe в IDA PRO, выб­рать WinDbg в качес­тве отладчи­ка и ука­зать в process options → connection string: com:port=\.pipeVm0,pipe,resets=0.

  8. Вы­бери Process Attach, наж­ми Same.

  9. От­ладчик оста­новит­ся внут­ри гипер­визора.

    Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала
    От­ладчик оста­новит­ся внут­ри гипер­визора
  10. По срав­нению с Windows Server 2012 (R2) в акту­аль­ной вер­сии сер­верной вин­ды появил­ся новый модуль — kdstub.dll. Ран­ние вер­сии гипер­визора ста­тичес­ки лин­ковались с биб­лиоте­кой отладки и име­ли дос­таточ­но боль­шой раз­мер (2–3 Мбайт), раз­мер текущей вер­сии (10.0.17763.1577) гипер­визора hvix64.exe — 1230 Кбайт. В слу­чае сетевой отладки kdstub.dll будет заменен под­ходящим отла­доч­ным модулем, нап­ример kd_02_8086.dll.

    Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала
    При сетевой отладке kdstub.dll будет заменен под­ходящим отла­доч­ным модулем

    Во всех под­робнос­тях нас­трой­ка отладки через COM-порт в сре­де Hyper-V опи­сана в статье Саара Ама­ра (@AmarSaar).

Отладка по сети

В Windows Server 2012 и выше появи­лась воз­можность отладки гипер­визора по сети. Так­же эта воз­можность при­сутс­тву­ет во всех вер­сиях Windows 10. Для это­го в хос­товой ОС необ­ходимо выпол­нить коман­ды, что­бы нас­тро­ить парамет­ры отладки гипер­визора:

bcdedit /set hypervisordebug onbcdedit /hypervisorsettings NET HOSTIP:192.168.2.1 PORT:50000

Ес­ли есть необ­ходимость, для отладки ОС на хос­те нуж­но ука­зать дру­гой порт:

bcdedit /debug yesbcdedit /dbgsettings net hostip:192.168.2.1 port:50002

Пос­ле выпол­нения команд будет отоб­ражена стро­ка для под­клю­чения. В нас­трой­ках вир­туаль­ной машины VMware нуж­но уста­новить тип адап­тера Host Only, в нас­трой­ках вир­туаль­ной сети (Edit → Virtual Network Editor) нас­тро­ить DHCP для это­го адап­тера и убе­дить­ся, что гос­тевая ОС нор­маль­но получа­ет этот адрес, нап­ример выпол­нив коман­ду ipconfig /renew. Опция bcdedit /dbgsettings nodhcp поз­воля­ет исполь­зовать 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 0xfffffbb3aa6c3e66Amd64VtoP: Virt fffffbb3aa6c3e66, pagedir 000000010839d000Amd64VtoP: PML4E 000000010839dfb8Amd64VtoP: PDPE 000000010a603670Amd64VtoP: PDE 000000010a604a98Amd64VtoP: Large page mapped phys 00000001000c3e66Virtual address fffffbb3aa6c3e66 translates to physical address 1000c3e66.!pte2va!ptov <cr3>

dx — рас­ширение дос­тупно тоже, но с некото­рыми огра­ниче­ниями (из‑за отсутс­твия сим­волов): @$debuggerRootNamespace.Debugger.State.PseudoRegisters.General. Exentry — псев­дорегистр, отоб­ража­ющий адрес заг­рузки модуля гипер­визора (hvix64).

Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала
Exentry — псев­дорегистр, отоб­ража­ющий адрес заг­рузки модуля гипер­визора

Отладка с использованием встроенных возможностей vmwp.exe

От­ладка вир­туаль­ной машины может быть выпол­нена с исполь­зовани­ем встро­енных воз­можнос­тей про­цес­са vmwp.exe (на одну ВМ один экзем­пляр). Эту воз­можность впер­вые упо­мянул на форуме OSR online один из архи­тек­торов Hyper-V Джейк Ошинс (Jake Oshins). Более под­робно опи­сал Рафа­эль Ривера (Rafael Rivera — @WithinRafael) в сво­ем бло­ге. Я обно­вил скрипт Риверы и выложил его на GitHub.

Скрипт так­же может скон­фигури­ровать парамет­ры заг­рузчи­ка гос­тевой ОС при помощи PowerShell direct. Для это­го:

  1. Вык­лючи гос­тевую ОС.

  2. Ука­жи парамет­ры для скрип­та hyperv-dbg-2019.ps1.

    Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала
    Па­рамет­ры для скрип­та hyperv-dbg-2019.ps1
  3. За­пус­ти скрипт от име­ни адми­нис­тра­тора (или отклю­чи UAC).

  4. За­пус­ти WinDbg сле­дующей коман­дой:

    WinDBG -k net:port=50010,target=127.0.0.1,key=1.2.3.4

  5. Вы­пол­ни коман­ду break (Ctrl-Break), пос­ле которой отладчик оста­новит­ся внут­ри гос­тевой ОС. Теперь мож­но иссле­довать ВМ, исполь­зуя стан­дар­тные коман­ды WinDbg, но в моих экспе­римен­тах интенсив­ная отладка (нап­ример, трас­сиров­ка) нес­коль­ко раз при­води­ла к тому, что все зависа­ло.

Отладка через протокол GDB

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

Эму­лятор Windows 10X дос­тупен в магази­не Microsoft Store. Этот эму­лятор работа­ет на базе Hyper-V. Сам эму­лятор запус­кает­ся как Hyper-V ВМ, Windows 10X — вло­жен­ная ВМ.

Не­обхо­димо смон­тировать образ flash.vhdx (прос­то два раза щел­кнуть мышью на фай­ле), с которым работа­ет эму­лятор и который рас­положен в пап­ке по сле­дующе­му пути:

C:ProgramFilesWindowsAppsMicrosoft.Windows10XEmulatorImage10.0.19578.0Previ_1.0.1.0_x64__8wekyb3d8bbweContent

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

Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала
Сос­тояние сис­темы до мон­тирова­ния
Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала
Сос­тояние сис­темы пос­ле мон­тирова­ния

Вы­бери том с мет­кой VIRT_EFIESP:

Get-Volume | ? {$_.FileSystemLabel -eq "VIRT_EFIESP"} | Format-Listmountvol Z: ?Volume{12aef83a-6cf2-4ea1-932f-b3a586a65308} bcdedit /store "Z:efiMicrosoftbootBCD" /dbgsettings

Ко­ман­да bcdedit /enum all /v /store "Z:efiMicrosoftbootBCD" покажет опции заг­рузоч­ной записи опе­раци­онной сис­темы эму­лято­ра. Что­бы у нас появи­лась воз­можность отладки гос­тевой ОС, понадо­бит­ся дамп ядра, который мож­но получить с исполь­зовани­ем встро­енных фун­кций эму­лято­ра.

Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала
По­луче­ние дам­па ядра

От­крой Windows device portal — «Отладка». Заг­рузи live kernel dump, а затем открой его в WinDbg и запус­ти скрипт decypher_kdnet_key.py. Скрипт най­дет парамет­ры kdnet и закоди­рует в фор­мате Base36.

Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала
Ис­поль­зование скрип­та decypher_kdnet_key.py

Те­перь запус­ти WinDbg, исполь­зуя коман­ду windbgx.exe -k net:port=50005,key=2k85xmoorkrbx.u7xg1f35gwi4.24033ib08wzhs.2o8xly2z2ik5y. В резуль­тате ты смо­жешь под­клю­чить­ся к ОС хос­та.

Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала
Под­клю­чение к хос­товой ОС

Отладка Hyper-V c помощью подмененного загрузчика

На эту тему опуб­ликова­ны два иссле­дова­ния: Hyper-V backdoor Дмит­рия Олек­сюка (@d_olex) и Voyager, соз­данный @_xeroxz. Их суть — в замене заг­рузоч­ных фай­лов Windows в целях перех­вата про­цес­са заг­рузки гипер­визора и интегра­ции сво­их управля­ющих модулей. Пол­ноцен­ной отладкой это слож­но наз­вать, но с при­мене­нием это­го метода появ­ляет­ся воз­можность читать и изме­нять память Hyper-V. Под­робнос­ти ты най­дешь на стра­ницах упо­мяну­тых про­ектов.

Заг­рузи пос­леднюю сбор­ку бэк­дора и запус­ти скрипт bootkit_installer.ps1 в хос­товой ОС (про­тес­тирова­но в вир­туаль­ной сре­де на Windows Server 2019 внут­ри VMware Workstation). Перезаг­рузим хос­товую ОС и уви­дим сле­дующую кар­тину.

Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала
За­пуск скрип­та bootkit_installer.ps1

В гос­тевой ОС мы можем запус­тить backdoor_client.exe и получить дос­туп к раз­личным струк­турам дан­ных Hyper-V.

Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала
Дос­туп к раз­личным струк­турам дан­ных Hyper-V на гос­тевой ОС

Вто­рой про­ект, Voyager, может быть заг­ружен с сай­та GitHacks. Бинар­ников он не содер­жит, поэто­му их необ­ходимо ском­пилиро­вать с помощью Visual Studio для под­ходящей вер­сии Windows. Пос­ле чего запус­тить файл launch.bat, который заменит заг­рузоч­ные фай­лы Windows. Пос­ле перезаг­рузки мы уви­дим сле­дующую кар­тину.

Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала
Заг­рузка ОС пос­ле при­мене­ния Voyager

Для про­вер­ки работос­пособ­ности мож­но запус­тить example.exe внут­ри гос­тевой ВМ.

Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала
Про­вер­ка работос­пособ­ности Voyager

На­деюсь, мы уви­дим в будущем боль­ше при­меров для это­го про­екта.

Отладка secure kernel

От­ладку поз­воля­ет выпол­нить модуль EXDi для LiveCloudKd без вклю­чения опции отладки в заг­рузчи­ке гос­тевой ОС. Все под­робнос­ти мож­но узнать в соот­ветс­тву­ющей до­кумен­тации.

Отладка с помощью Radare2

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.dll и с исполь­зовани­ем собс­твен­ного про­токо­ла winkd.

Radare2 и интерфейс dbgeng.dll

Спер­ва необ­ходимо нас­тро­ить гипер­визор в режиме сетевой отладки, как это было опи­сано рань­ше, и запус­тить Radare2 сле­дующим обра­зом:

radare2 -d "windbg://-k net:port=50011,key=1.2.3.4"

Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала
За­пуск Radare2

Под­клю­чено! Теперь ты можешь выпол­нять стан­дар­тные коман­ды WinDbg, исполь­зуя пре­фикс =!.

Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала
Вы­пол­нение стан­дар­тных команд отладчи­ка

Radare2 и встроенный протокол

Мож­но поп­робовать под­клю­чить­ся к гипер­визору по сети, выпол­нив коман­ду radare2 -D winkd winkd://192.168.174.1:50011:1.2.3.4. Я получил ошиб­ку откры­тия UDP-сокета, хотя netstat показал, что порт открыт. Воз­можно, это ошиб­ка нас­трой­ки на моем стен­де, но испра­вить ее мне не уда­лось. В свя­зи с этим будем исполь­зовать отладку через COM-порт. Для это­го нуж­но нас­тро­ить гипер­визор так, как это было опи­сано рань­ше, запус­тить vmdemux и под­клю­чить Radare2 к име­нован­ному каналу:

radare2 -D winkd winkd://\.pipeVm0

Ис­поль­зуя дан­ные про­токо­ла отладки, мож­но получить допол­нитель­ную информа­цию о заг­ружен­ном модуле Hyper-V.

Гиперотладка. Разбираем отладку Microsoft Hyper-V с самого начала
По­луче­ние допол­нитель­ной информа­ции о заг­ружен­ном модуле Hyper-V

Иног­да Radare2 не может под­клю­чить­ся к COM-пор­ту и вис­нет. В этом слу­чае нуж­но прос­то спер­ва под­клю­чить­ся обыч­ным WinDbg-отладчи­ком, отклю­чить­ся и под­соеди­нить­ся с помощью Radare2.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

1 год

7690 р.

1 месяц

720 р.

Я уже участник «Xakep.ru»

Источник

Последние новости