WinRM na Windows Server 2025, ale te same zalecenia mają zastosowanie w 2022, 2019 i wcześniejszych w dużym stopniu, WinRM jest dość stabilny w swojej architekturze.
Poniżej masz obszerną listę najlepszych praktyk, opcji konfiguracyjnych i rekomendacji – ze szczególnym uwzględnieniem bezpieczeństwa (hardening) w kontekście serwera.
Ogólne założenia bezpieczeństwa WinRM
WinRM (Windows Remote Management) działa w oparciu o protokół WS-Management (SOAP over HTTP/HTTPS). Umożliwia m.in. PowerShell Remoting. Domyślnie na serwerze:
✅ WinRM HTTP (port 5985) jest zazwyczaj włączony (lub można go włączyć jednym poleceniem)
✅ WinRM HTTPS (port 5986) jest wyłączony, ale rekomendowany do włączenia w środowiskach produkcyjnych
Podstawowy cel hardeningu WinRM:
- ograniczyć punkty ataku
- wymusić szyfrowanie
- ograniczyć, kto może się łączyć
Najważniejsze zasady hardeningu WinRM
Wyłącz HTTP, włącz tylko HTTPS
WinRM na HTTP działa bez szyfrowania (choć transmisja może być zaszyfrowana przy użyciu Kerberos, ale nie wymusza tego). Dlatego zaleca się:
- Wyłączyć listener HTTP na 5985
- Włączyć listener HTTPS na 5986 z certyfikatem
1 |
# Sprawdzenie listenerów<br>winrm enumerate winrm/config/listener<br><br># Usunięcie listenera HTTP<br>winrm delete winrm/config/Listener?Address=*+Transport=HTTP<br><br># Dodanie listenera HTTPS (przykład z Thumbprint certyfikatu)<br>winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname="server.domain.local";CertificateThumbprint="YOUR_CERT_THUMBPRINT"}<br> |
Wymuś uwierzytelnianie Kerberos lub Certificate
Domyślnie WinRM może obsługiwać:
- Kerberos (najbezpieczniejsze w AD)
- NTLM (słabsze)
- Basic (tylko po HTTPS)
Zalecenia:
- Wyłącz NTLM, jeśli to możliwe
- Wyłącz Basic, jeśli to możliwe
- Wymuszaj Kerberos lub klient-certyfikat
1 |
Set-Item -Path WSMan:\localhost\Service\Auth\Basic -Value $false<br>Set-Item -Path WSMan:\localhost\Service\Auth\Kerberos -Value $true<br>Set-Item -Path WSMan:\localhost\Service\Auth\Negotiate -Value $true<br>Set-Item -Path WSMan:\localhost\Service\Auth\Certificate -Value $true<br>Set-Item -Path WSMan:\localhost\Service\Auth\CredSSP -Value $false<br>Set-Item -Path WSMan:\localhost\Service\Auth\CbtHardeningLevel -Value Strict |
Wymuś silne szyfrowanie (TLS 1.2/1.3)
- Wyłącz TLS 1.0 i 1.1 na poziomie systemu
- Upewnij się, że listener HTTPS korzysta z certyfikatu obsługującego min. TLS 1.2
Windows Server 2025 najpewniej domyślnie wyłącza starsze TLS, ale to warto sprawdzić w rejestrze/polityce GPO.
Ogranicz dostęp w firewallu
- Zezwól na port 5986 TYLKO z określonych adresów/IP
- Zablokuj port 5985 całkowicie (chyba że do wyjątkowego wewnętrznego ruchu z ograniczonym IP)
1 |
New-NetFirewallRule -DisplayName "WinRM HTTPS limited" -Direction Inbound -Protocol TCP -LocalPort 5986 -RemoteAddress "10.0.0.0/24" -Action Allow<br> |
Skonfiguruj ograniczoną listę użytkowników
WinRM korzysta z Remote Management Users oraz zasad lokalnych/AD. Ogranicz:
- Usuń zbędnych użytkowników z grupy
Remote Management Users
- Użyj zasad GPO do ograniczenia kto może logować się zdalnie (User Rights Assignment > Allow log on through Remote Desktop Services / Remote Management)
Ustaw limit czasu sesji i ogranicz równoległe sesje
Zmniejsz powierzchnię ataku przez ograniczenie:
1 |
Set-Item -Path WSMan:\localhost\Service\IdleTimeout -Value 60000 # 60s<br>Set-Item -Path WSMan:\localhost\MaxConnections -Value 5 |
Włącz logowanie i audyt
WinRM loguje do kanałów Event Log:
- Microsoft-Windows-WinRM/Operational
- Security (logowanie, jeśli Audit Policy włączone)
Zalecenia:
- Włącz Advanced Audit Policy (Logon, Object Access)
- Regularnie przeglądaj logi
Blokuj nieszyfrowane ruchy w Group Policy
GPO > Computer Configuration > Administrative Templates > Windows Components > Windows Remote Management (WinRM):
- Allow unencrypted traffic: Disabled
- Allow remote server management through WinRM: Enabled (ale z ograniczoną listą adresów)
Unikaj CredSSP jeśli nie jest potrzebny
CredSSP = „double hop”, pozwala na przesyłanie poświadczeń dalej. Może być wektorem ataku Pass-the-Hash.
- Wyłącz CredSSP jeśli nie potrzebujesz
1 |
Set-Item -Path WSMan:\localhost\Service\Auth\CredSSP -Value $false |
Regularne aktualizacje
WinRM jest składnikiem systemowym – aktualizacje Windows Update / WSUS są niezbędne, bo często łatane są:
- Problemy z kanałami szyfrowanymi
- Exploity SOAP/WSMan
- Escalation of privilege
Konfiguracja przez GPO
Polityki do ustawienia:
1 |
Computer Configuration<br> -> Administrative Templates<br> -> Windows Components<br> -> Windows Remote Management (WinRM)<br> -> WinRM Service<br> - Allow remote server management through WinRM<br> - Disallow WinRM from storing RunAs credentials<br> - Allow unencrypted traffic (Disabled)<br> - Specify SSL certificate thumbprint<br> |
Możesz także ograniczyć dostęp w:
1 |
Computer Configuration<br> -> Windows Settings<br> -> Security Settings<br> -> Local Policies<br> -> User Rights Assignment<br> - Allow log on through Remote Desktop Services (lub Remote Management)<br> |
Audyt – co monitorować
- Failed logons via WinRM
- Unexpected new listeners
- Changes to WSMan:\localhost\Service
- High number of sessions
- Log entries for Basic authentication attempts
Security Baselines
Microsoft publikuje Security Baselines dla Windows Server (np. 2022, 2025) – zawierają one rekomendacje dotyczące:
✅ Wyłączenia niepotrzebnych metod auth
✅ Wymuszania szyfrowania
✅ Ograniczania ruchu
Zalecam pobranie Windows Server 2025 Security Baseline (powinien być dostępny w finalnej formie lub preview na stronach MS).
Przykład „minimalnego” hardeningu w PowerShell
1 |
# Wyłącz HTTP<br>winrm delete winrm/config/Listener?Address=*+Transport=HTTP<br><br># Włącz HTTPS (z certyfikatem)<br>winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname="srv.domain.local";CertificateThumbprint="YOUR_CERT_THUMBPRINT"}<br><br># Wyłącz Basic i NTLM<br>Set-Item -Path WSMan:\localhost\Service\Auth\Basic -Value $false<br>Set-Item -Path WSMan:\localhost\Service\Auth\Negotiate -Value $false<br>Set-Item -Path WSMan:\localhost\Service\Auth\Kerberos -Value $true<br>Set-Item -Path WSMan:\localhost\Service\Auth\Certificate -Value $true<br>Set-Item -Path WSMan:\localhost\Service\Auth\CredSSP -Value $false<br><br># Ustawienia sesji<br>Set-Item -Path WSMan:\localhost\Service\IdleTimeout -Value 60000<br>Set-Item -Path WSMan:\localhost\MaxConnections -Value 5<br> |
Podsumowanie
Aby zabezpieczyć WinRM na Windows Server 2025, wyłącz połączenia HTTP i włącz tylko HTTPS z certyfikatem, ogranicz dostęp za pomocą zapory i listy użytkowników oraz wymuś silne uwierzytelnianie (Kerberos lub certyfikaty). Dodatkowo wyłącz NTLM i Basic, ustaw limity sesji oraz włącz audyt i logowanie zdarzeń. Regularne aktualizacje systemu i zgodność z politykami bezpieczeństwa zapewnią minimalną powierzchnię ataku.
Dziękuję Ci, za poświęcony czas na przeczytanie tego artykułu. Jeśli był on dla Ciebie przydatny, to gorąco zachęcam Cię do zapisania się na mój newsletter, jeżeli jeszcze Cię tam nie ma. Proszę Cię także o “polubienie” mojego bloga na Facebooku oraz kanału na YouTube – pomoże mi to dotrzeć do nowych odbiorców. Raz w tygodniu (niedziela punkt 17.00) otrzymasz powiadomienia o nowych artykułach / projektach zanim staną się publiczne. Możesz również pozostawić całkowicie anonimowy pomysł na wpis/nagranie.
Link do formularza tutaj: https://beitadmin.pl/pomysly
Pozostaw również komentarz lub napisz do mnie wiadomość odpisuję na każdą, jeżeli Masz jakieś pytania:).