Absicherung von Remotedesktopzugängen

Remotedesktop ist für viele Nutzer und Administratoren unverzichtbar für die tägliche Arbeit geworden, da es den weltweiten Zugriff auf den Windows-Desktop einschließlich aller gestarteten Anwendungen ermöglicht.

Um so wichtiger ist es, den Zugriff auf den vom Remotedesktopdienst benutzten TCP-Port (Standard 3389) abzusichern.

Dies können Sie mit den Bordmitteln des Betriebssystems (Windows Firewall, Benutzerrechte, RDP-ACLs, IPSec-Schutz) und/oder Zusatzsoftware (VPN, Remotedesktop-Gateway) erreichen.

Achtung! Die Voraussetzung für ein sicheres System ist die Installation der aktuellen Windows-Sicherheitsupdates per Windows Update!

Welche Methode der Absicherung ist für mich geeignet?

Für alle Nutzer geeignet:

Für Administratoren geeignet:

  • Anlegen eines RDP-Ports für administrative Zugänge
  • Deaktivieren  der Switch-User-Funktionalitäten (nur notwendig auf gemeinschaftlich genutzten Systemen, wie z.B. Pool-PCs oder Anwendungsservern)
  • Nutzung von IPSec für Verschlüsselung und Integrität

Auswirkungen der Schutzmaßnahmen auf die verschiedenen RDP-Angriffsvektoren

Die nachfolgende Tabelle stellt in Kurzform die Wirksamkeit der einzelnen Schutzmaßnahmen in Bezug auf das Unterbinden der verschiedenen RDP-Angriffsvektoren dar.

Schutzmaßnahme Weltweite anonyme Verbindungs-aufnahme (z.B. nmap-Scans) Weltweite Passwortangriffe per RDP Weltweite administrative Zugriffe per RDP Weltweite man-in-the-middle Angriffe
Einschränkung der Reichweite des Remotedesktop-TCP-Ports unterbunden unterbunden unterbunden unterbunden
Härten des RDP-Protokolls möglich möglich möglich unterbunden
Unterbinden administrativer Anmeldungen per Remotedesktop möglich möglich unterbunden möglich
Anlegen eines RDP-Ports für administrative Zugänge (mit Einschränkung der Reichweite auf vertrauenswürdige IP-Adressen) unterbunden unterbunden unterbunden unterbunden
Nutzung von IPSec für Verschlüsselung und Integrität unterbunden unterbunden unterbunden unterbunden
Nutzung von VPN-Servern unterbunden möglich, nach erfolgter VPN-Anmeldung möglich, nach erfolgter VPN-Anmeldung möglich, nach erfolgter VPN-Anmeldung
Nutzung von Remotedesktop-Gatewayservern unterbunden unterbunden unterbunden unterbunden

Absicherung mit Bordmitteln

Einschränkung der Reichweite des Remotedesktop-TCP-Ports

Die einfachste Art der Absicherung von Remotedesktopzugängen ist die Einschränkung der Reichweite des Remotedesktop-TCP-Ports auf vertrauenswürdige IP-Adressen per Windows Firewall, entweder per grafischer Oberfläche (GUI) oder per Kommandozeile. Dies ist ab Windows XP möglich.

Die Batchdatei "Restrict_RDP.bat", beschränkt den Zugriff auf den Remotedesktop-TCP-Port 3389 auf das Subnetz 192.168.0.0/16. Die Batchdatei "Restrict_RDP.bat" ist für administrativer Nutzer ab Windows Vista/Windows Server 2008 nutzbar.

Laden Sie sich die Datei Restrict_RDP.bat herunter, passen Sie die Reichweite des Remotedesktop-RDP-Ports über die Variable RDIPs Ihrer Umgebung an und führen Sie die veränderte Batchdatei "Restrict_RDP.bat" aus. 

Dazu gehen Sie folgt vor:

  1. Laden Sie sich die Datei Restrict_RDP.bat herunter, indem Sie auf folgenden Link klicken Restrict_RDP.bat und speichern Sie die Datei.
     
  2. Laden Sie die gespeicherte Datei "Restrict_RDP.bat" in einen Editor.
     
  3. Suchen Sie die Zeile
     
    set RDIPs=192.168.0.0/16
     
  4. Tragen Sie kommagetrennt die IP-Adressen und/oder Subnetze in CIDR-Schreibweise (http://de.wikipedia.org/wiki/Classless_Inter-Domain_Routing) ein, welche auf den Remotedesktop-TCP-Port zugreifen dürfen, z.B.:
     
    set RDIPs=192.168.3.4/32,10.0.110.0/24
     
  5. Öffnen Sie eine Kommandozeile mit administrativen Rechten, indem Sie die rechte Maustaste auf den Shortcut "Eingabeaufforderung" unter "START -> Alle Programme -> Zubehör" drücken und anschließend den Befehl "Als Administrator ausführen" auswählen.
     
  6. Führen Sie die Datei Restrict_RDP.bat aus.
     

Falls es eventuell nicht sinnvoll ist, den Remotedesktop-TCP-Port auf vertrauenswürdige IP-Adressen einzuschränken, wie z.B. auf Arbeitsplatz-PCs oder zentralen Remotedesktopservern, dann sollten Sie nachstehende Möglichkeiten der Absicherung nutzen.

Härten des RDP-Protokolls

Führen Sie jeweils folgendes Kommando als Administrator aus. Die entsprechende Einstellung ist anschließend für jede neue RDP-Sitzung aktiviert.

Erzwingen der Verschlüsselung per TLS

  • reg.exe add  "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v SecurityLayer /t reg_dword /d 0x2 /f

Es ist auch möglich diese Einstellungen per Gruppenrichtline vorzunehmen, s. dazu
https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc781085(v=ws.10)

Erzwingen  aktualisierter RDP-Clients für  Sicherheitsproblem CVE-2018-0886 des CredSSP-Protokolls

  • reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /v AllowEncryptionOracle /t REG_DWORD /d 0x0 /f 

Es ist auch möglich diese Einstellungen per Gruppenrichtline vorzunehmen, s. dazu
https://support.microsoft.com/en-us/help/4093492/credssp-updates-for-cve-2018-0886-march-13-2018 

Achtung! Linux-Clients müssen anschließend auf Remmina 1.4.3 oder höher umsteigen, s . dazu
https://www.itmz.uni-rostock.de/onlinedienste/anwendungsserver-des-itmz/downloads/ 

Alle Mac- und Windows-Clients sollten mit aktuellen RDP-Clients problemlos arbeiten können.

Um die Standardeineinstellungen wiederherzustellen, führen Sie folgende Kommandos an einer administrativen Kommandozeile aus:

  • reg.exe add  "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v SecurityLayer /t reg_dword /d 0x1 /f
  • reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /v AllowEncryptionOracle /t REG_DWORD /d 0x1 /f 

Referenz:

Absichern der administrativen Remotedeskzugänge

Um sicherzustellen, dass trotz des Besitzes eines Kontos (z.B. Kenntnis von administrativem Nutzerkennzeichen und Passwort) keine Anmeldung per Remotedesktop erfolgen kann, gibt es folgende Möglichkeiten:

  • Unterbinden administrativer Anmeldungen per Remotedesktop mittels Nutzerrechten

    Konfigurieren Sie das Nutzerrecht "Anmelden über Remotedesktopdienste verweigern" über Gruppenrichtlinien oder das Kommadozeilentool ntrigths.exe aus dem Windows Server 2003 Resource Kit (Download unter http://www.microsoft.com/en-us/download/details.aspx?id=17657)
     
    Um allen lokalen Administratoren die Anmeldung per Remotedesktop zu verbieten, führen Sie folgendes Kommando in einer administrativen Kommandozeile aus:

    ntrights.exe -u VORDEFINIERT\Administratoren +r SeDenyRemoteInteractiveLogonRight
  • Unterbinden administrativer Anmeldungen per Remotedesktop mittels RDP-ACLs
     
    Folgende Kommandos setzen einen Deny-Zugriffseintrag (Deny ACE) für die Gruppe Administratoren auf die Standardremotedesktopverbindungen (RDP-Tcp) des Systems.
     
    Führen Sie folgende Kommandos in einer administrativen Kommandozeile aus:
     
    wmic.exe RDACCOUNT where "(TerminalName='RDP-Tcp') and AccountName='VORDEFINIERT\\Administratoren'" CALL ModifyPermissions 0,5
    wmic.exe RDACCOUNT where "(TerminalName='Console') and AccountName='VORDEFINIERT\\Administratoren'" CALL ModifyPermissions 0,5

      
    Die Standard-RDP-ACLs lassen durch folgende Kommandos an einer administrativen Kommandozeile wiederherstellen:
     
    wmic.exe RDPermissions where "(TerminalName='RDP-Tcp')" call RestoreDefaults
    wmic.exe RDPermissions where "(TerminalName='Console')" call RestoreDefaults
        

    Mit folgendem Kommando lassen sich die Zugriffsrechte der RDP-Zugänge anzeigen:
      
    wmic.exe RDPermissions get TerminalName,StringSecurityDescriptor
     


    Referenz:
    https://learn.microsoft.com/en-US/troubleshoot/windows-server/remote/add-user-services-rdp-permissions​​​​​​​ 
        
  • Anlegen eines RDP-Ports für administrative Zugänge

    Darüber hinaus kann es sinnvoll sein, einen zusätzlichen RDP-Port für Remotedesktopzugriffe zu öffnen, um über diesen Port administrative Zugänge zu ermöglichen. Die Reichweite dieses zusätzlichen TCP-Ports schränken Sie per Windows Firewall auf vertrauenswürdige IP-Adressen ein.

    Führen Sie dazu folgende Kommandos in einer administrativen Kommandozeile aus:

    reg.exe save "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" %TEMP%\RDP-Tcp.hiv /y
    reg.exe add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Adm" /f
    reg.exe restore "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Adm" %TEMP%\RDP-Tcp.hiv
    reg.exe add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Adm" /v PortNumber /t REG_DWORD /d 3390 /f
    REM ******************************************************************
    REM Restart Remote Desktop Services or reboot system.
    REM ******************************************************************
    wmic.exe RDPermissions where "(TerminalName='RDP-Adm')" call RestoreDefaults

     

    Anschließend ist es möglich, über den TCP-Port 3390 auf den Remotedesktopdienst zu zugreifen, wenn der TCP-Port 3390 zusätzlich im Windows Firewall freigegeben wurde.

    Referenz:

  • Deaktivieren  der Switch-User-Funktionalitäten

    Damit ein kompromittiertes administratives Konto nicht weltweit per RDP-Zugang benutzt werden kann, ist es außerdem nötig, entweder alle Switch-User-Funktionalitäten von Windows für nicht-administrative Nutzer abzuschalten oder für administrative Nutzer zu unterbinden, indem das für ein Switch-User benötige Benutzerrecht "Allow log on locally" per Benutzerrecht "Deny log on locally" administrativen Konten verweigert wird. Dies betrifft das Kommandozeilentool runas.exe und die UAC-Switch-User-Funktionalitäten wie z.B. "Als Administrator ausführen".

    Führen Sie dazu folgende Kommandos in einer administrativen Kommandozeile aus, um

    a) runas.exe zu deaktivieren:
    sc.exe config seclogon start= disabled
    sc.exe stop seclogon

    und

    b) die UAC-Switch-User-Funktionalitäten für alle nicht-administrative Nutzer zu deaktivieren:
    reg.exe add  "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"
    /v ConsentPromptBehaviorUser /t REG_DWORD /d 0 /f
     

Nutzung von IPSec für Verschlüsselung und Integrität

Um den Zugriff auf Remotedesktop-TCP-Port nur vertrauenswürdigen Systemen unabhängig von der jeweiligen IP-Adresse des RDP-Clients zu erlauben, kann IPSec benutzt werden. Dazu wird mittels IPSec die anonyme Verbindungsaufnahme unterbunden und entweder ein Password (PSK - Preshared Key) oder Zertifikate überprüft.

Der preshared key-basierte IPSec-Schutz ist verglichen mit dem zertifikats-basierten IPSec-Schutz unsicherer, aber um ein Vielfaches sicherer als einen TCP-Port ohne IPSec-Schutz zu öffnen, da durch den IPSec-Schutz in jedem Fall die anonyme Verbindungsaufnahme unterbunden wird.

Vor allem TCP-Ports, welche internetweit geöffnet werden müssen, lassen sich per IPSec wirksam ohne den Einsatz von zusätzlichen Mitteln schützen.

Folgende UDP-Ports müssen weltweit im Firewall geöffnet werden, damit der IPSec-Schutz funktioniert: 

  • 500
  • 4500

IPSec-Schutz mit einem Preshared Key

Dazu muß jeweils auf dem Remotedesktopserver (z.B. Arbeitsplatz-PC, Anwendungsserver usw.) und dem zugreifenden System (z.B. PC zu Hause, Laptop unterwegs) IPSec konfiguriert werden, da sowohl auf dem Server als auch auf Client der preshared Key und die Verschlüsselungs- und Integritätsprotokolle aktiviert werden müssen, bevor eine IPSec-gesicherte Verbindung hergestellt werden kann.

Die Konfiguration kann per GUI oder Kommandozeile erfolgen.

Nachfolgend finden Sie zwei Beispielbatchdateien, welche Sie sich herunterladen, anpassen und anschließend für die IPSec-Konfiguration des Servers und des Clients verwenden können:

Folgende Schritte sind für eine erfolgreiche Konfiguration des IPsec-Schutzes zwischen zwei Systemen notwendig.

  1. Anpassen der Variablen PSK und TrustedIPs der Batchdateien.
  2. Ausführen der Kommandos auf dem RDP-Client

    IPSec_RDPClient.bat CreatePolicy
    IPSec_RDPClient.bat EnablePolicy
     
  3. Ausführen der Kommandos auf dem RDP-Server

    IPSec_RDPServer.bat CreatePolicy
    IPSec_RDPServer.bat EnablePolicy

Ausführlichere Informationen dazu finden Sie in den nächsten Zeilen.

Systemvoraussetzungen

  • Windows Vista/Server 2008 oder höher. 

Ausführen der Batchdateien

Die beiden Batchdateien müssen jeweils auf dem Remotedesktopserver und auf dem Remotedesktopclient ausgeführt werden, damit die dazugehörigen IPSec-Policies konfiguriert werden können.

  • IPSec_RDPServer.bat - Batchdatei zur Ausführung auf dem Remotedesktopserver
  • IPSec_RDPClient.bat  - Batchdatei zur Ausführung auf dem Remotedesktopclient

Parameter der Batchdateien

Anlegen der IPSec-Policy zum Schutz des RDP-TCP-Ports

  • Batchdateiname.bat CreatePolicy

Löschen der IPSec-Policy zum Schutz des RDP-TCP-Ports

  • Batchdateiname.bat DeletePolicy

Aktivieren der IPSec-Policy zum Schutz des RDP-TCP-Ports

  • Batchdateiname.bat EnablePolicy

Desktivieren der IPSec-Policy zum Schutz des RDP-TCP-Ports

  • Batchdateiname.bat DisablePolicy

Anpassen der Batchdateien

Beide Batchdateien lassen mittels folgender Variablen anpassen, indem Sie die Dateien direkt verändern.

Anpassbare Variablen der Batchdatei

Variablenname Mögliche Werte Standard Bedeutung
PSK beliebige Zeichenkette wj+fQ3MuXOE_mKRi_KoS8UBUT]jbtZBe*HC#t#$?;BSUWu.%TB2H;)8:hjOPVx(+b>^{XyK/*&CQ]nz%oMk&@2(#x[UyWD0ggo] Preshared Key für IPsec-Schutz
TrustedIPs Leer (TrustedIPs=) oder Kommagetrennte Liste von IP-Adressen oder Subnetzen in CIDR-Format 192.168.1.0/24,192.168.3.4/32 Liste von vertrauenswürdigen IP-Adressen oder Subnetzen

Generierung eines Preshared Keys

Führen Sie folgende Kommandos in einer Windows-Powershell im Full Language Mode nacheinander aus:

[Reflection.Assembly]::LoadWithPartialName(“System.Web”) > $null
[System.Web.Security.Membership]::GeneratePassword(100,5)

Diese Befehle erzeugen ein Zufallspasswort mit einer Länge von 100 Zeichen und mindestens 5 Sonderzeichen. 

Referenz:

 

IPSec-Konfiguration des Servers (z.B. Arbeitsplatz-PC, Anwendungsserver usw.)  

Laden Sie sich die Datei IPSec_RDPServer.bat herunter, passen Sie die Datei Ihrer Umgebung an und führen Sie die veränderte Batchdatei "IPSec_RDPServer.bat" aus. 

Dazu gehen Sie folgt vor:

  1. Laden Sie sich die Datei IPSec_RDPServer.bat herunter, indem Sie auf folgenden Link klicken IPSec_RDPServer.bat und speichern Sie die Datei.
     
  2. Laden Sie die gespeicherte Datei "IPSec_RDPServer.bat" in einen Editor.
     
  3. Passen Sie die Konfiguration entsprechend Ihrer Bedürfnisse an, indem Sie die Variablen PSK und TrustedIPs entsprechend der Vorgaben der Tabelle "Anpassbare Variablen der Batchdatei" anpassen.
      
  4. Öffnen Sie eine Kommandozeile mit administrativen Rechten, indem Sie die rechte Maustaste auf den Shortcut "Eingabeaufforderung" unter "START -> Alle Programme -> Zubehör" drücken und anschließend den Befehl "Als Administrator ausführen" auswählen.
     
  5. Führen Sie folgende Kommandos aus
     
    IPSec_RDPServer.bat CreatePolicy
    IPSec_RDPServer.bat EnablePolicy 

IPSec-Konfiguration des Clients (z. B. PC zu Hause, Laptop unterwegs)

Laden Sie sich die Datei IPSec_RDPClient.bat herunter, passen Sie die Datei Ihrer Umgebung an und führen Sie die veränderte Batchdatei "IPSec_RDPServer.bat" aus. 

Dazu gehen Sie folgt vor:

  1. Laden Sie sich die Datei IPSec_RDPClient.bat herunter, indem Sie auf folgenden Link klicken IPSec_RDPClient.bat und speichern Sie die Datei.
     
  2. Laden Sie die gespeicherte Datei "IPSec_RDPClient.bat" in einen Editor.
     
  3. Passen Sie die Konfiguration entsprechend Ihrer Bedürfnisse an, indem Sie die Variablen PSK und TrustedIPs entsprechend der Vorgaben der Tabelle "Anpassbare Variablen der Batchdatei" anpassen.
      
  4. Öffnen Sie eine Kommandozeile mit administrativen Rechten, indem Sie die rechte Maustaste auf den Shortcut "Eingabeaufforderung" unter "START -> Alle Programme -> Zubehör" drücken und anschließend den Befehl "Als Administrator ausführen" auswählen.
     
  5. Führen Sie folgende Kommandos aus
     
    IPSec_RDPClient.bat CreatePolicy
    IPSec_RDPClient.bat EnablePolicy

Absicherung mit Zusatzsoftware

Beide nachfolgend angebenen Schutzmöglichkeiten beruhen darauf, den Zugriff auf den Remotedesktop-TCP-Port mit einer zusätzlichen Anmeldung per Nutzerkennzeichen und Passwort zu versehen.

Dies verringert die Angriffsmöglichkeiten auf den Remotedesktop-TCP-Port erheblich. 

Nutzung von VPN-Servern

Voraussetzung für einen sinnvollen Schutz des Remotedesktop-TCP-Ports mittels VPN ist die Einschränkung der Reichweite des Remotedesktop-TCP-Ports 3389 auf die vom VPN-Server ausgegebenen IP-Adressen. Dies lässt sich einfach per Windows Firewall-Regeln umsetzen, s. dazu auch das Batchdateibeipiel weiter oben.

Anschließend kann ein Zugriff auf den Remotedesktop-TCP-Port nur aus den Subnetzen oder von den IP-Adressen erfolgen, welche der VPN-Server nach erfolgter Anmeldung per VPN-Client ausgibt.

Dadurch sind alle direkten Angriffe auf den Remotedesktop-TCP-Port abgeschaltet.

Hinweise zur Nutzung des VPN-Servers des ITMZ finden Sie hier

Nutzung von Remotedesktop-Gateways

Ein Remotedesktop-Gateway ermöglicht es einem Remotedesktop-Client das Remotedesktop-Protokoll über das HTTPS-Protokoll zu tunneln.

Dadurch kann die Reichweite des Remotedesktop-TCP-Port 3389 auf das Remotedesktop-Gateway eingeschränkt werden, da alle Remotedesktop-Clients über das Remotedesktop-Gateway arbeiten können.

Dadurch sind alle direkten Angriffe auf den Remotedesktop-TCP-Port unterbunden.

Die Nutzung eines Remotedesktop-Gateways durch den Windows Remotedesktop-Client "mstsc.exe" konfigurieren Sie wie folgt: 

 

  1. Klicken Sie auf die Schaltfläche Start. Geben Sie im Suchfeld den Text mstsc.exe ein, und klicken Sie anschließend in der Ergebnisliste auf "mstsc.exe".
  2. Klicken Sie auf "Optionen", klicken Sie auf die Registerkarte "Erweitert", und klicken Sie dann unter Verbindung von überall aus herstellen auf "Einstellungen".

  3. Aktivieren Sie "Diese Einstellungen für Remotedesktop-Gatewayserver" verwenden, und geben Sie dann den Remotedesktop-Gatewayserverservernamen ein.

  4. Klicken Sie auf die Schaltfläche "OK".

  5. Klicken Sie auf die Registerkarte "Allgemein".

  6. Tragen Sie im Feld "Computer" den Remotedesktopservernamen ein und klicken dann auf "Verbinden".

Referenz:

Weitere Informationen

Bei Fragen oder Hinweisen zu diesem Dokument melden Sie sich bitte per E-Mail bei joerg.maletzky(at)uni-rostock.de.