WinRM Hardening Skill
This skill helps you assess, test, and harden Windows Remote Management (WinRM) configurations for security. WinRM is a Windows service that enables remote management and is a common target for lateral movement attacks.
When to Use This Skill
Use this skill when:
- You need to audit WinRM configurations on Windows systems
- You're hardening Windows systems against lateral movement
- You're testing WinRM security in authorized penetration testing
- You need to understand WinRM attack vectors and mitigations
- You're reviewing Windows remote management security
WinRM Overview
WinRM (Windows Remote Management) is a service that:
- Enables remote management of Windows systems
- Uses WS-Management protocol (HTTP/HTTPS)
- Default ports: 5985 (HTTP), 5986 (HTTPS)
- Can be exploited for lateral movement if misconfigured
Assessment Workflow
1. Check WinRM Service Status
First, determine if WinRM is running and how it's configured:
# Check if WinRM service is running
Get-Service WinRM
# Check WinRM configuration
winrm enumerate winrm/config
# Check listeners
winrm enumerate winrm/config/listener
# Check clients
winrm enumerate winrm/config/client
2. Identify Security Issues
Common WinRM security issues to look for:
| Issue | Risk | Detection |
|---|---|---|
| HTTP enabled (port 5985) | High - unencrypted traffic | winrm enumerate winrm/config/listener |
| No authentication required | Critical | Check winrm/config/service/Auth |
| Basic authentication enabled | High - credentials in transit | Check winrm/config/service/Auth |
| Kerberos delegation enabled | Medium - credential theft risk | Check winrm/config/service |
| Unrestricted firewall rules | High | Check Windows Firewall rules |
| Default credentials | Critical | Test with known weak creds |
3. Test WinRM Connectivity
# Test local WinRM
winrm quickconfig
# Test remote WinRM (requires credentials)
Test-WSMan -ComputerName <target>
# Test with specific credentials
Test-WSMan -ComputerName <target> -Credential (Get-Credential)
Hardening Recommendations
Critical Hardening Steps
Disable HTTP, Enable HTTPS Only
# Remove HTTP listener winrm delete winrm/config/listener?Address=*+Transport=HTTP # Create HTTPS listener with certificate winrm create winrm/config/listener?Address=*+Transport=HTTPS @{ Hostname="<hostname>" CertificateThumbprint="<thumbprint>" }Configure Strong Authentication
# Disable Basic authentication winrm set winrm/config/service/Auth @{Basic="false"} # Enable Kerberos and NTLM only winrm set winrm/config/service/Auth @{Kerberos="true";Negotiate="true";NTLM="true"}Disable Unconstrained Delegation
winrm set winrm/config/service @{AllowUnencrypted="false";MaxEnvelopeSizekb="1024"}Restrict Firewall Access
# Allow only specific source IPs New-NetFirewallRule -DisplayName "WinRM HTTPS" -Direction Inbound -LocalPort 5986 -Protocol TCP -Action Allow -RemoteAddress <trusted-subnet>Enable Logging
winrm set winrm/config/service @{MaxTimeoutms="1800000";EnableWinRMLogging="true"}
Additional Hardening
- Use certificate-based authentication instead of username/password
- Implement Network Level Authentication (NLA) for RDP
- Regularly audit WinRM configurations across the environment
- Monitor WinRM logs for suspicious activity
- Limit WinRM to necessary systems only
Lateral Movement Considerations
WinRM is commonly used for lateral movement. Understand these attack vectors:
Common Attack Patterns
- Credential Reuse: Attackers use stolen credentials to connect via WinRM
- Pass-the-Hash: NTLM hashes can be used with WinRM
- Kerberoasting: Service tickets can be targeted
- Unconstrained Delegation: Can lead to credential theft
Detection Indicators
- Unexpected WinRM connections from unusual sources
- WinRM connections during off-hours
- Multiple failed WinRM authentication attempts
- WinRM connections to sensitive systems
Scripts
Use the bundled scripts for common tasks:
check-winrm-config.ps1- Audit WinRM configurationharden-winrm.ps1- Apply hardening recommendationstest-winrm-connectivity.ps1- Test WinRM connectivity
References
Important Notes
- Authorization Required: Only perform WinRM testing on systems you own or have explicit authorization to test
- Backup Configurations: Always backup WinRM configurations before making changes
- Test in Lab First: Validate hardening changes in a test environment before production
- Document Changes: Keep records of all WinRM configuration changes