Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows Server

การติดตามและวิเคราะห์บันทึกการเชื่อมต่อเดสก์ท็อประยะไกลใน Windows

ในบทความนี้ เราจะอธิบายวิธีรับและตรวจสอบบันทึกการเชื่อมต่อ RDP ใน Windows บันทึกการเชื่อมต่อ RDP ช่วยให้ผู้ดูแลระบบเทอร์มินัลเซิร์ฟเวอร์ RDS ได้รับข้อมูลเกี่ยวกับผู้ใช้ที่เข้าสู่ระบบเซิร์ฟเวอร์เมื่อผู้ใช้ RDP เฉพาะเข้าสู่ระบบและสิ้นสุดเซสชัน และอุปกรณ์ (ชื่อ DNS หรือที่อยู่ IP) ที่ผู้ใช้เข้าสู่ระบบ


บทความนี้ใช้ได้เมื่อวิเคราะห์บันทึก RDP สำหรับทั้ง Windows Server 2022/2019/2016/2012R2 และรุ่นเดสก์ท็อป (Windows 11, 10 และ 8.1)

เหตุการณ์การเชื่อมต่อ RDP ใน Windows Event Viewer

เมื่อผู้ใช้เชื่อมต่อกับโฮสต์ RDS ที่เปิดใช้งานเดสก์ท็อประยะไกลหรือ RDS ข้อมูลเกี่ยวกับเหตุการณ์เหล่านี้จะถูกเก็บไว้ในบันทึกของตัวแสดงเหตุการณ์ (eventvwr.msc ). พิจารณาขั้นตอนหลักของการเชื่อมต่อ RDP และเหตุการณ์ที่เกี่ยวข้องใน Event Viewer ซึ่งผู้ดูแลระบบอาจสนใจ

  1. การเชื่อมต่อเครือข่าย
  2. รับรองความถูกต้อง;
  3. เข้าสู่ระบบ;
  4. เซสชันยกเลิกการเชื่อมต่อ/เชื่อมต่อใหม่
  5. ออกจากระบบ

การเชื่อมต่อเครือข่าย – การสร้างการเชื่อมต่อเครือข่ายไปยังเซิร์ฟเวอร์จากไคลเอนต์ RDP ของผู้ใช้ เป็นกิจกรรมที่มี EventID 1149 (Remote Desktop Services: User authentication succeeded ). หากพบเหตุการณ์นี้ ไม่ได้หมายความว่าการตรวจสอบสิทธิ์ผู้ใช้สำเร็จ บันทึกนี้อยู่ใน “บันทึกการใช้งานและบริการ -> Microsoft -> Windows -> Terminal-Services-RemoteConnectionManager> การดำเนินงาน”. เปิดใช้งานตัวกรองบันทึกสำหรับเหตุการณ์นี้ (คลิกขวาที่บันทึก -> กรองบันทึกปัจจุบัน -> EventId 1149 )

การติดตามและวิเคราะห์บันทึกการเชื่อมต่อเดสก์ท็อประยะไกลใน Windows

คุณสามารถระบุความพยายามในการเชื่อมต่อ RDP ทั้งหมดด้วย PowerShell:

$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

การติดตามและวิเคราะห์บันทึกการเชื่อมต่อเดสก์ท็อประยะไกลใน Windows

จากนั้นคุณจะได้รับรายการกิจกรรมพร้อมประวัติการเชื่อมต่อ RDP ทั้งหมดกับเซิร์ฟเวอร์นี้ บันทึกจะระบุชื่อผู้ใช้ โดเมน (ในกรณีนี้คือการตรวจสอบสิทธิ์ระดับเครือข่าย หากปิดใช้งาน NLA คำอธิบายเหตุการณ์จะเปลี่ยนไป) และที่อยู่ IP ของคอมพิวเตอร์ของผู้ใช้

การติดตามและวิเคราะห์บันทึกการเชื่อมต่อเดสก์ท็อประยะไกลใน Windows

การตรวจสอบสิทธิ์ แสดงว่าผู้ใช้ RDP ได้รับการพิสูจน์ตัวตนบนเซิร์ฟเวอร์สำเร็จหรือไม่ บันทึกจะอยู่ภายใต้ Windows -> ความปลอดภัย ดังนั้น คุณอาจสนใจกิจกรรมที่มี EventID 4624 (An account was successfully logged on ) หรือ 4625 (An account failed to log on )

โปรดให้ความสนใจกับ LogonType ค่าในคำอธิบายเหตุการณ์

  • LogonType =10 หรือ 3 — หากใช้บริการเดสก์ท็อประยะไกลเพื่อสร้างเซสชันใหม่ระหว่างการเข้าสู่ระบบ
  • LogonType =7 หมายความว่าผู้ใช้ได้เชื่อมต่อกับเซสชัน RDP ที่มีอยู่อีกครั้ง
  • LogonType =5 – การเชื่อมต่อ RDP กับคอนโซลเซิร์ฟเวอร์ (ในโหมด mstsc.exe /admin)
