ตรวจสอบประวัติการเข้าระบบ RDP ด้วย Event Viewer

อ่านประวัติการ Login ผ่าน Remote Desktop ใน Event Viewer ทั้งครั้งที่สำเร็จและล้มเหลว รู้ว่าใครเข้ามาจาก IP ใด และดึงรายงานด้วย PowerShell

โดย ทีมงาน THAI DATA CLOUD อัปเดต อ่าน 10 นาที เข้าชม 8 ครั้ง

แชร์FacebookXLINELinkedIn
Event Viewer — ตรวจสอบประวัติการเข้าระบบ RDP ด้วย Event Viewer
ตรวจสอบประวัติการเข้าระบบ RDP ด้วย Event Viewer

คำตอบสั้น ๆ: อ่านประวัติการ Login ผ่าน Remote Desktop ใน Event Viewer ทั้งครั้งที่สำเร็จและล้มเหลว รู้ว่าใครเข้ามาจาก IP ใด และดึงรายงานด้วย PowerShell

คู่มือนี้อธิบาย Event Viewer ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย

Windows Server บันทึกการเข้าระบบทุกครั้งไว้ใน Event Log ทั้งครั้งที่ใส่รหัสผ่านถูกและผิด ข้อมูลนี้ใช้ตอบคำถามสำคัญได้ เช่น ใครเข้าเครื่องเมื่อคืนนี้ บัญชีนี้ถูกใช้จาก IP ใด หรือมีคนพยายามเดารหัสผ่าน RDP อยู่หรือไม่ ซึ่งเซิร์ฟเวอร์ที่เปิดพอร์ต RDP สู่อินเทอร์เน็ตมักพบการเดารหัสผ่านวันละหลายพันครั้ง

บทความนี้อธิบายว่า Event ID ใดเกี่ยวกับ RDP การกรองดูใน Event Viewer และคำสั่ง PowerShell สำหรับสรุปผลเป็นรายงาน

สิ่งที่ต้องเตรียม

  • บัญชีในกลุ่ม Administrators (การอ่าน Security Log ต้องใช้สิทธิ์ผู้ดูแล)
  • Windows Server 2019 หรือ 2022 ขั้นตอนเดียวกันใช้กับ 2016 ได้
  • การตั้งค่า Audit ค่าเริ่มต้นของ Windows Server บันทึก Logon ทั้งสำเร็จและล้มเหลวอยู่แล้ว ตรวจสอบได้ในขั้นตอนที่ 1

Event ID ที่ต้องรู้

LogEvent IDความหมาย
Security4624Logon สำเร็จ ดูฟิลด์ Logon Type: 10 คือ RemoteInteractive (RDP), 7 มักเป็นการ Reconnect หรือปลดล็อกหน้าจอ, 3 คือ Network
Security4625Logon ล้มเหลว เมื่อเปิด Network Level Authentication (ค่าเริ่มต้น) ความพยายามผ่าน RDP ที่ล้มเหลวมักแสดงเป็น Logon Type 3
Security4634 / 4647Logoff
Security4778 / 4779Session ถูก Reconnect / Disconnect
Security4740บัญชีถูกล็อก (ถ้าตั้ง Account Lockout Policy ไว้)
TerminalServices-RemoteConnectionManager/Operational1149ผ่านการยืนยันตัวตนระดับเครือข่ายแล้ว มีชื่อผู้ใช้และ IP ต้นทาง
TerminalServices-LocalSessionManager/Operational21, 22, 23, 24, 2521 Logon สำเร็จ, 22 เริ่ม Shell, 23 Logoff, 24 Disconnect, 25 Reconnect

ถ้าต้องการรู้ว่ามีใครเข้าเครื่องได้จริง ให้ดู 4624 ที่ Logon Type เป็น 10 หรือ Event 21/25 ส่วนถ้าต้องการดูการเดารหัสผ่าน ให้ดู 4625

ขั้นตอนที่ 1: ตรวจการตั้งค่า Audit

เปิด Command Prompt แบบ Run as Administrator แล้วสั่ง

auditpol /get /subcategory:"Logon"

ผลลัพธ์ที่ต้องการคือ Success and Failure ถ้าเป็น Success อย่างเดียว ให้เปิดการบันทึกความล้มเหลวด้วย

