Инструкция подключения к узлу исследуемой сети по протоколу WinRM
Для проведения задач «Инвентаризация» и «Аудит» необходимо активное подключение к узлам исследуемой сети с заведенными учетными записями для этих узлов.
Для корректного подключения к узлу исследуемой сети по протоколу WinRM
необходимо произвести предварительную настройку узла исследуемой сети.
Настройка подключения по протоколу WinRM с помощью поставляемого скрипта
Для настройки необходимо выполнить следующие действия:
-
Убедиться, что на узле, к которому планируется подключение, установлены
powershell 5.1
и.Net framework 4
-
Запустить Windows PowerShell от имени администратора
-
Выполнить скрипт изначальной настройки WinRM с помощью команды:
Powershell.exe -ExecutionPolicy Bypass -File winrm.ps1
-
После успешного выполнения данного скрипта становится возможным подключение к узлу исследуемой сети по протоколу WinRM через
basic
аутентификацию
Для работы с парами ключей (WinRM KeyPair) необходимо дополнительно выполнить следующие действия:
-
Скопировать на АРМ оператора, с которого производится управление Сканер ВС, публичный ключ в формате
CER
илиPEM
в файл -
Выполнить скрипт:
Powershell.exe -ExecutionPolicy Bypass -File clientCert.ps1 <путь к файлу с ключом> <имя пользователя> <пароль>
где
<путь к файлу с ключом>
– путь к сохраненному файлу, содержащему публичный
ключ в формате CER
или PEM
<имя пользователя>
и <пароль>
– аутентификационные данные, которые будут
использоваться для подключения к узлу исследуемой сети по протоколу WinRM
- После успешного выполнения данного скрипта становится возможным подключение к
узлу исследуемой сети по протоколу
WinRM
с использованием пары ключейWinRM KeyPair
.
Необходимые для настройки подключения по протоколу WinRM
, а также отмены
внесенных изменений файлы при установке Сканер-ВС по умолчанию сохраняются в
папке /opt/echelon/scanner/scripts
. Так же необходимые файлы можно скачать
перейдя по ссылке, где IP-adressSCA
- IP-адрес
рабочей станции, на которой установлен Сканер-ВС.
Для установки подключения по протоколу WinRM
с использованием пары ключей типа
EC P521
в командной строке Windows PowerShell необходимо выполнить
следующую команду:
Enable-TlsEccCurve nistp521
Ручная настройка подключения по протоколу WinRM
Поставляемый со Сканер-ВС скрипт настройки удаленного подключения по протоколу
WinRM
работает только в том случае, если на узле, к которому необходимо
подключиться для проведения задач «Инвентаризация» или «Аудит», установлены
powershell 5.1
и .Net framework 4
или более поздние их версии.
В том случае, если на узле исследуемой сети нет возможности обновить данные
утилиты до указанных версий, необходимо произвести настройку удаленного
подключения по протоколу WinRM
вручную.
Для ручной настройки удаленного подключения по протоколу WinRM
необходимо
выполнить следующие действия:
-
Запустить приложение Windows PowerShell от имени администратора
-
Включить удаленное взаимодействие PowerShell на активе сети, для чего в командной строке Windows PowerShell выполнить команду:
enable-psremoting -force
-
Запустить службы WinRM на активе сети, с помощью команды:
winrm qc
При выполнении данной команды происходит создание следующих параметров по умолчанию для службы
WinRM Listener
:- Adress – указание адреса, для которого запускается служба
- Transport – указывает вид протокола прикладного уровня для отправки и получения запросов и ответов (HTTP или HTTPS). По умолчанию принимается значение HTTP
- Port – указание TCP-порта, для которого запускается служба
- Hostname – имя узла, на котором выполняется служба
- Enabled – статус службы (
true
илиfalse
), по умолчанию принимает значениеtrue
- CertificateThumbprint – указание отпечатка сертификата службы
- ListeningOn – указание адресов, которые использует служба
-
Сгенерировать сертификат, для чего скопировать следующий скрипт в файл формата «txt»:
$hostnonFQDN = $env:computerName
$hostFQDN = [System.Net.Dns]::GetHostByName(($env:computerName)).Hostname
$SignatureAlgorithm = "SHA256"
$name = New-Object -COM "X509Enrollment.CX500DistinguishedName.1"
$name.Encode("CN=certname", 0)
$key = New-Object -COM "X509Enrollment.CX509PrivateKey.1"
$key.ProviderName = "Microsoft Enhanced RSA and AES Cryptographic Provider"
$key.KeySpec = 1
$key.Length = 4096
$key.SecurityDescriptor = "D:PAI(A;;0xd01f01ff;;;SY)(A;;0xd01f01ff;;;BA)(A;;0x80120089;;;NS)"
$key.MachineContext = 1
$key.Create()
$serverauthoid = New-Object -COM "X509Enrollment.CObjectId.1"
$serverauthoid.InitializeFromValue("1.3.6.1.5.5.7.3.1")
$ekuoids = New-Object -COM "X509Enrollment.CObjectIds.1"
$ekuoids.Add($serverauthoid)
$ekuext = New-Object -COM "X509Enrollment.CX509ExtensionEnhancedKeyUsage.1"
$ekuext.InitializeEncode($ekuoids)
$cert = New-Object -COM "X509Enrollment.CX509CertificateRequestCertificate.1"
$cert.InitializeFromPrivateKey(2, $key, "")
$cert.Subject = $name
$cert.Issuer = $cert.Subject
$cert.NotBefore = (Get-Date).AddDays(-1)
$cert.NotAfter = $cert.NotBefore.AddDays(1095)
$SigOID = New-Object -ComObject X509Enrollment.CObjectId
$SigOID.InitializeFromValue(([Security.Cryptography.Oid]$SignatureAlgorithm).Value)
[string[]] $AlternativeName += $hostnonFQDN
$AlternativeName += $hostFQDN
$IAlternativeNames = New-Object -ComObject X509Enrollment.CAlternativeNames
foreach ($AN in $AlternativeName) {
$AltName = New-Object -ComObject X509Enrollment.CAlternativeName
$AltName.InitializeFromString(0x3, $AN)
$IAlternativeNames.Add($AltName)
}
$SubjectAlternativeName = New-Object -ComObject X509Enrollment.CX509ExtensionAlternativeNames
$SubjectAlternativeName.InitializeEncode($IAlternativeNames)
[String[]]$KeyUsage = ("DigitalSignature", "KeyEncipherment")
$KeyUsageObj = New-Object -ComObject X509Enrollment.CX509ExtensionKeyUsage
$KeyUsageObj.InitializeEncode([int][Security.Cryptography.X509Certificates.X509KeyUsageFlags]($KeyUsage))
$KeyUsageObj.Critical = $true
$cert.X509Extensions.Add($KeyUsageObj)
$cert.X509Extensions.Add($ekuext)
$cert.SignatureInformation.HashAlgorithm = $SigOID
$CERT.X509Extensions.Add($SubjectAlternativeName)
$cert.Encode()
$enrollment = New-Object -COM "X509Enrollment.CX509Enrollment.1"
$enrollment.InitializeFromRequest($cert)
$certdata = $enrollment.CreateRequest(0)
$enrollment.InstallResponse(2, $certdata, 0, "")
# extract/return the thumbprint from the generated cert
$parsed_cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$parsed_cert.Import([System.Text.Encoding]::UTF8.GetBytes($certdata)) -
В командной строке Windows PowerShell выполнить команду:
powershell -executionpolicy bypass -file .\имя
где
имя
– имя файла формата «txt», в который был сохранен скрипт п. 4 -
Настроить службу
WinRM Listener
на работу через HTTPS. Для чего выполнить следующие команды:$thumbprint = "отпечаток сгенерированного сертификата"
# Create the hashtables of settings to be used.
$valueset = @{
Hostname = $env:COMPUTERNAME
CertificateThumbprint = $thumbprint
}
$selectorset = @{
Transport = "HTTPS"
Address = "*"
}
New-WSManInstance -ResourceURI 'winrm/config/Listener'
-SelectorSet $selectorset -ValueSet $valueset -
Включить опции аутентификации службы
WinRM
с помощью команд:Set-Item -Path "WSMan:\localhost\Service\Auth\Basic" -Value $true
Set-Item -Path WSMan:\localhost\Service\Auth\Certificate -Value $true
-
Включить правила для
Firewall
с помощью выполнения следующих команд:$fwtest1 = netsh advfirewall firewall show rule name="Allow WinRM HTTPS"
$fwtest2 = netsh advfirewall firewall show rule name="Allow WinRM HTTPS" profile=any
If ($fwtest1.count -lt 5) {
netsh advfirewall firewall add rule profile=any name="Allow WinRM HTTPS"
dir=in localport=5986 protocol=TCP action=allow
}
ElseIf (($fwtest1.count -ge 5) -and ($fwtest2.count -lt 5)) {
netsh advfirewall firewall set rule name="Allow WinRM HTTPS" new profile=any
} -
Установить значения регистра для выполнения команд с помощью протокола
WinRM
от имени администратора. Для чего выполнить следующие команды:$token_path = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"
$token_prop_name = "LocalAccountTokenFilterPolicy"
$token_key = Get-Item -Path $token_path
$token_value = $token_key.GetValue($token_prop_name, $null)
if ($token_value -ne 1) {
if ($null -ne $token_value) {
Remove-ItemProperty -Path $token_path -Name $token_prop_name
}
New-ItemProperty -Path $token_path -Name $token_prop_name -Value 1
-PropertyType DWORD > $null
}
Для подключения с использованием сертификата необходимо выполнить следующие действия:
-
Импортировать сертификат, используя следующие команды:
$certpath = "путь к сертификату"
Import-Certificate -FilePath $certpath -CertStoreLocation cert:\LocalMachine\root
Import-Certificate -FilePath $certpath -CertStoreLocation cert:\LocalMachine\TrustedPeople -
Скопировать отпечаток сертификата открыв сертификат и скопировать значение из поля
CertificateThumbprint
-
Выполнить следующие команды в Windows PowerShell:
$username = "имя пользователя"
$passwordseq= "пароль" | ConvertTo-SecureString -AsPlainText -Force
$thumbprint = "отпечаток"
$credential = New-Object -TypeName System.Management.Automation.PSCredential
-ArgumentList $username, $passwordseq
New-Item -Path WSMan:\localhost\ClientCertificate `
-Subject "*" `
-URI * `
-Issuer $thumbprint `
-Credential $credential `
-Force
Для установки подключения по протоколу WinRM с использованием пары ключей типа
EC P521
в командной строке Windows PowerShell необходимо выполнить команду:
Enable-TlsEccCurve nistp521
Ручная настройка подключения по протоколу WinRM для Windows Server 2008 и Windows 7
Для подключения к узлам исследуемой сети, функционирующим на базе старых версий
ОС семейства Windows (Windows 7 и Windows Server 2008) по протоколу WinRM
,
необходима их дополнительная настройка.
Для настройки таких узлов исследуемой сети необходимо выполнить следующие действия:
-
Установить обновления:
-
Перейти в редактор реестра нажав сочетание клавиш
Win+R
и введя «regedit» -
В редакторе реестра перейти по пути
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\
-
Нажать правую кнопку мыши в любом месте в правой части окна редактора реестра, нажать
Создать
и выбрать в открывшемся списке «Раздел», назвать его «TLS 1.2» -
В созданном разделе «TLS 1.2» аналогично создать два раздела с именами «Server» и «Client»
-
В разделе «Server» нажать правую кнопку мыши, нажать
Создать
и в открывшемся списке выбрать параметрDWORD (32 бита)
-
Переименовать созданный параметр в
DisabledByDefault
и присвоить ему значение «0» -
Аналогично создать параметр с именем
Enabled
и присвоить ему значение «1» -
Перейти в созданный ранее раздел с именем «Client»
-
Создать в этом разделе такие же два параметра, как и в разделе «Server»
-
Перезагрузить настраиваемый узел исследуемой сети
-
Запустить от имени администратора Windows PowerShell
-
Ввести команду:
Enable-Psremoting -force
-
Запустить скрипт
winrm.ps1
с помощью команды:Powershell.exe -ExecutionPolicy Bypass -File путь\до\файла\winrm.ps1
После выполнения скрипта winrm.ps1
станет доступным подключение по протоколу
WinRM
методом Basic
.
Для установки подключения методом KeyPair
помимо настройки описанной ранее
необходимо выполнить следующие дополнительные действия:
-
Для настройки подключения необходимо скопировать сгенерированный с помощью Сканер-ВС публичный ключ и поместить его в файл с расширением
.cer
на узле исследуемой сети -
Нажать комбинацию клавиш
Win+R
, ввестиmmc.exe
и нажать клавишу ввод -
В открывшейся консоли управления нажать
Файл
и в открывшемся списке выбрать «Добавить или удалить оснастку...» -
В левой части открывшегося окна «Добавление и удаление оснасток» в разделе «Доступные оснастки» выбрать «Сертификаты» и нажать кнопку
Добавить +
-
В открывшемся окне «Оснастка диспетчера сертификатов» выбрать «учетной записи компьютера» и нажать кнопку
Далее >
-
В отобразившемся окне «Выбор компьютера» необходимо выбрать «локальным компьютером (тем, на котором выполняется эта консоль)» и нажать кнопку
Готово
-
В правой части окна «Добавление и удаление оснасток» в поле «Выбранные оснастки» появились «Сертификаты (локальный компьютер)»
-
Необходимо выбрать данную оснастку путем нажатия на нее левой кнопкой мыши и нажать кнопку
ОК
-
Далее в левой части консоли управления необходимо нажать на
Сертификаты (локальный компьютер)
, после чего отобразится список локальных хранилищ, соответствующих добавленной оснастке, в средней части окна консоли управления -
В списке логических хранилищ необходимо найти «Личное», нажать на данное хранилище правой кнопкой мыши, выбрать «все задачи» и в открывшемся списке нажать на
Импорт...
, после чего откроется мастер импорта сертификатов -
В окне мастера импорта сертификатов необходимо нажать кнопку
Далее
и в отобразившемся интерфейсе импорта файлов добавить файл со скопированным на шаге 1 публичным ключом, нажать кнопкуДалее
-
Повторить добавление сертификата в хранилища с именами «Доверенные лица» и «Доверенные корневые центры сертификации»
-
В окне консоли управления открыть импортированный сертификат, перейти к вкладке «Состав» и скопировать значение в поле «Отпечаток»
ВАЖНО!Отпечаток сертификата не должен иметь никаких пробелов ни в начале, ни в конце!
-
Открыть скрипт с именем
clientCertOld.ps1
, который распаковывается при установке Сканер-ВС в папку/opt/echelon/scanner/scripts
, либо его можно скачать перейдя по ссылкеhttps://localhost/winrm/
-
Скрипт должен иметь следующее содержание:
param($thumbprint, $username, $password)
if (!$thumbprint -or !$username -or !$password){
write-host "need 3 arguments: certificate thumbprint, local username and password"
return
}
$passwordseq= "$password" | ConvertTo-SecureString -AsPlainText -Force
$thumbprint = "$thumbprint"
# Создание маппинга сертификата
$credential = New-Object -TypeName
System.Management.Automation.PSCredential -ArgumentList $username, $passwordseq
New-Item -Path WSMan:\localhost\ClientCertificate `
-Subject "*" `
-URI * `
-Issuer $thumbprint `
-Credential $credential `
-Force -
В данном скрипте необходимо заполнить поля
$passwordseq
и$thumbprint
валидными паролем и отпечатком сертификата соответственно -
Запустить Windows PowerShell от имени администратора
-
Запустить выполнение скрипта командой:
Powershell.exe -ExecutionPolicy Bypass -File путь\до\файла\clientCertOld.ps1
Удаление внесенных во время настройки подключения по протоколу WinRM изменений с помощью поставляемого скрипта
После завершения исследования узла необходимо отменить внесенные в узел
исследуемой сети во время настройки подключения по протоколу WinRM
изменений.
Для отмены внесенных изменений необходимо выполнить следующие действия:
-
Перейти в командную строку от имени администратора
-
Выполнить команду:
Powershell.exe -ExecutionPolicy Bypass -File remove.ps1
-
Выполнить команду:
Disable-PSRemoting -Force
Последняя команда отключает удаленное управление не только с помощью WinRM
через PowerShell, но и по всем остальным протоколам и утилитам также
Если при выполнении команд появляется ошибка выполнения, необходимо предварительно выполнить команду:
Set-ExecutionPolicy -ExecutionPolicy Unrestricted