Das man bei Terminalservern (aka Remote Desktop Session Hosts) mit Hilfe der Remoteüberwachung oder dem Spiegeln auf Benutzersitzungen zugreifen kann ist soweit nichts neues und bekannt. Man kann allerdings unter bestimmten Voraussetzungen z.B. auch auf die Konsolensitzung eines Clients zugreifen.
Mit RDP Wrapper oder ähnlichen Tools die RDP-Möglichkeiten von z.B. Windows 7 aufzubohren ist soweit nichts unbekanntes. Neu für mich war die Möglichkeit sich direkt auf die Konsolensitzung, d.h. die Anzeige die man sieht wenn man vor dem Computer sitzt, aufschalten zu können.
Voraussetzungen
Zuallerst muss (natürlich) die Remotedesktopverbindung zugelassen bzw. aktiviert sein. Dies wird jetzt einfach mal vorausgesetzt und weiter beschrieben.
ID ermitteln
Neben RDP Wrapper und Co. benötigt man zum Verbinden auf die Konsole oder eine andere RDP-Sitzung die ID. Auf Windows Servern und bei den Pro-Ausgaben von Windows 7 und neuer steht dazu der Befehl
query session
zur Verfügung. Die Home-Ausgaben kennen diesen Befehl nicht, die entsprechenden Dateien lassen sich zwar auffinden, aber eine Ausführung wird unterbunden. Abhilfe schafft der Task-Manager, wenn man auf der Registerkarte “Benutzer” die Spalte “ID” einblendet:
By the way: Ein “query session” aus der Ferne auf eine Home-Ausgabe von Windows habe ich nicht zum Laufen bekommen. Daran änderte auch ein
reg add "\\computername\HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v AllowRemoteRPC /t REG_DWORD /d 1
Quelle: spiceworks – remotely Identifying a logged on user using CMD
und entsprechende Firewall-Konfiguration nichts. Denkbar, das es dennoch irgendwie möglich ist. Ich bilde mir ein, die Ausgabe kurz aufblitzen gesehen zu haben, leider war’s nicht umleit- oder eine Pause erfolgreich hinzufügbar.
Alternativ kann man LogonSessions von Sysinternals nutzen. Allerdings ist dieses Tool im Vergleich zu “query session” und dem Task-Manager um einiges gemächlicher. Ferner muss man aus der Ausgabe dann noch den passenden Absatz heraussuchen:
[6] Logon session 00000000:00011ed2: User name: <Computername\Username> Auth package: NTLM Logon type: Interactive Session: 1 Sid: <SID> Logon time: 09.10.2018 14:25:16 Logon server: <Logonserver> DNS Domain: UPN:
Man sucht den Benutzernamen und “Logon type: Interactive”, “Session” entspricht dann der ID.
Spiegeln zulassen
In der Voreinstellung wird das Spiegeln erst gestattet, nachdem der angemeldete Benutzer gefragt wurde und zugestimmt hat. Ändern lässt sich das entweder via Gruppenrichtlinie oder in der Registry:
Computerkonfiguration - Administrative Vorlagen - Windows-Komponenten - Remotedesktopdienste - Remotedesktopsitzungshost - Verbindungen
Die Richtlinie “Regeln für Remotesteuerung von Remotedesktopdienste-Benutzersitzungen festlegen” editieren:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services] "Shadow"=dword:00000001
Mögliche Werte für “Shadow”:
- No remote control allowed (corresponds to the value of the registry key Shadow = 0);
- Full Control with user’s permission (1);
- Full Control without user’s permission (2);
- View Session with user’s permission (3);
- View Session without user’s permission (4).
Per Vorgabe kann nur der Administrator sich zu einer anderen Sitzung hinzuschalten. Ändern kann man dies wie folgt (ungetestet):
wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName="RDP-Tcp") CALL AddAccount "<Domain>\<Group>",2
Update 05.08.2022: Ich hatte nun die Möglichkeit, diese Einstellung mal auszuprobieren, aber leider scheint das nicht zu reichen oder nicht zu funktionieren. Ohne lokale Admin-Rechte kann kein anderer Benutzer sich in die Sitzung verbinden. Anbei ein paar weitere Links zu diesem Punkt, die teils zusätzliche Infos oder Befehlsvarianten enthalten:
Microsoft – Docs – How to add a user to Terminal Services RDP permissions by using WMI
Anonit – Allow non admins to manage RDS connection
ITProCloud Blog – Shadow a WVD/AVD user with least privileges
Firewall
Sofern über’s Netzwerk die Spiegelung erfolgen soll, muss neben dem RDP-typischen Port 3389/tcp und udp noch die folgenden Firewall-Regeln aktiv sein:
Datei- und Druckerfreigabe (SMB eingehend) Remotedesktop - Schatten (TCP eingehend) (heißt ggf. auch RDP-Sitzungs-Agent
Soll aus einem anderen Subnetz, z.B. via VPN, die Spiegelung erfolgen, muss man dies in den Regeln auf der Registerkarte “Bereich” unter “Remote-IP-Adresse” einstellen.
Bei den Home-Ausgaben von Windows gibt es keine vorbereite Regel “Remotedesktop – Schatten”. Diese kann man selbst erstellen für die Anwendung
"%SystemRoot%\system32\RdpSa.exe"
und “TCP – Alle Ports” zulassen.
Das eigentliche Spiegeln
Aus der Administrator-Sitzung wird der Zugriff auf eine Benutzersitzung bzw. die Konsole wie folgt eingeleitet:
mstsc /v:<Hostname/IP/localhost> /shadow:<ID> /control
Ohne Nachfrage, sofern die Vorkonfiguration stimmt, geht’s mit dem Parameter ” /noconsentprompt”.
Die Sitzung mit der ID “1” ist dabei oft der erste angemeldete Benutzer und im Idealfall ist das auf/an der Konsole:
Das ist aber nicht immer so, von daher am besten vorher die richtige ID ermitteln.
Aus der Ferne ohne (!) vorige Anmeldung als Administrator klappt’s dann mit dem Anhängen von “/prompt” und der Eingabe der Administrator-Zugangsdaten:
mstsc /v:<Hostname/IP/localhost> /shadow:<ID> /control /noconsentprompt /prompt
Die Testreihe
Nachfolgend die bislang getesteten Windows-Ausgaben:
Windows 7 Home Premium & Professional
Fehlermeldung “Spiegelfehler – Die auf diesem Server ausgeführte Windows-Version unterstützt das Spiegeln von Benutzern nicht”. Kurzum: Diesen Windows-Ausgaben fehlt die Möglichkeit zu Spiegeln.
Windows 8.1 (with Bing)
Funktioniert.
Windows 8.1 Pro
Ungetestet, sollte funktionieren. Funktioniert. Erfolgreich am 30.10.2018 getestet.
Windows 10
Ungetestet, sollte funktionieren.
Windows 10 Pro
Funktioniert.
Was nicht möglich ist
An der Konsole anmelden, wenn kein Benutzer angemeldet ist funktioniert nicht. Klar, wenn keine Sitzung vorhanden ist, kann auch nicht gespiegelt werden.
Mehrere Spiegelungen, d.h. das mehr als ein entsprechend berechtigter Benutzer sich zu einer Sitzung hinzuschalten kann, ist nicht möglich.
Abschlussbemerkung
Generell hilft es bei vielen Support-Themen bereits, wenn man sich parallel zum aktuellen Benutzer als Administrator zu einem System verbinden kann. So lässt sich einiges machen, ohne den Benutzer verscheuchen zu müssen.
Mich wundert es schon etwas, das Microsoft neben einer Benutzersitzung, ganz gleich ob diese lokal oder per RDP läuft, nicht noch eine Administrator-Sitzung auf den Clients zulässt. Ferner bietet die vorhandene Technik, gemeint ist das Spiegeln, in Verbindung mit VPN o.ä. eine super Alternative zu TeamViewer, VNC und Co.
Update 18.10.2018
Kleine Verbesserungen im Beitrag. Leider ist es nicht möglich eine *.rdp-Datei für die Spiegelung zu verwenden, ferner gibt es keine Speicheroption für Benutzername und Kennwort:
Bei häufigen Zugriffen ist das sehr störend. Abhilfe kann man durch ein kleines AutoIt-Skript schaffen, das kurz vor der Remotedesktopverbindung gestartet wird und automatisch die Eingabefelder bei der Anmeldung ausfüllt:
; AutoIt TrayIcon ausblenden #NoTrayIcon ; Auf das Fenster mit dem Titel "Windows-Sicherheit" warten WinWait("Windows-Sicherheit") WinActivate("Windows-Sicherheit") ; Benutzername und Kennwort eingeben Send("Administrator") Send("{TAB}") Send("<Kennwort>") Send("{ENTER}")
“<Kennwort>” durch das Eigene ersetzen, anschließend das Skript mit “Aut2exe.exe” kompilieren, das bringt etwas rudementäre Sicherheit, da das Kennwort in der daraus resultierenden *.exe-Datei nicht ganz so leicht auszulesen ist. Dann z.B. mit Hilfe eines kleinen Batch-Skripts die “Anmeldehilfe” und die Remotedesktopverbindung starten:
@echo off start Anmeldehilfe.exe mstsc.exe /v:<IP/Hostname> /shadow:<ID> /control /noconsentprompt /prompt
Verheiratet, Vater von zwei Kindern, eines an der Hand, eines im Herzen. Schon immer Technik-Freund, seit 2001 in der IT tätig und seit über 10 Jahren begeisterter Blogger. Mit meiner Firma IT-Service Weber kümmern wir uns um alle IT-Belange von gewerblichen Kunden und unterstützen zusätzlich sowohl Partner als auch Kollegen.
Hallo Andy, ich schaue immer mal gerne in Deinen Blog, gerade auch jetzt diesen Beitrag, wo es auch um RDP und VPN geht. Wir haben hier eine Plattform mit der wir RDP sozusagen veredeln, skalierbar und sicherer machen. Aus unserer Sicht sind Verbindungen, die offen am Internet hängendn, wie Microsoft-Exchange-, Terminal- bzw. RDS-Server oder insbesondere die oft im Homeoffice und Außendienst eingesetzten Client2Site VPN Verbindungen zum Unternehmen offene Einfallstore für Schadsoftware-Angriffe sein. Siehe hier ein paar Informationen:
https://oneclick-cloud.com/de/blog/trends/vpn-alternative/
P.S.: https://oneclick-cloud.com/de/blog/trends/emotet-oneclick-als-waffe-gegen-trojaner/
Der Vollständigkeit halber: In meinem Blog-Beitrag geht es nicht darum RDP offen am Netz hängen zu haben! Unsererseits wird immer die Verwendung von VPN im Zusammenhang mit entsprechenden Firewall-Regeln empfohlen.
Sehr guter Artikel, habe mich im Internet verrückt gesucht, aber hier die richtigen Hinweise gefunden, kurz und knackig.
Vielen Dank dafür!