पॉवर्सशेल परिवर्तन अलर्ट के साथ सक्रिय निर्देशिका का ऑडिट करता है। भाग 1


मैं सक्रिय निर्देशिका की निगरानी पर प्रकाशनों की एक श्रृंखला शुरू करूंगा।
इन लेखों में मैं सबसे बुनियादी समस्याओं और उन्हें हल करने के तरीके बताऊंगा। इन आंकड़ों के आधार पर, कार्यक्षमता आसानी से उन आवश्यकताओं तक विस्तारित हो जाती है जिनकी आपको आवश्यकता है।
यह देखते हुए कि Powershell Windows Server 2003 R2 और Windows XP SP3 के साथ शुरू होने वाले सभी ऑपरेटिंग सिस्टम के लिए उपलब्ध है। मुझे लगता है कि यह लेख एक उपयोगी मदद होगा, क्योंकि व्यवस्थापक को किसी भी अतिरिक्त धनराशि की आवश्यकता नहीं है, अर्थात्। नियमित साधनों द्वारा अनिवार्य रूप से निगरानी करना।



तो चलिए शुरू करते हैं।

सक्रिय निर्देशिका की निगरानी



आप सभी आईटी ब्लॉगिंग समुदायों पर AD मॉनीटरिंग पर कई लेख पा सकते हैं, लेकिन ... लेकिन उनमें से 90% से अधिक तृतीय-पक्ष अनुप्रयोगों के उपयोग के लिए समर्पित हैं, जिनमें से अधिकांश एक निश्चित राशि का खर्च करते हैं जो हर कंपनी देने के लिए तैयार नहीं है, भले ही बहुत कुछ न हो। संभवतः लेखों की संख्या के लिए रिकॉर्ड धारक NetWrix Corporation का एक उत्पाद है। यहां और वहां, आईटी-विशेषज्ञ इस कार्यक्रम की अद्भुत विशेषताओं को चित्रित करते हैं। लेकिन क्या छुपाना पाप है, और उसने इस कार्यक्रम का उपयोग डेमो मोड में किया। ईमानदारी से, मुझे यह पसंद आया, सब कुछ सरल और सस्ती है, लेकिन वे इसके लिए पैसा नहीं देते हैं, जिसका अर्थ है कि डेमो अवधि के अंत तक एडी को फिर से "उत्सुक" आंख के बिना छोड़ दिया जाएगा। मूल रूप से मुझे क्या पसंद नहीं आया।

थोड़ा टोरिया


जैसा कि आप जानते हैं, सभी पट्टियों के विंडोज में सुरक्षा नीतियों में घटनाओं का ऑडिट करने की क्षमता होती है। यह ऑडिट आपको "सुरक्षा" पत्रिका में ईवेंट लॉग में स्वचालित रूप से प्रविष्टियाँ जनरेट करने की अनुमति देता है। एक ऑडिट का आयोजन कई प्रकार के कार्यक्रमों के लिए किया जा सकता है, उदाहरण के लिए: लॉगिन, वस्तुओं तक पहुंच, खाता प्रबंधन, नीति में बदलाव, और बहुत कुछ। केवल 9 प्रकार के आयोजन। यह एक बुनियादी ऑडिट है। विंडोज 7 और विंडोज सर्वर 2008 आर 2 के साथ शुरू होकर, ऑडिट ईवेंट की संख्या बढ़कर 53 हो गई है। इसकी मदद से आप केवल आवश्यक घटनाओं के बारे में अधिक विस्तार से ऑडिट कर सकते हैं। उन्नत लेखापरीक्षा नीतियों के बारे में अधिक जानकारी यहाँ पाई जा सकती है
लेकिन जैसा कि आप जानते हैं, जो लोग कम से कम एक बार EventLog में सुरक्षा अनुभाग पर नज़र डालते हैं, वे वहां कुछ पाते हैं - यदि असंभव नहीं है, तो कम से कम बहुत मुश्किल है।

विचार ...

और यहां विचार का जन्म हुआ ... चूंकि विंडोज EventLog में एक इवेंटलॉग प्रविष्टि बना सकता है, फिर सैद्धांतिक रूप से यह जानकारी प्राप्त की जा सकती है। एक "लेकिन" ... यह लॉग वांछित घटना को मैन्युअल रूप से देखने के लिए बहुत बड़ा है, और समय के साथ, यदि आप लॉग के आकार को सीमित नहीं करते हैं, तो यह दस गीगाबाइट में विकसित हो सकता है, जो अपने आप में अब अच्छा नहीं है। इसलिए आपको EventLog में सही जानकारी खोजने की समस्या को स्वचालित रूप से हल करने की आवश्यकता है। सौभाग्य से, प्रत्येक प्रकार की घटना (उदाहरण के लिए, उपयोगकर्ता खाता बनाना) की अपनी आईडी होती है जिसके द्वारा यह पाया जा सकता है।
इसलिए खोज समस्या को हल करने के लिए, हमें केवल इस घटना को जर्नल में खोजना होगा।
पॉवर्सशेल 2.0 में EventLog - Get-WinEvent के साथ काम करने के लिए एक विशेष cmdlet है।
इस cmdlet का उपयोग करके, आप EventLog में एक विशिष्ट रिकॉर्ड प्राप्त कर सकते हैं।

कार्यान्वयन

मान लीजिए कि हमने उन समूह नीतियों में संकेत दिया है जो खातों से संबंधित घटनाओं के ऑडिट के लिए डोमेन नियंत्रकों पर लागू होती हैं।
फिर AD में खोले गए खाते के साथ कोई भी कार्रवाई एक ऐसी घटना उत्पन्न करेगी जो एक विशिष्ट पहचानकर्ता के साथ EventLog में एक प्रविष्टि बनाएगी। उदाहरण के लिए, जब डोमेन नियंत्रक पर एक कंप्यूटर को डोमेन में जोड़ा जाता है जहां यह ऑपरेशन किया गया था, तो सुरक्षा लॉग में EventLog में पहचानकर्ता आईडी = 4741 के साथ एक प्रविष्टि होगी, जो इंगित करेगी कि किस समय, किस कंप्यूटर ने डोमेन में जोड़ा।
दिए गए पहचानकर्ता के साथ अंतिम घटना प्राप्त करने के लिए, हम Powershell क्वेरी का उपयोग करते हैं:

Get-WinEvent -FilterHashtable @{LogName=”Security”;ID=4741} 

लेकिन आउटपुट स्वरूप दुर्भाग्य से सबसे अच्छा छोड़ना चाहता है, क्योंकि कई अतिरिक्त जानकारी, जैसे कि सुरक्षा पहचानकर्ता, विशेषताओं का एक गुच्छा।
 TimeCreated : 12.07.2012 14:02:19 ProviderName : Microsoft-Windows-Security-Auditing Id : 4741 Message :    . :  : S-1-5-21-451469775-2953165952-2320738315-500   : administrator   : DOMAIN  : 0xb3acf    :  : S-1-5-21-451469775-2953165952-2320738315-2979   : TEST$   : DOMAIN :    SAM: TEST$  : -   : -  : -  : -   : -   : -   : -   : <>     : <>   : 515  : -   UAC: 0x0   UAC: 0x85    :    "  " -  "    " -   : -  SID: -  : <  > DNS- : -   : -  : Privileges - 


हम सबसे बुनियादी जानकारी में रुचि रखते हैं: समय, जिसने बनाया, कंप्यूटर का नाम। ऐसा करने के लिए, "थोड़ा" हमारे अनुरोध को ट्विस्ट करें:
 Get-WinEvent -FilterHashtable @{LogName=”Security”;ID=4741} | Select TimeCreated,@{n=””;e={([xml]$_.ToXml()).Event.EventData.Data | ? {$_.Name -eq “SubjectUserName”} |%{$_.'#text'}}},@{n=” ”;e={([xml]$_.ToXml()).Event.EventData.Data | ? {$_.Name -eq “SamAccountName”}| %{$_.'#text'}}} 

परिणामस्वरूप, इस क्वेरी का परिणाम ऐसी जानकारी होगी जो पहले से ही आंख के लिए सुविधाजनक है:
 TimeCreated : 12.07.2012 14:02:19  : administrator   : TEST$ 

यह अनुरोध EventLog में XML ऑब्जेक्ट के रूप में ईवेंट मानता है। और उन मूल्यों का चयन करता है जिनकी हमें ज़रूरत है, अर्थात् समय (समय के अनुसार), ऑपरेटर और कंप्यूटर का नाम।

जैसा कि आप देख सकते हैं, कोड काफी पठनीय नहीं है। घटनाओं के साथ काम करने में सक्षम होने के लिए, Windows Eventlog एक विशेष .Net वर्ग प्रदान करता है जो प्रत्येक ईवेंट को सबस्ट्रिंग में पार्स कर सकता है और चूंकि Powershell, वास्तव में, .NET है। ये क्षमताएं इसमें भी उपलब्ध हैं।

