Источник: https://github.com/AnaktaCTF/CTF/blob/main — Misc/WinRM_in_pentest.md
- 1. Введение
- 2. Основные характеристики и особенности WinRM
- 3. Методы выявления WinRM в сети
- 4. Эксплуатация WinRM при пентесте
- 5. Защита от атак через WinRM
В современном мире информационной безопасности удаленное управление системами играет ключевую роль в администрировании корпоративных сетей. Одним из таких механизмов в Windows является WinRM (Windows Remote Management) - встроенный инструмент для удаленного взаимодействия с операционной системой, который предоставляет возможности удаленного выполнения команд, управления процессами и получения информации о системе.
Что такое WinRM?

WinRM - это реализация Microsoft стандарта WS-Management (Web Services for Management), который основан на SOAP (Simple Object Access Protocol) и позволяет удаленно управлять Windows-хостами через HTTP(S). Он используется как административными инструментами (например, PowerShell Remoting), так и сторонними программами для автоматизации задач.
Основные возможности WinRM:
- Удаленное выполнение команд на Windows-системах.
- Управление сервисами, пользователями и файлами.
- Доступ к журналам событий (Event Logs).
- Мониторинг состояния системы и сбор диагностической информации.
- Поддержка безопасной аутентификации через Kerberos, а также NTLM и CredSSP.
Роль WinRM в тестировании на проникновение
Для специалистов по информационной безопасности протокол WinRM чрезвычайно полезен, поскольку он:
- Открывает возможность удаленного управления системой без физического доступа.
- Может использоваться для перемещения по сети (Lateral Movement).
- Позволяет выполнять команды на удаленных хостах, аналогично SSH в Linux.
- В сочетании с уязвимыми настройками аутентификации может быть точкой входа в инфраструктуру.
Пентестеры и Red Team-специалисты активно применяют WinRM при оценке защищенности корпоративных сетей. В зависимости от конфигурации системы, можно получить доступ к удаленному хосту с легитимными учетными данными или эксплуатировать слабые настройки аутентификации для атак Pass-the-Hash (PtH) и Pass-the-Ticket (PtT).
2. Основные характеристики и особенности WinRM
Разберем ключевые технические характеристики WinRM, его архитектуру, механизмы аутентификации и связь с PowerShell Remoting.
2.1 Используемые порты и протоколы
WinRM работает поверх HTTP и HTTPS, что делает его довольно удобным для удаленного взаимодействия. По умолчанию задействованы следующие порты:
- TCP 5985 - стандартный порт для подключения через HTTP.
- TCP 5986 - порт для подключения через HTTPS (шифрованное соединение с TLS).
Хотя WinRM можно настроить для работы через любые доступные порты, стандартные 5985 и 5986 чаще всего используются по умолчанию.
Важно: WinRM через HTTP не использует шифрование, но передача учетных данных (например, с помощью Kerberos или NTLM) может быть защищена на уровне аутентификации. Однако, для обеспечения безопасности рекомендуется использовать WinRM через HTTPS.
2.2 Аутентификация и механизмы безопасности
WinRM поддерживает несколько методов аутентификации:
-
Kerberos (по умолчанию)
- Использует механизм взаимного доверия в домене.
- Безопасный метод, так как не передает пароли в открытом виде.
- Требует, чтобы клиент и сервер были частью одной Active Directory.

-
NTLM
- Используется, если Kerberos недоступен.
- Менее безопасен, так как позволяет проводить атаки типа Pass-the-Hash (PtH).
- Не требует доменной аутентификации.

-
CredSSP (Credential Security Support Provider)
- Позволяет передавать учетные данные на удаленный сервер.
- Может быть полезен при каскадном подключении (например, когда один сервер управляет другим).
- Несет риски, так как учетные данные могут быть перехвачены, если защита настроена неправильно.

-
Basic Authentication
- Отправляет учетные данные в виде base64 (нешифрованного пароля).
- Используется в старых системах или в случаях, когда другие методы недоступны.
- Требует обязательного использования HTTPS для защиты пароля.

-
Certificate Authentication
- Использует цифровые сертификаты для проверки подлинности.
- Позволяет избежать передачи паролей.
- Сложен в настройке и редко применяется в корпоративных средах.

Вывод: Для безопасного использования WinRM рекомендуется включить Kerberos (если в домене) или Certificate Authentication. NTLM и CredSSP представляют угрозу и должны использоваться с осторожностью.
2.3 Связь с PowerShell Remoting
WinRM является основой для PowerShell Remoting, который позволяет запускать команды PowerShell на удаленных машинах. Это один из самых распространенных способов удаленного администрирования Windows-систем.
Основные команды PowerShell для работы с WinRM:
-
Проверка состояния WinRM
winrm quickconfigЭта команда показывает, включен ли WinRM и какие настройки применены.

