Techerest

Windows Event Log Analysis & Threat Hunting Fundamentals วิเคราะห์ Windows Security Events, Sysmon และ PowerShell Logs เพื่อค้นหาพฤติกรรมการโจมตีด้วยหลักฐานจริง

Windows Event Log Analysis & Threat Hunting Fundamentals — วิเคราะห์ Security Events และค้นหาภัยคุกคามด้วย Sysmon และ PowerShell

สมมติว่าผู้ดูแลระบบพบการเข้าสู่ระบบ ไม่สำเร็จหลายครั้งบน Windows Server หลังจากนั้นไม่นาน กลับพบการเข้าสู่ระบบ สำเร็จจากแหล่งที่มาซึ่งไม่คุ้นเคย

เหตุการณ์นี้คือการโจมตีหรือไม่? บัญชีผู้ใช้อาจถูกขโมยรหัสผ่านหรือเปล่า? หรือเป็นเพียงผู้ใช้งานที่พิมพ์รหัสผ่านผิด ก่อนเข้าสู่ระบบสำเร็จตามปกติ?

การตอบคำถามเหล่านี้ต้องอาศัยหลักฐาน จาก Windows Event Logs และการวิเคราะห์ความสัมพันธ์ ระหว่างเหตุการณ์หลายรายการ

ในบทความนี้ Techerest จะพาคุณเรียนรู้ตั้งแต่ Windows Security Event IDs, Sysmon, PowerShell Log Analysis, Event Correlation และ IOC Hunting ไปจนถึงการสร้าง Detection Rules พร้อม Hands-on Safe Lab ที่สามารถนำไปทดลองได้จริง

เป้าหมายคือเปลี่ยนจากการอ่าน Log เป็นครั้งคราว ไปสู่การคิดอย่าง Security Analyst ที่สามารถตั้งสมมติฐาน ค้นหาหลักฐาน ประเมินความเสี่ยง และอธิบายผลการตรวจสอบ ได้อย่างเป็นระบบ

1. Windows Event Logs คืออะไร?

Windows Event Logs เป็นระบบบันทึกเหตุการณ์ของ Windows ที่จัดเก็บข้อมูลการทำงานของระบบ แอปพลิเคชัน และเหตุการณ์ ที่เกี่ยวข้องกับความปลอดภัย

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

1.1 ประเภทของ Windows Event Logs

Log หน้าที่
Security การเข้าสู่ระบบ การเปลี่ยนสิทธิ์ และเหตุการณ์ Audit
System บริการ Driver และเหตุการณ์ระบบปฏิบัติการ
Application เหตุการณ์จากแอปพลิเคชัน
PowerShell Operational เหตุการณ์ที่เกี่ยวข้องกับ PowerShell
Sysmon Operational Process, Network, File และกิจกรรมอื่นตามการตั้งค่า

1.2 Windows Event Viewer

บน Windows 11 สามารถเปิด Event Viewer โดยกด Windows + R แล้วพิมพ์

eventvwr.msc

จากนั้นเปิด Windows Logs และเลือก Security, System หรือ Application ตามต้องการ

สำหรับ Sysmon และ PowerShell ให้ดูใน Applications and Services Logs ภายใต้ชื่อ Provider ที่เกี่ยวข้อง

1.3 Event Log มีข้อมูลอะไรบ้าง?

  • Event ID: ประเภทเหตุการณ์
  • TimeCreated: เวลาที่บันทึกเหตุการณ์
  • Provider: แหล่งกำเนิด Event
  • Computer: เครื่องที่บันทึก Event
  • Record ID: หมายเลขรายการใน Event Log
  • EventData: รายละเอียดเฉพาะของเหตุการณ์

Event ID เดียวกันอาจมีความหมายต่างกัน เมื่ออยู่คนละ Provider จึงควรพิจารณา Provider และ Channel ร่วมกับ Event ID เสมอ

2. Windows Security Event IDs ที่ Security Analyst ควรรู้

Windows Security Log มีเหตุการณ์หลายประเภท แต่ผู้เริ่มต้นสามารถเริ่มจาก Event IDs ที่เกี่ยวข้องกับ Authentication, Privileges, Process และ Security Configuration

2.1 Authentication Events

Event ID ความหมาย
4624 เข้าสู่ระบบสำเร็จ
4625 เข้าสู่ระบบไม่สำเร็จ
4634 Logon Session สิ้นสุด
4648 พยายามเข้าสู่ระบบด้วย Explicit Credentials
4740 บัญชีถูก Lockout

2.2 Privilege และ Account Events

Event ID ความหมาย
4672 Special Privileges Assigned to New Logon
4720 สร้างบัญชีผู้ใช้
4726 ลบบัญชีผู้ใช้
4732 เพิ่มสมาชิกใน Security-Enabled Local Group
4719 System Audit Policy ถูกเปลี่ยน

2.3 Process และ Persistence Events

Event ID ความหมาย
4688 Process ถูกสร้าง
4697 Service ถูกติดตั้ง
4698 Scheduled Task ถูกสร้าง
4663 มีการเข้าถึง Object ที่อยู่ภายใต้ Audit
1102 Security Audit Log ถูกล้าง

Event บางรายการต้องเปิด Audit Policy หรือกำหนดการตรวจสอบเพิ่มเติม จึงจะปรากฏในระบบ

2.4 Windows Event IDs ไม่ใช่ Malware Signatures

ตัวอย่างเช่น Event 4688 ที่แสดงการเรียกใช้งาน PowerShell ไม่ได้แปลว่ามีการโจมตี

PowerShell เป็นเครื่องมือบริหารระบบปกติ ซึ่งทั้ง Administrator และผู้โจมตีสามารถใช้งานได้

