
AD Group Policy में असुरक्षित सेटिंग्स खोजने में मदद करने के लिए एक PowerShell स्क्रिप्ट। (अप्रचलित, इसके बजाय Grouper2 का उपयोग करें!)
DONT USE GROUPER ANY MORE. USE GROUPER2! https://github.com/l0ss/Grouper2
एक PowerShell स्क्रिप्ट जो AD ग्रुप पॉलिसी में कमजोर सेटिंग्स ढूंढने में मदद करती है।

Grouper एक PowerShell मॉड्यूल है जो पेंटेस्टर्स और रेड टीमर्स के लिए डिज़ाइन किया गया है (हालाँकि संभवतः sysadmins के लिए भी उपयोगी है) जो Get-GPOReport cmdlet (Microsoft के Group Policy मॉड्यूल का हिस्सा) से प्राप्त (आमतौर पर बहुत शोरगुल वाले) XML आउटपुट को छानता है और Group Policy Objects (GPOs) में परिभाषित उन सभी सेटिंग्स की पहचान करता है जो किसी ऐसे व्यक्ति के लिए उपयोगी हो सकती हैं जो कुछ मजेदार/बुरा करने की कोशिश कर रहा है।
GPOs में मिलने वाली चीज़ों के उदाहरण:
हाँ, यह काफी खुरदरा है, लेकिन यह मुझे उन भयानक 150MB HTML GPO रिपोर्टों को पढ़ने में लगने वाले अत्यधिक समय से बचाता है, और अगर यह मेरे लिए काम करता है तो शायद आपके लिए भी काम करे।
ध्यान दें: जबकि कुछ फ़ंक्शन नामों में 'ऑडिट' शब्द शामिल हो सकता है, Groper स्पष्ट रूप से सर्वोत्तम अभ्यास कॉन्फ़िगरेशन आदि के लिए एक संपूर्ण ऑडिट नहीं है। अगर आप वह चाहते हैं, तो आपको Microsoft SCT और LGPO.exe या कुछ और का उपयोग करना चाहिए।
Group Policy cmdlets स्थापित Windows मशीन पर GPO रिपोर्ट जनरेट करें। ये डिफ़ॉल्ट रूप से डोमेन कंट्रोलर पर स्थापित होते हैं, RSAT का उपयोग करके Windows क्लाइंट पर स्थापित किए जा सकते हैं, या Windows सर्वर पर "Add Feature" विज़ार्ड के माध्यम से सक्षम किए जा सकते हैं।
Get-GPOReport -All -ReportType xml -Path C:\temp\gporeport.xml
Grouper मॉड्यूल आयात करें।
Import-Module .\grouper.psm1
Grouper चलाएँ।
Invoke-AuditGPOReport -Path C:\temp\gporeport.xml
कुछ पैरामीटर भी हैं जिन्हें आप बदल सकते हैं जो Grouper द्वारा दिखाई जाने वाली पॉलिसी सेटिंग्स को बदल देते हैं:
-showDisabled
डिफ़ॉल्ट रूप से, Grouper केवल उन GPOs को दिखाएगा जो वर्तमान में सक्षम हैं और AD में एक OU से लिंक हैं। यह उस व्यवहार को टॉगल करता है।
-Online
डिफ़ॉल्ट रूप से Grouper केवल Get-GPOReport के वास्तविक XML आउटपुट के साथ काम करता है, और बिल्कुल भी नेटवर्क संचार नहीं करता है, जिससे यह काफी "opsec सुरक्षित" है, हालाँकि मुझे उस शब्द से नफ़रत है।
यदि आप इसे -Online के साथ इनवोक करते हैं, तो Grouper उन चेकों को चालू करेगा जिनमें कम से कम उस AD डोमेन से बात करना शामिल है जहाँ से रिपोर्ट जनरेट हुई थी, लेकिन संभवतः e.g. फ़ाइल सर्वर से बात करना भी शामिल होगा। यह Grouper को उपयोगी चीज़ें करने की अनुमति देगा जैसे GPOs द्वारा लक्षित फ़ाइलों पर ACLs रिपोर्ट करना, और जाँचना कि क्या e.g. वर्तमान उपयोगकर्ता प्रश्न में फ़ाइल में लिख सकता है।
-Level
Grouper में 3 स्तरों का फ़िल्टरिंग है जिसे आप इसके आउटपुट पर लागू कर सकते हैं।
उपयोग सीधा है। -Level 3, -Level 2, आदि।
Get-GPOReport runas /netonly के माध्यम से गैर-डोमेन-जॉइंड मशीनों पर भी ठीक काम करता है। आपको कुछ कम-विशेषाधिकार वाले क्रेडेंशियल की आवश्यकता होगी, लेकिन यह अपेक्षित है।
इस तरह करें:
runas /netonly /user:domain\user powershell.exe
एक गैर-डोमेन-जॉइंड मशीन पर जो डोमेन कंट्रोलर के साथ संचार कर सकती है।
फिर परिणामी PowerShell सत्र में इस तरह करें:
Get-GpoReport -Domain example.com -All -ReportType xml -Path C:\temp\gporeport.xml
आसान।
Grouper को काम करने के लिए केवल PowerShell 2.0 और Get-GPOReport से XML फ़ाइल आउटपुट की आवश्यकता है। आप इसे बिना नेटवर्क कार्ड के VM पर चला सकते हैं यदि आप चिंतित हैं और यह ठीक काम करेगा।
हालाँकि, यह काफी बुनियादी कोड है इसलिए यह देखना मुश्किल नहीं होना चाहिए कि यह कुछ भी दूरस्थ रूप से संदिग्ध नहीं कर रहा है।
संक्षिप्त उत्तर: हाँ।
लंबा उत्तर: हाँ, उन चीजों में से एक करना बेहतर होगा, लेकिन कुछ चीजें हैं जिन्होंने मुझे अभी तक उन्हें करने से रोका।
आदर्श रूप से मैं SYSVOL से सीधे पॉलिसी फ़ाइलों को पार्स करना चाहूंगा, लेकिन वे कई अलग-अलग फ़ाइल स्वरूपों में संग्रहीत हैं, कुछ मालिकाना हैं, उन्हें पढ़ना एक वास्तविक दर्द है, और मेरे पास उनके लिए खरोंच से पार्सर लिखने का न तो समय है और न ही झुकाव जब Microsoft पहले से ही cmdlets प्रदान करता है जो काम बहुत अच्छी तरह से करते हैं।
बहुत दूर के भविष्य में मैं Microsoft के Get-GPOReport को Grouper में बेक करना चाहूंगा, ताकि आपको RSAT की बिल्कुल भी आवश्यकता न हो, लेकिन मुझे यह पता लगाना होगा कि क्या यह किसी प्रकार का कॉपीराइट उल्लंघन होगा। मुझे यह भी पता लगाना होगा कि मैंने अभी जो कहा उसे वास्तव में कैसे करना है।
Grouper कोई भेद्यता स्कैनर नहीं है। Grouper केवल Group Policy रिपोर्टों में भारी मात्रा में फालतू और शोर को फ़िल्टर करके आपको केवल उन पॉलिसी सेटिंग्स को दिखाता है जो शोषण योग्य तरीकों से कॉन्फ़िगर की जा सकती हैं।
जहाँ तक संभव हो मैं प्रत्येक श्रेणी की जाँचों के माध्यम से काम कर रहा हूँ ताकि स्पष्ट रूप से गैर-कमजोर कॉन्फ़िगरेशन को हटाने और शोर के स्तर को और कम करने के लिए अतिरिक्त फ़िल्टरिंग जोड़ सकूं, लेकिन Group Policy अत्यंत लचीला है और किसी प्रशासक द्वारा की जा सकने वाली हर संभावित गलती का अनुमान लगाना काफी कठिन है।
बढ़िया, आपको अभी Grouper को बेहतर बनाने का एक तरीका मिल गया! नीचे स्क्रॉल करें और आप देखेंगे कि मैंने Grouper में नई जाँचें जोड़ने के लिए एक छोटी मार्गदर्शिका प्रदान की है।
मैंने आपकी पीठ थपथपाई है, बच्चे। रिपॉजिटरी में एक test_report.xml है जिसे आप आज़मा सकते हैं। इसमें बहुत सारी बुरी सेटिंग्स हैं ताकि आप देख सकें कि वह कैसा दिखता है।
आपको इसे -showDisabled फ्लैग के साथ चलाना होगा क्योंकि यह इतनी भयानक कॉन्फ़िगरेशन से भरा है कि मैं लैब वातावरण में भी GPO को सक्षम नहीं करना चाहता था।
ठीक है।