auditpol /set /subcategory:"Logon" /success:enable /failure:enable

บนเครื่องที่ใช้ Windows ภาษาอื่นหรือถูกควบคุมด้วย Group Policy ของ Domain ค่านี้อาจถูก Policy เขียนทับ ให้ตั้งที่ Group Policy แทน

ขั้นตอนที่ 2: ขยายขนาด Security Log

Security Log มีขนาดสูงสุดจำกัด (บนเซิร์ฟเวอร์ทั่วไปมักเป็น 20 MB) เมื่อเต็มจะเขียนทับรายการเก่า เครื่องที่ถูกเดารหัสผ่านหนักอาจเก็บย้อนหลังได้ไม่ถึงวัน ขยายเป็น 200 MB ด้วยคำสั่ง

wevtutil sl Security /ms:209715200

หรือใน Event Viewer คลิกขวาที่ Security > Properties แล้วแก้ Maximum log size (KB) ตรวจพื้นที่ไดรฟ์ C: ให้พอก่อนขยาย

ขั้นตอนที่ 3: ดูใน Event Viewer

  1. กด Win + R พิมพ์ eventvwr.msc
  2. เปิด Windows Logs > Security
  3. คลิก Filter Current Log... ทางขวา ในช่อง Includes/Excludes Event IDs ใส่ 4624,4625 และเลือกช่วงเวลาที่ Logged เช่น Last 24 hours แล้วกด OK
  4. ดับเบิลคลิกรายการเพื่อดูรายละเอียด ส่วนที่สำคัญคือ Logon Type, New Logon > Account Name, Network Information > Source Network Address (IP ต้นทาง)

สำหรับภาพรวมการเข้าใช้งานที่อ่านง่ายกว่า ให้เปิด Applications and Services Logs > Microsoft > Windows > TerminalServices-LocalSessionManager > Operational แล้วกรอง Event ID 21,23,24,25 แต่ละรายการบอกชื่อผู้ใช้ Session ID และ Source Network Address ในข้อความเดียว

ถ้าต้องเปิดดูบ่อย ให้กด Save Filter to Custom View เพื่อเก็บตัวกรองไว้ใน Custom Views

ขั้นตอนที่ 4: สรุปด้วย PowerShell

รายการ Logon ผ่าน RDP ที่สำเร็จใน 7 วันล่าสุด พร้อมชื่อผู้ใช้และ IP

Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624; StartTime=(Get-Date).AddDays(-7)} | ForEach-Object {
  $d = @{}; ([xml]$_.ToXml()).Event.EventData.Data | ForEach-Object { $d[$_.Name] = $_.'#text' }
  if ($d.LogonType -in '10','7') {
    [pscustomobject]@{Time=$_.TimeCreated; User=$d.TargetUserName; Type=$d.LogonType; IP=$d.IpAddress}
  }
} | Format-Table -AutoSize

สรุป 20 IP ที่ Logon ล้มเหลวมากที่สุดใน 24 ชั่วโมงล่าสุด

Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625; StartTime=(Get-Date).AddDays(-1)} | ForEach-Object {
  $d = @{}; ([xml]$_.ToXml()).Event.EventData.Data | ForEach-Object { $d[$_.Name] = $_.'#text' }
  [pscustomobject]@{IP=$d.IpAddress; User=$d.TargetUserName}
} | Group-Object IP | Sort-Object Count -Descending | Select-Object -First 20 Count, Name

ถ้าไม่มีรายการเลย PowerShell จะแจ้ง No events were found that match the specified selection criteria ซึ่งหมายถึงไม่มีเหตุการณ์ในช่วงนั้น ไม่ใช่คำสั่งผิด

ตัวอย่างการส่งออกเป็นไฟล์ CSV เพื่อเปิดใน Excel ให้ต่อท้ายคำสั่งแรกด้วย | Export-Csv C:\Temp\rdp-logins.csv -NoTypeInformation -Encoding UTF8 แทน Format-Table

อ่านรหัสสาเหตุของการ Logon ล้มเหลว

ใน Event 4625 ฟิลด์ Sub Status บอกสาเหตุที่แท้จริง

