ตรวจสอบประวัติการเข้าระบบ 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 ที่ต้องรู้
Log Event ID ความหมาย
Security 4624 Logon สำเร็จ ดูฟิลด์ Logon Type: 10 คือ RemoteInteractive (RDP), 7 มักเป็นการ Reconnect หรือปลดล็อกหน้าจอ, 3 คือ Network
Security 4625 Logon ล้มเหลว เมื่อเปิด Network Level Authentication (ค่าเริ่มต้น) ความพยายามผ่าน RDP ที่ล้มเหลวมักแสดงเป็น Logon Type 3
Security 4634 / 4647 Logoff
Security 4778 / 4779 Session ถูก Reconnect / Disconnect
Security 4740 บัญชีถูกล็อก (ถ้าตั้ง Account Lockout Policy ไว้)
TerminalServices-RemoteConnectionManager/Operational 1149 ผ่านการยืนยันตัวตนระดับเครือข่ายแล้ว มีชื่อผู้ใช้และ IP ต้นทาง
TerminalServices-LocalSessionManager/Operational 21, 22, 23, 24, 25 21 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
กด Win + R พิมพ์ eventvwr.msc
เปิด Windows Logs > Security
คลิก Filter Current Log... ทางขวา ในช่อง Includes/Excludes Event IDs ใส่ 4624,4625 และเลือกช่วงเวลาที่ Logged เช่น Last 24 hours แล้วกด OK
ดับเบิลคลิกรายการเพื่อดูรายละเอียด ส่วนที่สำคัญคือ 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 บัญชีถูกปิดใช้งาน
0xC000006F Login นอกช่วงเวลาที่อนุญาต
ถ้าเห็น 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 ทั้งหมดตามลำดับ ก่อนนำไปใช้กับระบบจริง
ตรวจการตั้งค่า Audit
ขยายขนาด Security Log
ดูใน Event Viewer
สรุปด้วย PowerShell
เมื่อทำครบทุกข้อแล้ว Event Viewer จะพร้อมใช้งาน หากผลลัพธ์ไม่เป็นไปตามที่คาด ให้ย้อนกลับไปดูหัวข้อปัญหาที่พบบ่อยด้านบน ซึ่งรวบรวมกรณีที่พบจริงจากการใช้งาน Event Viewer ไว้แล้ว
อ่านเพิ่มเติมเกี่ยวกับ Event Viewer