Windows Server Härtung: CIS Benchmark, Microsoft Security Baseline und Praxis-Guide
Systematische Härtung von Windows Server 2019/2022 nach CIS Benchmark Level 1/2 und Microsoft Security Baseline: Dienste deaktivieren, SMB v1 abschalten, NTLM einschränken, LAPS v2 für lokale Administrator-Passwörter, PowerShell-Härtung, Windows Firewall, Audit-Policies (auditpol), Protected Users Security Group, Credential Guard, AppLocker und TLS 1.3 erzwingen. Mit priorisierten PowerShell-Skripten und Compliance-Prüfung.
Inhaltsverzeichnis (12 Abschnitte)
Windows Server ist das am häufigsten angegriffene Betriebssystem in Unternehmensumgebungen. Standardinstallationen enthalten zahlreiche unsichere Standardkonfigurationen, die Angreifern laterale Bewegung und Privilege Escalation erleichtern. Ungepatchte und schlecht konfigurierte Windows-Server sind die häufigste Ursache für laterale Bewegungen in Ransomware-Kampagnen. Dieser Guide führt durch die systematische Härtung nach CIS Benchmark und Microsoft Security Baseline.
Grundprinzipien und Härtungs-Prioritäten
Defense in Depth für Windows Server:
- Minimalprinzip: nur nötige Dienste, nötige Software
- Least Privilege: alle Accounts mit minimalen Rechten
- Audit: alle kritischen Ereignisse protokollieren
- Segmentierung: Server in eigene VLANs
- Patch: zeitnah einspielen
- Überwachung: EDR + SIEM
CIS Benchmark Levels:
- Level 1: Minimale Einschränkung, für die meisten Umgebungen
- Level 2: Höhere Sicherheit, kann Kompatibilität einschränken
- STIG: US-Regierung, sehr restriktiv
Windows Server Härtungs-Prioritäten:
Kritisch (sofort umsetzen):
□ Windows Updates aktuell (kritische Patches innerhalb 48h)
□ Lokaler Administrator deaktiviert oder LAPS aktiviert
□ SMB v1 deaktiviert (EternalBlue/WannaCry!)
□ NTLM-Authentifizierung einschränken (Pass-the-Hash)
□ Nicht benötigte Dienste und Rollen deinstallieren
□ Windows Defender aktiviert und aktuell
□ Passwort-Richtlinien (14+ Zeichen, Komplexität)
Hoch (innerhalb einer Woche):
□ Windows Firewall mit Host-Based-Rules
□ Audit-Logging vollständig konfigurieren
□ RDP-Härtung (NLA, TLS, Port)
□ PowerShell Logging aktivieren
□ Credential Guard aktivieren (Hyper-V erforderlich)
□ AppLocker / WDAC (Application Allowlisting)
Mittel (innerhalb eines Monats):
□ CIS Benchmark vollständig umsetzen
□ Microsoft Security Compliance Toolkit GPOs
□ Protected Users Security Group
□ TLS 1.3 erzwingen, ältere Versionen deaktivieren
□ SMB Signing erzwingen
Schritt 1: Windows Security Baseline
# Microsoft Security Baseline herunterladen und anwenden
# https://www.microsoft.com/en-us/download/details.aspx?id=55319
# Baseline importieren (LGPO.exe erforderlich)
Import-Module PolicyFileEditor
# Lokale Sicherheitsrichtlinien prüfen
secedit /export /cfg C:\sec-policy.cfg /areas SECURITYPOLICY
notepad C:\sec-policy.cfg
# Wichtige Einstellungen in sec-policy.cfg:
# MinimumPasswordLength = 14
# PasswordComplexity = 1
# MaximumPasswordAge = 90
# LockoutBadCount = 5
# LockoutDuration = 30
# LSAAnonymousNameLookup = 0
Schritt 2: Dienste und Rollen deaktivieren (Minimalprinzip)
# Nicht benötigte Features deinstallieren:
Remove-WindowsFeature Telnet-Client # Telnet: immer entfernen!
Remove-WindowsFeature TFTP-Client
Remove-WindowsFeature SNMP-Service # SNMP v1/v2 unsicher
Remove-WindowsFeature Windows-Search
Remove-WindowsFeature Fax
Remove-WindowsFeature XPS-Viewer
Remove-WindowsFeature SMB1Protocol # SMB v1 IMMER entfernen!
# Gefährliche/unnötige Dienste deaktivieren
$servicesToDisable = @(
"Browser", # Computer Browser (SMB-Enumeration)
"SSDPSRV", # SSDP Discovery (UPnP-Schwachstellen)
"upnphost", # UPnP Device Host
"RemoteRegistry", # Remote Registry (KEIN Remote-Registry-Zugriff!)
"Spooler", # Print Spooler (PrintNightmare! - falls kein Drucker)
"Fax", # Fax-Dienst
"XblAuthManager", # Xbox Live Auth
"WMPNetworkSvc", # Windows Media Player Network
"TapiSrv", # Telephony (außer wenn VoIP!)
"WinRM" # WinRM - nur wenn PowerShell-Remoting nicht nötig
)
foreach ($service in $servicesToDisable) {
if (Get-Service -Name $service -ErrorAction SilentlyContinue) {
Set-Service -Name $service -StartupType Disabled
Stop-Service -Name $service -Force -ErrorAction SilentlyContinue
Write-Host "Disabled: $service"
}
}
# Print Spooler auf DCs IMMER deaktivieren (PrintNightmare)
# CVE-2021-1675, CVE-2021-34527 - alle Windows-Versionen betroffen!
Schritt 3: SMB und Legacy-Protokolle
# SMBv1 deaktivieren (EternalBlue nutzt SMBv1!)
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force
Disable-WindowsOptionalFeature -Online -FeatureName "SMB1Protocol" -NoRestart
# SMBv1 Client deaktivieren
sc.exe config mrxsmb10 start= disabled
# SMB Signing erzwingen (verhindert NTLM-Relay-Angriffe!)
Set-SmbServerConfiguration -RequireSecuritySignature $true -Force
Set-SmbClientConfiguration -RequireSecuritySignature $true -Force
# SMB-Verschlüsselung aktivieren (SMBv3)
Set-SmbServerConfiguration -EncryptData $true -Force
# LAN Manager / NTLM Einschränkungen
# Network Security: LAN Manager authentication level
# = "Send NTLMv2 response only; refuse LM & NTLM" (Wert 5)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" `
-Name "LmCompatibilityLevel" -Value 5 -Type DWord
# NTLM-Audit aktivieren (bevor Einschränkung!):
Set-ItemProperty `
-Path "HKLM:\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" `
-Name "AuditNtlmInDomain" `
-Value 7 # Alle NTLM-Authentifizierungen loggen
# NTLM-Traffic in EventLog 8004:
Get-WinEvent -LogName "Microsoft-Windows-NTLM/Operational" |
Where-Object {$_.Id -eq 8004} |
Select-Object TimeCreated, Message
Schritt 4: PowerShell-Härtung
# PowerShell Constrained Language Mode
# Verhindert: System.Reflection, Add-Type, .NET-Interop
[System.Environment]::SetEnvironmentVariable("__PSLockdownPolicy", "4", "Machine")
# PowerShell Script Block Logging aktivieren (Audit)
$regPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging"
New-Item -Path $regPath -Force
Set-ItemProperty -Path $regPath -Name "EnableScriptBlockLogging" -Value 1
# Module Logging
$regPath2 = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ModuleLogging"
New-Item -Path $regPath2 -Force
Set-ItemProperty -Path $regPath2 -Name "EnableModuleLogging" -Value 1
Set-ItemProperty -Path $regPath2 -Name "ModuleNames" -Value @("*") -Type MultiString
# PowerShell v2 deaktivieren (umgeht Logging!)
Disable-WindowsOptionalFeature -Online -FeatureName MicrosoftWindowsPowerShellV2Root -NoRestart
# Transcription aktivieren (alle PowerShell-Ausgaben loggen)
$regPath3 = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\Transcription"
New-Item -Path $regPath3 -Force
Set-ItemProperty -Path $regPath3 -Name "EnableTranscripting" -Value 1
Set-ItemProperty -Path $regPath3 -Name "OutputDirectory" -Value "C:\PowerShellLogs"
Schritt 5: Audit-Richtlinien (SIEM-Grundlage)
# Alle relevanten Kategorien aktivieren
auditpol /set /subcategory:"Logon" /success:enable /failure:enable
auditpol /set /subcategory:"Account Lockout" /success:enable /failure:enable
auditpol /set /subcategory:"Logoff" /success:enable
auditpol /set /subcategory:"Process Creation" /success:enable /failure:enable
auditpol /set /subcategory:"Process Termination" /success:enable
auditpol /set /subcategory:"Security Group Management" /success:enable /failure:enable
auditpol /set /subcategory:"User Account Management" /success:enable /failure:enable
auditpol /set /subcategory:"Sensitive Privilege Use" /success:enable /failure:enable
auditpol /set /subcategory:"Object Access" /success:enable /failure:enable
auditpol /set /subcategory:"Special Logon" /success:enable
auditpol /set /subcategory:"Kerberos Authentication Service" /success:enable /failure:enable
auditpol /set /subcategory:"Credential Validation" /success:enable /failure:enable
Wichtige Event-IDs für SIEM:
4624: Erfolgreicher Logon (Typ 3=Netzwerk, Typ 10=Remote, Typ 4=Batch)
4625: Fehlgeschlagener Logon (Brute Force!)
4648: Logon mit expliziten Credentials (Pass-the-Hash Indikator)
4672: Admin-Anmeldung (Special Privileges)
4688: Prozess erstellt (Command Execution Logging)
4698: Scheduled Task erstellt (Persistence!)
4720: Benutzerkonto erstellt (Backdoor User!)
4728/4732: Member zu Gruppe hinzugefügt (Admin-Gruppen!)
4768: Kerberos TGT angefordert
4769: Kerberos Service Ticket angefordert
4771: Kerberos-Vorauthentifizierung fehlgeschlagen (AS-REP Roasting)
4776: NTLM-Authentifizierung (Pass-the-Hash Detection)
7045: Neuer Dienst installiert (Malware!)
4103/4104: PowerShell-Module/Script Block Logging
Schritt 6: Windows Firewall konfigurieren
# Windows Defender Firewall aktivieren (alle Profile)
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True
# Default Policy: DENY ALL → explizit ALLOW
Set-NetFirewallProfile -Profile Domain,Public,Private `
-DefaultInboundAction Block -DefaultOutboundAction Allow `
-NotifyOnListen True -AllowLocalFirewallRules False `
-AllowLocalIPsecRules False
# Nötige eingehende Regeln (Beispiel Mitglied-Server)
New-NetFirewallRule -DisplayName "RDP (TCP)" -Direction Inbound `
-Protocol TCP -LocalPort 3389 -Action Allow -RemoteAddress "10.10.10.0/24"
# Nur aus Admin-VLAN!
New-NetFirewallRule -DisplayName "WinRM HTTPS (TCP)" -Direction Inbound `
-Protocol TCP -LocalPort 5986 -Action Allow -RemoteAddress "10.10.10.0/24"
# Nur aus Management-VLAN!
# Alle unbenutzten Dienste blockieren
New-NetFirewallRule -DisplayName "Block SMB Inbound" -Direction Inbound `
-Protocol TCP -LocalPort 445 -Action Block
# Ausgehende Verbindungen einschränken (Egress Filtering)
New-NetFirewallRule -DisplayName "Block Telnet" -Direction Outbound `
-Protocol TCP -RemotePort 23 -Action Block
New-NetFirewallRule -DisplayName "Block Tor Ports" -Direction Outbound `
-Protocol TCP -RemotePort 9050,9001 -Action Block
Schritt 7: Protected Users und Credential Guard
# Protected Users Gruppe (verhindert NTLM, Delegation, etc.)
# Für alle privilegierten Konten empfohlen!
Add-ADGroupMember -Identity "Protected Users" -Members "DomainAdmin1","DomainAdmin2"
# Protected Users verhindert automatisch:
# → NTLM-Authentifizierung
# → DES oder RC4 Kerberos-Encryption
# → Unconstrained Delegation
# → Credential Caching (kein NTLM-Hash auf Disk)
# → TGT nur 4h gültig (statt 10h)
# Achtung: Service Accounts die NTLM brauchen NICHT in Protected Users!
# Credential Guard aktivieren (Hyper-V Isolation für LSASS)
# Verhindert LSASS-Dumping / Mimikatz
# Voraussetzung: UEFI, Secure Boot, Hyper-V
$path = "HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard"
Set-ItemProperty -Path $path -Name "EnableVirtualizationBasedSecurity" -Value 1
Set-ItemProperty -Path $path -Name "RequirePlatformSecurityFeatures" -Value 1
Set-ItemProperty -Path $path -Name "LsaCfgFlags" -Value 1 # Credential Guard
# Credential Guard Status prüfen
$devGuard = Get-CimInstance -ClassName Win32_DeviceGuard `
-Namespace root\Microsoft\Windows\DeviceGuard
$devGuard.SecurityServicesRunning
# 1 = Credential Guard aktiv
Schritt 8: LAPS v2 (Local Administrator Password Solution)
# LAPS v2 (in Windows Server 2019/2022 integriert)
# Problem ohne LAPS: alle Maschinen im Domain: gleicher lokaler Admin + gleiches Passwort!
# Pass-the-Hash: ein System kompromittiert → alle anderen auch!
# LAPS-Schema für AD erweitern
Update-LapsADSchema
# LAPS-Berechtigungen setzen (IT-Admins dürfen Passwort lesen)
Set-LapsADComputerSelfPermission -Identity "OU=Servers,DC=firma,DC=de"
Set-LapsADReadPasswordPermission -Identity "OU=Servers,DC=firma,DC=de" `
-AllowedPrincipals "FIRMA\IT-Admins"
# GPO: LAPS aktivieren
# Computer Config → Admin Templates → System → LAPS
# "Configure password backup directory" = Active Directory
# "Password complexity requirements" = Large letters + Small letters + Numbers + Special
# "Password length" = 16 (minimum!)
# "Password age (days)" = 30
# LAPS-Passwort abrufen (im Notfall)
Get-LapsADPassword -Identity "SERVER01" -AsPlainText
# Rotation erzwingen
Reset-LapsPassword -Identity "SERVER01"
# Lokalen Administrator umbenennen (verschleiert Standard-Kontonamen):
Rename-LocalUser -Name "Administrator" -NewName "adm-srv-01"
# Deaktivieren wenn LAPS aktiv:
Disable-LocalUser -Name "Administrator"
TLS und Kryptographie
# Unsichere Protokolle deaktivieren:
# SSL 2.0 deaktivieren:
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server"
Set-ItemProperty -Path "HKLM:\...\SSL 2.0\Server" -Name "Enabled" -Value 0
# SSL 3.0 deaktivieren:
New-Item -Path "HKLM:\...\SSL 3.0\Server"
Set-ItemProperty -Path "HKLM:\...\SSL 3.0\Server" -Name "Enabled" -Value 0
# TLS 1.0 deaktivieren (Vorsicht: ältere Anwendungen!):
New-Item -Path "HKLM:\...\TLS 1.0\Server"
Set-ItemProperty -Path "HKLM:\...\TLS 1.0\Server" -Name "Enabled" -Value 0
# TLS 1.1 deaktivieren:
New-Item -Path "HKLM:\...\TLS 1.1\Server"
Set-ItemProperty -Path "HKLM:\...\TLS 1.1\Server" -Name "Enabled" -Value 0
# TLS 1.2 und 1.3: ENABLED
New-Item -Path "HKLM:\...\TLS 1.2\Server"
Set-ItemProperty -Path "HKLM:\...\TLS 1.2\Server" -Name "Enabled" -Value 1
New-Item -Path "HKLM:\...\TLS 1.3\Server"
Set-ItemProperty -Path "HKLM:\...\TLS 1.3\Server" -Name "Enabled" -Value 1
# Tool: IISCrypto (GUI-Alternative, einfacher):
# nartac.com/Products/IISCrypto → "Best Practices" Template
# RC4, DES, 3DES: explizit DEAKTIVIEREN
Disable-TlsCipherSuite -Name "TLS_RSA_WITH_RC4_128_SHA"
Disable-TlsCipherSuite -Name "TLS_RSA_WITH_3DES_EDE_CBC_SHA"
CIS Benchmark Compliance prüfen
# Manuelle Kontrollen (wichtigste CIS L1 Checks):
$checks = @(
@{Name="SMBv1 disabled"; Test={
-not (Get-SmbServerConfiguration).EnableSMB1Protocol
}},
@{Name="NTLMv2 only (LAN Man Level = 5)"; Test={
(Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa").LmCompatibilityLevel -eq 5
}},
@{Name="Print Spooler disabled"; Test={
(Get-Service Spooler).Status -eq "Stopped"
}},
@{Name="Guest Account disabled"; Test={
(Get-LocalUser -Name "Guest").Enabled -eq $false
}},
@{Name="Remote Registry disabled"; Test={
(Get-Service RemoteRegistry).StartType -eq "Disabled"
}}
)
foreach ($check in $checks) {
$result = & $check.Test
$status = if ($result) {"PASS"} else {"FAIL"}
Write-Host "$status | $($check.Name)"
}
Typische Härtungs-Reihenfolge
Priorität 1 - Sofort (verhindert häufigste Angriffe):
✓ SMBv1 deaktivieren
✓ Print Spooler auf DCs deaktivieren
✓ NTLM Level auf 5 setzen
✓ Local Admin-Passwort (LAPS) aktivieren
✓ Audit-Richtlinien aktivieren
Priorität 2 - Innerhalb 1 Woche:
✓ Credential Guard aktivieren
✓ Protected Users für Admins
✓ PowerShell-Logging aktivieren
✓ Unnötige Dienste deaktivieren
✓ Windows Firewall konfigurieren
Priorität 3 - Innerhalb 1 Monat:
✓ CIS Benchmark vollständig umsetzen
✓ AppLocker / WDAC konfigurieren
✓ JEA (Just Enough Administration) für Remote-Management
✓ Privileged Access Workstations (PAW) einführen
✓ SIEM-Integration für kritische Events
✓ TLS 1.0/1.1 deaktivieren
✓ SMB Signing erzwingen Quellen & Referenzen
- [1] CIS Microsoft Windows Server 2022 Benchmark - CIS
- [2] BSI SiSyPHuS: Sicherheitsstudie zum Windows 10 Betriebssystem - BSI
- [3] Microsoft Security Baseline - Microsoft
Fragen zu diesem Thema?
Unsere Experten beraten Sie kostenlos und unverbindlich.
Über den Autor
Geschäftsführender Gesellschafter der AWARE7 GmbH mit langjähriger Expertise in Informationssicherheit, Penetrationstesting und IT-Risikomanagement. Absolvent des Masterstudiengangs Internet-Sicherheit an der Westfälischen Hochschule (if(is), Prof. Norbert Pohlmann). Bestseller-Autor im Wiley-VCH Verlag und Lehrbeauftragter der ASW-Akademie. Einschätzungen zu Cybersecurity und digitaler Souveränität erschienen u.a. in Welt am Sonntag, WDR, Deutschlandfunk und Handelsblatt.
10 Publikationen
- Einsatz von elektronischer Verschlüsselung - Hemmnisse für die Wirtschaft (2018)
- Kompass IT-Verschlüsselung - Orientierungshilfen für KMU (2018)
- IT Security Day 2025 - Live Hacking: KI in der Cybersicherheit (2025)
- Live Hacking - Credential Stuffing: Finanzrisiken jenseits Ransomware (2025)
- Keynote: Live Hacking Show - Ein Blick in die Welt der Cyberkriminalität (2025)
- Analyse von Angriffsflächen bei Shared-Hosting-Anbietern (2024)
- Gänsehaut garantiert: Die schaurigsten Funde aus dem Leben eines Pentesters (2022)
- IT Security Zertifizierungen — CISSP, T.I.S.P. & Co (Live-Webinar) (2023)
- Sicherheitsforum Online-Banking — Live Hacking (2021)
- Nipster im Netz und das Ende der Kreidezeit (2017)