Использование PowerShell Direct для повышения безопасности виртуальных машин

Опубликовано: 16 Апреля, 2023
Использование PowerShell Direct для повышения безопасности виртуальных машин

Со времен Windows Server 2012 Microsoft по умолчанию включила удаленное взаимодействие PowerShell в своих операционных системах. Это означает, что авторизованный администратор может установить сеанс PowerShell с машиной и управлять ею из любого места. Хотя возможность использовать PowerShell для удаленного управления виртуальной машиной, безусловно, удобна, вы можете сделать свою сеть немного более безопасной, отключив удаленное взаимодействие PowerShell для своих виртуальных машин Hyper-V. Вы по-прежнему сможете использовать удаленное взаимодействие PowerShell для управления своими виртуальными машинами, вы просто заставите злоумышленников прыгнуть через несколько дополнительных обручей.

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

Второе, что вам нужно знать, это то, что метод, который я собираюсь вам показать, подходит только для использования с относительно небольшими развертываниями Hyper-V. Причина этого в том, что метод, который я собираюсь вам показать, требует, чтобы вы знали, на каком хосте Hyper-V находится виртуальная машина, которой вы хотите управлять. В более крупных организациях виртуальные машины, как правило, регулярно переносятся с одного узла Hyper-V на другой, поэтому может быть сложно узнать, на каком узле в данный момент работает конкретная виртуальная машина, если у вас нет System Center Virtual Machine Manager. Кстати, недавно я написал отдельную статью, объясняющую, как использовать PowerShell, чтобы выяснить, на каком хосте Hyper-V работает конкретная виртуальная машина.

Как воспользоваться преимуществами PowerShell Direct

Таким образом, хитрость, стоящая за отключением удаленного взаимодействия PowerShell и сохранением возможности управлять виртуальной машиной через PowerShell, заключается в использовании преимущества функции Windows Server под названием PowerShell Direct. PowerShell Direct был представлен в Windows Server 2016 и позволяет использовать команды PowerShell для управления виртуальной машиной Hyper-V из операционной системы хоста. Самое интересное в этом методе заключается в том, что, поскольку PowerShell запускается на узле Hyper-V, он полностью обходит сетевой стек виртуальной машины. Вы можете управлять виртуальными машинами из PowerShell независимо от того, включено ли удаленное управление, и независимо от того, как настроен брандмауэр виртуальной машины. Единственное предостережение заключается в том, что это работает только для виртуальных машин, работающих на том же хосте, на котором вы используете PowerShell — ну, вроде того.

Как мы все знаем, на большинстве серверов нет выделенных клавиатур, мышей и мониторов. Дни, когда вы шли в центр обработки данных и садились за консоль сервера, чтобы выполнить задачу управления, давно прошли. Впрочем, это нормально. Вы по-прежнему можете воспользоваться преимуществами PowerShell Direct, даже если вы сидите за своим рабочим столом. Хитрость заключается в том, чтобы установить удаленный сеанс PowerShell с сервером Hyper-V, а затем использовать PowerShell Direct для подключения к виртуальной машине. Вот почему вы должны знать, на каком хосте работает виртуальная машина.

Итак, давайте посмотрим, как это работает в реальной жизни. Ранее сегодня я настроил виртуальную машину Windows 10 с именем Win10-1803. Эта виртуальная машина работает на сервере Hyper-V с именем Hyper-V-4. Итак, с учетом сказанного, первое, что я собираюсь сделать, это отключить удаленное взаимодействие PowerShell на виртуальной машине. Для этого я вхожу в виртуальную машину напрямую и ввожу командлет Disable-PSRemoting, как показано на снимке экрана ниже.

После того, как я отключил удаленное взаимодействие PowerShell, я попытался установить сеанс PowerShell с виртуальной машиной, используя следующие команды:

$Cred=Get-Credential $Session = New-PSSession -ComputerName Win10-1803 -Credential $Credential

Как вы можете видеть на следующем снимке экрана, соединение не удалось, как и следовало ожидать.

Изображение 14448
С отключенным удаленным взаимодействием PowerShell мне не удалось установить сеанс PowerShell с виртуальной машиной.

Итак, теперь давайте посмотрим, как установить подключение PowerShell с помощью PowerShell Direct. Единственное, что вам нужно знать о том, что я собираюсь вам показать, это то, что каждая из задействованных машин присоединена к общему домену.

Итак, с учетом сказанного, первым шагом в этом процессе является установка сеанса PowerShell с сервером Hyper-V, который в моем случае называется Hyper-V 4. Для этого я буду использовать те же самые команды, что и минуту назад, за исключением того, что я использую Hyper-V-4 в качестве имени компьютера. Я также использую командлет Enter-PSSession для установки сеанса. Вот команды:

$Cred=Get-Credential $Session = New-PSSession -ComputerName Hyper-V-4 -Credential $Cred Enter-PSSession $Session

Как вы можете видеть на следующем рисунке, я подключился к удаленному серверу Hyper-V.

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

Invoke-Command -VMName Win10-1803 -ScriptBlock {Get-Process}

Как видите, я использую командлет Invoke-Command, а затем указываю имя виртуальной машины. Любые команды, которые я включаю в блок сценария, выполняются на виртуальной машине. Если вам интересно, когда я выполняю эту команду, PowerShell предлагает мне ввести учетные данные для виртуальной машины. Однако, как вы можете видеть на снимке экрана ниже, мне удалось получить список процессов виртуальной машины, хотя удаленное взаимодействие PowerShell отключено.

Протестируйте перед отключением удаленного взаимодействия PowerShell

Отключение удаленного взаимодействия PowerShell потенциально может сделать ваши виртуальные машины немного более безопасными. Тем не менее, я рекомендую протестировать эту технику в лабораторных условиях, прежде чем применять ее в производственной среде. Если у вас есть сценарии или приложения, зависящие от удаленного взаимодействия PowerShell, отключение удаленного взаимодействия PowerShell вызовет проблемы. Также стоит упомянуть, что командлет Disable-PSRemoting ведет себя немного по-разному в зависимости от используемой версии PowerShell. Эти различия перечислены в разделе примечаний документации Microsoft Disable-PSRemoting.