ต้องพิจารณาว่าใครเรียกใช้งาน เรียกจาก Process ใด ใช้ Command Line อะไร และเกิดขึ้นในบริบทใด

3. Windows Logon Types — วิเคราะห์การเข้าสู่ระบบ

Event ID 4624 มีข้อมูล Logon Type ซึ่งช่วยอธิบายลักษณะการเข้าสู่ระบบ

3.1 Logon Types ที่สำคัญ

Type ความหมาย
2 Interactive Logon
3 Network Logon
4 Batch Logon
5 Service Logon
7 Unlock
10 RemoteInteractive เช่น RDP
11 CachedInteractive

3.2 ตัวอย่างการวิเคราะห์ RDP

สมมติพบ Event ID 4624 ที่มี Logon Type 10 บน Windows Server

ข้อมูลนี้อาจสัมพันธ์กับ Remote Desktop Logon แต่ไม่เพียงพอที่จะยืนยัน ว่ามีผู้โจมตีเข้าระบบ

ควรตรวจสอบ Account, Source Network Address, TimeCreated, Logon ID และนโยบายการเข้าถึงจากระยะไกล

3.3 Correlate Event 4624 กับ 4672

Event ID 4672 อาจเกิดขึ้น เมื่อ Logon Session ได้รับ Special Privileges

สามารถใช้ Logon ID และข้อมูลบริบทอื่น เชื่อมโยงกับ Event 4624 บนเครื่องเดียวกันได้

แต่ Event 4672 เพียงรายการเดียว ไม่ได้ยืนยันว่าเกิด Privilege Escalation เพราะบัญชีผู้ดูแลระบบ อาจได้รับสิทธิ์เหล่านี้ตามปกติ

4. Sysmon — เพิ่มความสามารถในการมองเห็นกิจกรรมระบบ

System Monitor หรือ Sysmon เป็นเทคโนโลยีสำหรับบันทึก กิจกรรมระดับระบบบน Windows

Sysmon สามารถเพิ่มรายละเอียด ที่มีประโยชน์ต่อ Threat Hunting เช่น Process GUID, Parent Process, File Hash และ Network Connections

Sysmon ไม่ใช่ Antivirus และไม่ได้ป้องกัน Malware โดยตรง แต่เป็นแหล่ง Telemetry สำหรับการวิเคราะห์และตรวจจับ

4.1 Sysmon Event IDs ที่สำคัญ

Event ID Event
1 Process Create
3 Network Connection
5 Process Terminate
7 Image Loaded
8 CreateRemoteThread
10 Process Access
11 File Create
12–14 Registry Events
22 DNS Query
23 File Delete Archived
25 Process Tampering
26 File Delete Detected

4.2 Sysmon Event ID 1 — Process Create

ช่วยตรวจสอบการสร้าง Process และความสัมพันธ์กับ Parent Process

ตัวอย่างเช่น ถ้า Application ที่ปกติใช้เปิดเอกสาร สร้าง Command Interpreter โดยไม่คาดคิด อาจเป็นเหตุผลให้เริ่มตรวจสอบเพิ่มเติม

4.3 Sysmon Event ID 3 — Network Connection

ใช้บันทึกข้อมูลการเชื่อมต่อเครือข่าย ที่เกี่ยวข้องกับ Process ตามการตั้งค่า Sysmon

Event ID 3 ไม่ได้เปิดเก็บทุกกรณี โดยอัตโนมัติในทุกการติดตั้ง และอาจสร้าง Log จำนวนมาก

4.4 Sysmon Event ID 22 — DNS Query

ช่วยระบุว่า Process ใด มีการ Query ชื่อโดเมน ตามความสามารถและการตั้งค่าของระบบ

ข้อมูลนี้อาจช่วยในการตรวจสอบ IOC และกิจกรรมที่เชื่อมโยง กับโครงสร้างพื้นฐานภายนอก

4.5 การติดตั้ง Sysmon

Windows บางรุ่นมี Sysmon เป็นความสามารถในระบบ ขณะที่อีกแนวทางหนึ่งคือ Sysmon จาก Microsoft Sysinternals

ควรตรวจสอบรุ่น Windows และเอกสารผู้ผลิตก่อนติดตั้ง โดยไม่ควรสมมติว่า Sysmon เปิดใช้งานอยู่แล้วทุกเครื่อง

สำหรับ Sysmon จาก Sysinternals ให้ใช้เครื่องมือจาก Microsoft และ Configuration ที่ผ่านการตรวจสอบ

sysmon64.exe -accepteula -i sysmon-config.xml

คำสั่งนี้เป็นตัวอย่าง สำหรับ Sysinternals Sysmon และต้องมี Configuration File ที่ถูกต้องอยู่ในตำแหน่งที่ระบุ

ควรทดลองบน VM หรือเครื่อง Lab ก่อนใช้กับ Production และระวังการติดตั้งซ้ำ เมื่อมี Sysmon อีกชนิดใช้งานอยู่แล้ว

4.6 ตรวจสอบ Sysmon Log

Sysmon Operational Log มักอยู่ใน Channel

Microsoft-Windows-Sysmon/Operational

สำหรับระบบที่รองรับ Channel นี้ สามารถอ่าน Event ได้ด้วย

Get-WinEvent -LogName `
  "Microsoft-Windows-Sysmon/Operational" `
  -MaxEvents 20

หากไม่พบ Channel อาจยังไม่ได้ติดตั้งหรือเปิดใช้งาน Sysmon ในรูปแบบดังกล่าว

5. PowerShell Logging สำหรับ Security Investigation

PowerShell เป็นเครื่องมือสำคัญ สำหรับการดูแลระบบ Windows และงาน Automation

