Thứ Sáu, 12 Tháng Tám, 2022
Trang chủWindows ClientsXem và phân tích Remote Desktop Connection Logs trên Windows

Xem và phân tích Remote Desktop Connection Logs trên Windows

Trong bài viết này, chúng tôi sẽ mô tả cách xem và kiểm tra nhật ký kết nối RDP trong Windows. Nhật ký kết nối RDP cho phép quản trị viên máy chủ đầu cuối RDS lấy thông tin về người dùng nào đã đăng nhập và thoát máy chủ  từ thiết bị nào (DNS name hoặc địa chỉ IP) mà người dùng đã đăng nhập.

Bài viết có thể áp dụng cho cả Windows Server 2022/2019/2016 / 2012R2 và các phiên bản dành cho máy tính để bàn (Windows 11, 10 và 8.1).

Xem thông tin Remote Desktop Connection trong Windows Event Viewer

Khi người dùng kết nối với máy tính khác thông qua RDP, thông tin về các sự kiện sẽ được lưu trữ trong nhật ký của Event Viewer logs (eventvwr.msc). Trình tự của một phiên RDP sẽ như sau:

  1. Kết nối mạng;
  2. Xác thực người dùng;
  3. Đăng nhập;
  4. Ngắt kết nối / Kết nối lại phiên;
  5. Đăng xuất.

Sự kiện 1: Kết nối mạng 

Sự kiện này để thiết lập kết nối giữa máy chủ từ máy người dùng. Đây là một sự kiện với EventID là 1149. Nếu có log của sự kiện này nghĩa là người dùng đã đăng nhập thành công. 

Log này nằm tại:  Applications and Services Logs -> Microsoft -> Windows -> TerminalServices-RemoteConnectionManager > Operational”. 

Để bật bộ lọc nhật ký cho sự kiện này (Phải chuột vào Operational-> Filter Current Log -> Nhập 1149 vào EventId như hình).

Bạn cũng có thể liệt kê tất cả các lần thử kết nối RDP với PowerShell bằng lệnh sau:

$RDPAuths = Get-WinEvent -LogName 'Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational' -FilterXPath '<QueryList><Query Id="0"><Select>*[System[EventID=1149]]</Select></Query></QueryList>'
[xml[]]$xml=$RDPAuths|Foreach{$_.ToXml()}
$EventData = Foreach ($event in $xml.Event)
{ New-Object PSObject -Property @{
TimeCreated = (Get-Date ($event.System.TimeCreated.SystemTime) -Format 'yyyy-MM-dd hh:mm:ss K')
User = $event.UserData.EventXML.Param1
Domain = $event.UserData.EventXML.Param2
Client = $event.UserData.EventXML.Param3
}
} $EventData | FT

Sau khi chạy lệnh, bạn sẽ nhận được một danh sách lịch sử sự kiện của tất cả các kết nối RDP đến máy chủ này. Nhật ký cung cấp tên người dùng, miền và địa chỉ IP của máy tính của người dùng.

Sự kiện 2: Xác thực người dùng

Sự kiện này cho biết người dùng RDP đã được xác thực thành công trên máy chủ hay chưa. Log của sự kiện nằm tại Windows Logs -> Security. Sự kiện này có EventID là 4624 (An account was successfully logged on) hoặc 4625 (An account failed to log on).

Bạn nên chú ý tới giá trị LogonType trong phần mô tả sự kiện.

  • LogonType = 10 hoặc 3 — Remote Desktop bằng một phiên đăng nhập mới hoàn toàn
  • LogonType = 7 – người dùng đã kết nối lại với phiên RDP hiện có;
  • LogonType = 5 – RDP với quyền admin.

Bạn có thể lấy danh sách các sự kiện xác thực RDP thành công (EventID 4624) bằng cách sử dụng lệnh PowerShell sau:

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
list sucess rdp auth event with an EventID 4624

