ในบทความนี้ เราจะแสดงวิธีการติดตามเหตุการณ์ของการเปิดตัวโปรแกรม (กระบวนการ) บางโปรแกรมใน Windows และดำเนินการ (เรียกใช้สคริปต์ คำสั่ง โปรแกรม ส่งอีเมล ฯลฯ) ตัวอย่างเช่น เราจะติดตามการเปิดตัวกระบวนการ notepad.exe และเมื่อผู้ใช้เปิดแผ่นจดบันทึก Windows จะเรียกใช้สคริปต์ PowerShell เฉพาะโดยอัตโนมัติ
ก่อนอื่น กำหนดค่านโยบายการตรวจสอบกระบวนการใน Windows คุณสามารถกำหนดค่านโยบายการตรวจสอบบนคอมพิวเตอร์แบบสแตนด์อโลนได้โดยใช้ Local Group Policy Editor (gpedit.msc
). หากคุณต้องการกำหนดค่านโยบายบนคอมพิวเตอร์และเซิร์ฟเวอร์ในโดเมน AD ของคุณ ให้ใช้คอนโซลการจัดการนโยบายกลุ่ม (gpmc.msc
)
- ไปที่ การกำหนดค่าคอมพิวเตอร์ -> การตั้งค่า Windows -> การตั้งค่าความปลอดภัย -> นโยบายท้องถิ่น -> นโยบายการตรวจสอบ;
- เปิด ติดตามกระบวนการตรวจสอบ คุณสมบัติและเปิดใช้งานเพื่อความสำเร็จ เหตุการณ์
- ใช้การตั้งค่า Group Policy โดยเรียกใช้:
gpupdate /force
ตอนนี้ เมื่อเริ่มต้นกระบวนการใดๆ ใน Windows กิจกรรมที่มี EventID 4688 (สร้างกระบวนการใหม่แล้ว
) จะปรากฏใน Event Viewer -> Windows Logs -> Security เหตุการณ์แสดงให้เห็นว่าใครเป็นผู้ดำเนินการ (ชื่อบัญชี ) ชื่อของกระบวนการ (ชื่อกระบวนการใหม่ ) และชื่อของกระบวนการหลัก (ชื่อกระบวนการของผู้สร้าง )
คุณสามารถเลือกเหตุการณ์การเปิดแอปจากบันทึกเหตุการณ์ตามกระบวนการเฉพาะโดยใช้ PowerShell:
รับ-WinEvent -FilterHashtable @{
LogName ='Security'
ID =4688
} | เลือกวัตถุ TimeCreated,@{name='NewProcessName';expression={ $_.Properties[5].Value }}, @{name='User';expression={ $_.Properties[1].Value }} |where-object {$_.NewProcessName –like “*notepad.exe*”}
เป็นผลให้เราได้รับประวัติการเปิดตัวโปรแกรมโดยผู้ใช้บนคอมพิวเตอร์เครื่องนี้
จากนั้นสร้างงานใหม่ใน Task Scheduler ที่จะรันหากเหตุการณ์ที่มี EventID 4688 ปรากฏขึ้น
- เปิดตัวกำหนดการงาน (
taskscd.msc
) และสร้างงานใหม่ -> สร้างงาน; - ระบุชื่องานและระบุว่าจะต้องเรียกใช้สำหรับผู้ใช้ทั้งหมด (เมื่อเรียกใช้งาน ให้ใช้บัญชีผู้ใช้ต่อไปนี้ -> BUILTIN\Users ). หากคุณสร้างงานโดยใช้ GPO ให้ใช้รูปแบบนี้:
%LogonDomain%\%LogonUser%
; - ใน การกระทำ แท็บ ตั้งค่าการดำเนินการที่คุณต้องการดำเนินการ ในตัวอย่างนี้ ฉันจะเรียกใช้สคริปต์ PowerShell (เรียก
powershell.exe
ด้วยแอตทริบิวต์:-ExecutionPolicy Bypass -file "C:\PS\ProcessRunEvent.ps1
); - จากนั้นผูกงานกับเหตุการณ์ของ Windows ไปที่ ทริกเกอร์ แท็บ เลือก ใหม่ -> ในกิจกรรม -> กำหนดเอง -> ตัวกรองเหตุการณ์ใหม่;
- ในหน้าต่างถัดไป ให้ระบุตัวเลือกตัวกรองเหตุการณ์ต่อไปนี้:
บันทึกเหตุการณ์:ความปลอดภัย
รหัสกิจกรรม:4688
คำสำคัญ:ตรวจสอบสำเร็จ
- จากนั้นไปที่ XML แท็บและเปิดใช้งาน แก้ไขการสืบค้นด้วยตนเอง ตัวเลือก. แก้ไขแบบสอบถามโดยเพิ่มบรรทัดต่อไปนี้ในตัวกรอง:
and *[EventData[Data[@Name='NewProcessName'] and (Data='C:\Windows\System32\notepad.exe')]]รหัส>
- คุณจะได้รับแบบสอบถาม XML ต่อไปนี้:
<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หลังจากปิดแอปเฉพาะแล้ว บางครั้งคุณอาจต้องการเรียกใช้สคริปต์สำรอง เป็นต้น หากคุณต้องการติดตามการออกจากโปรแกรม ให้ใช้เหตุการณ์ที่มีรหัสเหตุการณ์ 4689 —
ออกจากกระบวนการ
. ก่อนหน้านี้ เราได้แสดงสคริปต์ PowerShell เพื่อเริ่มกระบวนการใหม่โดยอัตโนมัติหากหยุดทำงาน โซลูชันที่ติดตามเหตุการณ์ run/stop ของกระบวนการมีความสง่างามมากกว่า และไม่ต้องใช้สคริปต์ PowerShell เพื่อตรวจสอบกระบวนการ Windows ที่ทำงานอยู่