ในด้าน Cyber Security การบันทึกกิจกรรม PowerShell ช่วยตรวจสอบคำสั่งและ Script ที่ถูกเรียกใช้งาน

5.1 PowerShell Event ID 4104

Event ID 4104 เกี่ยวข้องกับ PowerShell Script Block Logging

เมื่อเปิด Logging ที่เกี่ยวข้อง ระบบอาจบันทึกเนื้อหา Script Block เพื่อสนับสนุนการตรวจสอบย้อนหลัง

5.2 PowerShell Log Channels

Windows PowerShell 5.1 มักใช้ Channel

Microsoft-Windows-PowerShell/Operational

สำหรับ PowerShell 7 อาจใช้ PowerShellCore/Operational ตามการลงทะเบียน Provider และการตั้งค่าระบบ

5.3 ตรวจสอบ PowerShell Events

Get-WinEvent -FilterHashtable @{
    LogName = "Microsoft-Windows-PowerShell/Operational"
    Id = 4104
    StartTime = (Get-Date).AddDays(-1)
} -MaxEvents 20 |
Select-Object TimeCreated, Id, Message

5.4 ข้อควรระวังเรื่อง Sensitive Data

Script Block Logging อาจบันทึกข้อมูลสำคัญ ที่ปรากฏอยู่ใน Script หรือ Command

ควรกำหนด Access Control, Log Retention และการจัดการข้อมูลลับ ก่อนนำ Logging ไปใช้กับองค์กร

6. Threat Hunting คืออะไร?

Threat Hunting คือกระบวนการค้นหา พฤติกรรมหรือหลักฐานของภัยคุกคาม เชิงรุก โดยไม่จำเป็นต้องรอให้ ระบบตรวจจับแจ้งเตือนก่อน

Threat Hunting ที่ดี เริ่มจากคำถามหรือสมมติฐาน ที่สามารถตรวจสอบได้ด้วยข้อมูล

6.1 Threat Hunting กับ Alert Investigation

Alert Investigation เริ่มจากสัญญาณเตือนที่ระบบตรวจพบ แล้วตรวจสอบว่าเหตุการณ์นั้น เป็นภัยคุกคามจริงหรือไม่

Threat Hunting มักเริ่มจากสมมติฐาน เกี่ยวกับพฤติกรรมที่อาจซ่อนอยู่ และค้นหาหลักฐานสนับสนุนหรือหักล้าง

6.2 ตัวอย่าง Hunting Hypothesis

อาจมีบัญชีผู้ใช้ที่ถูกพยายามเข้าสู่ระบบ หลายครั้งก่อนมีการเข้าสู่ระบบสำเร็จ จากแหล่งที่มาซึ่งไม่เคยใช้งานมาก่อน

สมมติฐานนี้สามารถทดสอบได้ ด้วย Authentication Logs และข้อมูลบริบทของผู้ใช้งาน

6.3 Hunting Workflow

  1. Define Hypothesis
  2. Identify Data Sources
  3. Collect Relevant Events
  4. Filter and Normalize
  5. Correlate Evidence
  6. Investigate Anomalies
  7. Assess Findings
  8. Document and Improve Detection

7. PowerShell Log Analysis — อ่านและกรอง Security Events

PowerShell มีคำสั่ง Get-WinEvent สำหรับอ่าน Windows Event Logs และไฟล์ Log ที่จัดเก็บไว้

7.1 ตรวจสอบ Events ล่าสุด

Get-WinEvent -LogName Security `
  -MaxEvents 20 |
Select-Object TimeCreated, Id, ProviderName

การอ่าน Security Log อาจต้องใช้สิทธิ์ที่เหมาะสม ตามการกำหนดค่าของเครื่อง

7.2 ตรวจสอบ Failed Logons

Get-WinEvent -FilterHashtable @{
    LogName = "Security"
    Id = 4625
    StartTime = (Get-Date).AddHours(-24)
} -MaxEvents 100 |
Select-Object TimeCreated, Id, Message

7.3 ตรวจสอบ Successful Logons

Get-WinEvent -FilterHashtable @{
    LogName = "Security"
    Id = 4624
    StartTime = (Get-Date).AddHours(-24)
} -MaxEvents 100 |
Select-Object TimeCreated, Id, Message

7.4 นับ Events ตาม Event ID

Get-WinEvent -FilterHashtable @{
    LogName = "Security"
    Id = 4624, 4625, 4688
    StartTime = (Get-Date).AddHours(-24)
} -MaxEvents 1000 |
Group-Object Id |
Select-Object Name, Count

การใช้ MaxEvents 1000 หมายถึงวิเคราะห์เฉพาะ Events ที่ถูกดึงออกมา ไม่ใช่จำนวนทั้งหมดของวัน หากมี Events มากกว่าขีดจำกัด

7.5 Export Events เป็น CSV

$Events = Get-WinEvent -FilterHashtable @{
    LogName = "Security"
    Id = 4624, 4625
    StartTime = (Get-Date).AddHours(-1)
} -MaxEvents 200

$Events |
Select-Object TimeCreated, Id, MachineName, RecordId |
Export-Csv -Path "$HOME\security-events.csv" `
  -NoTypeInformation -Encoding UTF8

คำสั่งนี้ส่งออกข้อมูลบางส่วน สำหรับการวิเคราะห์ใน Spreadsheet หรือ Python

Security Logs อาจมีข้อมูลส่วนบุคคล และข้อมูลเกี่ยวกับระบบภายใน จึงไม่ควรเผยแพร่โดยไม่ได้รับอนุญาต

7.6 อ่าน Named EventData จาก XML

การแยกข้อมูลจาก Event XML มีความเสถียรกว่าการค้นข้อความ จาก Message ที่อาจเปลี่ยนตามภาษา และเวอร์ชันของระบบ