-
Запуск удаленной сессии PowerShell
Enter-PSSession -ComputerName target_machine -Credential userПозволяет подключиться к удаленной системе и выполнять команды.
-
Запуск команд на нескольких системах
Invoke-Command -ComputerName target1, target2 -ScriptBlock { Get-Process }Позволяет отправлять команды сразу на несколько хостов.
-
Просмотр текущей конфигурации WinRM
winrm get winrm/config
Примечание: Для работы PowerShell Remoting необходимо, чтобы WinRM был включен на целевой системе, а учетная запись имела соответствующие привилегии (например, находиться в группе Remote Management Users).
3. Методы выявления WinRM в сети
При тестировании на проникновение важно определить, какие хосты в сети используют WinRM и какие уязвимости можно эксплуатировать.
3.1 Сканирование сети на наличие WinRM
Первым шагом является поиск машин, на которых активен WinRM. Поскольку он работает на стандартных портах 5985 (HTTP) и 5986 (HTTPS), мы можем использовать nmap и другие инструменты для их обнаружения.
Сканирование портов WinRM с помощью Nmap
Один из самых простых способов проверить доступность WinRM - это сканирование портов:
nmap -p 5985,5986 --open -sV -Pn 192.168.1.0/24
Разбор команды:
-p 5985,5986- указываем порты WinRM.--open- показывает только хосты с открытыми портами.-sV- определяет версию службы.-Pn- отключает ping перед сканированием (актуально, если ICMP заблокирован).

Глубокое сканирование WinRM с использованием NSE-скриптов
Nmap поддерживает NSE-скрипты, которые помогают извлекать больше информации:
nmap -p 5985,5986 --script=http-ntlm-info -sV 192.168.1.100
Этот скрипт покажет, поддерживается ли Kerberos/NTLM, а также детали конфигурации WinRM.

3.2 Проверка доступности WinRM на целевом хосте
После обнаружения хостов с открытыми портами WinRM, следующим шагом будет проверка их доступности и конфигурации.
Проверка соединения с WinRM с помощью PowerShell
Test-WsMan -ComputerName 192.168.1.100
Результат:
- Если WinRM включен и отвечает, вы увидите информацию о версии протокола.
- Если служба отключена или порт закрыт, появится сообщение об ошибке.
Анализ конфигурации WinRM на локальной машине
Если у вас есть доступ к хосту, можно проверить текущие настройки WinRM:
winrm get winrm/config
Этот запрос покажет:
- Включен ли WinRM.
- Методы аутентификации (Kerberos, NTLM, Basic, CredSSP).
- Разрешенные IP-адреса и список доверенных хостов.

4. Эксплуатация WinRM при пентесте
После обнаружения активных WinRM-служб и проверки доступности целевых хостов следующим этапом является эксплуатация WinRM.
4.1 Аутентификация и удаленное выполнение команд через WinRM
Если у нас есть учетные данные (логин и пароль или NTLM-хэш), мы можем войти на сервер через WinRM.
Использование Evil-WinRM
Evil-WinRM - один из самых популярных инструментов для взаимодействия с WinRM при пентесте. Он позволяет:
- Выполнять команды удаленно.
- Загружать файлы на целевую систему.
- Обходить некоторые ограничения безопасности Windows.
Подключение к удаленной системе с известными учетными данными
evil-winrm -i 192.168.1.100 -u administrator -p "SuperSecurePassword!"
Если пароль правильный, мы получаем интерактивную сессию на целевой системе.

Выполнение команд после подключения
После успешного входа мы можем запускать PowerShell-команды. Например:
whoami /priv # Проверяем права пользователя
ipconfig /all # Просматриваем сетевые интерфейсы
net user /domain # Список пользователей в домене

4.2 Использование Pass-the-Hash (PtH) и Pass-the-Ticket (PtT)
Когда у атакующего нет пароля, но есть хэш NTLM или билет Kerberos, можно использовать атаки PtH и PtT для аутентификации через WinRM.
Атака Pass-the-Hash (PtH) через NetExec
netexec winrm 192.168.1.100 -u administrator -H 31d6cfe0d16ae931b73c59d7e0c089c0
Если учетная запись поддерживает NTLM-аутентификацию, атакующий получит доступ.