คุณสามารถใช้เหตุการณ์ความล้มเหลวในการตรวจสอบสิทธิ์ RDP เพื่อป้องกันการโจมตีแบบเดรัจฉาน RDP คุณสามารถบล็อก IP ของผู้โจมตีได้โดยอัตโนมัติที่ไฟร์วอลล์ Windows Defender โดยใช้สคริปต์ PowerShell แบบง่าย

การติดตามและวิเคราะห์บันทึกการเชื่อมต่อเดสก์ท็อประยะไกลใน Windows

ในกรณีนี้ ชื่อผู้ใช้จะอยู่ในคำอธิบายเหตุการณ์ใน ชื่อบัญชี ฟิลด์ ชื่อคอมพิวเตอร์ใน ชื่อเวิร์กสเตชัน และ IP ของผู้ใช้ใน ที่อยู่เครือข่ายต้นทาง .

โปรดทราบค่าของ LogonID สนาม. นี่คือตัวระบุเซสชัน RDP ของผู้ใช้ที่ไม่ซ้ำกันซึ่งจะช่วยติดตามกิจกรรมเพิ่มเติมของผู้ใช้ อย่างไรก็ตาม หากเซสชัน RDP ถูกตัดการเชื่อมต่อและผู้ใช้เชื่อมต่ออีกครั้ง ผู้ใช้จะได้รับ LogonID ใหม่ (แม้ว่าเซสชัน RDP จะยังเหมือนเดิม)