Sự kiện 3: Đăng nhập

Sự kiện lưu trữ lại thông tin RDP login vào Windows. Sự kiện này có EventID là 21, xuất hiện sau khi người dùng đã được xác thực thành công (Remote Desktop Services: Session logon succeeded). Sự kiện này nằm tại  Applications and Services Logs -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> Operational. Như bạn có thể thấy, tại đây bạn có thể tìm thấy ID của phiên RDP của người dùng – Session ID.

EventID – 21  (Remote Desktop Services: Shell start notification received) cho biết rằng trình Explorer đã được khởi động thành công (màn hình Windows xuất hiện trong phiên RDP của người dùng).

Sự kiện 4: Ngắt kết nối / Kết nối lại phiên

Các sự kiện ngắt kết nối phiên và kết nối lại có các ID khác nhau tùy thuộc vào nguyên nhân gây ra mất kết nối người dùng (ngắt kết nối do quá thời gian chờ của phiên RDP, Ngắt kết nối do người dùng khác hoặc quản trị viên kết thúc, v.v..). Bạn có thể tìm thấy sự kiện này tại Applications and Services Logs -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> Operational

Sau đây là một số ID của sự kiện:

  • EventID – 24 (Remote Desktop Services: Session has been disconnected) – Người dùng ngắt kết nối khỏi phiên RDP;
  • EventID – 25 (Remote Desktop Services: Session reconnection succeeded) – Người dùng đã kết nối lại với phiên RDP hiện có;
  • EventID – 39 (Session <A> has been disconnected by session <B>) – Người dùng đã bị ngắt kết nối bởi một người dùng khác (hoặc quản trị viên) hoặc người dùng ngắt kết nối bằng tùy chọn menu ;
  • EventID – 40 (Session <A> has been disconnected, reason code <B>). Với id này, bạn phải kiểm tra disconnection reason code trong phần mô tả sự kiện. Ví dụ:
    • reason code 0 nghĩa là người dùng vừa đóng cửa sổ máy khách RDP;
    • reason code 5 nghĩa là người dùng đã kết nối lại với phiên RDP trước đó;
    • reason code 11 người dùng đã nhấn vào nút Disconnect trong Start menu.

EventID 4778 nằm trong“Windows -> Security” (Một phiên đã được kết nối lại với Window Station). Người dùng đã kết nối lại với phiên RDP (người dùng được chỉ định LogonID mới).

EventID 4779 nằm trong “Windows -> Security” (Một phiên đã bị ngắt kết nối khỏi Window Station). Người dùng đã bị ngắt kết nối khỏi phiên RDP

Sự kiện 5: Đăng xuất

Log lưu sự kiện kết thúc của một phiên người dùng. Sự kiện này có EventID là 23 (Remote Desktop Services: Session logoff succeeded). Bạn tìm sự kiện này tại  “Applications and Services Logs -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> Operational.

Đồng thời, sự kiện với EventID là 4634 (An account was logged off) cũng  xuất hiện trong Security log.

EventID 9009  (The Desktop Window Manager has exited with code <X>) trong System log có nghĩa là người dùng đã bắt đầu đăng xuất khỏi phiên RDP với cả cửa sổ và khung đồ họa của người dùng đã bị chấm dứt.

EventID 4647 — Đăng xuất do người chủ động thực hiện

Lấy lịch sử đăng nhập Remote Desktop với PowerShell

Để lấy lịch sử đăng nhập bằng RDP của ngày hôm nay, bạn có thể sử dụng tệp lệnh sau:

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).*\s\sAccount Name:\s+([^\s]+)\s+.*','$1'
UserDomain = $_.Message -replace '(?smi).*\s\sAccount 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 connection 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)"}
}
}}

powershell: list todays rdp logons with an ip and username

Bạn có thể xuất nhật ký kết nối RDP từ Event Viewer ra file CSV (để phân tích thêm trong Excel). Bạn có thể xuất nhật ký từ Event Viewer GUI hoặc qua CMD

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

