WinRM UseSSL Hardening

WinRM UseSSL

Windows Remote Management Hardening

WinRM ist ein wirklich leistungsfähiges Werkzeug zum Konfigurieren, verwalten und steuern einer lokalen- oder Domänenumgebung.  Aus diesem Grund sollte Windows Remote Management abgesichert werden.

Die Umsetzung bzw. der flächendeckende roll-out von WinRM kann sehr individuell gestaltet werden. Es hängt immer von den technischen Hilfsmitteln sowie auch von den Anforderungen ab.

In diesem Artikel zeige ich eine weitere Möglichkeit Windows Remote Management über eine GPO bereitzustellen. Voraussetzung ist jedoch, das die Clients bereits Zertifikate besitzen.

Zertifikatsbasierte Authentifizierung

Wenn wir WinRM einsetzen dann müssen wir Admins uns beim Remote-Server/Workstation (Kerberos) authentifizieren. Wir müssen beweisen, das wir es sind und das Recht dazu haben, die entfernte Maschine zu verwalten. Aber wer beglaubigt uns, das der Remote-PC der ist für den wir ihn halten? Mithilfe von Zertifikaten lösen wir das Problem.

In der Standardkonfiguration präsentiert sich WinRM auf diese Weise. Es ist unsicher weil alles erlaubt ist wie z.B. unsichere Authentifizierungsprotokolle und HTTP-Verbindungen. Das wollen wir jetzt ändern.

WinRM Default Settings

Bei der Basic- und Domain-Authentifizierung werden die Anmeldedaten unverschlüsselt übertragen. Bei der zertifikatsbasierten Authentifizierung werden Daten und Anmeldedaten verschlüsselt übertragen.

Befehle als Beispiel zur Konfiguration der Authentifizierung

# Konfiguration von sicheren Authentifizierungsmethoden
winrm set winrm/config/service @{AllowUnencrypted=”false”}

winrm set winrm/config/service/auth @{Basic=”false”}
winrm set winrm/config/service/auth @{Kerberos=”true”}
winrm set winrm/config/service/auth @{Certificate=“true“}
winrm get winrm/config/service
winrm e winrm/config/listener

# Selbstsigniertes Zertifikat in einer Workgroup erstellen. In einer Domäne sollte es bereits auf der Maschine sein.
New-SelfSignedCertificate –DnsName ([System.Net.Dns]::GetHostByName($env:computerName)).Hostname -CertStoreLocation “cert:\LocalMachine\My” -FriendlyName WinRM

# Thumbprint des Zertifikas auslesen
$Thumb = Get-ChildItem Cert:\LocalMachine\My\ | where FriendlyName -eq WinRM | select Thumbprint

# Zertifikat an den HTTPS Listener mittels Thumbprint binden
New-WSManInstance -ResourceURI winrm/config/Listener -SelectorSet @{address=”*”;transport=”https”} -ValueSet @{Hostname=[System.Net.Dns]::GetHostByName(($env:computerName)).Hostname;CertificateThumbprint=$thumb.thumbprint}

# Listener erstellen und vorhandenes SSL Zertifikat binden
New-Item -Path WSMan:\LocalHost\Listener -Transport HTTPS -Address * -CertificateThumbPrint a957d09864301f802b5aa5f9fae3cd61c974e8c9 -Force

# Firewallausnahme setzen
New-NetFirewallRule -DisplayName “Windows Remote Management (HTTPS-In)” -Name “Windows Remote Management (HTTPS-In)” -Profile Any -LocalPort 5986 -Protocol TCP

# Aufbau einer Verbindung bei Nutzung eines self-signed Zertifikat
Enter-PSSession -ComputerName Win10 -UseSSL -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck) -Credential (Get-Credential)

# Optional
Configure-SMRemoting.exe -get
Configure-SMRemoting.exe -enable
Get-ChildItem WSMan:\localhost\Client\DefaultPorts
winrm delete winrm/config/Listener?Address=*+Transport=HTTP

Das Ziel ist es, die unsicheren Authentifizierungsprotokolle zu deaktivieren und beim Aufbau einer Verbindung auf HTTPS zu setzen. In der Powershellausgabe sehen wir, das für den Aufbau einer sicheren Verbindung ein Zertifikat gebunden ist.

WinRM Hardening

Die Konfiguration lässt sich per GPO nur dann sauber umsetzen, wenn das vorhandene Client-Zertifikat (Vorlage) entsprechend konfiguriert wurde.

WinRM Zertifikat Konfiguration

Bei der Umsetzung blockieren wir den unsicheren Port 5985 und unternehmen keine weitere Maßnahmen vor wie z.B. das Entfernen des HTTP-Listeners. Es ist zu beachten, das der Servermanager den Port 5985 benötigt.

WinRM sichere Firewallkonfiguration

Die eigentliche Konfiguration passiert per Aufgabenplanung. Über den geplanten Task schalten wir die HTTPS Konfiguration (Listener) ein.

WinRM HTTPS Listener konfigurieren

Im Ergebnis sehen wir, das eine Verbindung mit WinRM nur noch per Port 5986 und einem Zertifikat zustande kommt.

WinRM Connection only with SSL

In dem .zip File ist alles enthalten was nötig ist, um WinRM auszurollen. Das einzige was angepasst werden sollte, ist die geplante Aufgabe. Aktuell steht die Aufgabe zur Ausführung bei Systemstart. Es sollte aber nur ein einmaliger Task sein.

[wpdm_package id=’16294′]

PSRemoting Troubleshooting