संक्षिप्त उत्तर: PowerView इस काम को अच्छी तरह से करेगा।
लंबा उत्तर: मैं किसी बिंदु पर इस कार्यक्षमता को जोड़ने का प्रयास करूँगा, लेकिन तब तक चुप रहें और PowerView का उपयोग करें।
ठीक है, आसानी से ठीक हो जाता है।
grouper.ps1 खोलें, "$polchecks" ऐरे ढूंढें और बस उस लाइन को कमेंट कर दें जहाँ वह जाँच ऐरे में जोड़ी गई है।
हो गया।
ज़रूर, अच्छा लगता है।
कुछ GPOReport xml आउटपुट प्राप्त करें जिसमें उस प्रकार की पॉलिसी/सेटिंग शामिल हो जिसे आप Grouper में खोजने में सक्षम बनाना चाहते हैं। इसके लिए लैब वातावरण में उपयुक्त पॉलिसी तैयार करने की आवश्यकता हो सकती है।
<GPO> xml ऑब्जेक्ट ढूंढें जो आपकी लक्ष्य पॉलिसी से मेल खाता हो।
xml का वह उपखंड ढूंढें जो उस जानकारी से मेल खाता हो जिसे आप पॉलिसी से निकालना चाहते हैं। पॉलिसी सेटिंग्स को या तो User या Computer पॉलिसी में विभाजित किया गया है, इसलिए यह आमतौर पर इनमें से एक में होगा:
GPO.Computer.ExtensionData.Extension
या
GPO.User.ExtensionData.Extension
अब कष्टप्रद भाग - इस कोड के इतने गड़बड़ होने का कारण यह है कि प्रत्येक पॉलिसी सेटिंग अनुभाग अलग तरीके से संरचित है और वे बेहद भिन्न नामकरण परंपराओं का उपयोग करते हैं, इसलिए आपको यह पता लगाने की आवश्यकता होगी कि आपकी लक्ष्य पॉलिसी कैसे संरचित है। शुभकामनाएँ?
यहाँ एक चेक फ़ंक्शन का खाका है जिसे आप शुरू करने के लिए उपयोग कर सकते हैं। सुनिश्चित करें कि यदि कुछ भी दिलचस्प नहीं मिलता है तो यह बिल्कुल वापस नहीं आता या $null लौटाता है।
Function Get-GPOThing {
[cmdletbinding()]
Param (
[Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()] [System.Xml.XmlElement]$polXML,
[Parameter(Mandatory=$true)][ValidateSet(1,2,3)][int]$level
)
######
# विवरण: चीजों के लिए जाँच करता है।
# कमजोर: यदि Level -eq 3 तो यह दिखाता है इसका विवरण
# दिलचस्प: यदि Level -eq 2 तो यह दिखाता है इसका विवरण
# उबाऊ: सभी चीजें।
######
$settingsThings = ($polXml.Thing.ExtensionData.Extension.Thing | Sort-Object GPOSettingOrder)
if ($settingsThings) {
foreach ($setting in $settingsThings) {
if ($level -eq 1) {
$output = @{}
$output.Add("Name", $setting.Name)
if ($setting.SettingBoolean) {
$output.Add("SettingBoolean", $setting.SettingBoolean)
}
if ($setting.SettingNumber) {
$output.Add("SettingNumber", $setting.SettingNumber)
}
$output.Add("Type", $setting.Type.InnerText)
Write-Output $output
""
}
}
}
}
बहुत-बहुत धन्यवाद:
बेकार कोड की बात करें तो, हाँ, मुझे पता है कि यह थोड़ा गड़बड़ है। मैंने इसे यथासंभव मॉड्यूलर बनाने की कोशिश की है ताकि दूसरे बिना अधिक परेशानी के अतिरिक्त जाँचें जोड़ सकें, लेकिन इसे अभी भी बहुत प्यार की आवश्यकता है। यदि आप कोई ऐसी गलती देखते हैं जिसे मैंने किया है जिसे तत्काल ठीक करने की आवश्यकता है, तो कृपया मुझे बताएं।
Ctrl-f करके "$polchecks" पर जाएं और इसे दूसरों के साथ जाँचों की सूची में जोड़ें।
इसका परीक्षण करें।
यदि यह काम करता है, तो एक पुल रिक्वेस्ट सबमिट करें!
यदि आप अटक जाते हैं, तो मुझसे संपर्क करें। यदि मैं कुछ मिनट निकाल सकूँ तो मदद करने का प्रयास करूँगा।