इस लेख में, हम दिखाएंगे कि Windows में किसी निश्चित प्रोग्राम (प्रोसेस) के लॉन्च इवेंट को कैसे ट्रैक करें और एक एक्शन करें (स्क्रिप्ट, कमांड, प्रोग्राम चलाएं, ईमेल भेजें, आदि)। उदाहरण के रूप में, हम notepad.exe प्रोसेस के लॉन्च को ट्रैक करेंगे। और जब कोई उपयोगकर्ता Notepad खोलेगा, तो Windows स्वचालित रूप से एक विशिष्ट PowerShell स्क्रिप्ट चलाएगा।
सबसे पहले, Windows पर प्रोसेस ऑडिट पॉलिसी कॉन्फ़िगर करें। आप Local Group Policy Editor (gpedit.msc) का उपयोग करके स्टैंडअलोन कंप्यूटर पर ऑडिट पॉलिसी कॉन्फ़िगर कर सकते हैं। यदि आप अपने AD डोमेन में कंप्यूटर्स और सर्वर्स पर पॉलिसी कॉन्फ़िगर करना चाहते हैं, तो Group Policy Management कंसोल (gpmc.msc) का उपयोग करें।
- Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> Audit Policy पर जाएं;
- Audit process tracking गुण खोलें और इसे Success इवेंट्स के लिए सक्षम करें;
- Group Policy सेटिंग्स लागू करें:
gpupdate /force
अब, Windows में किसी भी प्रोसेस को शुरू करते समय, Event Viewer -> Windows Logs -> Security में EventID 4688 (A new process has been created) वाला एक इवेंट दिखाई देगा। इवेंट दिखाता है कि प्रोसेस किसने चलाया (Account name), प्रोसेस का नाम (New Process Name), और पैरेंट प्रोसेस का नाम (Creator Process Name)।
आप 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 क्वेरी प्राप्त होगी:
<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 स्क्रिप्ट दिखाई थी जो प्रोसेस के रुकने पर उसे स्वचालित रूप से रीस्टार्ट करती है। किसी प्रोसेस के रन/स्टॉप इवेंट को ट्रैक करने वाला समाधान अधिक सुंदर है और इसके लिए चल रही Windows प्रोसेसेज को मॉनिटर करने के लिए PowerShell स्क्रिप्ट की आवश्यकता नहीं होती।