Protokół RDP (Remote Desktop Protocol) to zastrzeżony protokół opracowany przez firmę Microsoft, umożliwiający użytkownikom zdalne łączenie się ze stacjami roboczymi i serwerami Windows. RDP jest zawarty w większości wersji systemu Windows, począwszy od systemu Windows NT 4.0 i nie wiąże się z dodatkowymi kosztami ani wymaganiami licencyjnymi.

W sieciach Windows oznacza to, że organizacje nie muszą płacić za oprogramowanie innych firm, takie jak TeamViewer, LogMeIn lub AnyDesk, aby umożliwić swoim użytkownikom zdalny dostęp. Dla porównania, RDP jest podobny do protokołu VNC występującego w Linuksie i MacOS.


Jak działa RDP?

Aby ustanowić połączenie RDP z docelowym hostem Windows (znanym jako serwer RDP), system inicjujący połączenie musi mieć zainstalowane oprogramowanie klienta RDP. W systemie Windows jest to zawarte domyślnie w programie Podłączanie Pulpitu Zdalnego (ang. Remote Desktop Connection). Po uruchomieniu klienta RDP należy po prostu wprowadzić adres IP lub nazwę hosta docelowego, zakładając, że klient RDP może już komunikować się z docelowym adresem IP, a DNS może rozpoznać nazwę hosta i komunikować się z nim.

Jeśli klient może wysłać polecenie ping do serwera RDP, ale nie może połączyć się za pomocą wybranego oprogramowania klienta RDP, może to oznaczać, że protokół RDP nie jest włączony na hoście docelowym. W systemie Windows 10 i nowszym systemie operacyjnym Windows Server można przeszukać menu Start pod kątem „ustawień pulpitu zdalnego” i włączyć protokół w wyświetlonym menu:

Przedstawione na poprzednim zrzucie ekranu ustawienia zasad grupy w Twojej organizacji mogą uniemożliwiać włączenie dostępu RDP, co jest najlepszym rozwiązaniem w przypadku hostów, które nigdy nie powinny zezwalać na połączenia zdalne.

Inną rzeczą do sprawdzenia w przypadku nieudanego połączenia jest Zapora systemu Windows na serwerze RDP, która powinna być otwarta dla TCP i UDP na domyślnym porcie RDP 3389 (chyba że zostało to zmienione na inny port o czym później).

Na koniec należy również określić, które poświadczenia użytkownika mogą być używane do logowania za pośrednictwem protokołu RDP, zarządzając grupą lokalną „Remote Desktop Users”:

Jeśli połączenie się powiedzie, oprogramowanie klienta RDP wyświetli monit o podanie poświadczeń logowania do serwera RDP, a po wprowadzeniu ich ustanowi zdalne połączenie.


Zabezpiecz RDP

Ze względu na łatwość obsługi i popularność protokołu RDP ważne jest, aby organizacje podjęły kroki w celu zabezpieczenia wszystkich hostów, które mogą udostępniać usługę RDP (w tym stacji roboczych). Ponadto protokół RDP był przez lata narażony na wiele luk w zabezpieczeniach, z których niektóre umożliwiają atakującym połączenie zdalne bez podawania danych uwierzytelniających. Najbardziej znane to oczywiście CVE-2019-0708 aka BlueKeep.

Poniżej przedstawiamy kilka ogólnych wskazówek dotyczących zabezpieczania protokołu pulpitu zdalnego:

1. NIGDY nie wystawiaj serwerów RDP w publicznym Internecie! Ze względu na liczbę luk w zabezpieczeniach wykrytych w protokole RDP na przestrzeni lat, nie ma niezawodnie bezpiecznego sposobu, aby pozostawić je otwartymi na połączenia za pośrednictwem publicznego Internetu. Każdego dnia atakujący oraz boty skanują w poszukiwaniu serwerów RDP połączonych z Internetem (otwarty port 3389) oraz próbują włamać się za pomocą każdego ataku, który posiadają w swoim arsenale.

Jednak dostęp RDP nadal jest możliwy, gdy klient nie znajduje się w tej samej sieci LAN, co serwer RDP. Zamiast łączyć się przez publiczny Internet, rozważ VPN lub wbudowaną bramę pulpitu zdalnego systemu Windows.

2. Wyłącz RDP tam, gdzie nie jest potrzebny. Jeśli do stacji roboczych lub serwera nie należy uzyskiwać zdalnego dostępu, należy wyłączyć protokół RDP na poziomie systemu operacyjnego tego hosta. Zwykle realizowane jest to za pomocą GPO – “Konfiguracja komputera> Szablony administracyjne> Składniki systemu Windows> Usługi pulpitu zdalnego> Host sesji usług pulpitu zdalnego> Połączenia> Zezwalaj użytkownikom na łączenie zdalnie przy użyciu usług pulpitu zdalnego”. Link do poradnika Microsoft tutaj.

3. Ogranicz, jacy użytkownicy mogą się łączyć. Można kontrolować to, którzy użytkownicy i grupy mogą łączyć się z hostem za pomocą protokołu RDP. Odbywa się to za pośrednictwem grupy lokalnej o nazwie „Użytkownicy pulpitu zdalnego” w Zarządzaniu Komputerem. Członkowie tej grupy mogą używać protokołu RDP do zalogowania się do tego komputera. Oczywiście administratorzy tego systemu mogą używać RDP bez restrykcji członkostwa w tej grupie.

4. Używaj silnych haseł. Zapobieganie łatwemu odgadnięciu lub brutalnemu atakowi na hasła to jedna z najważniejszych sprawdzonych metod w zakresie bezpieczeństwa. Dokładniej omówiliśmy ten temat w naszym artykule o słabych hasłach.

5. Ogranicz adresy IP, które mogą łączyć się przez Zaporę systemu Windows. Oprócz ograniczania poświadczeń, których można używać do logowania się na serwerze RDP, Zapora systemu Windows umożliwia również określenie, z których adresów IP powinny pochodzić połączenia RDP. Jeśli Firewall jest skonfigurowany poprawnie, połączenia RDP z adresów IP, które nie znajdują się na tej liście, będą odrzucane jeszcze przed pojawieniem się okna z prośbą o podanie poświadczeń.

6. Włącz uwierzytelnianie na poziomie sieci (ang. Network Level Authentication, NLA). Wprowadzona w protokole RDP 6.0 (w systemie Windows Vista) usługa NLA wymaga od klientów RDP uwierzytelnienia przed nawiązaniem sesji. Przed NLA, starsza metoda połączenia wykorzystywała zasoby serwera RDP do uwierzytelniania sesji, co mogło skutkować atakami typu „odmowa usługi”, jeśli starsze żądania połączeń RDP były powielane. NLA chroni również przed przechwyconymi danymi uwierzytelniającymi (atakami typu „man in the middle”).

7. Zapoznaj się z zaawansowanymi ustawieniami RDP w rejestrze. Szczególnie dwa ustawienia mogą być interesujące pod względem bezpieczeństwa:
a) „Enable Multiple Users Sessions” –HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server. Ustawienie pozwala to ograniczyć lub zupełnie wyłączyć równoczesne sesje RDP na maszynie per użytkownik.
b) „Port Number” – HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp. Ustawienie to pozwala zmienić domyślny port 3389 na inny.


Podsumowanie

Powyższa lista z pewnością nie wyczerpuje tematu, a jest to raczej solidny punkt wyjścia, jeśli bezpieczeństwo RDP nie zostało należycie potraktowane w Twojej sieci. Dodatkowe zabezpieczenia obejmują: uwierzytelnianie wieloskładnikowe, stosowanie silniejszych metod szyfrowania i odcinanie użytkowników po określonej liczbie nieudanych prób logowania.

Jest jeszcze jeden środek bezpieczeństwa, który warto omówić, chociaż przed podjęciem decyzji, czy jest to właściwe rozwiązanie dla Twojej organizacji, należy rozważyć jego zalety i wady. W systemie Windows istnieje tryb o nazwie „Restricted Admin Mode”, który zapobiega przechowywaniu w pamięci poświadczeń używanych w połączeniach RDP na serwerze (który atakujący mogą przechwytywać za pomocą programów takich jak Mimikatz). Jednak tryb ten zmienia loginy RDP na „sieciowe” zamiast tradycyjnych „interaktywnych”. Oznacza to, że do uwierzytelniania używane są skróty NTLM lub bilety Kerberos, a nie wpisywane zaszyfrowane poświadczenia, co otwiera serwer RDP na ataki typu „pass-the-hash”.

Może to jednak nie być tak duży problem, jak się wydaje. Tryb administratora z ograniczeniami z pewnością naraża serwery RDP na ataki typu pass-the-hash, jednak jeśli osoby atakujące zgromadziły już skróty NTLM użytkowników uprzywilejowanych, to i tak mogą potencjalnie uzyskać dostęp do na przykład usługi SMB za pośrednictwem metody pass-the-hash. W tym scenariuszu ochrona serwerów RDP przed zbieraniem skrótów NTLM może być bardziej wartościowa niż zapobieganie atakom typu pass-the-hash RDP. Ostatecznie wszystko sprowadza się do aktualnych potrzeb każdej organizacji w zakresie bezpieczeństwa, przepisów dotyczących zgodności i ogólnego podejścia do bezpieczeństwa sieci.

Podziel się z innymi tym artykułem!