
يفحص ملفات تفريغ نطاقات Azure المُصدَّرة بحثاً عن كلمات مرور نصية صريحة، وسلاسل اتصال، ومفاتيح تخزين، وغيرها من الأسرار؛ وينشئ تقارير CSV/HTML منقّحة لسير عمل التدقيق للقراءة فقط.
ماسح PowerShell يمر عبر مخرجات MicroBurst
Get-AzDomainInfo بحثًا عن كلمات مرور ومفاتيح وسلاسل اتصال وأسرار أخرى
بنص واضح لا ينبغي أن تبقى غير مشفّرة في بيئة Azure.
مصمَّم لسير عمل تدقيق للقراءة فقط: تجمع تفريغًا للنطاق باستخدام MicroBurst
(يكفي وصول Reader لتشغيل Get-AzDomainInfo)، ثم توجّه هذه الأداة إلى
مجلد المخرجات. وهي لا تلمس Azure نفسها — بل تقرأ فقط الملفات التي
صدّرتها بالفعل. قيم الأسرار تكون مُخفاة في كل تقرير، لذا فالمخرجات
آمنة لإرفاقها بالنتائج.
# 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. تُخفى سلاسل السياق قبل اقتطاعها، وكل سر
يُعثر عليه في سطر يُخفى من سياق كل نتيجة في ذلك السطر، بحيث لا يبقى أي نص
واضح في التقرير. عند فرز الإيجابيات الكاذبة، غالبًا ما يكون رؤية القيمة
الكاملة أسرع — مرّر -ShowSecrets لإخراج قيم غير مُخفاة في كل مكان
(وحدة التحكم، CSV، HTML). عندها تحمل وحدة التحكم وتقرير HTML لافتة تحذير
واضحة، ويجب التعامل مع التقارير كمواد اعتمادات حيّة:
Invoke-MBSecretScan -Path .\dump -ShowSecrets # raw values, for local triage
يعمل على Windows PowerShell 5.1 وPowerShell 7+ (Windows، Linux، macOS).
كل تشغيل يُنتج ثلاثة أشياء:
| المخرج | الوصف |
|---|---|
| ملخص وحدة التحكم | أعداد ملوّنة حسب الخطورة/الفئة إلى جانب أهم النتائج الحرجة/عالية الخطورة. |
findings.csv | صف واحد لكل نتيجة (الخطورة، القاعدة، الملف، السطر، القيمة المُخفاة، السياق) لفرزها في Excel. الحقول التي تحمل محتوى ممسوحًا ضوئيًا مُهرَّبة ضد حقن صيغ الجداول. |
report.html | تقرير HTML مكتفٍ بذاته (بدون أصول خارجية) مع بطاقات خطورة، وفلتر نص فوري، ومفاتيح تبديل للخطورة — قابل للمشاركة مع العميل. |
الأمر cmdlet يُصدر أيضًا كائنات النتائج إلى خط الأنابيب، لذا يمكنك معالجتها لاحقًا:
$f = Invoke-MBSecretScan -Path .\dump -Quiet
$f | Where-Object Severity -eq 'Critical' | Format-Table File,Line,RuleName
| القاعدة | الخطورة | مثال على المصدر في التفريغ |
|---|---|---|
| سلسلة اتصال SQL/قاعدة بيانات تتضمن كلمة مرور مضمّنة | حرجة | إعدادات App Service، تصديرات web.config |
| سلسلة اتصال حساب Azure Storage / مفتاح بطول 88 حرفًا | حرجة | إعدادات التطبيق، تصديرات Storage |
SharedAccessKey لـ Service Bus / Event Hub | حرجة | إعدادات موارد المراسلة |
| مفتاح حساب Cosmos DB | حرجة | إعدادات التطبيق |
| كتلة مفتاح خاص بصيغة PEM | حرجة | تصديرات Key Vault / الشهادات |
| كلمة مرور Azure Redis Cache | عالية | سلاسل اتصال ذاكرة التخزين المؤقت |
سر عميل Azure AD (صيغة ما بعد 2021 …Q~…) | عالية | قوالب ARM، إعدادات التطبيق |
رمز SAS / معامل sig= | عالية | عناوين URL الخاصة بـ SAS للتخزين |
| JWT / رمز حامل | عالية | رموز مخزّنة مؤقتًا وتهيئات |
وجود ملف شهادة / مفتاح (.pfx, .pem, .key, …) | عالية | في أي مكان في التفريغ |
إسناد عام لـ password / pwd | عالية | متغيرات أتمتة، إعدادات تطبيق، معاملات ARM |
إسناد عام لـ secret / client_secret | عالية | إعدادات التطبيق، قوالب |
| مفتاح وصول AWS / رموز GitHub / Slack | عالية/متوسطة | اعتمادات خارجية مخزّنة في تطبيقات Azure |
api_key / access_key / connectionstring عامة | متوسطة | إعدادات التطبيق |
| سلسلة عالية الإنتروبيا (استدلالي) | منخفضة | شبكة أمان لصيغ المفاتيح غير المعروفة — اختياري عبر -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 متغيرات حسابات التشغيل الآلي وإعدادات التطبيق كصفوف
Name,Value[,Encrypted]. السر موجود في عمود Value بينما الكلمة المفتاحية
التي تحدده (مثل ServiceAccountPwd, dbConnectionString) موجودة في عمود Name —
لذلك لا يرى التعبير النمطي العادي الاثنين على نفس «السطر»، وتكون الكلمة المفتاحية
مدفونة داخل رمز مركّب بدون حدود كلمات.
بالنسبة لملفات .csv / .tsv, يقوم الماسح بالإضافة إلى ذلك بـالاقتران المنظّم للأعمدة
(Private/Get-MBCsvFinding.ps1):
Encrypted=True تُتخطى (القيمة ليست نصًا واضحًا).Password أو StorageKey), يُبلَّغ عن كل خلية ليست عنصرًا نائبًا.القيم التي تغطيها قاعدة عالية الثقة بالفعل (سلاسل الاتصال، مفاتيح التخزين، SAS) تُؤجَّل إلى مرحلة السطور الخام لإخفاء أكثر إحكامًا، وتُزال ازدواجية النتائج حسب الفئة بحيث لا يُبلَّغ عن السر نفسه مرتين. إذا تعذّر تحليل ملف كـ CSV، يعود الماسح تلقائيًا إلى الفحص العادي للسطور الخام.
-ScanValues)الاقتران أعلاه يعتمد على اسم الإعداد. وللحصول أيضًا على الأسرار المخزّنة تحت
اسم بلا معنى (مثل Config1 = P@ssw0rd2026!)، مرّر -ScanValues.
إنه يفحص محتوى خلايا القيم باستدلالين متحفظين منخفضي الخطورة:
!@#$%^&* …) إضافة إلى حروف وفئة أخرى. القيم ذات النمط المعرّفي مثل
Standard_D2s_v3 (ورمزها الوحيد _ - .) تُتجاهل.-MinEntropy. المسارات / عناوين URL / معرفات الموارد (أي شيء يحتوي / أو \)
تُتخطى لتجنب الإبلاغ عن معرفات الموارد.في جداول Name/Value يفحص عمود Value؛ وفي الجداول الحرة يفحص كل خلية.
هذا يضحي باسترجاع أعلى مقابل إيجابيات كاذبة أكثر، لذا فهو معطّل افتراضيًا —
شغّله لفحص أعمق، ثم افرز النتائج منخفضة الخطورة.
تفريغات Azure مليئة بسلاسل طويلة تبدو عشوائية لكنها ليست أسرارًا. الماسح يفلترها: