Перегляд і аналіз логів RDP підключень в Windows

У цій статті ми розглянемо, особливості аудиту / аналізу логів RDP підключень в Windows. Як правило, описані методи можуть стати в нагоді при розслідуванні різних інцидентів на термінальних / RDS серверах Windows, коли від системного адміністратора потрібно надати інформацію: які користувачі входили на RDS сервер, коли авторизувався і завершив сеанс конкретний користувач, звідки / с якого пристрою (ім'я або IP адреса) підключався RDP-користувач. Я думаю, ця інформація буде корисна як для адміністраторів корпоративних RDS ферм, так і власникам RDP серверів в інтернеті (Windows VPS як виявилося досить популярні).

Стаття може бути застосована при дослідженні RDP логів як в Windows Server 2008 R2, 2012 / R2, 2016, так і в відповідних десктопних версіях Windows (Windows 7, 8.1, 10).

Як і інші події, логи RDP підключення в Windows зберігаються в журналах подій. Відкрийте консоль журналу подій (Event Viewer). Є кілька різних журналів, в яких можна знайти інформацію, що стосується RDP підключення.

У журналах Windows міститься велика кількість інформації, але швидко знайти потрібну подію буває досить складно. Коли користувач віддалено підключається до RDS сервера або віддаленого столу (RDP) в журналах Windows генерується багато подій. Ми розглянемо журнали і події на основних етапах RDP підключення, які можуть бути цікаві адміністратору:

  1. Network Connection
  2. Authentication
  3. Logon
  4. Session Disconnect / Reconnect
  5. Logoff

Network Connection: - встановлення мережевого підключення до сервера від RDP клієнта користувача. Подія з EventID - 1149 (Remote Desktop Services: User authentication succeeded). Наявність цієї події не свідчить про успішну аутентифікації користувача. Цей журнал знаходиться в розділі Applications and Services Logs -> Microsoft -> Windows -> Terminal-Services-RemoteConnectionManager -> Operational. Увімкніть фільтр по даній події (ПКМ по журналу-> Filter Current Log -> EventId 1149).

В результаті у вас вийде список з історією всіх мережевих RDP підключень до цього сервера. Як ви бачите, в логах вказується ім'я користувача, домен (використовується NLA аутентифікація, при відключеному NLA текст події виглядає інакше) і IP адреса комп'ютера, з якого здійснюється RDP підключення.

Authentication: - успішна або неуспішна аутентифікація користувача на сервері. Журнал Windows -> Security. Відповідно нас можуть цікавити події з EventID - 4624 (Успішна аутентифікація - An account was successfully logged on) або 4625 (Помилка аутентифікації - An account failed to log on). Зверніть увагу на значення LogonType в подію. При вході через термінальну службу RDP - LogonType = 10 або 3. якщо LogonType = 7, значить виконано перепідключення до вже наявної RDP сесії.

Ви можете використовувати події з помилками аутентфікаціі для захисту від віддаленого перебору паролів до RDP. Ви можете автоматично блокувати на файервол такі IP адреси простим PowerShell скриптом (див. Статтю).

При цьому ім'я користувача міститься в описі події в поле Account Name, ім'я комп'ютера в Workstation Name, а ім'я користувача в Source Network Address.

Зверніть увагу на значення поля TargetLogonID - це унікальний ідентифікатор сесії користувача за допомогою якого можна відстежувати подальшу активність даного користувача. Однак при відключенні від RDP сесії (disconnect) і повторного переключення в сесію, користувачеві буде виданий новий TargetLogonID (хоча RDP сесія залишилася тією ж самою).

Ви можете отримати список подій успішних авторизаций по RDP (подія 4624) за допомогою такої команди PowerShell.

Get-EventLog security -after (Get-date -hour 0 -minute 0 -second 0) | ? $ _. Eventid -eq 4624 -and $ _. Message -match 'logon type: \ s + (10) \ s' | Out-GridView

Logon: - RDP вхід в систему, подія з'являється після успішної аутентифікації користувача. Подія з EventID - 21 (Remote Desktop Services: Session logon succeeded). Цей журнал знаходиться в розділі Applications and Services Logs -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> Operational. Як ви бачите тут можна дізнатися ідентифікатор RDP сесії для користувача - Session ID.

Подія з EventID - 21 (Remote Desktop Services: Shell start notification received) означає успішний запуск оболонки Explorer (поява вікна робочого столу в RDP сесії).

Session Disconnect / Reconnect - події відключення / перепідключення до сесії мають різні коди залежно від того, що викликало відключення користувача (відключення по неактивності, вибір пункту Disconnect в сесії, завершення RDP сесії іншим користувачем або адміністратором і т.д.). Ці події знаходяться в розділі журналів Applications and Services Logs -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> Operational. Розглянемо RDP події, які можуть бути цікавими:

  • EventID - 24 (Remote Desktop Services: Session has been disconnected) - користувач відключився від RDP сесії.
  • EventID - 25 (Remote Desktop Services: Session reconnection succeeded) - користувач перепідключитися до своєї наявної RDP сесії на сервері.
  • EventID - 39 (Session has been disconnected by session ) - користувач сам відключився від своєї RDP сесії, вибравши відповідний пункт меню (а не просто закрив вікно RDP клієнта). Якщо ідентифікатори сесій різні, значить користувача відключив інший користувач (або адміністратор).
  • EventID - 40 (Session has been disconnected, reason code ). Тут потрібно дивитися на код причини відключення в подію. наприклад:
    • reason code 0 (No additional information is available) - зазвичай говорить про те, що користувач просто закрив вікно RDP клієнта.
    • reason code 5 (The client's connection was replaced by another connection) - користувач перепідключитися до своєї старої сесії.
    • reason code 11 (User activity has initiated the disconnect) - користувач сам натиснув на кнопку Disconnect в меню.

Подія з EventID - 4778 в журналі Windows -> Security (A session was reconnected to a Window Station). Користувач перепідключитися до RDP сесії (користувачеві видається новий LogonID).

Подія з EventID 4799 в журналі Windows -> Security (A session was disconnected from a Window Station). Відключення від RDP сеансу.

Logoff: - вихід користувача з системи. При цьому в журналі Applications and Services Logs -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> Operational фіксується подія з EventID 23 (Remote Desktop Services: Session logoff succeeded).

При цьому в журналі Security потрібно дивитися подія EventID 4634 (An account was logged off).

подія Event 9009 (The Desktop Window Manager has exited with code () в журналі System говорить про те, що користувач ініціював завершення RDP сесії, і вікно і графічний shell користувача був завершений.

Нижче представлений невеликий PowerShell, який вивантажує з журналів термінального RDS сервера історію всіх RDP підключень за поточний день. В отриманій таблиці вказані години підключення, IP адреса клієнта і ім'я RDP користувача (при необхідності ви можете включити в звіт інші типи входів).

Get-EventLog -LogName Security -after (Get-date -hour 0 -minute 0 -second 0) | ? (4624,4778) -contains $ _. EventID -and $ _. Message -match 'logon type: \ s + (10) \ s' | %
(New-object -Type PSObject -Property @
TimeGenerated = $ _. TimeGenerated
ClientIP = $ _. Message -replace '(? Smi). * Source Network Address: \ s + ([^ \ s] +) \ s +. *', '$ 1'
UserName = $ _. Message -replace '(? Smi). * Account Name: \ s + ([^ \ s] +) \ s +. *', '$ 1'
UserDomain = $ _. Message -replace '(? Smi). * Account Domain: \ s + ([^ \ s] +) \ s +. *', '$ 1'
LogonType = $ _. Message -replace '(? Smi). * Logon Type: \ s + ([^ \ s] +) \ s +. *', '$ 1'
)
| sort TimeGenerated -Descending | Select TimeGenerated, ClientIP '
, @ N = 'Username'; E = '0 \ 1' -f $ _. UserDomain, $ _. UserName '
, @ N = 'LogType'; E =
switch ($ _. LogonType)
2 'Interactive - local logon'
3 'Network conection to shared folder)'
4 'Batch'
5 'Service'
7 'Unlock (after screensaver)'
8 'NetworkCleartext'
9 'NewCredentials (local impersonation process under existing connection)'
10 'RDP'
11 'CachedInteractive'
default "LogType Not Recognised: $ ($ _. LogonType)"

Іноді буває зручно з балками в таблиці Excel, в цьому випадку ви можете вивантажити будь-який журнал Windows в текстовий файл і імпортувати в Excel. Експорт журналу можна виконати з консолі Event Viewer (звичайно, за умови що логи не очищені) або через командний рядок:

WEVTUtil query-events Security> c: \ ps \ security_log.txt

Або так:

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

Список поточних RDP сесій на сервері можна вивести командою:

Qwinsta

Команда повертає як ідентифікатор сесії (ID), ім'я користувача (USERNAME) і стан (Active / Disconnect). Цю команду зручна використовувати, коли потрібно визначити ID RDP сесії користувача при тіньовому підключенні.

Список запущених процесів в конкретній RDP сесії (вказується ID сесії):

qprocess / id: 157

На RDP-клієнті логи Не такі інформаційні, основне ніж часто користуються інформація про історію RDP підключень в реєстрі.