eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС
выпущен 4 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

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


Ранг: 535.3 (!)
Статус: Участник
_Вечный_Студент_

Создано: 8 января 2019 04:06 · Поправил: plutos New!
Цитата · Личное сообщение · #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.

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

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

Ранг: 370.2 (мудрец)
Статус: Участник

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

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

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

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

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

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


Ранг: 68.6 (постоянный)
Статус: Участник

Создано: 8 января 2019 13:47 New!
Цитата · Личное сообщение · #3

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

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



Ранг: 126.9 (ветеран)
Статус: Участник

Создано: 8 января 2019 13:59 New!
Цитата · Личное сообщение · #4

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

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

Ранг: 386.2 (мудрец)
Статус: Участник
"Тибериумный реверсинг"

Создано: 8 января 2019 14:25 New!
Цитата · Личное сообщение · #5

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

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

Ранг: 42.5 (посетитель)
Статус: Участник

Создано: 8 января 2019 18:51 New!
Цитата · Личное сообщение · #6

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

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


Ранг: 316.3 (мудрец)
Статус: Участник

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

Boostyq

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

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

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

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

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



Ранг: 535.3 (!)
Статус: Участник
_Вечный_Студент_

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

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


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


Ранг: 316.3 (мудрец)
Статус: Участник

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

plutos

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

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

Ранг: 68.6 (постоянный)
Статус: Участник

Создано: 9 января 2019 02:48 New!
Цитата · Личное сообщение · #10

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

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

Ранг: 42.5 (посетитель)
Статус: Участник

Создано: 9 января 2019 03:02 New!
Цитата · Личное сообщение · #11

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

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


Ранг: 316.3 (мудрец)
Статус: Участник

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

spinz

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

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

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

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

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

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

Boostyq

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

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

Ранг: 42.5 (посетитель)
Статус: Участник

Создано: 9 января 2019 20:38 New!
Цитата · Личное сообщение · #13

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

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


Ранг: 316.3 (мудрец)
Статус: Участник

Создано: 9 января 2019 20:41 New!
Цитата · Личное сообщение · #14

spinz

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

Ранг: 42.5 (посетитель)
Статус: Участник

Создано: 9 января 2019 20:42 New!
Цитата · Личное сообщение · #15

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


Ранг: 316.3 (мудрец)
Статус: Участник

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

spinz

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

--> Link <--

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

Ранг: 42.5 (посетитель)
Статус: Участник

Создано: 9 января 2019 21:03 New!
Цитата · Личное сообщение · #17

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


Ранг: 316.3 (мудрец)
Статус: Участник

Создано: 9 января 2019 21:17 New!
Цитата · Личное сообщение · #18

spinz

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

Ранг: 42.5 (посетитель)
Статус: Участник

Создано: 9 января 2019 21:35 New!
Цитата · Личное сообщение · #19

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


Ранг: 316.3 (мудрец)
Статус: Участник

Создано: 9 января 2019 21:42 New!
Цитата · Личное сообщение · #20

spinz

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

Ранг: 42.5 (посетитель)
Статус: Участник

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

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


Ранг: 316.3 (мудрец)
Статус: Участник

Создано: 9 января 2019 22:14 New!
Цитата · Личное сообщение · #22

spinz

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

Ранг: 42.5 (посетитель)
Статус: Участник

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

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

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

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

Создано: 9 января 2019 22:25 New!
Цитата · Личное сообщение · #24

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

Ранг: 370.2 (мудрец)
Статус: Участник

Создано: 9 января 2019 22:29 New!
Цитата · Личное сообщение · #25

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

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


Ранг: 316.3 (мудрец)
Статус: Участник

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

spinz

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

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

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

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

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

Ранг: 42.5 (посетитель)
Статус: Участник

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

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

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

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

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

Ранг: 370.2 (мудрец)
Статус: Участник

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

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

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

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

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

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

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


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

Ранг: 42.5 (посетитель)
Статус: Участник

Создано: 9 января 2019 22:59 New!
Цитата · Личное сообщение · #29

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

Ранг: 370.2 (мудрец)
Статус: Участник

Создано: 9 января 2019 22:59 New!
Цитата · Личное сообщение · #30

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

___ - virt_x.7z

| Сообщение посчитали полезным: plutos, HandMill, SReg, Orlyonok, superakira, mak

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

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS