Перейти к основному содержимому

Инструкция подключения к узлу исследуемой сети по протоколу 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 необходимо выполнить следующие действия:

  1. Запустить приложение Windows PowerShell от имени администратора

  2. Включить удаленное взаимодействие PowerShell на активе сети, для чего в командной строке Windows PowerShell выполнить команду:

    enable-psremoting -force
  3. Запустить службы WinRM на активе сети, с помощью команды:

    winrm qc

    При выполнении данной команды происходит создание следующих параметров по умолчанию для службы WinRM Listener:

    • Adress – указание адреса, для которого запускается служба
    • Transport – указывает вид протокола прикладного уровня для отправки и получения запросов и ответов (HTTP или HTTPS). По умолчанию принимается значение HTTP
    • Port – указание TCP-порта, для которого запускается служба
    • Hostname – имя узла, на котором выполняется служба
    • Enabled – статус службы (true или false), по умолчанию принимает значение true
    • CertificateThumbprint – указание отпечатка сертификата службы
    • ListeningOn – указание адресов, которые использует служба
  4. Сгенерировать сертификат, для чего скопировать следующий скрипт в файл формата «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))
  5. В командной строке Windows PowerShell выполнить команду:

    powershell -executionpolicy bypass -file .\имя

    где имя – имя файла формата «txt», в который был сохранен скрипт п. 4

  6. Настроить службу 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
  7. Включить опции аутентификации службы WinRM с помощью команд:

    Set-Item -Path "WSMan:\localhost\Service\Auth\Basic" -Value $true
    Set-Item -Path WSMan:\localhost\Service\Auth\Certificate -Value $true
  8. Включить правила для 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

    }
  9. Установить значения регистра для выполнения команд с помощью протокола 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

    }

Для подключения с использованием сертификата необходимо выполнить следующие действия:

  1. Импортировать сертификат, используя следующие команды:

    $certpath = "путь к сертификату"

    Import-Certificate -FilePath $certpath -CertStoreLocation cert:\LocalMachine\root

    Import-Certificate -FilePath $certpath -CertStoreLocation cert:\LocalMachine\TrustedPeople
  2. Скопировать отпечаток сертификата открыв сертификат и скопировать значение из поля CertificateThumbprint

  3. Выполнить следующие команды в 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, необходима их дополнительная настройка.

Для настройки таких узлов исследуемой сети необходимо выполнить следующие действия:

  1. Установить обновления:

  2. Перейти в редактор реестра нажав сочетание клавиш Win+R и введя «regedit»

  3. В редакторе реестра перейти по пути HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\

  4. Нажать правую кнопку мыши в любом месте в правой части окна редактора реестра, нажать Создать и выбрать в открывшемся списке «Раздел», назвать его «TLS 1.2»

  5. В созданном разделе «TLS 1.2» аналогично создать два раздела с именами «Server» и «Client»

  6. В разделе «Server» нажать правую кнопку мыши, нажать Создать и в открывшемся списке выбрать параметр DWORD (32 бита)

  7. Переименовать созданный параметр в DisabledByDefault и присвоить ему значение «0»

  8. Аналогично создать параметр с именем Enabled и присвоить ему значение «1»

  9. Перейти в созданный ранее раздел с именем «Client»

  10. Создать в этом разделе такие же два параметра, как и в разделе «Server»

  11. Перезагрузить настраиваемый узел исследуемой сети

  12. Запустить от имени администратора Windows PowerShell

  13. Ввести команду:

    Enable-Psremoting -force
  14. Запустить скрипт winrm.ps1 с помощью команды:

    Powershell.exe -ExecutionPolicy Bypass -File путь\до\файла\winrm.ps1

После выполнения скрипта winrm.ps1 станет доступным подключение по протоколу WinRM методом Basic.

Для установки подключения методом KeyPair помимо настройки описанной ранее необходимо выполнить следующие дополнительные действия:

  1. Для настройки подключения необходимо скопировать сгенерированный с помощью Сканер-ВС публичный ключ и поместить его в файл с расширением .cer на узле исследуемой сети

  2. Нажать комбинацию клавиш Win+R, ввести mmc.exe и нажать клавишу ввод

  3. В открывшейся консоли управления нажать Файл и в открывшемся списке выбрать «Добавить или удалить оснастку...»

  4. В левой части открывшегося окна «Добавление и удаление оснасток» в разделе «Доступные оснастки» выбрать «Сертификаты» и нажать кнопку Добавить +

  5. В открывшемся окне «Оснастка диспетчера сертификатов» выбрать «учетной записи компьютера» и нажать кнопку Далее >

  6. В отобразившемся окне «Выбор компьютера» необходимо выбрать «локальным компьютером (тем, на котором выполняется эта консоль)» и нажать кнопку Готово

  7. В правой части окна «Добавление и удаление оснасток» в поле «Выбранные оснастки» появились «Сертификаты (локальный компьютер)»

  8. Необходимо выбрать данную оснастку путем нажатия на нее левой кнопкой мыши и нажать кнопку ОК

  9. Далее в левой части консоли управления необходимо нажать на Сертификаты (локальный компьютер), после чего отобразится список локальных хранилищ, соответствующих добавленной оснастке, в средней части окна консоли управления

  10. В списке логических хранилищ необходимо найти «Личное», нажать на данное хранилище правой кнопкой мыши, выбрать «все задачи» и в открывшемся списке нажать на Импорт..., после чего откроется мастер импорта сертификатов

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

  12. Повторить добавление сертификата в хранилища с именами «Доверенные лица» и «Доверенные корневые центры сертификации»

  13. В окне консоли управления открыть импортированный сертификат, перейти к вкладке «Состав» и скопировать значение в поле «Отпечаток»

    ВАЖНО!

    Отпечаток сертификата не должен иметь никаких пробелов ни в начале, ни в конце!

  14. Открыть скрипт с именем clientCertOld.ps1, который распаковывается при установке Сканер-ВС в папку /opt/echelon/scanner/scripts, либо его можно скачать перейдя по ссылке https://localhost/winrm/

  15. Скрипт должен иметь следующее содержание:

    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
  16. В данном скрипте необходимо заполнить поля $passwordseq и $thumbprint валидными паролем и отпечатком сертификата соответственно

  17. Запустить Windows PowerShell от имени администратора

  18. Запустить выполнение скрипта командой:

    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