Hoặc bằng PowerShell:

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

Nếu người dùng của bạn kết nối với máy chủ RDS của công ty thông qua Remote Desktop Gateway, bạn có thể kiểm tra nhật ký kết nối người dùng trong log Microsoft-Windows-TerminalServices-Gateway bằng EventID 302. Ví dụ: tập lệnh PowerShell sau sẽ hiển thị lịch sử kết nối của người dùng được chỉ định thông qua RD Gateway:

$rdpusername="b.smith"
$properties = @(
@{n='User';e={$_.Properties[0].Value}},
@{n='Source IP Adress';e={$_.Properties[1].Value}},
@{n='TimeStamp';e={$_.TimeCreated}}
@{n='Target RDP host';e={$_.Properties[3].Value}}
)
(Get-WinEvent -FilterHashTable @{LogName='Microsoft-Windows-TerminalServices-Gateway/Operational';ID='302'} | Select-Object $properties) -match $rdpusername
rd gateway user connection logs

Bạn có thể kiểm tra các sự kiện kết nối của người dùng RD Gateway trong log sự kiện Microsoft-Windows-TerminalServices-Gateway:

  • 300 — Người dùng NAME, trên máy tính khách DEVICE, đã đáp ứng các yêu cầu về chính sách cấp quyền tài nguyên và do đó được phép kết nối với tài nguyên RDPHOST;
  • 302 — Người dùng NAME, trên máy tính khách DEVICE, được kết nối với tài nguyên RDPHOST;
  • 303 — Người dùng NAME, trên máy tính khách DEVICE, đã ngắt kết nối khỏi tài nguyên mạng sau: RDPHOST. Trước khi người dùng ngắt kết nối, máy khách đã chuyển X byte và nhận X byte. Thời lượng phiên khách hàng là X giây..

Bạn có thể hiển thị danh sách các phiên từ xa hiện tại trên máy chủ RDS của mình bằng lệnh:

qwinsta

Lệnh trả về ID phiên, USERNAME và trạng thái phiên (Hoạt động / Ngắt kết nối).

Qwinsta - list RDP sessions and usernames

Bạn có thể hiển thị danh sách các quy trình đang chạy trong phiên RDP cụ thể (với ID phiên được chỉ định):

qprocess /id:5
qprocess - get process list for an RDP session

Nhật ký kết nối RDP đi trong Windows

Bạn cũng có thể xem nhật ký kết nối RDP từ máy bạn tới máy khách. Nhật ký sự kiện kết nối đi được lưu tại: "Application and Services Logs -> Microsoft -> Windows -> TerminalServices-ClientActiveXCore -> Microsoft-Windows-TerminalServices-RDPClient -> Operational".

Ví dụ: EventID 1102 xảy ra khi người dùng kết nối với máy chủ Windows Server RDS từ xa hoặc máy tính Windows 10/11 có bật RDP. Như hình bên dưới nghĩa là Máy khách đã bắt đầu kết nối đến máy chủ 192.168.20.39.

Tập lệnh PowerShell sau sẽ hiển thị lịch sử kết nối máy khách RDP trên máy tính hiện tại:

$properties = @(
@{n='TimeStamp';e={$_.TimeCreated}}
@{n='LocalUser';e={$_.UserID}}
@{n='Target RDP host';e={$_.Properties[1].Value}}
)
Get-WinEvent -FilterHashTable @{LogName='Microsoft-Windows-TerminalServices-RDPClient/Operational';ID='1102'} | Select-Object $properties

Tập lệnh trả về SID của những người dùng đã khởi tạo kết nối RDP trên máy tính này, cũng như tên DNS / địa chỉ IP của máy chủ Remote Desktop mà người dùng đã kết nối.

Bài viết liên quan

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây

Bài viết nổi bật

Ý kiến gần đây