$Event = Get-WinEvent -FilterHashtable @{
    LogName = "Security"
    Id = 4624
} -MaxEvents 1

[xml]$Xml = $Event.ToXml()

$Data = @{}

foreach ($Item in $Xml.Event.EventData.Data) {
    $Data[[string]$Item.Name] = $Item.'#text'
}

[PSCustomObject]@{
    Time = $Event.TimeCreated
    User = $Data["TargetUserName"]
    LogonType = $Data["LogonType"]
    SourceIP = $Data["IpAddress"]
}

หากไม่พบ Event 4624 หรือ Event Schema แตกต่างจากตัวอย่าง ต้องตรวจสอบข้อมูลจริงก่อนใช้งาน

บาง Event อาจไม่มี IpAddress หรือมีค่าเป็นเครื่องหมายขีด จึงไม่ควรสมมติว่าฟิลด์นี้ ต้องมีข้อมูลทุกครั้ง

8. Event Correlation — เชื่อมโยงเหตุการณ์เข้าด้วยกัน

Event Correlation คือการนำเหตุการณ์หลายรายการ มาเชื่อมโยงโดยใช้ข้อมูลร่วมกัน เช่น Account, Host, Source IP, Process GUID และช่วงเวลา

8.1 ตัวอย่าง Login Correlation

สมมติข้อมูลจำลองแสดงว่า

10:00:01 | 4625 | userA | 192.0.2.10
10:00:08 | 4625 | userA | 192.0.2.10
10:00:16 | 4625 | userA | 192.0.2.10
10:00:23 | 4624 | userA | 192.0.2.10

เหตุการณ์นี้แสดงการเข้าสู่ระบบ ไม่สำเร็จสามครั้ง ตามด้วยการเข้าสู่ระบบสำเร็จ

แต่ยังไม่สามารถสรุปว่า บัญชีถูกโจมตีสำเร็จ

เพราะอาจเป็นผู้ใช้งานจริง ที่พิมพ์รหัสผ่านผิด ก่อนเข้าสู่ระบบสำเร็จ

8.2 Correlation Fields

  • Account Name และ Domain
  • Source IP
  • Destination Host
  • Timestamp และ Time Zone
  • Logon Type
  • Logon ID
  • Process GUID

8.3 เหตุใดจึงต้องใช้ Time Window?

เหตุการณ์ที่เกี่ยวข้องกัน มักเกิดภายในช่วงเวลาที่ใกล้เคียงกัน แต่การกำหนดช่วงเวลาสั้นเกินไป อาจทำให้พลาดเหตุการณ์

ในทางกลับกัน หากช่วงเวลากว้างเกินไป ก็อาจนำเหตุการณ์ที่ไม่เกี่ยวข้อง มาเชื่อมโยงผิดพลาด

ควรพิจารณา Clock Synchronization, Time Zone, Event Ingestion Delay และพฤติกรรมปกติของระบบด้วย

8.4 Correlation ไม่เท่ากับ Causation

การเกิดเหตุการณ์ใกล้เคียงกัน ไม่ได้หมายความว่าเหตุการณ์หนึ่ง เป็นสาเหตุของอีกเหตุการณ์หนึ่งเสมอไป

ต้องใช้หลักฐานอื่น เพื่อยืนยันความสัมพันธ์จริง

9. IOC Hunting — ค้นหาร่องรอยภัยคุกคาม

Indicators of Compromise (IOC) เป็นข้อมูลที่อาจเกี่ยวข้อง กับการบุกรุกหรือกิจกรรมประสงค์ร้าย

9.1 IOC ที่ใช้กับ Windows

  • File SHA-256
  • File Path
  • Process Name
  • Command Line Pattern
  • IP Address
  • Domain Name
  • Registry Path
  • Service หรือ Scheduled Task ที่ต้องสงสัย

9.2 ตัวอย่าง IOC Investigation

สมมติ Threat Intelligence ระบุ IP ตัวอย่าง

198.51.100.25

IP นี้เป็นที่อยู่สำหรับเอกสาร ไม่ใช่ IOC อันตรายจริง

Security Analyst อาจค้นหา IP ใน Firewall Logs, DNS Logs หรือ Sysmon Network Events เพื่อระบุว่ามีการสื่อสาร ที่เกี่ยวข้องหรือไม่

9.3 ข้อจำกัดของ IOC

การพบ IOC ไม่ได้ยืนยันว่า ระบบถูกบุกรุกสำเร็จ และการไม่พบ IOC ก็ไม่ได้หมายความว่า ไม่มีภัยคุกคาม

ต้องประเมินความน่าเชื่อถือของแหล่งข้อมูล อายุของ IOC และบริบทของเหตุการณ์

9.4 IOC กับ Behavior-Based Hunting

IOC Hunting มุ่งค้นหาสิ่งบ่งชี้ ที่ทราบอยู่แล้ว

ส่วน Behavior-Based Hunting มุ่งค้นหาลำดับพฤติกรรม ที่อาจสัมพันธ์กับเทคนิคของผู้โจมตี

การใช้ทั้งสองแนวทางร่วมกัน ช่วยเพิ่มมุมมองในการตรวจสอบ

10. Detection Rules — เปลี่ยนสมมติฐานให้เป็นการตรวจจับ

Detection Rule คือชุดเงื่อนไขสำหรับระบุ เหตุการณ์หรือพฤติกรรม ที่ควรได้รับการตรวจสอบ

10.1 ส่วนประกอบของ Detection Rule

  • Data Source: แหล่งข้อมูล
  • Selection: เงื่อนไขค้นหา
  • Time Window: ช่วงเวลาที่พิจารณา
  • Threshold: จำนวนหรือระดับที่กำหนด
  • Exclusions: เงื่อนไขลด False Positive
  • Severity: ความสำคัญของ Alert
  • Response: ขั้นตอนเมื่อพบ Alert