उदाहरण के लिए, यह कोड किसी घटना को सब्सट्रेटिंग में पार्स करता है:
 Get-Eventlog Security -InstanceId 4768| Select TimeGenerated,ReplacementStrings | % { New-Object PSObject -Property @{ UserName = $_.ReplacementStrings[0] IPAddress = $_.ReplacementStrings[9] Date = $_.TimeGenerated } } 


परिणामस्वरूप, हमें कुछ ऐसा मिलता है:
 Date : 12.07.2012 14:02:19 Username : administrator IPAddress : 10.10.10.1 


यह कोड पढ़ने में बहुत आसान है।

आइए अधिक विस्तार से अनुरोध पर विचार करें।


विकल्प 1 (अनुरोध XLM के रूप में घटना पर विचार करता है):

यदि आप EventLog में कोई प्रविष्टि खोलते हैं, तो आपको 2 बुकमार्क दिखाई देंगे: सामान्य और विवरण।
यदि आप "विवरण" टैब पर जाते हैं और देखने के तरीके का चयन करते हैं: "XML मोड", तो हम XML के रूप में सिर्फ एक ही घटना संरचना देखेंगे।
इस ईवेंट को XML के रूप में पार्स करने और हमारे द्वारा आवश्यक मान चुनने के लिए: Event.EventData.Data सेक्शन में, SubjectUserName नाम के पैरामीटर में, कंप्यूटर बनाने वाले उपयोगकर्ता का नाम है, और पैरामीटर में SamAccountName - निर्मित कंप्यूटर का नाम।

विकल्प 2 (सब्सट्रिंग के तहत पार्सिंग):

उसी तरह, घटना को एक्सएमएल के रूप में खोलें, अनुभाग Event.EventData.Data को ढूंढें, और लाइनों की गणना करें (0 से शुरू) - ये हमारे सबस्ट्रिंग के सूचक हैं। हम उस पंक्ति को पाते हैं जिसकी हमें आवश्यकता है, और विचार करें कि यह एक पंक्ति में क्या है।

अब आपको यह जानकारी प्रदर्शित करने की आवश्यकता है, इसे कंसोल में संग्रहीत न करें।
बेहतर अभी तक, अगर यह व्यवस्थापक को भेजा जाता है, तो मेल द्वारा कहें।
Powershell 2.0 में SMTP सत्रों को सांत्वना देने और ईमेल भेजने की क्षमता है।
Send-MailMessage - एक cmdlet जो इस फ़ंक्शन को करता है।
संदेश भेजने के लिए, आपको SMTP सर्वर, प्रेषक पता, प्राप्तकर्ता पता, संदेश निकाय, संदेश विषय, उपयोगकर्ता नाम और पासवर्ड निर्दिष्ट करना होगा।
नतीजतन, हमें निम्नलिखित अनुरोध मिलते हैं, जो पहचानकर्ता आईडी = 4741 के तहत अंतिम घटना की खोज करेंगे और व्यवस्थापक को मेल पर जानकारी भेजेंगे।

 #     $Theme = “    ” #     ,     . $Subject = “ ” #   $Server = “mail.domain.ru” # SMTP  $From = “audit@domain.ru” #   $To = “admin@domain.ru” #  $pass = ConvertTo-SecureString “PASSWORD” -AsPlainText -Force #    $cred = New-Object System.Management.Automation.PSCredential(“AUDIT” , $pass) #    $encoding = [System.Text.Encoding]::UTF8 #  UTF8        #    .       ID.     Body. $Body=Get-WinEvent -FilterHashtable @{LogName=”Security”;ID=4741} | Select TimeCreated,@{n=””;e={([xml]$_.ToXml()).Event.EventData.Data | ? {$_.Name -eq “SubjectUserName”} |%{$_.'#text'}}},@{n=” ”;e={([xml]$_.ToXml()).Event.EventData.Data | ? {$_.Name -eq “SamAccountName”}| %{$_.'#text'}}} | select-object -first 1 # . Send-MailMessage -From $From -To $To -SmtpServer $server -Body “$Theme `n$BodyM” -Subject $Subject -Credential $cred -Encoding $encoding 


परिणाम


हम इस स्क्रिप्ट को ps1 एक्सटेंशन वाली फ़ाइल में सहेजते हैं, उदाहरण के लिए, यहाँ: D: \ Scripts \ ADCompAn.s1।
Powershell कंसोल खोलें।
हम कमांड टाइप करते हैं: सेट-एक्ज़ीक्यूशनपॉलिशी अप्रतिबंधित

