ตรวจสอบประวัติการเข้าระบบ RDP ด้วย 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 ที่พบ เพื่อให้ทีมงานตรวจสอบได้เร็วขึ้น
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
Related Posts
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี


