Сейчас на форуме: -Sanchez-, Alf, Adler (+4 невидимых)

 eXeL@B —› Софт, инструменты —› Gbhv - Simple x64 Hypervisor Framework
. 1 . 2 . >>
Посл.ответ Сообщение


Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 08 января 2019 04:06 · Поправил: plutos
· Личное сообщение · #1

--> Gbhv<-- is a simple, powerful 64-bit Windows-based VT-x Hypervisor proof of concept written as an exercise to help learn how to develop and work with Intel's VT-X hardware virtualization technology.

Хотелось бы услышать мнения людей, кто в теме. Ну и конечно мнение сами знаете чьё...

ну и просто для тех, кто хочет все знать!

-----
Give me a HANDLE and I will move the Earth.




Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

Создано: 08 января 2019 04:57 · Поправил: ntldr
· Личное сообщение · #2

Конкретно этот проект не смотрел, но имею небольшой опыт по разработке своего гипервизора для Intel VMX. Хотел сделать прозрачное шифрование диска для любой ОС (гипервизор-прокси для AHCI), но энтузиазма довести до релизного состояния не хватило. C AMD'шными SVM инструкциями не работал.

Моё мнение - зависит от применения. Для исследовательских тулз гипервизоры на VMX дают широчайшие возможности. Но это только при условии выбора правильного железа для рабочей станции и тщательной настройке всего под свои задачи.

Гипервизор для ответственных проектов широкого применения - задача не простая, т.к. нужно поддерживать не только самые оптимальные конфигурации, а вообще все какие будут у ваших пользователей. XEN, KVM и MS HyperV - годные платформы для таких вещей. Intel haxm - простой, сырой и нестабильный. VirtualBox - об этом поделии можно говорить только матом...

Гипервизор для малвари (руткиты, трояны, и тому подобное) - старая идея, много кем реализовывалась, до боевого применения, насколько мне известно, ничего не дошло. В теории гипервизор позволяет почти идеально скрыть присутствие руткита, но это именно в теории. На практике всё всегда будет выявляться специалиьными тестами, если знать что искать. Я этой областью не занимаюсь, знаю только теорию и могу ошибаться.

-----
PGP key <0x1B6A24550F33E44A>


| Сообщение посчитали полезным: plutos


Ранг: 90.1 (постоянный), 90thx
Активность: 0.290.56
Статус: Участник

Создано: 08 января 2019 13:47
· Личное сообщение · #3

Объясните пожалуйста
Это примерно из той же оперы что индий затирает?

-----
В облачке многоточия


| Сообщение посчитали полезным: SDK

Ранг: 54.0 (постоянный), 49thx
Активность: 0.721.1
Статус: Участник

Создано: 08 января 2019 13:59
· Личное сообщение · #4

plutos пишет:
Ну и конечно мнение сами знаете чьё...

ну мы поняли, щас он придет ,порядок наведёт



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 08 января 2019 14:25
· Личное сообщение · #5

plutos пишет:
--> Gbhv<-- is a simple, powerful 64-bit Windows-based VT-x Hypervisor

если CPUID менять можно, то сгодится для ресерча DENUVO



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 08 января 2019 18:51
· Личное сообщение · #6

ntldr пишет:
На практике всё всегда будет выявляться специалиьными тестами, если знать что искать

Все так. Гипервизор можно защитить от любого конкретного детекта, но от всего множества нереально.
Вопрос ведь не в том, что гипервизор задектетят из гостя, а в том, чтобы его не отличили от легального гипервизора.




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 08 января 2019 19:08 · Поправил: difexacaw
· Личное сообщение · #7

Boostyq

> Это примерно из той же оперы что индий затирает?

Нет, совсем иная опера". Гипервизор нужен для решения задач по ядру. Тоесть вам нужно ядерный код мониторить, либо сразу несколько ос запустить. Как пример - это нужно было для поиска уязвимостей(повторные асинхронные дереференсы в ядре, race-cond. атака на ядро: j00ru & Gynvael). Это не для решения прикладных задач. Тут такие задачи я не помню что бы возникали. Что бы это всё заюзать вы должны хорошо разбираться в ядре, свободно собирать драйвера и знать расширения архитектуры(vmx и поддержку её системой). Это вещи весьма сложные и для прикладных задач совершенно не нужные.

Более того сам факт изоляции создаёт кучу проблем по детекту визора. Это по мойму смысла всё тут не имеет.

Давно наработаны простые и эффективные техники для решения прикладных задач, там эти гпв не уместны.

-----
vx


| Сообщение посчитали полезным: plutos


Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 08 января 2019 23:46
· Личное сообщение · #8

difexacaw пишет:
Это вещи весьма сложные и для прикладных задач совершенно не нужные.


Все это может и так, но все же интересно и в сложных абстрактных вещах иногда покопаться, хотя бы для того, чтобы расширять горизонты своего воображения... Как говорил один мудрый человек: знания за плечами не носить.

