
أداة Pwsh لتدقيق تعداد مجموعات AD
اكتشف استطلاع Active Directory قبل أن يتحول إلى اختراق.
QuietPhase أداة PowerShell تتحقق مما إذا كان نطاقك مُهيأ لاكتشاف تعداد المجموعات، وهي مرحلة الاستطلاع الهادئة التي يرسم فيها المهاجم خريطة من يملك وصولاً مميزاً. تتحقق من سياسة التدقيق على وحدة التحكم بالمجال، وتُبلّغ عن المجموعات المميزة والمخصصة التي تُدقَّق قراءات عضويتها، وتقترح الإصلاحات (أو تطبّقها إن اخترت ذلك).
معظم المؤسسات تُنبّه عند تغيير أحدهم لمجموعة مميزة. القليل جداً يلاحظ عندما يقرأ أحدهم إحداها. تساعد QuietPhase على سد هذه الفجوة، وتُسهّل إعداد مجموعات مصيدة (honeypot) تحوّل التعداد إلى تنبيه عالي الثقة.
قراءة خلفية: The Quiet Phase: Why Active Directory Group Enumeration Deserves Your Attention
adminCount=1) إلى حالتها بواسطة SDProp، لذا يُفحص AdminSDHolder ويُعالَج أيضاً.Out-ConsoleGridView). استخدمه لمجموعات المصيدة أو أي شيء آخر تريد مراقبته.-Apply، ويُؤكَّد كل منها. -WhatIf مدعوم.-FixScriptPath جميع التغييرات المقترحة إلى ملف .ps1 قابل للمراجعة، مناسب لضبط التغييرات.تسجّل وحدة تحكم المجال حدث تعداد مجموعة فقط عندما يكون كلا الأمرين التاليين متوفراً:
member بواسطة Everyone أو Authenticated Users.عندما يكون كلا الشرطين صحيحاً، تُنتج كل قراءة عضوية الحدث 4662 على وحدة التحكم بالمجال التي أجابت على الاستعلام. الحقول الرئيسية:
| الحقل | القيمة | المعنى |
|---|---|---|
ObjectName | %{<objectGUID of the group>} | أي مجموعة قُرئت |
Properties | {bf9679c0-0de6-11d0-a285-00aa003049e2} | سمة member |
Properties | {bc0ac240-79a9-11d0-9020-00c04fc2d4cf} | مجموعة خصائص العضوية (غالباً إلى جانبها) |
AccessMask | 0x10 | Read Property |
SubjectUserName / SubjectUserSid | الحساب | من نفّذ القراءة |
SubjectLogonId | مثل 0x3A7F21 | اربطه بالحدث 4624 (TargetLogonId) للحصول على عنوان IP المصدر ومحطة العمل |
ملاحظة: الأدوات القائمة على SAMR مثل
net group /domainلا تُطلق إشارة 4662 هذه. غطِّ هذا المسار عبر تسجيل إنشاء العمليات (الحدث 4688 / Sysmon / EDR) أو اكتشافات الشبكة مثل Microsoft Defender for Identity.
Out-ConsoleGridView، وهو جزء من وحدة Microsoft.PowerShell.ConsoleHost، وهي تبعية لـ Microsoft.PowerShell.ConsoleGuiTools. تُثبَّت في نطاق CurrentUser.# Report only (default): check the discovered DC, privileged groups, then pick custom groups
.\QuietPhase.ps1
# Check audit policy on every DC in the domain
.\QuietPhase.ps1 -AllDomainControllers
# Export proposed fixes for review or change approval
.\QuietPhase.ps1 -AllDomainControllers -FixScriptPath .\QuietPhase-Fix.ps1
# Preview changes, then apply them (each change is confirmed)
.\QuietPhase.ps1 -Apply -WhatIf
.\QuietPhase.ps1 -Apply
# Propose rules for Authenticated Users instead of Everyone
.\QuietPhase.ps1 -Apply -AuditPrincipal AuthenticatedUsers
| المعامل | الافتراضي | الوصف |
|---|---|---|
-Server | وحدة تحكم المجال المكتشفة | وحدة تحكم المجال أو النطاق المستهدف |
-AllDomainControllers | معطّل | التحقق من نهج التدقيق على كل وحدة تحكم مجال، وليس على الهدف فقط |
-AuditPrincipal | Everyone | الكيان الأساسي المستخدم للقواعد المقترحة: Everyone أو AuthenticatedUsers. يُحتسب أيٌّ منهما كونه مُهيَّأً عند التحقق. |
-Apply | معطّل | تطبيق التغييرات المقترحة، مع مطالبة تأكيد لكل تغيير |
-SkipCustomGroups | معطّل | تخطي المرحلة 3 (اختيار المجموعات المخصصة) |
-FixScriptPath | لا شيء | تصدير كل المعالجة المقترحة إلى ملف .ps1 |
-WhatIf / -Confirm | قياسي | معاينة التغييرات أو التحكم في المطالبات عند استخدامها مع -Apply |
auditpol لإصلاح ذلك، ثم يتوقف. تبقى SACLs الخاصة بالمجموعات عديمة الفائدة حتى يتم تفعيل ذلك.عندما يحتاج أي شيء إلى تغييرات، ينتهي التشغيل بكتلة NEXT STEPS تحتوي على أوامر جاهزة للصق من أجل -Apply أو -WhatIf أو -FixScriptPath أو خطوات ADUC اليدوية.
==============================================================================
PHASE 1 - Domain controller audit policy
==============================================================================
Domain: contoso.com Target DC: DC01.contoso.com DCs checked: 1
DC01.contoso.com
Audit Directory Service Access: Success
Audit Security Group Management: Success
Force audit policy subcategory settings: enabled (or default)
PHASE 1 PASSED: Directory Service Access auditing is enabled.
==============================================================================
PHASE 2 - Well-known privileged groups
==============================================================================
Group Status Protected Detail
----- ------ --------- ------
Domain Admins NeedsChange Yes No audit rule for reads of 'member' (2 other audit rule(s))
Enterprise Admins NeedsChange Yes No audit rule for reads of 'member' (2 other audit rule(s))
Schema Admins Configured Yes Everyone: Success ReadProperty on member (direct)
Administrators (Builtin) NeedsChange Yes No audit rule for reads of 'member' (1 other audit rule(s))
DnsAdmins NeedsChange No No audit rule for reads of 'member' (0 other audit rule(s))
AdminSDHolder (DC=contoso,DC=com) NeedsChange (template) No audit rule for reads of 'member' (2 other audit rule(s))
REMEDIATION - well-known privileged groups
5 object(s) need an audit rule: Everyone | Success | Read member
- Domain Admins
- Enterprise Admins
- Administrators (Builtin)
- DnsAdmins
- AdminSDHolder (DC=contoso,DC=com)
(AdminSDHolder is included because SDProp resets protected groups from it about every 60 minutes.)
Options for resolving these are listed under NEXT STEPS at the end of the run.