10.2 ตัวอย่าง Rule: Multiple Failed Logons

สมมติว่าต้องการตรวจจับบัญชี ที่เข้าสู่ระบบไม่สำเร็จ อย่างน้อยห้าครั้งภายในสิบนาที

Data Source:
Windows Security Event 4625

Group By:
Computer + Account + Source IP

Time Window:
10 Minutes

Threshold:
Failed Logons >= 5

Output:
Suspicious Authentication Activity

ค่า Threshold เป็นเพียงตัวอย่าง สำหรับ Lab และต้องปรับให้เหมาะสม กับปริมาณ Login ปกติขององค์กร

10.3 Sigma Rule คืออะไร?

Sigma เป็นรูปแบบการเขียน Detection Rules ที่สามารถนำไปแปลงใช้กับ ระบบค้นหา Log หรือ SIEM ที่รองรับผ่านเครื่องมือที่เหมาะสม

10.4 ตัวอย่าง Sigma Rule เบื้องต้น

title: Techerest Multiple Failed Logons Base
id: 4c0d83a9-31eb-45fe-87a1-cfa98aa8db02
status: experimental
description: Select Windows failed logon events
author: Techerest

logsource:
  product: windows
  service: security

detection:
  selection:
    EventID: 4625
  condition: selection

fields:
  - TargetUserName
  - IpAddress
  - Computer

falsepositives:
  - Incorrect password entered by users
  - Misconfigured services

level: low

Rule ตัวอย่างนี้ใช้เลือก Failed Logon Events เท่านั้น ยังไม่ได้บังคับเงื่อนไข ห้าครั้งภายในสิบนาที

การนับจำนวนเหตุการณ์ตามช่วงเวลา ต้องทำด้วย Correlation Rule หรือ Query ของ SIEM ที่รองรับความสามารถดังกล่าว

ก่อนใช้งาน Production ควรตรวจสอบ Schema, Field Mapping และ Sigma Version ที่ระบบปลายทางรองรับ

11. Hands-on Safe Lab — สร้างข้อมูล Log จำลอง

Lab นี้ออกแบบให้ผู้เริ่มต้น ทดลอง Threat Hunting ได้ โดยไม่ต้องสร้างเหตุการณ์โจมตีจริง

เราจะใช้ PowerShell สร้างข้อมูลจำลองใน CSV แล้ววิเคราะห์ความสัมพันธ์ ของ Successful และ Failed Logons

11.1 Lab Objectives

  • สร้าง Synthetic Security Events
  • อ่านข้อมูล Log ด้วย PowerShell
  • ตรวจจับ Failed Logon Threshold
  • เชื่อมโยง Failed กับ Successful Logons
  • จัดทำ Hunting Findings
  • แยก Detection ออกจาก Confirmation

11.2 สร้าง Lab Directory

$Lab = Join-Path $HOME "Techerest-ThreatHunting-Lab"

New-Item -ItemType Directory `
  -Path $Lab -Force | Out-Null

11.3 สร้าง Synthetic Events

โค้ดต่อไปนี้สร้างเหตุการณ์จำลอง จำนวนหกรายการ โดยใช้ IP สำหรับเอกสาร และไม่ได้เข้าสู่ระบบจริง

$Base = [datetime]"2026-11-08T10:00:00"

$Events = @(
    [PSCustomObject]@{
        Time = $Base.AddSeconds(0)
        EventID = 4625
        Computer = "LAB-PC"
        Account = "labuser"
        SourceIP = "192.0.2.10"
    },
    [PSCustomObject]@{
        Time = $Base.AddSeconds(20)
        EventID = 4625
        Computer = "LAB-PC"
        Account = "labuser"
        SourceIP = "192.0.2.10"
    },
    [PSCustomObject]@{
        Time = $Base.AddSeconds(40)
        EventID = 4625
        Computer = "LAB-PC"
        Account = "labuser"
        SourceIP = "192.0.2.10"
    },
    [PSCustomObject]@{
        Time = $Base.AddSeconds(60)
        EventID = 4625
        Computer = "LAB-PC"
        Account = "labuser"
        SourceIP = "192.0.2.10"
    },
    [PSCustomObject]@{
        Time = $Base.AddSeconds(80)
        EventID = 4625
        Computer = "LAB-PC"
        Account = "labuser"
        SourceIP = "192.0.2.10"
    },
    [PSCustomObject]@{
        Time = $Base.AddSeconds(100)
        EventID = 4624
        Computer = "LAB-PC"
        Account = "labuser"
        SourceIP = "192.0.2.10"
    }
)

$CsvPath = Join-Path $Lab "synthetic-events.csv"

$Events |
Export-Csv -LiteralPath $CsvPath `
  -NoTypeInformation -Encoding UTF8

11.4 อ่าน CSV

$Logs = Import-Csv -LiteralPath $CsvPath

$Logs |
Format-Table Time, EventID, Account, SourceIP

Expected Result: แสดงหกเหตุการณ์ โดยเป็น Event 4625 จำนวนห้าครั้ง และ Event 4624 หนึ่งครั้ง

11.5 ตรวจจับ Failed Logon Threshold

$Failed = @(
    $Logs | Where-Object {
        [int]$_.EventID -eq 4625
    }
)

$Groups = $Failed |
Group-Object Computer, Account, SourceIP