คุณสามารถรับรายการเหตุการณ์การตรวจสอบสิทธิ์ RDP ที่สำเร็จ (EventID 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

การติดตามและวิเคราะห์บันทึกการเชื่อมต่อเดสก์ท็อประยะไกลใน Windows

เข้าสู่ระบบ หมายถึงการเข้าสู่ระบบ RDP ไปยัง Windows รหัสเหตุการณ์ 21 – เหตุการณ์นี้ปรากฏขึ้นหลังจากตรวจสอบผู้ใช้สำเร็จแล้ว (Remote Desktop Services: Session logon succeeded ). เหตุการณ์นี้จะอยู่ใน “บันทึกการใช้งานและบริการ -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> การดำเนินงาน”. อย่างที่คุณเห็น คุณจะพบ ID ของเซสชัน RDP ของผู้ใช้ได้ที่นี่ — Session ID .

การติดตามและวิเคราะห์บันทึกการเชื่อมต่อเดสก์ท็อประยะไกลใน Windows

รหัสเหตุการณ์ – 21 (Remote Desktop Services: Shell start notification received ) แสดงว่าเชลล์ของ Explorer เริ่มต้นสำเร็จแล้ว (เดสก์ท็อป Windows ปรากฏในเซสชัน RDP ของผู้ใช้)

เซสชันยกเลิกการเชื่อมต่อ/เชื่อมต่อใหม่ – เหตุการณ์การยกเลิกการเชื่อมต่อและการเชื่อมต่อใหม่มี ID ที่แตกต่างกันขึ้นอยู่กับสิ่งที่ทำให้ผู้ใช้ขาดการเชื่อมต่อ (การตัดการเชื่อมต่อเนื่องจากการไม่ใช้งานที่กำหนดไว้ในการหมดเวลาสำหรับเซสชัน RDP ผู้ใช้เลือกตัวเลือก Disconnect ในเซสชัน เซสชัน RDP สิ้นสุดโดยผู้ใช้รายอื่นหรือผู้ดูแลระบบ เป็นต้น) คุณสามารถค้นหาเหตุการณ์เหล่านี้ได้ใน Event Viewer ภายใต้ “Applications and Services Logs -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> Operational” ลองพิจารณารหัสเหตุการณ์ RDP ที่อาจเป็นประโยชน์:

  • รหัสเหตุการณ์ – 24 (Remote Desktop Services: Session has been disconnected ) – ผู้ใช้ยกเลิกการเชื่อมต่อจากเซสชัน RDP;
  • รหัสเหตุการณ์ – 25 (Remote Desktop Services: Session reconnection succeeded ) – ผู้ใช้เชื่อมต่อกับเซสชัน RDP ที่มีอยู่บนเซิร์ฟเวอร์อีกครั้ง
  • รหัสเหตุการณ์ – 39 (Session <A> has been disconnected by session <B> ) – ผู้ใช้ยกเลิกการเชื่อมต่อจากเซสชัน RDP โดยเลือกตัวเลือกเมนูที่เกี่ยวข้อง (แทนที่จะปิดหน้าต่างไคลเอ็นต์ RDP) หาก ID เซสชันต่างกัน แสดงว่าผู้ใช้ถูกตัดการเชื่อมต่อโดยผู้ใช้อื่น (หรือผู้ดูแลระบบ)
  • รหัสเหตุการณ์ – 40 (Session <A> has been disconnected, reason code <B> ). ที่นี่ คุณต้องตรวจสอบรหัสเหตุผลในการตัดการเชื่อมต่อในคำอธิบายเหตุการณ์ ตัวอย่างเช่น:
    • รหัสเหตุผล 0 (No additional information is available ) หมายความว่าผู้ใช้เพิ่งปิดหน้าต่างไคลเอนต์ RDP;
    • รหัสเหตุผล 5 (The client’s connection was replaced by another connection ) หมายความว่าผู้ใช้ได้เชื่อมต่อกับเซสชัน RDP ก่อนหน้าอีกครั้ง
    • รหัสเหตุผล 11 (User activity has initiated the disconnect ) ผู้ใช้ได้คลิกปุ่มยกเลิกการเชื่อมต่อในเมนูเริ่มต้น

รหัสเหตุการณ์ 4778 ใน Windows -> บันทึกความปลอดภัย (เซสชันเชื่อมต่อกับ Window Station อีกครั้ง) ผู้ใช้เชื่อมต่อกับเซสชัน RDP อีกครั้ง (ผู้ใช้ได้รับ LogonID ใหม่)

รหัสเหตุการณ์ 4779 ในบันทึก “Windows -> Security” (A session was disconnected from a Window Station ). ผู้ใช้ถูกตัดการเชื่อมต่อจากเซสชัน RDP

ออกจากระบบ หมายถึงจุดสิ้นสุดของเซสชันผู้ใช้ มันถูกบันทึกเป็นเหตุการณ์ด้วย EventID 23 (Remote Desktop Services: Session logoff succeeded ) ภายใต้ “บันทึกการใช้งานและบริการ -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> Operational”

การติดตามและวิเคราะห์บันทึกการเชื่อมต่อเดสก์ท็อประยะไกลใน Windows

ในเวลาเดียวกัน EventID 4634 (An account was logged off ) ปรากฏในบันทึกความปลอดภัย

รหัสเหตุการณ์ 9009 (The Desktop Window Manager has exited with code <X> ) ในบันทึกของระบบ หมายความว่าผู้ใช้ได้เริ่มออกจากระบบจากเซสชัน RDP โดยที่ทั้งหน้าต่างและเปลือกกราฟิกของผู้ใช้ถูกยกเลิก

รหัสเหตุการณ์ 4647 — ออกจากระบบโดยผู้ใช้

การรับประวัติการเข้าสู่ระบบเดสก์ท็อประยะไกลด้วย PowerShell

นี่คือสคริปต์ PowerShell สั้นๆ ที่แสดงประวัติการเชื่อมต่อ RDP ทั้งหมดสำหรับวันปัจจุบันจากบันทึกเหตุการณ์ของเซิร์ฟเวอร์เทอร์มินัล RDS ตารางผลลัพธ์แสดงเวลาเชื่อมต่อ ที่อยู่ IP ของไคลเอ็นต์ (ชื่อคอมพิวเตอร์ DNS) และชื่อผู้ใช้ระยะไกล (หากจำเป็น คุณสามารถรวม LogonTypes อื่นๆ ในรายงานได้)

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)"}
}
}}

การติดตามและวิเคราะห์บันทึกการเชื่อมต่อเดสก์ท็อประยะไกลใน Windows

วิธีนี้ช่วยให้คุณรวบรวมและแยกวิเคราะห์บันทึกการเชื่อมต่อ RDP บนเซิร์ฟเวอร์ RDSH แบบสแตนด์อโลน หากคุณมีเซิร์ฟเวอร์หลายเครื่องในฟาร์ม RDS คุณสามารถสอบถามแต่ละเซิร์ฟเวอร์ด้วยสคริปต์นี้ หรือรับบันทึกจากเซิร์ฟเวอร์การจัดการที่มีบทบาทนายหน้าการเชื่อมต่อเดสก์ท็อประยะไกล

คุณสามารถส่งออกบันทึกการเชื่อมต่อ RDP จาก Event Viewer เป็นไฟล์ CSV (สำหรับการวิเคราะห์เพิ่มเติมในสเปรดชีต Excel) คุณสามารถส่งออกบันทึกจาก Event Viewer GUI (สมมติว่าบันทึก Event Viewer ไม่ถูกล้าง) หรือผ่านทางพรอมต์คำสั่ง:

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

หรือด้วย PowerShell:

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

