ในบทความนี้ เราจะแสดงวิธีติดตามเหตุการณ์การเปิดโปรแกรมเฉพาะ (กระบวนการ) ใน Windows และดำเนินการ (รันสคริปต์, คำสั่ง, โปรแกรม, ส่งอีเมล ฯลฯ) ตัวอย่างเช่น เราจะติดตามการเปิดกระบวนการ notepad.exe และเมื่อผู้ใช้เปิด Notepad Windows จะรันสคริปต์ PowerShell เฉพาะโดยอัตโนมัติ
ขั้นแรก กำหนดค่านโยบายการตรวจสอบกระบวนการบน Windows คุณสามารถกำหนดค่านโยบายการตรวจสอบบนคอมพิวเตอร์แบบสแตนด์อโลนโดยใช้ Local Group Policy Editor (gpedit.msc) หากคุณต้องการกำหนดค่านโยบายบนคอมพิวเตอร์และเซิร์ฟเวอร์ในโดเมน AD ให้ใช้คอนโซลจัดการ Group Policy (gpmc.msc)
- ไปที่ Computer Configuration → Windows Settings → Security Settings → Local Policies → Audit Policy
- เปิดคุณสมบัติ Audit process tracking และเปิดใช้งานสำหรับเหตุการณ์ Success
- นำการตั้งค่า Group Policy ไปใช้โดยรัน:
gpupdate /force
ตอนนี้ เมื่อเริ่มกระบวนการใดๆ ใน Windows เหตุการณ์ที่มี EventID 4688 (A new process has been created) จะปรากฏใน Event Viewer → Windows Logs → Security เหตุการณ์แสดงว่าใครรันกระบวนการ (Account name) ชื่อกระบวนการ (New Process Name) และชื่อกระบวนการผู้สร้าง (Creator Process Name)
คุณสามารถเลือกเหตุการณ์การเปิดแอปจาก Event Log โดยกระบวนการเฉพาะโดยใช้ PowerShell:
Get-WinEvent -FilterHashtable @{
LogName = 'Security'
ID = 4688
} | Select-Object TimeCreated,@{name='NewProcessName';expression={ $_.Properties[5].Value }}, @{name='User';expression={ $_.Properties[1].Value }}|where-object {$_.NewProcessName –like “*notepad.exe*”}
ผลลัพธ์คือเราได้ประวัติการเปิดโปรแกรมโดยผู้ใช้บนคอมพิวเตอร์นี้
จากนั้นสร้างงานใหม่ใน Task Scheduler ที่จะรันหากมีเหตุการณ์ EventID 4688 ปรากฏ
- เปิด Task Scheduler (
taskschd.msc) และสร้างงานใหม่ → Create Task - ระบุชื่องาน และระบุว่าต้องรันสำหรับผู้ใช้ทุกคน (When running the task, use the following user account → BUILTIN\Users) หากสร้างงานด้วย GPO ให้ใช้รูปแบบนี้:
%LogonDomain%\%LogonUser% - บนแท็บ Actions ตั้งค่าการกระทำที่ต้องการดำเนินการ ในตัวอย่างนี้ ฉันจะรันสคริปต์ PowerShell (เรียก
powershell.exeพร้อมแอตทริบิวต์:-ExecutionPolicy Bypass -file "C:\PS\ProcessRunEvent.ps1) - จากนั้นผูกงานกับเหตุการณ์ Windows ไปที่แท็บ Triggers เลือก New → On an event → Custom → New Event Filter
- ในหน้าต่างถัดไป ระบุตัวเลือกตัวกรองเหตุการณ์ดังนี้:
Event logs:Security
Event ID:4688
Keywords:Audit Success - จากนั้นไปที่แท็บ XML และเปิดใช้งานตัวเลือก Edit query manually แก้ไขคิวรีโดยเพิ่มบรรทัดต่อไปนี้ลงในตัวกรอง:
and *[EventData[Data[@Name='NewProcessName'] and (Data='C:\Windows\System32\notepad.exe')]] - คุณจะได้ XML query ดังนี้:
<QueryList> <Query Id="0" Path="Security"> <Select Path="Security"> *[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and Task = 13312 and (band(Keywords,9007199254740992)) and (EventID=4688)]] and *[EventData[Data[@Name='NewProcessName'] and (Data='C:\Windows\System32\notepad.exe')]] </Select> </Query> </QueryList>
- บันทึกงาน
ลองรัน notepad.exe ทุกครั้งที่ผู้ใช้เปิด Notepad สคริปต์ PowerShell ของคุณจะรันโดยอัตโนมัติ
ตัวอย่างเช่น คุณสามารถแสดงการแจ้งเตือนป๊อปอัปหรือส่งอีเมลโดยใช้ PowerShell
หลังจากปิดแอปเฉพาะ บางครั้งคุณอาจต้องการรันสคริปต์สำรอง ฯลฯ หากต้องการติดตามการออกจากโปรแกรม ให้ใช้เหตุการณ์ที่มี Event ID 4689 — A process has exited
เราเคยแสดงสคริปต์ PowerShell เพื่อรีสตาร์ทกระบวนการโดยอัตโนมัติหากหยุดทำงาน วิธีการติดตามเหตุการณ์การรัน/หยุดของกระบวนการนี้มีความสง่างามกว่าและไม่ต้องการสคริปต์ PowerShell เพื่อตรวจสอบกระบวนการ Windows ที่กำลังทำงาน