Можно ли найти информацию о хост-машине изнутри виртуальной машины?
Например его IP.
РЕДАКТИРОВАТЬ: Одна вещь, которую я нашел до сих пор:
HKLM \ SOFTWARE \ Microsoft \ Virtual Machine \ Guest \ Parameters содержит
и т.п.
Идеальный ответ (с точки зрения управления виртуальными машинами) заключается в том, что вы не должны иметь возможность ничего сказать о физическом хосте, если эта информация не была предоставлена вам явно. На практике при установке виртуальных машин происходит утечка некоторой информации о хосте, в основном из-за установки настраиваемых (и часто паравиртуализированных) драйверов, которые обеспечивают лучшую производительность виртуальной машины. Стандартная настройка сред виртуальных машин обычно предоставляет некоторую базовую информацию в различных местах (например, данные Hyper-V, которые вы указываете).
Хотя есть некоторые сценарии, в которых я вижу законные причины для этого (например, виртуальная машина в кластере проверяет, действительно ли хост, на котором она работает, доставляет все физические ресурсы, которые, по мнению виртуальной машины, у нее есть, перед тем, как начать высокую нагрузку но задача с низким приоритетом) почти все случаи, когда виртуальная машина «хочет» больше узнать о своем хосте, являются вредоносными. Если у процесса, запущенного на виртуальной машине, есть веская причина знать этот тип информации, то это тривиальная задача - настроить законный механизм для предоставления этой информации ему - по большей части как администратор виртуальной машины я не хочу виртуальные машины, чтобы сказать что-либо из этого.
это пост из Sourcefire VRT описывает некоторые механизмы, которые используются вредоносными программами для определения того, работают ли они на виртуальной машине, и действия по смягчению последствий, которые могут быть предприняты для противодействия им - по большей части виртуальная машина почти всегда может сказать, что она работает на виртуальной машине и обычно может сообщить поставщику гипервизора, возможно, определить тип гипервизора и, возможно, сделать хорошее предположение относительно конкретной версии. Некоторая дополнительная информация обычно может быть получена из сети, но это почти наверняка деятельность, которую следует классифицировать как вредоносную. Если вы прочтете этот пост, вы увидите, что можно настроить виртуальную машину так, что для чего-либо, работающего в виртуальной машине, очень сложно выяснить что-либо, кроме основного факта, что это виртуальная машина, поэтому полагаться на эти механизмы - плохо идея.
На ваш конкретный вопрос об «ip-адресе» гипервизора общий ответ будет заключаться в том, что гипервизоры могут иметь много IP-адресов - консоль управления, порты iSCSI, порты Live Motion \ Fault Tolerance и многие порты, которые не имеют явных ip-адреса (порты ВМ) и другие варианты. Поиск IP-адреса (а) консоли управления может быть тривиальным - в соответствии с вашим примером Hyper-V - но делать что-либо с ним должно быть сложно, в хорошо спроектированной инфраструктуре виртуальных машин виртуальные машины не должны иметь возможность маршрутизировать на консоль управления адрес.
Ключ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Virtual Machine \ Guest \ Parameters в реестре виртуальной машины перечисляет информацию о хост-машинах Hyper-v. У меня виртуальная машина Windows 2003, работающая на сервере 2008 R2 Hyper-v. Я вижу имя хост-машины в реестре 2003 vm.
Думаю, вы определили именно то, что искали. Этот ключ реестра - это способ, которым Hyper-V предоставляет вам информацию о хост-машине.
Единственное, что вам нужно помнить, когда вы пишете код, который его использует, это то, что он может оказаться неправильным к тому времени, когда вы его используете, поскольку ваша виртуальная машина может быть сохранена, а затем восстановлена или может мигрировать, пока любой код или сценарий, который вы написали, выполнение.
Практически нет. Гостевая ОС не имеет доступа к хост-машине. Почему вы хотите, чтобы ваш гость разговаривал с хозяином?
По соображениям безопасности я уверен, что ответ отрицательный. Если вы не создаете сетевое соединение только для хоста, в котором вы можете получить доступ к хосту через сеть. Идея в том, что хост должен сначала предоставить вам доступ к своей информации.
Проверьте libvirt. Кажется, что он в основном ориентирован на сервер, но у него есть некоторые функции на стороне клиента (или, по крайней мере, планы их включения) для таких вещей, как поиск слотов PCI, используемых на сервере, от клиента, чтобы взять на себя управление, скажем, звуковая карта.
Если вы просто хотите узнать что-то простое, например, работаете ли вы на виртуальной машине или на какой виртуальной машине, вероятно, проще всего это сделать, просмотрев идентификатор BIOS виртуальной машины или другие строки идентификатора устройства.
Хотя гостевая виртуальная машина теоретически ничего не «знает» о своем хосте (обычно он даже не знает, что это даже виртуальная машина), вы можете получить информацию о хосте, просто рассматривая хост как просто другую машину в сети, с точки зрения гостя. Это предполагает, что гость может видеть хост в сети.
Если у вас есть сетевой доступ (и надлежащие учетные данные) к хосту, у вас есть несколько вариантов для сбора информации:
psexec \\ имя_хоста_компьютера ipconfig