$Findings = foreach ($Group in $Groups) {

    $Times = @(
        $Group.Group |
        ForEach-Object {
            [datetime]$_.Time
        } |
        Sort-Object
    )

    if (
        $Times.Count -ge 5 -and
        ($Times[-1] - $Times[0]).TotalMinutes -le 10
    ) {
        [PSCustomObject]@{
            Group = $Group.Name
            FailedCount = $Times.Count
            WindowMinutes = (
                $Times[-1] - $Times[0]
            ).TotalMinutes
            Alert = "Investigate"
        }
    }
}

$Findings | Format-Table -AutoSize

Expected Result: พบกลุ่มเหตุการณ์ห้าครั้ง ในช่วงเวลาไม่เกินสิบนาที

Algorithm นี้ใช้สำหรับข้อมูล Lab ที่มีจำนวนน้อยและเหตุการณ์ไม่ซับซ้อน

สำหรับข้อมูล Production ควรใช้ Sliding Window หรือ Correlation Engine ที่เหมาะสม แทนการพิจารณาเฉพาะเวลา ของ Event แรกและสุดท้ายในแต่ละกลุ่ม

11.6 ตรวจสอบ Successful Logon หลัง Failed Logons

$Success = @(
    $Logs | Where-Object {
        [int]$_.EventID -eq 4624
    }
)

$Correlated = foreach ($Login in $Success) {

    $LoginTime = [datetime]$Login.Time

    $PriorFailures = @(
        $Failed | Where-Object {

            $FailureTime = [datetime]$_.Time

            $_.Computer -eq $Login.Computer -and
            $_.Account -eq $Login.Account -and
            $_.SourceIP -eq $Login.SourceIP -and
            $FailureTime -lt $LoginTime -and
            $FailureTime -ge $LoginTime.AddMinutes(-10)
        }
    )

    if ($PriorFailures.Count -ge 5) {
        [PSCustomObject]@{
            Account = $Login.Account
            SourceIP = $Login.SourceIP
            FailedBeforeSuccess = $PriorFailures.Count
            SuccessTime = $Login.Time
            Status = "Review Required"
        }
    }
}

$Correlated | Format-Table -AutoSize

11.7 วิเคราะห์ผล

ผลจาก Lab ควรแสดงว่า มี Failed Logons ห้าครั้ง ก่อน Successful Logon หนึ่งครั้ง จากบัญชีและ IP เดียวกัน

สถานะที่เหมาะสมคือ Review Required ไม่ใช่ Confirmed Compromise

เพราะข้อมูลจำลองยังไม่มีหลักฐาน ว่าผู้เข้าสู่ระบบเป็นผู้โจมตี

12. IOC Hunting Lab — ตรวจสอบข้อมูลจำลองด้วย PowerShell

ใน Lab นี้จะใช้ข้อมูลจำลอง เพื่อตรวจสอบ IP Address โดยไม่เชื่อมต่อกับระบบภายนอก

12.1 กำหนด IOC จำลอง

$IOC = @(
    "192.0.2.10",
    "198.51.100.25"
)

IP ทั้งสองเป็นที่อยู่สำหรับเอกสาร ไม่ใช่รายการ Threat Intelligence จริง

12.2 ค้นหา IOC จาก Synthetic Events

$Matches = $Logs | Where-Object {
    $_.SourceIP -in $IOC
}

$Matches |
Select-Object Time, EventID, Account, SourceIP |
Format-Table -AutoSize

12.3 วิเคราะห์ผล IOC

ควรพบเหตุการณ์ที่ใช้ IP 192.0.2.10 ส่วน 198.51.100.25 จะไม่พบในข้อมูลจำลองชุดนี้

อย่างไรก็ตามการพบ IP เป็นเพียงการค้นพบข้อมูลตรงเงื่อนไข ไม่ใช่การพิสูจน์ว่ามีภัยคุกคามจริง

13. Threat Hunting ด้วย Sysmon Process GUID

Sysmon Process GUID ช่วยเชื่อมโยงข้อมูล Process ระหว่าง Event หลายประเภท ได้สะดวกกว่าใช้ PID เพียงอย่างเดียว

13.1 ทำไม PID อย่างเดียวไม่เพียงพอ?

Process ID สามารถถูกนำกลับมาใช้ใหม่ หลัง Process เดิมสิ้นสุด

จึงอาจทำให้การเชื่อมโยง เหตุการณ์จากช่วงเวลาห่างกัน เกิดความผิดพลาด

13.2 ตัวอย่าง Process Correlation

ในการตรวจสอบจริง อาจพบ Event ต่อไปนี้

Sysmon ID 1:
Process Created
ProcessGuid = {EXAMPLE-GUID}

Sysmon ID 22:
DNS Query
ProcessGuid = {EXAMPLE-GUID}

Sysmon ID 3:
Network Connection
ProcessGuid = {EXAMPLE-GUID}

หาก Process GUID ตรงกัน และ Timestamp สอดคล้องกัน อาจช่วยสร้าง Timeline ของ Process ที่เกี่ยวข้องได้

ตัวอย่าง GUID ข้างต้นเป็น Placeholder ไม่ใช่ GUID จริง

13.3 ข้อจำกัดในการทำ Correlation

Event อาจไม่ถูกบันทึกครบทุกประเภท เพราะ Configuration, Filtering, Retention หรือ Logging Gaps

การไม่พบ Network Event จึงไม่สามารถยืนยันได้ว่า Process ไม่เคยสื่อสารผ่านเครือข่าย

14. Verification — ตรวจสอบผลการฝึก

หลังจากทำ Lab ผู้เรียนควรสามารถตรวจสอบ ผลลัพธ์ดังต่อไปนี้

Test Expected Result
CSV Creation สร้าง Synthetic Events ได้ 6 รายการ
Failed Logon Detection พบ Event 4625 จำนวน 5 ครั้ง
Success Correlation พบ Event 4624 หลัง Failed Logons
IOC Search พบ IP ที่กำหนดในข้อมูลจำลอง
Threat Assessment แยก Suspicious จาก Confirmed ได้
Evidence Reporting อธิบายผลและข้อจำกัดได้

