Hesla pro RDP WebApp v paměti stanice i na Windows 10

Toho jste si předpokládám všimli. Připojíte se poprvé na první RDP RemoteApp a zadáváte heslo (pokud nemáte třeba RDP SSO jako tady). Buď přímo do RDP klienta mstsc, nebo přes webový prohlížeč do RD Web sajtny.

To už samo o sobě indikuje, že se v případě RDP jedná vždycky (kromě případu RestrictedAdmin režimu) o basic authentication. Myslím tím prostě tu nejjednodušší možnou autentizaci, kdy posíláte do vzdáleného serveru plné textové heslo. Žádné drama, pokud s tím počítáte.

Ovšem v případě RemoteApp jste si mohli všimnout, že při připojování na každou další vzdálenou aplikaci už heslo nemusíte znovu zadávat. Dokonce ho nemusíte zadávat ani podruhé, pokud se přihlásíte nejprve do RD Web rozhraní.

Není to divné? Jak dokáže RD Web rozhraní předat heslo z prohlížeče do mstsc klientského prográmku? Jak je možné, že při spuštění další aplikace, dokonce potom, co jste předchozí aplikaci úplně uzavřeli, dokonce potom co vás někdo na RD session host serveru totálně odhlásil (logoff)?

Tak pokud byste se takto zeptali, tak byste taky vcelku rychle našli důvod. V task manageru k tomu objevíte mrchu zvanou wksprt.exe. Jméno je prT vy vtipálci. A úplně na prd to není. Například, pokud byste podnikali analýzu nějakého bezpečnostního incidentu pomocí mého volatile forensics kitu, nebo jste prostě jenom parchanti, kteří chtějí někomu ukrást heslo.

On si ten wksprt program vaše heslo pamatuje v paměti. Neomezeně dlouho. A dává ho na požádání mstsc klientovi. Stačí udělat dump paměti, třeba pomocí procdump ze sysinternals, nebo přímo pomocí funkce BitColdKit-FindString z mého BitColdKitu.

Windows 8 a Windows 2012 a novější se na jedné straně srandovně snaží nepamatovat si vaše plnotextové heslo po interaktivním přihlášení v lsass (pokud nemáte právě zapnuté to RDP SSO aka credentials delegation), ale potom si ho prostě pamatuje wksprt a nikomu to nevadí.

Takže znovu opakuju. Pokud vám vaše stanice nepatří, tak cokoliv na ní děláte není vaše.

- Ondřej Ševeček, MVP