หากผู้ใช้ของคุณเชื่อมต่อกับโฮสต์ RDS ขององค์กรผ่านเกตเวย์เดสก์ท็อประยะไกล คุณสามารถตรวจสอบบันทึกการเชื่อมต่อผู้ใช้ใน Microsoft-Windows-TerminalServices-Gateway บันทึกโดย EventID 302 . ตัวอย่างเช่น สคริปต์ PowerShell ต่อไปนี้จะแสดงประวัติการเชื่อมต่อของผู้ใช้ที่ระบุผ่านเกตเวย์ RD:

$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

การติดตามและวิเคราะห์บันทึกการเชื่อมต่อเดสก์ท็อประยะไกลใน Windows

คุณสามารถตรวจสอบเหตุการณ์การเชื่อมต่อผู้ใช้ RD Gateway ต่อไปนี้ในบันทึกเหตุการณ์ Microsoft-Windows-TerminalServices-Gateway:

  • 300 — ผู้ใช้ NAME บนคอมพิวเตอร์ไคลเอนต์ DEVICE เป็นไปตามข้อกำหนดนโยบายการให้สิทธิ์ทรัพยากร และดังนั้นจึงได้รับอนุญาตให้เชื่อมต่อกับทรัพยากร RDPHOST
  • 302 — ผู้ใช้ NAME บนคอมพิวเตอร์ไคลเอนต์ DEVICE เชื่อมต่อกับทรัพยากร RDPHOST
  • 303 — ผู้ใช้ NAME บนคอมพิวเตอร์ไคลเอนต์ DEVICE ตัดการเชื่อมต่อจากทรัพยากรเครือข่ายต่อไปนี้:RDPHOST ก่อนที่ผู้ใช้จะตัดการเชื่อมต่อ ไคลเอ็นต์จะโอน X ไบต์และรับ X ไบต์ ระยะเวลาเซสชันไคลเอ็นต์คือ X วินาที

คุณสามารถแสดงรายการของเซสชันระยะไกลปัจจุบันบนโฮสต์ RDS ของคุณด้วยคำสั่ง:

qwinsta
คำสั่งส่งคืน ID เซสชัน USERNAME และสถานะเซสชัน (ใช้งานอยู่/ยกเลิกการเชื่อมต่อ) คำสั่งนี้มีประโยชน์เมื่อคุณต้องการรับ ID เซสชัน RDP ของผู้ใช้เมื่อใช้การเชื่อมต่อ Shadow Remote Desktop

การติดตามและวิเคราะห์บันทึกการเชื่อมต่อเดสก์ท็อประยะไกลใน Windows

คุณสามารถแสดงรายการของกระบวนการที่ทำงานอยู่ในเซสชัน RDP เฉพาะ (ระบุ ID เซสชัน):

qprocess /id:5

การติดตามและวิเคราะห์บันทึกการเชื่อมต่อเดสก์ท็อประยะไกลใน Windows

บันทึกการเชื่อมต่อ RDP ขาออกใน Windows

คุณยังสามารถดูบันทึกการเชื่อมต่อ RDP ขาออกที่ฝั่งไคลเอ็นต์ได้ มีอยู่ในบันทึกเหตุการณ์ต่อไปนี้:บันทึกแอปพลิเคชันและบริการ -> Microsoft -> Windows -> TerminalServices-ClientActiveXCore -> Microsoft-Windows-TerminalServices-RDPClient -> Operational

ตัวอย่างเช่น EventID 1102 เกิดขึ้นเมื่อผู้ใช้เชื่อมต่อกับโฮสต์ Windows Server RDS ระยะไกลหรือคอมพิวเตอร์ Windows 10/11 ที่เปิดใช้งาน RDP (รุ่น Windows บนเดสก์ท็อปยังรองรับการเชื่อมต่อ RDP พร้อมกันหลายรายการ)

The client has initiated a multi-transport connection to the server 192.168.13.201.

การติดตามและวิเคราะห์บันทึกการเชื่อมต่อเดสก์ท็อประยะไกลใน Windows

สคริปต์ RDP ต่อไปนี้จะแสดงประวัติการเชื่อมต่อไคลเอ็นต์ RDP บนคอมพิวเตอร์ปัจจุบัน:

$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

การติดตามและวิเคราะห์บันทึกการเชื่อมต่อเดสก์ท็อประยะไกลใน Windows

สคริปต์ส่งคืน SID ของผู้ใช้ที่เริ่มต้นการเชื่อมต่อ RDP บนคอมพิวเตอร์เครื่องนี้ ตลอดจนชื่อ DNS/ที่อยู่ IP ของโฮสต์เดสก์ท็อประยะไกลที่ผู้ใช้เชื่อมต่อ คุณสามารถแปลง SID เป็นชื่อผู้ใช้ได้ดังนี้

นอกจากนี้ คุณยังตรวจสอบประวัติการเชื่อมต่อ RDP ได้ในรีจิสทรีของผู้ใช้