14.1 Detection Coverage

การทดสอบ Detection Rules ต้องตรวจสอบว่ามี Telemetry เพียงพอต่อการตรวจจับหรือไม่

หากไม่ได้เปิด Audit Policy ที่จำเป็น ต่อให้ Detection Logic ถูกต้อง ก็อาจไม่มีข้อมูลให้ตรวจจับ

14.2 False Positive และ False Negative

False Positive คือการแจ้งเตือนว่าอาจมีภัยคุกคาม ทั้งที่กิจกรรมจริงเป็นเหตุการณ์ปกติ

False Negative คือระบบไม่แจ้งเตือน ทั้งที่มีภัยคุกคามเกิดขึ้นจริง

Detection Engineering จึงต้องทดสอบและปรับปรุง ทั้งความแม่นยำและ Coverage

15. Troubleshooting — ปัญหาที่พบบ่อย

15.1 Get-WinEvent แสดง Access Denied

ตรวจสอบสิทธิ์ของผู้ใช้ และนโยบายการอ่าน Security Log

ไม่ควรเพิ่มสิทธิ์แบบถาวร โดยไม่ประเมินความจำเป็น และข้อกำหนดขององค์กร

15.2 No Events Were Found

อาจเกิดจากไม่มี Event ตรงเงื่อนไขในช่วงเวลาที่กำหนด หรือ Logging ไม่ได้เปิดใช้งาน

ให้ตรวจสอบ Time Window, Event ID, Channel และ Audit Policy

15.3 ไม่พบ Sysmon Logs

ตรวจสอบว่า Sysmon ได้รับการติดตั้งหรือเปิดใช้งาน ในรูปแบบที่รองรับหรือไม่

ตรวจสอบชื่อ Channel และ Configuration ก่อนสรุปว่าระบบมีปัญหา

15.4 Sysmon Event ID 3 ไม่ปรากฏ

Network Connection Logging อาจไม่ได้เปิดใช้งาน หรือถูกกรองด้วย Configuration

การเปิดเก็บข้อมูลเพิ่มเติม ต้องคำนึงถึงปริมาณ Events และผลกระทบต่อระบบ

15.5 Event 4688 ไม่มี Command Line

ต้องตรวจสอบว่ามีการเปิด Include Command Line in Process Creation Events และ Audit Process Creation หรือไม่

15.6 Event ID 4104 ไม่ปรากฏ

ตรวจสอบ PowerShell Version, Provider Registration และ Script Block Logging Policy

ต้องตรวจสอบด้วยว่า กำลังอ่าน Channel ที่ตรงกับ PowerShell Runtime หรือไม่

15.7 Correlation จับคู่เหตุการณ์ผิด

ตรวจสอบ Time Zone, Clock Synchronization, Computer, Account Domain, Logon ID และ Source IP

การเชื่อมโยงเหตุการณ์จากหลาย Host ต้องคำนึงถึงความแตกต่าง ของ Event Schema และเวลา

15.8 Detection Rules แจ้งเตือนมากเกินไป

ควรสำรวจ Baseline และปรับ Threshold ตามพฤติกรรมจริงของระบบ

ไม่ควรปิด Detection โดยไม่วิเคราะห์สาเหตุ เพราะอาจทำให้เกิด Detection Gap

16. Security Best Practices สำหรับ Windows Logging

16.1 Logging Configuration

  • กำหนด Audit Policy ตามความเสี่ยง
  • เปิด Process Creation Logging เมื่อเหมาะสม
  • ใช้ Sysmon หรือ Endpoint Telemetry ตามความจำเป็น
  • กำหนด Log Retention และ Storage Capacity
  • ตรวจสอบ Logging Health อย่างต่อเนื่อง

16.2 Centralized Logging

การเก็บ Log ไว้เฉพาะเครื่อง อาจไม่เพียงพอสำหรับเหตุการณ์ร้ายแรง

องค์กรควรพิจารณา Windows Event Forwarding, SIEM หรือระบบ Log Collection ที่เหมาะสม

ควรกำหนด Authentication, Encryption, Access Control และ Retention ของ Log Infrastructure

16.3 Log Integrity

  • จำกัดสิทธิ์การอ่านและแก้ไข Log
  • ติดตาม Log Clearing และ Configuration Changes
  • ใช้ Centralized Storage ที่มีมาตรการป้องกัน
  • จัดการ Time Synchronization
  • มีขั้นตอนรักษาหลักฐานและ Chain of Custody

16.4 Detection Engineering

  • เริ่มจาก Threat Hypothesis
  • ระบุ Data Source และ Required Fields
  • ทดสอบ Rule ด้วยข้อมูลจำลอง
  • วิเคราะห์ False Positive
  • กำหนด Severity และ Triage Procedure
  • ทบทวน Detection Coverage เป็นระยะ

16.5 Threat Hunting Documentation

ทุก Hunting Exercise ควรมีบันทึกอย่างน้อยดังต่อไปนี้

  • Hunt ID และ Owner
  • Hypothesis
  • Scope และ Time Window
  • Data Sources
  • Queries และ Tools
  • Observed Findings
  • Confidence และ Limitations
  • Recommended Actions

17. Incident Investigation Report — ตัวอย่างรายงาน

ตัวอย่างนี้ใช้ข้อมูลจาก Safe Lab ไม่ใช่เหตุการณ์โจมตีจริง

Case ID:
TECHEREST-THREAT-HUNT-006

Case Type:
Authentication Event Correlation

Environment:
Synthetic Windows Security Log Dataset

Hypothesis:
Multiple failed logons followed by success
may warrant investigation.