Атака Pass-the-Ticket (PtT) через Mimikatz
Если атакующий обнаружил билет Kerberos, он может использовать его для подключения через WinRM:
mimikatz.exe "kerberos::ptt /path/to/ticket.kirbi" "exit"
После этого можно подключиться к системе, используя обычный вход:
Enter-PSSession -ComputerName 192.168.1.100 -Credential administrator
Это сработает, если у нас действительный билет для целевого хоста.
5. Защита от атак через WinRM
Существуют несколько методов защиты и усиления безопасности при использовании WinRM.
5.1 Отключение ненужных служб и ограничение доступа к WinRM
Если WinRM не используется в сети или на отдельных хостах, его следует отключить для минимизации возможных уязвимостей.
Отключение WinRM на хостах
Если WinRM не требуется на конкретной системе, его можно полностью отключить с помощью PowerShell:
Set-Service WinRM -StartupType Disabled
Stop-Service WinRM
Ограничение доступа к WinRM с помощью брандмауэра
Если WinRM требуется только для определенных пользователей или серверов, можно ограничить доступ через брандмауэр. Например, можно разрешить доступ только с определенных IP-адресов:
New-NetFirewallRule -DisplayName "Allow WinRM" -Direction Inbound -Protocol TCP -LocalPort 5985,5986 -RemoteAddress 192.168.1.100 -Action Allow
5.2 Использование безопасных методов аутентификации
Одним из самых эффективных способов защиты является правильная настройка аутентификации. Аутентификация играет ключевую роль в безопасности WinRM.
Использование Kerberos для аутентификации
Kerberos - это безопасный и рекомендуемый метод аутентификации для корпоративных сетей. Для его использования все компьютеры должны быть частью домена Active Directory. Важно обеспечить, чтобы Kerberos был настроен везде, где это возможно, поскольку он защищает передаваемые данные с помощью шифрования.
Устанавливаем WinRM на использование Kerberos:
winrm set winrm/config/service/auth '@{Kerberos="true"}'
Отключение NTLM-аутентификации
NTLM является устаревшим и менее безопасным методом аутентификации, который уязвим для различных атак, таких как Pass-the-Hash. Для повышения безопасности следует отключить NTLM и использовать только Kerberos.
Для отключения NTLM выполним следующие шаги:
- Отключим аутентификацию NTLM в группе политик безопасности:
secpol.msc
- Отключим NTLM для WinRM:
winrm set winrm/config/service/auth '@{NTLM="false"}'
Использование аутентификации с сертификатами (Certificate Authentication)
Для дополнительной безопасности можно настроить сертификаты для аутентификации вместо паролей и хэшей. Это особенно полезно для организаций, которые используют привилегированные аккаунты для администрирования серверов.
Чтобы включить аутентификацию с сертификатами, можно использовать команду:
winrm set winrm/config/service/auth '@{Certificate="true"}'
5.3 Использование шифрования через HTTPS
Для защиты данных, передаваемых через WinRM, следует всегда использовать шифрование. Это важно для предотвращения атак типа Man-in-the-Middle (MITM), когда злоумышленники могут перехватывать незащищенный трафик, передаваемый через HTTP.
Настройка WinRM для работы с HTTPS
Для включения шифрования через HTTPS необходимо установить SSL-сертификат на сервер и настроить WinRM. Примерный процесс выглядит следующим образом:
-
Создаём или получаем сертификат для шифрования (например, через внутренний CA).
-
Связываем WinRM с этим сертификатом:
winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname="YourHost";CertificateThumbprint="YOUR_CERT_THUMBPRINT"}
- Убеждаемся, что порты 5986 (HTTPS) открыты в брандмауэре:
New-NetFirewallRule -DisplayName "Allow WinRM HTTPS" -Direction Inbound -Protocol TCP -LocalPort 5986 -Action Allow
5.4 Ограничение доступа с помощью групп пользователей
Еще одной важной мерой безопасности является ограничение доступа к WinRM для определенных групп пользователей.
Использование групп для контроля доступа
На Windows-серверах существует группа Remote Management Users, члены которой могут использовать WinRM.
Для добавления пользователя в группу Remote Management Users выполним:
Add-LocalGroupMember -Group "Remote Management Users" -Member "username"
Минимизация прав доступа
Система должна работать по принципу наименьших привилегий: необходимо давать пользователям только те права, которые им действительно необходимы. Например, для мониторинга системы или выполнения простых команд можно использовать ограниченные учетные записи с минимальными правами.
5.5 Регулярные обновления и мониторинг
Наконец, важно следить за актуальностью системы и проводить регулярные обновления для защиты от уязвимостей.
Регулярное обновление системы
Необходимо постоянно проверять, чтобы все системы получали актуальные обновления безопасности. Это включает в себя обновления операционных систем и установленных приложений.
Мониторинг активности WinRM
Также необходимо следить за активностью, связанной с WinRM, с помощью журналов событий и инструментов мониторинга, таких как SIEM-систем. Например, в журнале Microsoft-Windows-WinRM/Operational можно отслеживать попытки подключения и выполнения команд.
Автор: Дейникин Максим Юрьевич