Przeglądaj i analizuj dzienniki połączeń RDP w systemie Windows

W tym artykule rozważymy funkcje audytu / analizy dzienników połączeń RDP w systemie Windows. Zazwyczaj opisane metody mogą być przydatne w badaniu różnych incydentów na terminalach / serwerach RDS systemu Windows, gdy administrator systemu musi podać informacje: którzy użytkownicy zalogowali się na serwerze RDS, kiedy konkretny użytkownik zalogował się i zakończył sesję, gdzie / z którego urządzenia (nazwa lub adres IP adres) Użytkownik RDP został podłączony. Myślę, że te informacje będą przydatne zarówno dla administratorów korporacyjnych farm RDS, jak i właścicieli serwerów RDP w Internecie (Windows VPS okazał się dość popularny).

Artykuł dotyczy badania dzienników RDP zarówno w systemie Windows Server 2008 R2, 2012 / R2, 2016, jak i w odpowiednich wersjach systemu Windows dla komputerów stacjonarnych (Windows 7, 8.1, 10).

Podobnie jak inne zdarzenia, dzienniki połączeń RDP w systemie Windows są przechowywane w dziennikach zdarzeń. Otwórz konsolę Podglądu zdarzeń. Istnieje kilka różnych czasopism, w których można znaleźć informacje dotyczące połączeń RDP..

Dzienniki systemu Windows zawierają wiele informacji, ale szybkie znalezienie odpowiedniego zdarzenia może być dość trudne. Gdy użytkownik zdalnie łączy się z serwerem RDS lub Pulpitem zdalnym (RDP), wiele zdarzeń jest generowanych w dziennikach systemu Windows. Rozważymy dzienniki i zdarzenia na głównych etapach połączenia RDP, które mogą być interesujące dla administratora:

  1. Połączenie sieciowe
  2. Uwierzytelnianie
  3. Zaloguj się
  4. Session Disconnect / Reconnect
  5. Wyloguj się

Połączenie sieciowe: - ustanawianie połączenia sieciowego z serwerem od użytkownika klienta RDP. Wydarzenie z EventID - 1149 (Usługi pulpitu zdalnego: uwierzytelnianie użytkownika powiodło się). Obecność tego zdarzenia nie oznacza pomyślnego uwierzytelnienia użytkownika. Ten dziennik znajduje się w sekcji Dzienniki aplikacji i usług -> Microsoft -> Windows -> Terminal-Services-RemoteConnectionManager -> Operacyjny. Włącz filtr tego zdarzenia (RMB w dzienniku-> Filtruj bieżący dziennik -> EventId 1149).

W rezultacie otrzymasz listę z historią wszystkich połączeń sieciowych RDP z tym serwerem. Jak widać, dzienniki wskazują nazwę użytkownika, domenę (używane jest uwierzytelnianie NLA, z wyłączoną NLA, tekst zdarzenia wygląda inaczej) oraz adres IP komputera, z którego nawiązane jest połączenie RDP.

Uwierzytelnianie: - pomyślne lub nieudane uwierzytelnienie użytkownika na serwerze. Windows Journal -> Bezpieczeństwo. W związku z tym możemy być zainteresowani wydarzeniami z EventID - 4624 (udane uwierzytelnienie - konto zostało pomyślnie zalogowane) lub 4625 (błąd uwierzytelnienia - Nie można się zalogować na konto). Zanotuj wartość LogonType w zdarzeniu. Podczas logowania przez terminalową usługę RDP - LogonType = 10 lub 3). Jeśli LogonType = 7, następnie ponownie połączono z istniejącą sesją RDP.

Możesz użyć zdarzeń z błędami uwierzytelnienia, aby zabezpieczyć się przed zdalnym odgadnięciem hasła do RDP. Możesz automatycznie blokować takie adresy IP w zaporze za pomocą prostego skryptu PowerShell (zobacz artykuł).

Nazwa użytkownika zawarta jest w opisie zdarzenia w polu Nazwa konta, nazwa komputera w Nazwa stacji roboczej, i nazwa użytkownika w Źródłowy adres sieciowy.

Zwróć uwagę na wartość pola. TargetLogonID - jest to unikalny identyfikator sesji użytkownika, za pomocą którego można śledzić dalszą aktywność tego użytkownika. Jednak po rozłączeniu z sesją RDP (rozłączeniu) i ponownym połączeniu z sesją użytkownik otrzyma nowy TargetLogonID (chociaż sesja RDP pozostaje taka sama).

Za pomocą tego polecenia programu PowerShell można uzyskać listę udanych autoryzacji RDP (zdarzenie 4624).

Get-EventLog security-później (Get-date-godzina 0-minuta 0-sekunda 0) | ? $ _. eventid -eq 4624 -i $ _. Komunikat -dopasuj „typ logowania: \ s + (10) \ s ' | Widok poza siatką

Logowanie: - Logowanie RDP, zdarzenie występujące po udanym uwierzytelnieniu użytkownika. Wydarzenie z EventID - 21 (Usługi pulpitu zdalnego: logowanie do sesji powiodło się). Ten dziennik znajduje się w dziennikach aplikacji i usług -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> sekcja Operacyjna. Jak widać tutaj, można znaleźć identyfikator sesji RDP dla użytkownika - identyfikator sesji.

Wydarzenie z EventID - 21 (Usługi pulpitu zdalnego: otrzymano powiadomienie o uruchomieniu powłoki) oznacza pomyślne uruchomienie powłoki Explorer (pojawienie się okna pulpitu w sesji RDP).

Session Disconnect / Reconnect - zdarzenia rozłączania / ponownego łączenia z sesją mają różne kody w zależności od tego, co spowodowało rozłączenie się użytkownika (rozłączenie z powodu braku aktywności, wybierz element Rozłącz w sesji, zakończ sesję RDP przez innego użytkownika lub administratora itp.). Te zdarzenia znajdują się w sekcji Dzienniki aplikacji i usług -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> Dzienniki operacyjne. Rozważ zdarzenia RDP, które mogą być interesujące:

  • EventID - 24 (Usługi pulpitu zdalnego: Sesja została rozłączona) - użytkownik rozłączył się z sesją RDP.
  • EventID - 25 (Usługi pulpitu zdalnego: połączenie sesji powiodło się) - użytkownik ponownie nawiązał połączenie z istniejącą sesją RDP na serwerze.
  • EventID - 39 (Sesja została rozłączona przez sesję ) - użytkownik sam rozłączył się ze swoją sesją RDP, wybierając odpowiednią pozycję menu (a nie tylko zamknął okno klienta RDP). Jeśli identyfikatory sesji są różne, użytkownik został rozłączony przez innego użytkownika (lub administratora).
  • EventID - 40 (Sesja została rozłączona, kod przyczyny ) Tutaj musisz spojrzeć na kod przyczyny rozłączenia w zdarzeniu. Na przykład:
    • kod przyczyny 0 (Brak dodatkowych informacji) - zwykle oznacza, że ​​użytkownik po prostu zamknął okno RDP klienta.
    • kod przyczyny 5 (Połączenie klienta zostało zastąpione innym połączeniem) - użytkownik ponownie nawiązał połączenie ze swoją starą sesją.
    • kod przyczyny 11 (Aktywność użytkownika zainicjowała rozłączenie) - sam użytkownik kliknął przycisk Rozłącz w menu.

Wydarzenie z EventID - 4778 w dzienniku systemu Windows -> Bezpieczeństwo (Sesja została ponownie połączona z Window Station). Użytkownik ponownie nawiązał połączenie z sesją RDP (użytkownik otrzymuje nowy identyfikator logowania).

Wydarzenie z EventID 4799 w dzienniku systemu Windows -> Bezpieczeństwo (sesja została odłączona od Windows Station). Odłącz od sesji RDP.

Wyloguj się: - wylogowanie użytkownika. Jednocześnie zdarzenie o identyfikatorze zdarzenia jest rejestrowane w dziennikach aplikacji i usług -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> Dziennik operacyjny 23 (Usługi pulpitu zdalnego: wylogowanie sesji powiodło się).