"Y" दबाएं और दर्ज करें। इस प्रकार, हम सर्वर पर पॉवरशेल स्क्रिप्ट के निष्पादन की अनुमति देते हैं।
स्क्रिप्ट को कंसोल (ड्रैग एंड ड्रॉप) में खींचें और एंटर दबाएं। हम सत्यापित करते हैं कि स्क्रिप्ट त्रुटियों के बिना निष्पादित की गई थी (यानी, कंसोल में कोई लाल टेक्स्ट बॉक्स दिखाई नहीं दिया)। हम एक नए संदेश के लिए मेल की जांच करते हैं जिसमें वह डेटा होता है जिसकी हमें आवश्यकता होती है।

यह केवल किसी भी समय इस स्क्रिप्ट को चलाने के लिए रहता है जब घटना हुई।
तब "टास्क शेड्यूलर" हमारी सहायता के लिए आएगा।
शेड्यूलर के पास EventLog में किसी विशिष्ट घटना पर प्रतिक्रिया देने की क्षमता है।
हम एक कार्य बनाते हैं जहां ट्रिगर में हम सुरक्षा लॉग में दिखाई देने वाली संख्या 4741 के तहत घटना का जवाब देते हैं।
हम यह भी संकेत देते हैं कि आपको इस स्क्रिप्ट को चलाने की आवश्यकता है। ऐसा करने के लिए, "कार्य" में इंगित करें कि हम प्रोग्राम को चलाना चाहते हैं, क्षेत्र में "प्रोग्राम या स्क्रिप्ट" " शक्तियां " लिखें। फ़ील्ड में "तर्क जोड़ें (वैकल्पिक)" लिखें -nologo -noprofile -File "D: \ Scripts \ ADCompAdd.ps1 field "

अब हम परीक्षण करते हैं कि बनाई गई संरचना कैसे काम करती है। हम AD में किसी भी विभाजन में परीक्षण कंप्यूटर बनाते हैं। और एक संदेश के लिए मेल की जाँच करें।

स्क्रिप्ट पूरी तरह से सुरक्षित नहीं है क्योंकि इसमें स्पष्ट पाठ में एक उपयोगकर्ता नाम और पासवर्ड शामिल है, इसलिए मैं अत्यधिक अनुशंसा करता हूं कि यदि आप इस स्क्रिप्ट का उपयोग करने का निर्णय लेते हैं, तो खातों का उपयोग न्यूनतम अधिकारों के साथ संदेश भेजने के लिए करें।

मेरे माप के अनुसार, घटना के लिए प्रतिक्रिया का समय 1 सेकंड है। यानी पत्र की प्राप्ति के लिए निर्माण के समय से 1 सेकंड बीत जाता है। बेशक, बशर्ते कि आप अपने स्थानीय मेल सर्वर का उपयोग करें, और कहीं इंटरनेट पर नहीं। इसमें देरी हो सकती है। लेकिन कुल मिलाकर उच्च नहीं है।

नतीजतन, इस स्क्रिप्ट को एक आधार के रूप में लेते हुए और इसमें इवेंट से प्राप्त होने वाले ईवेंट नंबर और डेटा को बदलना, आप AD में खातों के साथ सभी ऑपरेशनों की निगरानी कर सकते हैं: create-delete, disable-enable, lock-unlock।, समूहों में जोड़ें। अपवाद और सामान। सामान्य तौर पर, कोई भी ईवेंट मॉनिटरिंग जो आपको विंडोज को ऑडिट करने की अनुमति देता है। अनुरोध में XML फ़िल्टर को बदलना बस आवश्यक है, ऐसा करने के लिए, XML मोड में आवश्यक ईवेंट देखें, आवश्यक मानों का चयन करें और उन्हें अनुरोध फ़िल्टर में दर्ज करें।

पुनश्च:


यहाँ Windows Server 2008R2 के लिए कुछ उपयोगी घटना पहचानकर्ता हैं:

ID = 4741 डोमेन में कंप्यूटर बनाना

ID = 4743 किसी डोमेन से कंप्यूटर हटाना

ID = 4728 सुरक्षा समूह में जोड़ना

ID = 4729 सुरक्षा समूह से हटाना

आईडी = 4720 उपयोगकर्ता निर्माण

ID = 4726 उपयोगकर्ता हटाएं

आईडी = 4740 खाता लॉकआउट

आईडी = 4767 खाता अनलॉक

ID = 4722 खाता सक्षम करें

आईडी = 4725 खाता डिस्कनेक्ट

Source: https://habr.com/ru/post/In147750/


All Articles