Страницы

Поиск по вопросам

Показаны сообщения с ярлыком виртуальная-машина. Показать все сообщения
Показаны сообщения с ярлыком виртуальная-машина. Показать все сообщения

четверг, 19 марта 2020 г.

Выбор виртуальной машины

#виртуальная_машина


На новой работе приходиться пользоваться виндой :( 
Хочу поставить нормальную виртуалку и накатить linux.
Посоветуйте что-нибудь из личного опыта.

Критерии:


Минимальная потеря производительности;
не надо покупать;
хост-машина: windows, гостевая-машина: linux

располагаю машинкой с ЦПУ 3,1 Ггц, ОЗУ 4Гб

Пробовал VirtualBox, но xubuntu ели тянет.
Дома юзаю KVM -- очень хорошая вещь, но для винды версии нет.
P.s. Просьба холивар не устраивать и ответы сопровождать комментариями на основе
собственного опыта, а не Дяди Васи.    


Ответы

Ответ 1



Извиняюсь если не конкретно по вопросу, но я без особых проблем в xubuntu на виртуалбоксе запускал xubuntu на своем Asus EeePc - раза в 4 слабее описанных характеристик. Мне кажется надо грамотно подобрать swap и размещение файла оси на ЖД и выделение ресурсов для виртуалки - найти ту золотую серединку чтобы винда не перехватывала ресурсы и чтобы виртуалке хватало.

Ответ 2



VMWare же есть бесплатная версия. Мне нравится.

среда, 26 февраля 2020 г.

Что такое виртуальный процессор?

#терминология #железо #виртуальная_машина #процессор



Где то утверждают что это по сути и есть ядро (или поток ядра). И например при технологии
Hyper-Threading система определяет физическое ядро как два виртуальных.
Кто то утверждает что виртуальный процессор может эмулироватся программно молл виртуальный
процессор можно сравнить с операционной системой. Поток по отношению к нему выступает
как процесс, подобно тому, как сам виртуальный процессор является процессом с точки
зрения операционной системы.
Еще говорят что при создании виртуальной машины можно для нее выделять виртуальные
процессоры 


ТАК ЧТО ТАКОЕ ВИРТУАЛЬНЫЙ ПРОЦЕССОР
    


Ответы

Ответ 1



Это не термин, а обычное словосочетание. Виртуальный процессор - это нечто, что выглядит как работоспособный процессор, но процессором не является. Точное значение зависит от контекста. Так, когда-то давно никто не слышал про многоядерные процессоры, а когда было нужно - ставили несколько процессоров. И когда многоядерные процессоры появились - то в целях обратной совместимости каждое ядро стало "представляться" операционной системе как отдельный процессор. То есть у вас на материнке стоит один проц - а ОС пишет, что их два. Никакого второго процессора реально не существует, он - виртуальный. Точнее, оба ядра называют виртуальными процессорами, потому что они одинаковые. Существуют эмуляторы процессоров. Например, вы можете скачать эмулятор NES и поиграть на нем в старые игры. Эти игры написаны для процессора Ricoh 2A03, но играть в них вы будете на процессоре семейства Intel. Однако большинство игр подмены не заметят, поскольку эмулятор реализует все нужные инструкции. В этом смысле эмулятор NES содержит в себе виртуальный процессор. Внутри виртуальной машины работает реальная ОС, называемая "гостевой". Эта ОС, точно так же, как и при работе вне виртуальной машины, пытается работать с "железом". Но у виртуальной машины все "железо" - виртуальное (за редкими исключениями): если вы, к примеру, зайдёте в Диспетчер устройств на виртуалке с виндой - вы не увидите ничего похожего на реальные устройства. Процессоры у виртуальной машины - тоже виртуальные.

вторник, 10 декабря 2019 г.

Виртуальная машина Java (или подобное), написанная на Java

#виртуальная_машина #java #embedded #jvm


Здравствуйте.
Недавно начал изучать виртуальные машины. Возник такой вопрос. Есть некоторые VM,
например, Monty, Squawk. Данные виртуальные машины частично или полностью написаны
на Java. Вот эта фраза меня немного в тупик загнала. (В силу недостатка знаний или
понимания, наверное).
Есть у нас виртуальная машина, написанная на низкоуровневых языках относительно Java
- C++, C, Assembler. Тут все ясно. Машина пишется для каждой платформы, привязываясь
к железу на низкоуровневых языках, для того чтобы интерпретировать псевдокод (байткод)
там, где установлена виртуальная машина. Таким образом достигается кроссплатформенность. 
То есть мы тратим ресурсы железа, для того чтобы поднять виртуальную машину на ней,
а затем генерировать машинный код для платформы на этапе исполнения. Из-за того, что
у нас есть промежуточный слой исполнение, программа, написанная на таких языках, проигрывает
компилируемым языкам.
Ну и собственно вопрос. Зачем писать виртуальную машину на основе другой, точнее
внутри другой. Есть у нас Java VM на устройстве, зачем нужно добавлять еще один слой
абстракции? Выходит, что мы пишем виртуальную машину на основе функционала, который
нам предоставляет уже существующая ВМ на устройстве. То есть таким образом мы, во-первых,
не можем сделать больше, чем предоставляет нам обрамляющая ВМ, к тому же используем
дополнительные вычислительные ресурсы ЭВМ.
Я правильно понимаю?
Хорошо, можно предположить, что это удобно в некоторых случаях, когда не требуется
весь функционал обрамляющей ВМ или же абстрагирование от реализации с целью упрощения
написания кода.   
Конечно, если компьютер предоставляет ресурсы, то можно сделать так, и разница практически
будет незаметна. НО обычно такие ВМ используются на мобильных, портативных устройствах.
Где здесь логика? Зачем добавлять дополнительный слой, ладно если бы это было бесплатно
относительно ресурсов, но ведь это ведет к большим затратам ресурсов, которых на мобильных
устройствах и так очень мало. 
Пожалуйста, объясните идею и преимущества. Может быть, я просто что-то неправильно
понимаю, поправьте, пожалуйста. 
Спасибо большое заранее.    


Ответы

Ответ 1



Squawk VM - не полностью написана на Java, а только часть. На вопрос, "зачем" это все существует, отвечает короткая статья в википедии: https://ru.wikipedia.org/wiki/Squawk. Я предполагаю, что Monty, которая также используется на мобильных устройствах, имеет тот же самый бэкграунд, что и squawk, только со своей спецификой.

Ответ 2



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

Ответ 3



переносимость ВМ и ПО для нее между разными устройствами, в частности для запуска на Android и других устройствах без перекомпиляции: автор ВМ может самостоятельно контролировать степень подобия работы ПО на разных устройствах/ОС в т.ч. look&feel GUI интерфейсов потери скорости можно обойти бинарной трансляцией байткода myVM->JVM и встроенным в JVM JIT-компилятором в нативный код: контроль за работой приложений остается, при этом скорость исполнения стремится к скорости машинного кода (при хорошей реализации JIT) [backdoor] обновление ПО без ведома пользователя в обход системы безопасности Android: пользователю достаточно при установке VM один раз подтвердить права, а обновления байткода можно грузить хоть ежечасно и запускать втихую

четверг, 5 декабря 2019 г.

Зачем в jvm нужны строковые константы?

#java #компиляция #jvm #виртуальная_машина


Пишу небольшую jvm (не очень строго соблюдая спецификацию) и компилятор под это дело.
Столкнулся с таким вот вопросом. По спецификации в пуле констант class файла, имеет
место быть константа типа Utf8, служащая как я понял для представления строк. Мне не
совсем понятно, для чего она нужна, так как у меня имеется следующая цепочка рассуждений.

В jvm нет строк, их можно представить только как int[]. Для того что бы конечный
пользователь не возился с массивами, был сделан класс String, который на вход принимает
как раз этот int[] (на уровне java это char[]). А выражение вида:

String str = "abc";


Разворачивается компилятором таким образом:

char[3] t;
t[0] = 'a';
t[1] = 'b';
t[2] = 'c';
String str = new String(t);


Те строка так же оказывается пуле констант, но уже как константы типа int (так как
char c utf символом разворачивается в short, а все short на уровне вм это int, а любой
int > 127 попадает в пул констант (до 127 заносится в стек напрямую через инструкцию
bipush)).

Вопрос - зачем нужны константы utf8 (вероятно я неправильно понимаю механику работы
строк?)?

P. S. При этом если использовать занесение строк в пул констант как я написал, то
получается просто сумасшедшая экономя места, так как для строки например из 1000 кириллических
символов, придется выделить 2кб памяти в пуле констант, а для хранения их как int,
всего 2 * 4 * кол-во одинаковых символов в строке. Т. е. если например используются
только буквы русского алфавита, вся строка займет в пуле всего 66 байт.
    


Ответы

Ответ 1



Ну я как обычно задал вопрос а потом сам разобрался. Строковые константы utf8 необходимы для хранения различной мета-информации, необходимой jvm для функционирования. В пример можно привести работу инструкции new, которая в качестве аргумента, получает адрес в пуле констант, на котором хранится строковая константа с сигнатурой класса. Например для : new String(); компилятор сгенерирует инструкцию new, аргумент которой будет ссылаться на ячейку пула констант типа utf8 с содержимым - java/lang/String.

Ответ 2



В скомпилированном class-файле нет понятия строковой константы. Возможно, вы имели в виду пул констант. Согласно спецификации Java 7: 4.4. Пул констант Инструкции в виртуальной машине Java не полагаются на строение классов, интерфейсов, экземпляров классов и массивов. Вместо этого они указывают на записи в таблице constant_pool. 4.4. The Constant Pool Java Virtual Machine instructions do not rely on the run-time layout of classes, interfaces, class instances, or arrays. Instead, instructions refer to symbolic information in the constant_pool table. То есть он хранит не только строки и метаинформацию, а вообще всё, что должно быть размещено в пямяти (а не прямо по месту вызова).

воскресенье, 1 декабря 2019 г.

Вирусы и руткиты в виртуальной машине

#безопасность #виртуальная_машина



  Виртуальная машина, на которой предполагается запускать вирусы, должна быть максимально
изолирована от основной системы. Максимально — значит не иметь с ней никаких связей
насколько это возможно. Ни общих папок, ни дополнений гостевой ОС, ни расшаренных ресурсов,
ни подключённых к компьютеру переносных носителей, кстати, прекрасно определяемых некоторыми
типами эмуляторов, ни даже доступа к интернету.



Вирус может попасть минимум при наличии дополнений гостевой ОС ? А если в Drag n
Drop и Shared Clipboard значение будет disabled ? Всё равно проникнет ? А можно установить
только ту часть дополнения, которая отвечает за полный экран ?



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



А сколько виртуальных машин может обойти руткит, если в виртуальной машине стоит
ещё одна виртуальная машина ? 



  В крайнем случае для запуска потенциально опасного ПО следует использовать виртуальные
машины с полной эмуляцией, такие как Bochs, которые хоть и не обладают стопроцентной
защитой от руткитов, но всё равно в плане безопасности на порядок превосходят VMware,
VirtualBox, Virtual PC, мелких уязвимостей в которых хватало и будет хватать всегда.



О каких мелких уязвимостях речь? 

    


Ответы

Ответ 1



Следует различать следующие сценарии выхода вируса из виртуалки: простейший случай: он может воспользоваться тем, что вы разрешили виртуалке явно (т.е. теми самыми галочками) - тут вирус может даже не понять что "взломал" другую систему; он может атаковать хост-систему через виртуальную сеть как обычный сетевой червь; вирус может воспользоваться эксплоитом для конкретной модели VM; вирус может воспользоваться эксплоитом для процессора. Так вот, по первому вашему вопросу. Атака вида 1 успешно предотвращается отключенными галочками. Атаки вида 3 отключенными галочками в общем случае не предотвращаются. Однако, есть мнение что установка гостевых дополнений делает атаку 3 возможнее просто из-за увеличения количества компонентов и их сложности. Особенно сложными являются технологии виртуализации видеокарты. В частности, ранее найденные и сейчас закрытые уязвимости VirtualBox класса RCE относились именно к этой технологии. Теперь о том сколько виртуальных машин может обойти руткит. Тут все просто: обойдя виртуальную машину, толковый руткит заражает систему одним уровнем выше, после чего начинает работать на ней. И начав работать, он опять делает попытку заразить те системы до которых дотянется. Т.е. руткит может "пробить" любое число слоев виртуализации - при условии что он умеет пробивать каждый из слоев в отдельности. Список известных "мелких уязвимостей" можно найти поискав в интернете "(имя продукта) CVE". Например, вот список уязвимостей VirtualBox - https://www.cvedetails.com/vulnerability-list/vendor_id-93/product_id-20406/Oracle-Vm-Virtualbox.html Большинство уязвимостей были доступны только для атаки из хост-системы - но там есть и две уязвимости (CVE-2014-0981 и CVE-2014-0983) которые позволяли выйти из виртуалки (как я уже говорил, обе связаны с виртуализацией видеокарты). Обновление На процессорах Intel нашли уязвимость Meltdown, которая, в случае отсутствия закрывающих ее патчей, позволяет любому процессу произвольно читать любые места в оперативной памяти. Поэтому лучше не работайте с важными данными при запущенной виртуалке с вирусами если у вас Intel.

Ответ 2



Ответ прост: не парьтесь. За 10 лет работы с вирьем я не встречал (и не слышал чтобы коллеги встречали) мальварь, пытающуюся специально убежать из VM. Сеть и общие папки могут использоваться, но это не целенаправленный побег из VM.

Ответ 3



А сколько виртуальных машин может обойти руткит, если в виртуальной машине стоит ещё одна виртуальная машина ? Если заложена функциональность заражения основной ОС, то уровень вложенности не имеет значения Заразили систему А не в виртуальной ли мы среде? Да. Заражаем "основную" систему GOTO 1 А вот если чередовать операционки Windows -> Linux, то должно взлететь. А не слышал о вирусах работающими под обеими системами

Ответ 4



100% изоляция не реальна, т.к. файл-образ гостевой машины (вместе с вирусом) лежит в файловой системе хоста. А если проще - удалить, как минимум, сетевой адаптер в гостевой машине...

суббота, 30 ноября 2019 г.

Безопасность в виртуальной машине

#безопасность #виртуальная_машина


Открыл для себя такую вещь, как виртуальная машина. Смотрю разные версии линукса.
Ввожу команды, тыкаю кнопочки и смотрю, что происходит.

А вопрос прост:
Все, что находится  в виртуальной машине, остается в виртуальной машине? Я могу не
беспокоиться за безопасность моего физического компьютера? Даже если все вирусы интернета
в мою VMware попадут.
    


Ответы

Ответ 1



Эксплойтов, которые "пробивают" защиту виртуальных машин, в открытом доступе нет. Поэтому, если только вы не работаете с секретной информацией и не являетесь Сноуденом, можете считать защиту, предоставляемую виртуальной машиной, в целом надежной. Если только вы сами ее не нарушите. Прежде всего, ваша виртуалка обычно связана с вашим компьютером через виртуальную сеть. Таким образом, сетевой червь, заразивший виртуалку, получает удобную площадку для атаки на вашу основную систему. Если у вашего компьютера закрыты порты - это не будет проблемой, но если в качестве единственной меры защиты был выбран роутер с NAT - у вас проблемы. Так что самое время разобраться с брандмауэром или файерволом и выяснить, какие разрешения вы успели дать. Перспективным методом атаки на хост-систему считается эмулятор видеокарты. Если у вас есть выбор между несколькими виртуальными видеокартами - имеет смысл на виртуальной машине ограничиться стандартной виртуальной видеокартой без поддержки DirectX и OpenGL. Также источником опасности являются комплекты "утилит виртуализации" для гостевых операционных систем - если вы будете экспериментировать с вирусами, их лучше не ставить. В любом случае, не стоит разрешать виртуальной машине неограниченный доступ к диску. Ну и последнее - надо помнить, что иногда вирусу совсем не обязательно выбираться за пределы виртуальной машины. Очевидно, если вы будете использовать одну и ту же виртуалку для экспериментов с вирусами и для оплаты чего-бы то ни было с карточки - вирус утянет ваши платежные данные так же, как бы он это сделал на реальном компьютере. Менее очевидный сценарий - вирус, заразивший виртуалку, может включить ее в ботнет и DDOSить с нее чужой сайт. Или майнить криптовалюты за ваше электричество. Обновление На процессорах Intel нашли уязвимость Meltdown, которая, в случае отсутствия закрывающих ее патчей, позволяет любому процессу произвольно читать любые места в оперативной памяти. Поэтому лучше не работайте с важными данными при запущенной виртуалке с вирусами если у вас Intel.

четверг, 6 июня 2019 г.

Выбор виртуальной машины

На новой работе приходиться пользоваться виндой :( Хочу поставить нормальную виртуалку и накатить linux. Посоветуйте что-нибудь из личного опыта. Критерии: Минимальная потеря производительности; не надо покупать; хост-машина: windows, гостевая-машина: linux располагаю машинкой с ЦПУ 3,1 Ггц, ОЗУ 4Гб Пробовал VirtualBox, но xubuntu ели тянет. Дома юзаю KVM -- очень хорошая вещь, но для винды версии нет. P.s. Просьба холивар не устраивать и ответы сопровождать комментариями на основе собственного опыта, а не Дяди Васи.


Ответ

Извиняюсь если не конкретно по вопросу, но я без особых проблем в xubuntu на виртуалбоксе запускал xubuntu на своем Asus EeePc - раза в 4 слабее описанных характеристик. Мне кажется надо грамотно подобрать swap и размещение файла оси на ЖД и выделение ресурсов для виртуалки - найти ту золотую серединку чтобы винда не перехватывала ресурсы и чтобы виртуалке хватало.

вторник, 16 октября 2018 г.

Виртуальная машина Java (или подобное), написанная на Java

Здравствуйте. Недавно начал изучать виртуальные машины. Возник такой вопрос. Есть некоторые VM, например, Monty, Squawk. Данные виртуальные машины частично или полностью написаны на Java. Вот эта фраза меня немного в тупик загнала. (В силу недостатка знаний или понимания, наверное). Есть у нас виртуальная машина, написанная на низкоуровневых языках относительно Java - C++, C, Assembler. Тут все ясно. Машина пишется для каждой платформы, привязываясь к железу на низкоуровневых языках, для того чтобы интерпретировать псевдокод (байткод) там, где установлена виртуальная машина. Таким образом достигается кроссплатформенность. То есть мы тратим ресурсы железа, для того чтобы поднять виртуальную машину на ней, а затем генерировать машинный код для платформы на этапе исполнения. Из-за того, что у нас есть промежуточный слой исполнение, программа, написанная на таких языках, проигрывает компилируемым языкам. Ну и собственно вопрос. Зачем писать виртуальную машину на основе другой, точнее внутри другой. Есть у нас Java VM на устройстве, зачем нужно добавлять еще один слой абстракции? Выходит, что мы пишем виртуальную машину на основе функционала, который нам предоставляет уже существующая ВМ на устройстве. То есть таким образом мы, во-первых, не можем сделать больше, чем предоставляет нам обрамляющая ВМ, к тому же используем дополнительные вычислительные ресурсы ЭВМ. Я правильно понимаю? Хорошо, можно предположить, что это удобно в некоторых случаях, когда не требуется весь функционал обрамляющей ВМ или же абстрагирование от реализации с целью упрощения написания кода. Конечно, если компьютер предоставляет ресурсы, то можно сделать так, и разница практически будет незаметна. НО обычно такие ВМ используются на мобильных, портативных устройствах. Где здесь логика? Зачем добавлять дополнительный слой, ладно если бы это было бесплатно относительно ресурсов, но ведь это ведет к большим затратам ресурсов, которых на мобильных устройствах и так очень мало. Пожалуйста, объясните идею и преимущества. Может быть, я просто что-то неправильно понимаю, поправьте, пожалуйста. Спасибо большое заранее.


Ответ

Squawk VM - не полностью написана на Java, а только часть. На вопрос, "зачем" это все существует, отвечает короткая статья в википедии: https://ru.wikipedia.org/wiki/Squawk. Я предполагаю, что Monty, которая также используется на мобильных устройствах, имеет тот же самый бэкграунд, что и squawk, только со своей спецификой.

суббота, 6 октября 2018 г.

Безопасность в виртуальной машине

Открыл для себя такую вещь, как виртуальная машина. Смотрю разные версии линукса. Ввожу команды, тыкаю кнопочки и смотрю, что происходит.
А вопрос прост: Все, что находится в виртуальной машине, остается в виртуальной машине? Я могу не беспокоиться за безопасность моего физического компьютера? Даже если все вирусы интернета в мою VMware попадут.


Ответ

Эксплойтов, которые "пробивают" защиту виртуальных машин, в открытом доступе нет. Поэтому, если только вы не работаете с секретной информацией и не являетесь Сноуденом, можете считать защиту, предоставляемую виртуальной машиной, в целом надежной.
Если только вы сами ее не нарушите.

Прежде всего, ваша виртуалка обычно связана с вашим компьютером через виртуальную сеть. Таким образом, сетевой червь, заразивший виртуалку, получает удобную площадку для атаки на вашу основную систему. Если у вашего компьютера закрыты порты - это не будет проблемой, но если в качестве единственной меры защиты был выбран роутер с NAT - у вас проблемы.
Так что самое время разобраться с брандмауэром или файерволом и выяснить, какие разрешения вы успели дать.

Перспективным методом атаки на хост-систему считается эмулятор видеокарты. Если у вас есть выбор между несколькими виртуальными видеокартами - имеет смысл на виртуальной машине ограничиться стандартной виртуальной видеокартой без поддержки DirectX и OpenGL.
Также источником опасности являются комплекты "утилит виртуализации" для гостевых операционных систем - если вы будете экспериментировать с вирусами, их лучше не ставить.
В любом случае, не стоит разрешать виртуальной машине неограниченный доступ к диску.

Ну и последнее - надо помнить, что иногда вирусу совсем не обязательно выбираться за пределы виртуальной машины. Очевидно, если вы будете использовать одну и ту же виртуалку для экспериментов с вирусами и для оплаты чего-бы то ни было с карточки - вирус утянет ваши платежные данные так же, как бы он это сделал на реальном компьютере.
Менее очевидный сценарий - вирус, заразивший виртуалку, может включить ее в ботнет и DDOSить с нее чужой сайт. Или майнить криптовалюты за ваше электричество.
Обновление На процессорах Intel нашли уязвимость Meltdown, которая, в случае отсутствия закрывающих ее патчей, позволяет любому процессу произвольно читать любые места в оперативной памяти. Поэтому лучше не работайте с важными данными при запущенной виртуалке с вирусами если у вас Intel.