-----
Give me a HANDLE and I will move the Earth.





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 09 января 2019 00:01
· Личное сообщение · #9

plutos

Я смог не используя драйвера, в юм реализовать софтверный визор(эта тема про хардверный), который покрывает любые задачи, вы это видили сами. Зачем лишний раз в ядро лезть, вам интересно синие экраны и крэшдампы разбирать.. думаю нет.

Гипервизоры нужны для сложных задач по ос, не для прикладных. И там ничего интересного нет. Эта фигня пилится только ради пиара обычно. Более того, этим не работают в юзермод.

-----
vx





Ранг: 90.1 (постоянный), 90thx
Активность: 0.290.56
Статус: Участник

Создано: 09 января 2019 02:48
· Личное сообщение · #10

difexacaw пишет:
в юм реализовать софтверный визор

Что не получилось, вы же вроде описывали идею?

-----
В облачке многоточия




Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 09 января 2019 03:02
· Личное сообщение · #11

difexacaw пишет:
Я смог не используя драйвера, в юм реализовать софтверный визор(эта тема про хардверный), который покрывает любые задачи

Ну так и софтварный визор р0 аля вмваре wks не покрывает все задачи.
Хватит уже перфекционизма. При равном уровне привилегий полноценно мониторить код не получается. Только пошаговая трассировка. Это трудно и больно.




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 09 января 2019 19:33 · Поправил: difexacaw
· Личное сообщение · #12

spinz

Как раз наоборот. Ты просто не в теме, не знаешь что такое изоляция выборки и прочие вещи.

> полноценно мониторить код не получается.

А что это значит. Тоесть каждую инструкцию прогнать через декодер, это что по вашему, не полноценно ?

Бред какой то.

> Только пошаговая трассировка.

Кури матчасть. Можно блок кода на выполнение отдать в процессор. Так и работает варя например.

Boostyq

> Что не получилось, вы же вроде описывали идею?

Всё получилось и очень хорошо.

-----
vx




Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 09 января 2019 20:38
· Личное сообщение · #13

difexacaw пишет:
Можно блок кода на выполнение отдать в процессор

И как ты будешь ловить окончание выполнения блока?




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 09 января 2019 20:41
· Личное сообщение · #14

spinz

Ну ты поиском по форуму пройди, большая часть задач которых ты придумать можешь по данной теме давно решена.

-----
vx




Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 09 января 2019 20:42
· Личное сообщение · #15

Я тебе задал вопрос, почему ты не можешь на него ответить?
Потому что ответа в общем случае нет.




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 09 января 2019 20:54 · Поправил: difexacaw
· Личное сообщение · #16

spinz

Блочное исполнение было реализовано в предыдущей версии DYE. Это было запилено на реализацию защиты(OP) и реалтайм(тесты по нему), а есчо откатывались анклавы практически, семплов навалом, ты не искал. Позже я искал решение что бы повысить профайл, эти темы есть тут. Ты слепой что ле ?

--> Link <--

И есчо куча топиков в которых я искал решения связанные с этим всем.

-----
vx




Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 09 января 2019 21:03
· Личное сообщение · #17

для self-modifying code все это мимо кассы




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 09 января 2019 21:17
· Личное сообщение · #18

spinz

Данная проблема не существует. Подумай сам почему, ты ведь сам говорил про трассы

-----
vx




Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 09 января 2019 21:35
· Личное сообщение · #19

Не понимаю. Вот есть блок кода, который по какому-то алгосу пишет в память.
Как поймать выход из этого блока без трассировки каждой инструкции, если какая-нибудь инструкция из этого блока может модифицировать следующую команду так, что после ее выполнения (следующей инструкции) IP улетит в далекие ебеня?




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 09 января 2019 21:42
· Личное сообщение · #20

spinz

Блок выделяется как линейный в самом простом случае. В случае оптимизации все ветви блокируются --> Link <-- и после исполнения цикл выделяется. В таком случае можно как угодно поступить. По теме выше это реализовалось накоплением исполненного потока инструкций в буфер, это быстро но нужно много памяти.

-----
vx




Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 09 января 2019 21:54 · Поправил: spinz
· Личное сообщение · #21

Давай на конкретном примере.
Вот есть, например, инструкция
mov [eax], eax
Как ее выполнить без трассировки и сохранить контроль над кодом, если она следующую инструкцию превращает (может превратить) в jmp xxxxxxxx?




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 09 января 2019 22:14
· Личное сообщение · #22

spinz

Под визором поток инструкций либо эмулируется, либо исполняется не по адресу оригинальной инструкции(она копируется в буфер), ну или при блочном исполнении копируется линейный блок(это невозможно сделать в случае эмуляции, в этом и её не актуальность). Тоесть исполнение и/или изменение кода происходит после его трансляции или переноса в буфер. Он не исполняется в исходной области. Поэтому то о чём вы говорите совершенно бессмысленно, это значит вы вообще не понимаете о чём тут идёт речь.