Sub Statusความหมาย
0xC000006Aชื่อผู้ใช้ถูก แต่รหัสผ่านผิด
0xC0000064ไม่มีชื่อผู้ใช้นี้ในระบบ (มักเป็นการสุ่มชื่อ)
0xC0000234บัญชีถูกล็อกอยู่
0xC0000072บัญชีถูกปิดใช้งาน
0xC000006FLogin นอกช่วงเวลาที่อนุญาต

ถ้าเห็น 0xC000006A กับบัญชีที่มีอยู่จริงจำนวนมาก แปลว่าผู้โจมตีรู้ชื่อบัญชีแล้ว ควรเปลี่ยนรหัสผ่านให้ยาวและคาดเดายาก

ตรวจสอบผลลัพธ์

  • ลอง Logon ผ่าน RDP ด้วยรหัสผ่านผิดหนึ่งครั้งจากเครื่องของคุณ แล้วรันคำสั่งสรุป 4625 ต้องเห็น IP ของคุณในรายการ
  • Logon สำเร็จอีกครั้ง แล้วดู TerminalServices-LocalSessionManager ต้องมี Event 21 ที่เวลาตรงกัน
  • ถ้าเห็น Logon สำเร็จจาก IP ที่ไม่รู้จัก ให้เปลี่ยนรหัสผ่านบัญชีนั้นทันที ตรวจบัญชีผู้ใช้ที่ถูกสร้างใหม่ (Event 4720) และปรึกษาทีมงาน

ปัญหาที่พบบ่อย

ช่อง Source Network Address เป็นเครื่องหมาย - หรือว่าง

เกิดได้กับ Event 4625 บางรายการ เมื่อการยืนยันตัวตนล้มเหลวก่อนระบบจะรู้ IP ให้ดู Event 1149 และ Log ของ Firewall ประกอบ หรือเปิดการบันทึก Dropped Packets ใน Windows Defender Firewall

Security Log มีเฉพาะรายการไม่กี่ชั่วโมงล่าสุด

Log เต็มและถูกเขียนทับ ให้ขยายขนาดตามขั้นตอนที่ 2 และลดจำนวนการเดารหัสผ่านที่เข้ามา

มีการเดารหัสผ่านวันละหลายพันครั้ง

ตั้ง Account Lockout Policy ตามบทความ ตั้งค่า Account Lockout Policy ป้องกันการเดารหัสผ่าน RDP จำกัด IP ที่เข้า RDP ได้ด้วย เปิด Port บน Windows Defender Firewall (ใช้ส่วน Scope ของกฎ) และพิจารณา เปลี่ยน Port Remote Desktop (RDP) บน Windows Server เพื่อลดการสแกนอัตโนมัติ

Get-WinEvent ขึ้น Attempted to perform an unauthorized operation

PowerShell ไม่ได้เปิดแบบ Run as Administrator ปิดแล้วเปิดใหม่ด้วยสิทธิ์ผู้ดูแล

หากทำตามขั้นตอนแล้วยังติดปัญหา สามารถติดต่อทีมงาน THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/ โดยแจ้งชื่อเซิร์ฟเวอร์ ขั้นตอนที่ทำไปแล้ว และข้อความ Error ที่พบ เพื่อให้ทีมงานตรวจสอบได้เร็วขึ้น

สรุปขั้นตอน Event Viewer

ทบทวน Event Viewer ทั้งหมดตามลำดับ ก่อนนำไปใช้กับระบบจริง

  1. ตรวจการตั้งค่า Audit
  2. ขยายขนาด Security Log
  3. ดูใน Event Viewer
  4. สรุปด้วย PowerShell

เมื่อทำครบทุกข้อแล้ว Event Viewer จะพร้อมใช้งาน หากผลลัพธ์ไม่เป็นไปตามที่คาด ให้ย้อนกลับไปดูหัวข้อปัญหาที่พบบ่อยด้านบน ซึ่งรวบรวมกรณีที่พบจริงจากการใช้งาน Event Viewer ไว้แล้ว

อ่านเพิ่มเติมเกี่ยวกับ Event Viewer

แชร์FacebookXLINELinkedIn

มีคำถามเรื่องบริการ? ติดต่อทีมงาน