
निर्यातित Azure डोमेन डंप्स में प्लेनटेक्स्ट पासवर्ड, कनेक्शन स्ट्रिंग्स, स्टोरेज कीज़ और अन्य सीक्रेट्स की खोज करता है; रीड-ओनली ऑडिट वर्कफ़्लो के लिए रीडैक्टेड CSV/HTML रिपोर्ट्स उत्पन्न करता है।
एक PowerShell स्कैनर जो MicroBurst के Get-AzDomainInfo आउटपुट में सादे-पाठ (plaintext) पासवर्ड, कुंजियाँ, कनेक्शन स्ट्रिंग, और अन्य ऐसे रहस्य खोजता है जिन्हें Azure वातावरण में कभी भी अनएन्क्रिप्टेड नहीं रहना चाहिए।
केवल-पठन (read-only) ऑडिट वर्कफ़्लो के लिए बनाया गया: आप MicroBurst के साथ एक डोमेन डंप इकट्ठा करते हैं (Get-AzDomainInfo के लिए Reader एक्सेस काफी है), फिर इस टूल को आउटपुट फ़ोल्डर पर इंगित करते हैं। यह Azure को स्वयं नहीं छूता है — यह केवल उन फ़ाइलों को पढ़ता है जिन्हें आप पहले ही एक्सपोर्ट कर चुके हैं। हर रिपोर्ट में गुप्त मान (secret values) रिडैक्ट किए जाते हैं, इसलिए आउटपुट निष्कर्षों (findings) के साथ संलग्न करने के लिए सुरक्षित है।
# Clone / copy this folder, then from a PowerShell prompt:
.\Scan-MicroBurst.ps1 -Path .\MicroBurst-2026 -Verbose
या मॉड्यूल आयात करें और cmdlet का सीधे उपयोग करें:
Import-Module .\MicroBurstSecretsHunter.psd1 -Force
Invoke-MBSecretScan -Path .\MicroBurst-2026
रिपोर्टें वर्तमान निर्देशिका में एक टाइमस्टैम्प वाले फ़ोल्डर (MBSecretScan-<timestamp>) में लिखी जाती हैं, जब तक कि आप -OutputDirectory पास न करें।
डिफ़ॉल्ट रूप से हर मान रिडैक्ट किया जाता है ताकि रिपोर्टें साझा करने के लिए सुरक्षित रहें। प्रकट किए गए अक्षरों का बजट मान की लंबाई के एक चौथाई पर होता है (अधिकतम 4 अग्रणी + 2 अनुगामी), और 8 अक्षर या उससे छोटी कोई भी चीज़ एक निश्चित-चौड़ाई वाले मास्क से बदल दी जाती है — इसलिए एक सामान्य पासवर्ड ******** के रूप में दिखता है, जबकि 88-अक्षर वाली स्टोरेज कुंजी AAAA**********AA के रूप में पहचानी जा सकती है। संदर्भ स्ट्रिंग (context strings) को छोटा करने से पहले रिडैक्ट किया जाता है, और किसी पंक्ति पर पाया गया हर रहस्य उस पंक्ति के हर निष्कर्ष के संदर्भ से बाहर कर दिया जाता है, इसलिए रिपोर्ट में कोई प्लेनटेक्स्ट नहीं बचता। गलत-सकारात्मक (false positive) की जाँच करते समय पूरा मान देखना अक्सर तेज़ होता है — -ShowSecrets पास करें ताकि हर जगह (कंसोल, CSV, HTML) अनरिडैक्टेड मान निकलें। तब कंसोल और HTML पर एक स्पष्ट चेतावनी बैनर होता है, और रिपोर्टों को वास्तविक क्रेडेंशियल सामग्री के रूप में माना जाना चाहिए:
Invoke-MBSecretScan -Path .\dump -ShowSecrets # raw values, for local triage
Windows PowerShell 5.1 और PowerShell 7+ (Windows, Linux, macOS) पर काम करता है।
हर रन तीन चीज़ें उत्पन्न करता है:
| आउटपुट | विवरण |
|---|---|
| कंसोल सारांश | गंभीरता/श्रेणी के अनुसार रंग-कोडित गणनाएँ, साथ ही शीर्ष Critical/High निष्कर्ष। |
findings.csv | प्रति निष्कर्ष एक पंक्ति (severity, rule, file, line, redacted value, context) — Excel में ट्राइएज हेतु। स्कैन की गई सामग्री ले जाने वाले फ़ील्ड स्प्रेडशीट फ़ॉर्मूला इंजेक्शन से बचाने के लिए एस्केप किए जाते हैं। |
report.html | स्व-निहित HTML रिपोर्ट (कोई बाहरी संसाधन नहीं) जिसमें गंभीरता कार्ड, लाइव टेक्स्ट फ़िल्टर, और गंभीरता टॉगल होते हैं — क्लाइंट के साथ साझा करने योग्य। |
cmdlet पाइपलाइन में निष्कर्ष ऑब्जेक्ट भी भेजता है, ताकि आप पोस्ट-प्रोसेस कर सकें:
$f = Invoke-MBSecretScan -Path .\dump -Quiet
$f | Where-Object Severity -eq 'Critical' | Format-Table File,Line,RuleName
| नियम | गंभीरता | डंप में उदाहरण स्रोत |
|---|---|---|
| एम्बेडेड पासवर्ड वाली SQL/DB कनेक्शन स्ट्रिंग | Critical | App Service सेटिंग्स, web.config एक्सपोर्ट |
| Azure Storage खाता कनेक्शन स्ट्रिंग / 88-अक्षर वाली कुंजी | Critical | App सेटिंग्स, Storage एक्सपोर्ट |
Service Bus / Event Hub SharedAccessKey | Critical | Messaging संसाधन कॉन्फ़िग |
| Cosmos DB खाता कुंजी | Critical | App सेटिंग्स |
| PEM निजी कुंजी ब्लॉक | Critical | Key Vault / प्रमाणपत्र एक्सपोर्ट |
| Azure Redis Cache पासवर्ड | High | Cache कनेक्शन स्ट्रिंग्स |
Azure AD क्लाइंट सीक्रेट (post-2021 …Q~… फ़ॉर्मेट) | High | ARM टेम्पलेट, app सेटिंग्स |
SAS टोकन / sig= पैरामीटर | High | Storage SAS URLs |
| JWT / बियरर टोकन | High | कैश्ड टोकन, कॉन्फ़िग |
प्रमाणपत्र / कुंजी फ़ाइल मौजूद (.pfx, .pem, .key, …) | High | डंप में कहीं भी |
सामान्य password / pwd असाइनमेंट | High | Automation चर, app सेटिंग्स, ARM पैरामीटर |
सामान्य secret / client_secret असाइनमेंट | High | App सेटिंग्स, टेम्पलेट |
| AWS एक्सेस कुंजी / GitHub / Slack टोकन | High/Med | Azure ऐप्स में संग्रहीत बाहरी क्रेडेंशियल |
सामान्य api_key / access_key / connectionstring | Medium | App सेटिंग्स |
| उच्च-एन्ट्रॉपी स्ट्रिंग (ह्युरिस्टिक) | Low | अज्ञात कुंजी फ़ॉर्मेट के लिए बैकस्टॉप — -IncludeEntropy के माध्यम से ऑप्ट-इन |
पूरा, संपादन योग्य नियम-सेट Private/Get-MBSignature.ps1 में रहता है। प्रत्येक नियम इन फ़ील्ड्स वाला एक [PSCustomObject] है:
| फ़ील्ड | आवश्यक | उद्देश्य |
|---|---|---|
Id, Name, Category, Severity | हाँ | पहचान और निष्कर्ष कैसे रिपोर्ट और क्रमबद्ध किया जाता है। |
Pattern | हाँ | रीजेक्स। प्रति स्कैन एक बार संकलित। |
ValueGroup | हाँ | कौन सा कैप्चर ग्रुप रहस्य रखता है (0 = पूरा मैच)। रिडैक्शन को संचालित करता है। |
MultiLine | नहीं | पंक्ति-दर-पंक्ति के बजाय पूरी-फ़ाइल टेक्स्ट पर मूल्यांकन करें (PEM ब्लॉक)। हर मैच रिपोर्ट किया जाता है, केवल पहला नहीं। |
CaseSensitive | नहीं | डिफ़ॉल्ट IgnoreCase संकलन से बाहर निकलें। इसे केस-संवेदी रूप से परिभाषित फ़ॉर्मेट (AKIA, ghp_, eyJ, Q~) के लिए सेट करें — इसके बिना, मनमाने-केस के समान दिखने वाले मैच हो जाते हैं। |
Redact | नहीं | $false तब सेट करें जब कैप्चर किया गया मान रहस्य के बजाय एक लेबल हो (PEM हेडर लाइन, प्रमाणपत्र फ़ाइल नाम) ताकि यह मास्क होकर अपठनीय होने के बजाय यथावत दिखे। डिफ़ॉल्ट रूप से रिडैक्ट करता है। |
Get-AzDomainInfo automation-account चर और app सेटिंग्स को Name,Value[,Encrypted] पंक्तियों के रूप में एक्सपोर्ट करता है। रहस्य Value कॉलम में रहता है, जबकि इसे पहचानने वाला कीवर्ड (जैसे ServiceAccountPwd, dbConnectionString) Name कॉलम में रहता है — इसलिए एक साधारण regex उन्हें कभी एक ही "पंक्ति" पर नहीं देखता और कीवर्ड बिना किसी शब्द सीमा के एक यौगिक टोकन के अंदर दबा रहता है।
.csv / .tsv फ़ाइलों के लिए स्कैनर अतिरिक्त रूप से संरचित कॉलम-पेयरिंग (Private/Get-MBCsvFinding.ps1) करता है:
Encrypted=True चिह्नित पंक्तियाँ छोड़ दी जाती हैं (मान प्लेनटेक्स्ट नहीं है)।Password या StorageKey कॉलम), तो हर गैर-प्लेसहोल्डर सेल रिपोर्ट किया जाता है।जिन मानों को एक उच्च-विश्वास नियम पहले ही कवर कर चुका है (कनेक्शन स्ट्रिंग, स्टोरेज कुंजियाँ, SAS), उन्हें बेहतर रिडैक्शन के लिए raw-line पास पर छोड़ दिया जाता है, और निष्कर्ष श्रेणी के अनुसार डी-डुप्लिकेट किए जाते हैं ताकि एक ही रहस्य कभी दो बार रिपोर्ट न हो। यदि किसी फ़ाइल को CSV के रूप में पार्स नहीं किया जा सकता है, तो स्कैनर स्वचालित रूप से सामान्य raw-line स्कैन पर वापस आ जाता है।
-ScanValues)उपरोक्त पेयरिंग किसी सेटिंग के नाम पर आधारित होती है। किसी अर्थहीन नाम के तहत संग्रहीत रहस्यों को भी पकड़ने के लिए (जैसे Config1 = P@ssw0rd2026!), -ScanValues पास करें। यह मान सेल की सामग्री की दो रूढ़िवादी, Low-severity ह्युरिस्टिक से जाँच करता है:
!@#$%^&* …) के साथ-साथ अक्षर और एक अन्य वर्ग शामिल हो। पहचान-शैली वाले मान जैसे Standard_D2s_v3 (जिनके केवल प्रतीक _ - . हैं) अनदेखा किए जाते हैं।-MinEntropy। रिसोर्स IDs को फ़्लैग करने से बचने के लिए पाथ / URLs / resource IDs (/ या \ वाली कोई भी चीज़) छोड़ी जाती हैं।Name/Value तालिकाओं में यह Value कॉलम को स्कैन करता है; free-form तालिकाओं में यह हर सेल को स्कैन करता है। यह अधिक रिकॉल के बदले अधिक गलत-सकारात्मक देता है, इसलिए यह डिफ़ॉल्ट रूप से बंद है — गहन स्वीप के लिए इसे चालू करें, फिर Low निष्कर्षों की जाँच करें।