Data Sources:
Locally generated CSV

Events:
4625 - Failed Logon
4624 - Successful Logon

Account:
labuser

Host:
LAB-PC

Source IP:
192.0.2.10

Observations:
5 failed logons
1 successful logon
Events occurred within 100 seconds

Detection Result:
Threshold matched

Threat Classification:
Not confirmed

Confidence:
High confidence in synthetic event pattern
No evidence of real compromise

Limitations:
No real Windows authentication performed
No EDR or network evidence
No user identity verification

Recommended Actions:
Review account activity in real investigations
Validate source context
Correlate with additional telemetry

Final Status:
Safe Lab Completed

17.1 หลักการเขียน Investigation Report

ต้องแยกระหว่าง Observed Facts และ Analyst Assessment อย่างชัดเจน

ตัวอย่างเช่น การพบ Failed Logons ห้าครั้ง เป็นข้อเท็จจริงจาก Dataset

แต่การสรุปว่าเป็นการโจมตี ต้องอาศัยหลักฐานเพิ่มเติม

18. FAQ — คำถามที่พบบ่อย

18.1 Windows Event Logs ใช้ตรวจจับ Hacker ได้หรือไม่?

สามารถใช้ตรวจสอบกิจกรรม ที่อาจเกี่ยวข้องกับการโจมตีได้ แต่ต้องมี Logging Coverage และหลักฐานสนับสนุนเพียงพอ

18.2 Sysmon จำเป็นสำหรับทุกเครื่องหรือไม่?

ไม่จำเป็นในทุกสถานการณ์ ควรประเมินความเสี่ยง ความต้องการด้าน Telemetry และความสามารถในการจัดการ Log

18.3 Event 4625 จำนวนมากแปลว่าถูก Brute Force หรือไม่?

ไม่เสมอไป อาจเกิดจาก Credentials ที่หมดอายุ ผู้ใช้พิมพ์รหัสผ่านผิด หรือบริการที่ตั้งค่าไม่ถูกต้อง

18.4 Sysmon แทน EDR ได้หรือไม่?

Sysmon เป็นแหล่ง Telemetry ส่วน EDR มักมีความสามารถเพิ่มเติม เช่น Detection, Investigation และ Response Actions

จึงไม่ควรถือว่าทั้งสองอย่าง ทำหน้าที่เหมือนกันทั้งหมด

18.5 Threat Hunting ต้องมี SIEM หรือไม่?

ไม่จำเป็นสำหรับการเริ่มต้น สามารถฝึกด้วย Event Viewer, PowerShell และไฟล์ Log ที่ได้รับอนุญาต

แต่ SIEM ช่วยเพิ่มความสามารถ ในการค้นหาและเชื่อมโยงข้อมูล จากหลายระบบ

18.6 Detection Rule สามารถใช้งาน Production ได้ทันทีหรือไม่?

ไม่ควรนำ Rule ตัวอย่าง ไปใช้งาน Production โดยไม่ทดสอบ

ต้องตรวจสอบ Schema, Field Mapping, Threshold, False Positive และประสิทธิภาพ ของระบบก่อน

18.7 ผู้เริ่มต้นควรเรียนอะไรต่อ?

แนะนำให้ต่อยอดไปสู่ Windows Event Forwarding, SIEM Fundamentals, Sigma Rules และ MITRE ATT&CK Detection Engineering

19. Conclusion — จากการอ่าน Log สู่การค้นหาภัยคุกคามอย่างเป็นระบบ

Windows Event Logs เป็นพื้นฐานสำคัญ ของงาน Defensive Security และ Digital Forensics

การเข้าใจ Event IDs, Logon Types, PowerShell Logging และ Sysmon ช่วยเพิ่มความสามารถ ในการมองเห็นพฤติกรรมของระบบ

แต่การตรวจสอบที่มีคุณภาพ ไม่ได้หยุดอยู่ที่การค้นพบ Event ที่ตรงกับเงื่อนไข

Security Analyst ต้องสามารถ เชื่อมโยงเหตุการณ์ วิเคราะห์บริบท และประเมินหลักฐานอย่างรอบคอบ

Collect the Evidence. Correlate the Events. Test the Hypothesis. Validate the Findings.

Techerest มุ่งพัฒนา Cyber Security Knowledge Base ที่ผู้อ่านสามารถเรียนรู้ ทดลอง และนำไปประยุกต์ใช้ ในงานด้าน Cyber Security จริง ได้อย่างเป็นระบบ

20. References — แหล่งข้อมูลอ้างอิง

  1. Microsoft Learn — Security Event 4624
  2. Microsoft Learn — Security Event 4625
  3. Microsoft Learn — Security Event 4688
  4. Microsoft Learn — Sysmon Events
  5. Microsoft Sysinternals — Sysmon
  6. Microsoft Learn — Get-WinEvent
  7. Microsoft Learn — PowerShell Logging
  8. MITRE ATT&CK Knowledge Base
  9. Sigma — Detection Rule Format
  10. NIST SP 800-61 Rev.3 — Incident Response Recommendations

Techerest Cyber Security Knowledge Base — EP.06

Learn. Verify. Defend. Improve.

บทความนี้จัดทำเพื่อการศึกษา การวิเคราะห์ Security Events และการป้องกันภัยคุกคามไซเบอร์

การตรวจสอบระบบจริงควรดำเนินการ บนระบบที่ตนเองเป็นเจ้าของ หรือได้รับอนุญาตเท่านั้น และปฏิบัติตามนโยบายด้านข้อมูล และความปลอดภัยขององค์กร

Share this
Facebook Share X
TECHEREST COMMUNITY

Share your thoughts here

Join the conversation and share your perspective on this article.

Comments will load when you reach this section.