Jednocześnie w dzienniku zabezpieczeń musisz obejrzeć zdarzenie EventID 4634 (Konto zostało wylogowane).

Wydarzenie 9009 (Menedżer okien pulpitu zakończył pracę z kodem () w dzienniku systemowym mówi, że użytkownik zainicjował koniec sesji RDP, a okno użytkownika i powłoka graficzna zostały ukończone.

Poniżej znajduje się mały PowerShell, który pobiera historię wszystkich połączeń RDP dla bieżącego dnia z dzienników serwera RDS terminala. Tabela wynikowa pokazuje czas połączenia, adres IP klienta i nazwę RDP użytkownika (w razie potrzeby możesz uwzględnić inne typy danych wejściowych w raporcie).

Get-EventLog -LogName Bezpieczeństwo-później (Get-date-godzina 0-minuta 0-sekunda 0) | ? (4624,4778)-zawiera $ _. Identyfikator zdarzenia -i $ _. Wiadomość -dopasuj 'typ logowania: \ s + (10) \ s' | %
(nowy obiekt -Typ PSObject -Property @
TimeGenerated = $ _. TimeGenerated
ClientIP = $ _. Message -replace '(? Smi). * Źródłowy adres sieciowy: \ s + ([^ \ s] +) \ s +. *', '$ 1'
Nazwa_użytkownika = $ _. Wiadomość-zamiana '(? Smi). * Nazwa konta: \ s + ([^ \ s] +) \ s +. *', '$ 1'
UserDomain = $ _. Message -replace '(? Smi). * Domena konta: \ s + ([^ \ s] +) \ s +. *', '$ 1'
LogonType = $ _. Message -replace '(? Smi). * Typ logowania: \ s + ([^ \ s] +) \ s +. *', '$ 1'
)
| sort TimeGenerated -Descending | Wybierz TimeGenerated, ClientIP ”
, @ N = „Nazwa użytkownika”; E = '0 \ 1' -f $ _. UserDomain, $ _. Nazwa_użytkownika ”
, @ N = „LogType”; E =
przełącznik ($ _. LogonType)
2 „Interaktywne - logowanie lokalne”
3 „Połączenie sieciowe z folderem współdzielonym)”
4 „Partia”
5 „Usługa”
7 „Odblokuj (po wygaszaczu ekranu)”
8 „NetworkCleartext”
9 „NewCredentials (lokalny proces podszywania się pod istniejące połączenie)”
10 „RDP”
11 „CachedInteractive”
default „LogType Not Recognized: $ ($ _. LogonType)”

Czasami jest to wygodne z dziennikami w arkuszu kalkulacyjnym Excel, w którym to przypadku można zwolnić dowolny dziennik systemu Windows do pliku tekstowego i zaimportować do programu Excel. Możesz wyeksportować dziennik z konsoli Podglądu zdarzeń (oczywiście pod warunkiem, że dzienniki nie zostaną wyczyszczone) lub za pomocą wiersza polecenia:

WEVTUtil zapytanie-events Bezpieczeństwo> c: \ ps \ security_log.txt

Lub tak:

get-winevent -logname "Microsoft-Windows-TerminalServices-LocalSessionManager / Operational" | Export-Csv c: \ ps \ rdp-log.txt -Encoding UTF8

Listę bieżących sesji RDP na serwerze można wyświetlić za pomocą polecenia:

Qwinsta

Polecenie zwraca zarówno identyfikator sesji (ID), nazwę użytkownika (NAZWA UŻYTKOWNIKA), jak i status (Aktywny / Rozłącz). To polecenie jest wygodne w użyciu, gdy trzeba określić identyfikator RDP sesji użytkownika z połączeniem w tle..

Lista uruchomionych procesów w określonej sesji RDP (wskazany jest identyfikator sesji):

qprocess / id: 157

Na kliencie RDP dzienniki nie są tak pouczające, często używana jest przede wszystkim informacja o historii połączeń RDP w rejestrze.