-----
vx




Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 09 января 2019 22:19 · Поправил: spinz
· Личное сообщение · #23

епт, Инде, а почему ты решил что [eax] не может совпадать с адресом инструкции в буфере?
Модификация кода может произойти как по его "родному" адресу, так и по адресу его копии в буфере.

Значит ты не понимаешь вообще о чем тут идет речь



Ранг: 2.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 09 января 2019 22:25
· Личное сообщение · #24

difexacaw а копируется вся секция целиком?



Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

Создано: 09 января 2019 22:29
· Личное сообщение · #25

spinz пишет:
Вот есть, например, инструкция
mov [eax], eax
Как ее выполнить без трассировки и сохранить контроль над кодом, если она следующую инструкцию превращает (может превратить) в jmp xxxxxxxx?

Оттранслированные инструкции размещаются по другому адресу и страница делается readonly. При попытке модификации копии получим исключение.

-----
PGP key <0x1B6A24550F33E44A>





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 09 января 2019 22:29 · Поправил: difexacaw
· Личное сообщение · #26

spinz

По адресу в буфере мод невозможен. Так как все адреса изменяются. Есть несколько способов узнать текущий адрес, самый простой - сохранить блок математики(npx). Это обрабатывается. Сурки посмотри.

И вообще у меня такое впечатление что ты не понять хочешь, а исчешь пути и возможности какие то, что бы просто найти принципиальную ошибку(ты её не найдёшь, механизмы разрабатывались годами), при этом без понятия(нулевой скилл). Это тупой троллинг, давай досвиданья.

Добавлено спустя 5 минут
ntldr

> Оттранслированные инструкции размещаются по другому адресу и страница делается readonly.

И после доступа к странице необходимо перенаправить выборку данных, та техника IDP. При этом косячёк возникает со вторым потоком. А дальше немного дичайших извратов по цепочке - как выполнить инструкцию в блокированной памяти или доступ к ней. Вы пришли к исходной задаче, только вот на несколько лет тормознули.

-----
vx




Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 09 января 2019 22:40 · Поправил: spinz
· Личное сообщение · #27

ntldr пишет:
Оттранслированные инструкции размещаются по другому адресу и страница делается readonly. При попытке модификации копии получим исключение.

Мы же вроде говорили про общий случай и равные привилегии, не?
Как быть с реалмодом/отключенным пейджингом?

difexacaw пишет:
просто найти принципиальную ошибку(ты её не найдёшь, механизмы разрабатывались годами)

Мне это не интересно. Я лишь указываю, что твой подход в принципе не универсален.



Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

Создано: 09 января 2019 22:54 · Поправил: ntldr
· Личное сообщение · #28

spinz пишет:
Мы же вроде говорили про общий случай и равные привилегии, не?

Да, общий случай и равные привилегии. Изменить атрибуты страниц виртуализированному коду не даст перехват системных вызовов (если виртуализируем только юзермод, sysenter транслируется в стаб проверяющий адреса и изолирующий действия с адресами виртуализатора). Если виртуализируем всё, то таблицы страниц для виртуального кода вообще целиком эмулируются.

spinz пишет:
Как быть с реалмодом/отключенным пейджингом?

Полный виртуализатор транслирует реалмод инструкции в инструкции защищенного режима. Либо (если так проще) для реалмода используется покомандная эмуляция. Это не самая важная часть.

spinz пишет:
Мне это не интересно. Я лишь указываю, что твой подход в принципе не универсален.

Подход достаточно универсален. Но реализация учитывающая все тонкости - будет сложной и перегруженной. Да и не нужно это.


Самая жопа для динамического транслятора - это большое количество самомодификаций кода. Сильно падает профайл. Настолько сильно, что покомандная эмуляция такого безобразия будет быстрее.

-----
PGP key <0x1B6A24550F33E44A>




Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 09 января 2019 22:59
· Личное сообщение · #29

Ну и тащемта невозможность выполнить mov [eax],eax по адресу оригинального кода тупо приведет к другому потоку исполнения. Контроль над кодом сохранится, но нужный код не будет выполнен.



Ранг: 369.8 (мудрец), 400thx
Активность: 0.390
Статус: Участник

Создано: 09 января 2019 22:59
· Личное сообщение · #30

Выкладываю простейший пример динамического транслятора который виртуализирует только юзермод. Код большей частью на си, писалось много лет назад.

___ - virt_x.7z

-----
PGP key <0x1B6A24550F33E44A>


| Сообщение посчитали полезным: plutos, HandMill, SReg, Orlyonok, superakira, mak
. 1 . 2 . >>
 eXeL@B —› Софт, инструменты —› Gbhv - Simple x64 Hypervisor Framework
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати