
مجموعة أدوات PowerShell لتدقيق AD CS استناداً إلى أداة PSPKI.
مجموعة أدوات PowerShell لتدقيق خدمات شهادات Active Directory (AD CS).
هي مبنية على مجموعة أدوات PSPKI (رخصة Microsoft العامة) من PKISolution. يحتوي هذا المستودع على إصدار أحدث من PSPKI مما هو متاح في PSGallery (انظر دليل PSPKI). تفضل Vadims Podans (منشئ PSPKI) بتوفير هذا الإصدار لأنه يحتوي على تصحيحات لعدة أخطاء.
تهدف هذه القراءة إلى كونها نقطة انطلاق فقط - للحصول على التفاصيل الكاملة والإرشادات الدفاعية، يرجى الاطلاع على الورقة البيضاء "Certified Pre-Owned".
تحتوي الوحدة على الوظائف الرئيسية التالية:
تحذير: هذا الكود في مرحلة بيتا! نحن واثقون من أن Invoke-PKIAudit لن يؤثر على البيئة لأن كمية البيانات التي يستعلم عنها محدودة جدًا. لم نقم بإجراء اختبارات دقيقة مع Get-CertRequest ضد أعباء العمل النموذجية لخادم CA. يقوم Get-CertRequest بالاستعلام مباشرة عن قاعدة بيانات CA وقد يضطر إلى معالجة آلاف النتائج، مما قد يؤثر على الأداء.
إذا لم تكن هناك نتائج، فهذا ليس ضمانًا بأن بيئتك آمنة!!
كما لا يمكننا ضمان أن نصائح التخفيف لدينا ستجعل بيئتك آمنة أو لن تعطل العمليات!
تقع على عاتقك مسؤولية التحدث إلى فريق (فرق) Active Directory/PKI/الهندسة المعمارية لديك لتحديد أفضل إجراءات التخفيف لبيئتك.
إذا تعطل الكود، أو فاتنا شيء، يرجى تقديم مشكلة أو طلب سحب للإصلاح!
قم بتثبيت ما يلي على جهاز Windows باستخدام موجه PowerShell مرتفع (إصدار PowerShell 5.1 أو أعلى):
* وحدة [PSPKI PowerShell](https://github.com/PKISolutions/PSPKI). قم بالتثبيت باستخدام الأمر التالي:```
Install-Module -Name PSPKI
قم بتنزيل الوحدة واستخراجها إلى مجلد. ثم، استورد الوحدة باستخدام الأوامر التالية:``` cd PSPKIAudit Get-ChildItem -Recurse | Unblock-File
Import-Module .\PSPKIAudit.psd1
# تدقيق سوء تكوينات AD CS
تشغيل `Invoke-PKIAudit` سيشغل جميع فحوصات التدقيق ضد AD CS في المجال الحالي، بما في ذلك تعداد إعدادات مصدر الشهادات (Certificate Authority) وقوالب الشهادات (Certificate Template) المختلفة. لتدقيق CA معين، يمكنك تشغيل `Invoke-PKIAudit -CAComputerName CA.DOMAIN.COM` أو `Invoke-PKIAudit -CAName X-Y-Z`.
أي سوء تكوينات (ESC1-8) ستظهر كخصائص على نتائج CA/قالب المعروضة لتحديد سوء التكوين المحدد الذي تم العثور عليه.
إذا كنت ترغب في تغيير المجموعات/المستخدمين المستخدمة لاختبار التسجيل/التحكم في الوصول، قم بتعديل التعبير العادي `$CommonLowprivPrincipals` في أعلى `Invoke-PKIAudit.ps1`
إذا كنت ترغب في تصدير جميع معلومات CA إلى ملف csv، قم بتشغيل: `Get-AuditCertificateAuthority [-CAComputerName CA.DOMAIN.COM | -CAName X-Y-Z] | Export-Csv -NoTypeInformation CAs.csv`
إذا كنت ترغب في تصدير جميع معلومات القوالب المنشورة إلى ملف csv (وليس فقط القوالب الضعيفة)، قم بتشغيل: `Get-AuditCertificateTemplate [-CAComputerName CA.DOMAIN.COM | -CAName X-Y-Z] | Export-Csv -NoTypeInformation templates.csv`
## شرح المخرجات
هناك قسمان رئيسيان من المخرجات، تفاصيل حول CAs المكتشفة وتفاصيل حول القوالب التي يحتمل أن تكون ضعيفة.
لنتائج مصدر الشهادات:
| Certificate Authority Property | Description |
| ------------------------------ | ------------------------------------------------------------------ |
| ComputerName | النظام الذي يعمل عليه CA. |
| CAName | اسم CA. |
| ConfigString | سلسلة تكوين COMPUTER\CA_NAME الكاملة. |
| IsRoot | إذا كان CA هو CA جذر. |
| AllowsUserSuppliedSans | إذا كان CA يحتوي على علامة `EDITF_ATTRIBUTESUBJECTALTNAME2` مفعلة. |
| VulnerableACL | ما إذا كان CA يحتوي على إعداد ACL ضعيف. |
| EnrollmentPrincipals | المسؤولون الذين لديهم امتياز `Enroll` على مستوى CA. |
| EnrollmentEndpoints | نقاط نهاية خدمات الويب للتسجيل الخاصة بـ CA. |
| NTLMEnrollmentEndpoints | نقاط نهاية خدمات الويب للتسجيل الخاصة بـ CA التي يتم فيها تمكين NTLM. |
| DACL | معلومات التحكم في الوصول الكاملة. |
| Misconfigurations | ESCX يشير إلى سوء التكوين المحدد الموجود (إن وجد). |
لنتائج قوالب الشهادات:
| Property | Description |
| ----------------------- | -------------------------------------------------------------------------------------------------------- |
| CA | سلسلة تكوين CA الكاملة التي ينشر عليها القالب (فارغ للقالب غير المنشور). |
| Name | اسم القالب. |
| SchemaVersion | إصدار المخطط (1/2/3) للقالب. |
| OID | معرف الكائن الفريد للقالب. |
| VulnerableTemplateACL | صحيح إذا كان القالب يحتوي على إعداد ACL ضعيف. |
| LowPrivCanEnroll | صحيح إذا كان بإمكان المستخدمين ذوي الامتيازات المنخفضة التسجيل في القالب. |
| EnrolleeSuppliesSubject | صحيح إذا كانت العلامة `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` موجودة (أي يمكن للمستخدمين توفير SANs عشوائية). |
| EnhancedKeyUsage | استخدامات EKU الممكنة في القالب. |
| HasAuthenticationEku | صحيح إذا كان القالب يحتوي على EKU تسمح بالمصادقة. |
| HasDangerousEku | صحيح إذا كان القالب يحتوي على EKU "خطير" (أي غرض أو فارغ). |
| EnrollmentAgentTemplate | صحيح إذا كان القالب يحتوي على EKU "وكيل طلب الشهادة". |
| CAManagerApproval | صحيح إذا كانت موافقات المدير مطلوبة للتسجيل. |
| IssuanceRequirements | معلومات التوقيع المصرح به. |
| ValidityPeriod | مدة صلاحية الشهادة. |
| RenewalPeriod | فترة تجديد الشهادة. |
| Owner | الجهة المالكة للشهادة. |
| DACL | معلومات التحكم في الوصول الكاملة. |
| Misconfigurations | ESCX يشير إلى سوء التكوين المحدد الموجود (إن وجد). |
## ESC1 - قوالب الشهادات غير صحيحة التكوين
### التفاصيل <!-- omit in toc -->
سيناريو تصعيد الامتيازات هذا يحدث عندما تتوفر الشروط التالية:
1. **يمنح CA المؤسسة حقوق التسجيل للمستخدمين ذوي الامتيازات المنخفضة.** يجب أن يسمح تكوين CA المؤسسة للمستخدمين ذوي الامتيازات المنخفضة بالقدرة على طلب الشهادات. راجع قسم "Background - Enrollment" في بداية الورقة البيانية لمزيد من التفاصيل.
2. **تم تعطيل موافقة المدير.** يتطلب هذا الإعداد قيام مستخدم لديه أذونات "مدير" الشهادة بمراجعة واعتماد الشهادة المطلوبة قبل إصدار الشهادة. راجع قسم "Background - Issuance Requirements" في بداية الورقة البيانية لمزيد من التفاصيل.
3. **لا توجد تواقيع مصرح بها مطلوبة.** يتطلب هذا الإعداد توقيع أي CSR بواسطة شهادة مصرح بها موجودة. راجع قسم "Background - Issuance Requirements" في بداية الورقة البيانية لمزيد من التفاصيل.
4. **يمنح واصف أمان قالب الشهادة المتساهل بشكل مفرط حقوق تسجيل الشهادة للمستخدمين ذوي الامتيازات المنخفضة.** امتلاك حقوق تسجيل الشهادة يسمح لمهاجم منخفض الامتياز بطلب والحصول على شهادة بناءً على القالب. تُمنح حقوق التسجيل عبر واصف أمان كائن AD الخاص بقالب الشهادة.
5. **يحدد قالب الشهادة EKUs التي تمكن المصادقة.** تشمل EKUs القابلة للتطبيق مصادقة العميل (OID 1.3.6.1.5.5.7.3.2)، مصادقة عميل PKINIT (OID 1.3.6.1.5.2.3.4)، أو تسجيل بطاقة ذكية (OID 1.3.6.1.4.1.311.20.2.2).
6. **يسمح قالب الشهادة لمقدمي الطلبات بتحديد subjectAltName (SAN) في CSR.** إذا استطاع مقدم الطلب تحديد SAN في CSR، فيمكنه طلب شهادة كأي شخص (على سبيل المثال، مستخدم مسؤول مجال). يحدد كائن AD الخاص بقالب الشهادة ما إذا كان مقدم الطلب يمكنه تحديد SAN في خاصية mspki-certificate-name-flag الخاصة به. خاصية mspki-certificate-name-flag هي قناع بت وإذا كانت العلامة CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT موجودة، فيمكن لمقدم الطلب تحديد SAN.
**خلاصة القول** هذا الموقف يعني أن المستخدمين غير المميزين يمكنهم طلب شهادة يمكن استخدامها لمصادقة المجال، حيث يمكنهم تحديد اسم بديل عشوائي (مثل مسؤول مجال). يمكن أن يؤدي ذلك إلى الحصول على شهادة صالحة لمستخدم مرفوع الصلاحيات مثل مسؤول مجال!
### مثال <!-- omit in toc -->```
[!] Potentially vulnerable Certificate Templates:
CA : dc.theshire.local\theshire-DC-CA
Name : ESC1Template
SchemaVersion : 2
OID : ESC1 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.10657968.9897558)
VulnerableTemplateACL : False
LowPrivCanEnroll : True
EnrolleeSuppliesSubject : True
EnhancedKeyUsage : Client Authentication (1.3.6.1.5.5.7.3.2)|Secure Email (1.3.6.1.5.5.7.3.4)|Encrypting File System (1.3.6.1.4.1.311.10.3.4)
HasAuthenticationEku : True
HasDangerousEku : False
EnrollmentAgentTemplate : False
CAManagerApproval : False
IssuanceRequirements : [Issuance Requirements]
Authorized signature count: 0
Reenrollment requires: same criteria as for enrollment.
ValidityPeriod : 1 years
RenewalPeriod : 6 weeks
Owner : THESHIRE\localadmin
DACL : NT AUTHORITY\Authenticated Users (Allow) - Read
THESHIRE\Domain Admins (Allow) - Read, Write, Enroll
THESHIRE\Domain Users (Allow) - Enroll
THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll
THESHIRE\localadmin (Allow) - Read, Write
Misconfigurations : ESC1
هناك عدة خيارات. أولاً، انقر بزر الماوس الأيمن على قالب الشهادة المتأثر في وحدة تحكم قوالب الشهادات (certtmpl.msc) وانقر على "خصائص"
يحدث سيناريو تصعيد الامتياز هذا عند استيفاء الشروط التالية:
تمنح CA المؤسسية حقوق التسجيل للمستخدمين ذوي الامتيازات المنخفضة. التفاصيل مماثلة لتلك الموجودة في ESC1.
تم تعطيل موافقة المدير. التفاصيل مماثلة لتلك الموجودة في ESC1.
لا يلزم وجود توقيعات مصرح بها. التفاصيل مماثلة لتلك الموجودة في ESC1.
يسمح واصف أمان قالب الشهادة المفرط في السماح بحقوق تسجيل الشهادة للمستخدمين ذوي الامتيازات المنخفضة. التفاصيل مماثلة لتلك الموجودة في ESC1.
يحدد قالب الشهادة EKUs لأي غرض أو لا يوجد EKU. يمكن استخدام أي غرض (OID 2.5.29.37.0) لأي غرض (مفاجأة!) بما في ذلك مصادقة العميل. إذا لم يتم تحديد EKUs - أي أن pkiextendedkeyusage فارغ أو أن السمة غير موجودة - فإن الشهادة تعادل شهادة CA فرعية ويمكن استخدامها لأي شيء.
خلاصة هذا مشابه جدًا لـ ESC1، ومع ذلك مع أي غرض أو عدم وجود EKU، لا يلزم وجود علامة CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT.
[!] Potentially vulnerable Certificate Templates:
CA : dc.theshire.local\theshire-DC-CA Name : ESC2Template SchemaVersion : 2 OID : ESC2 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.7730030.4389735) VulnerableTemplateACL : False LowPrivCanEnroll : True EnrolleeSuppliesSubject : False EnhancedKeyUsage : HasAuthenticationEku : True HasDangerousEku : True EnrollmentAgentTemplate : False CAManagerApproval : False IssuanceRequirements : [Issuance Requirements] Authorized signature count: 0 Reenrollment requires: same criteria as for enrollment. ValidityPeriod : 1 years RenewalPeriod : 6 weeks Owner : THESHIRE\localadmin DACL : NT AUTHORITY\Authenticated Users (Allow) - Read THESHIRE\Domain Admins (Allow) - Read, Write, Enroll THESHIRE\Domain Users (Allow) - Enroll THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll THESHIRE\localadmin (Allow) - Read, Write Misconfigurations : ESC2
### الإجراءات التخفيفية <!-- omit in toc -->
هناك عدة خيارات. أولاً، انقر بزر الماوس الأيمن على قالب الشهادة المتأثر في وحدة تحكم قوالب الشهادات (certtmpl.msc) ثم انقر على "خصائص"
1. قم بإزالة قدرة المستخدمين ذوي الامتيازات المنخفضة على التسجيل في هذا القالب عبر "الأمان" وإزالة امتياز **التسجيل** المناسب.
* من المحتمل أن يكون هذا أفضل إصلاح، حيث لا ينبغي أن تكون شهادات استخدام المفاتيح الموسّعة الحساسة هذه متاحة للمستخدمين ذوي الامتيازات المنخفضة!
2. قم بتمكين **"موافقة مدير الشهادات"** في "متطلبات الإصدار".
* يؤدي هذا إلى وضع طلبات هذا القالب في قائمة "الطلبات المعلقة" التي يجب الموافقة عليها يدويًا من قبل مدير الشهادات.
3. قم بتمكين **"التوقيعات المصرح بها"** في "متطلبات الإصدار" (إذا كنت تعرف ما تفعله).
* يجبر هذا طلبات توقيع الشهادات على أن يتم التوقيع عليها مشاركةً من قبل شهادة وكيل تسجيل.
## ESC3 - قوالب وكيل التسجيل التي تم تكوينها بشكل خاطئ
### التفاصيل <!-- omit in toc -->
يحدث سيناريو تصعيد الامتيازات هذا عندما تتوفر الشروط التالية:
1. **تمنح هيئة الشهادات المؤسسية حقوق التسجيل للمستخدمين ذوي الامتيازات المنخفضة.** التفاصيل مماثلة لتلك الموجودة في ESC1.
2. **تم تعطيل موافقة المدير.** التفاصيل مماثلة لتلك الموجودة في ESC1.
3. **لا يلزم وجود توقيعات مصرح بها.** التفاصيل مماثلة لتلك الموجودة في ESC1.
4. **يمنح واصف أمان قالب الشهادة المفرط في السماح حقوق تسليم الشهادات للمستخدمين ذوي الامتيازات المنخفضة.** التفاصيل مماثلة لتلك الموجودة في ESC1.
5. **يحدد قالب الشهادة معرف استخدام المفتاح الموسع لوكيل طلب الشهادة.** يسمح معرف استخدام المفتاح الموسع لوكيل طلب الشهادة (OID 1.3.6.1.4.1.311.20.2.1) لأحد المبادئ بالتسجيل لـ _قالب شهادة آخر_ نيابة عن مستخدم آخر.
6. **لم يتم تنفيذ قيود وكلاء التسجيل على هيئة الشهادات.**
**الخلاصة** يمكن لأي شخص لديه شهادة وكيل طلب شهادة (يُعرف أيضًا باسم وكيل التسجيل) التسجيل في شهادات أخرى نيابة عن أي مستخدم في المجال، لأي قالب من الإصدار 1 من المخطط أو أي قالب من الإصدار 2+ من المخطط يتطلب متطلب "التوقيعات المصرح بها/سياسة التطبيق" المناسب، ما لم يتم تنفيذ "قيود وكيل التسجيل" على مستوى هيئة الشهادات.
### مثال <!-- omit in toc -->```
[!] Potentially vulnerable Certificate Templates:
CA : dc.theshire.local\theshire-DC-CA
Name : ESC3Template
SchemaVersion : 2
OID : ESC3 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.4300342.10028552)
VulnerableTemplateACL : False
LowPrivCanEnroll : True
EnrolleeSuppliesSubject : False
EnhancedKeyUsage : Certificate Request Agent (1.3.6.1.4.1.311.20.2.1)
HasAuthenticationEku : False
HasDangerousEku : False
EnrollmentAgentTemplate : True
CAManagerApproval : False
IssuanceRequirements : [Issuance Requirements]
Authorized signature count: 0
Reenrollment requires: same criteria as for enrollment.
ValidityPeriod : 1 years
RenewalPeriod : 6 weeks
Owner : THESHIRE\localadmin
DACL : NT AUTHORITY\Authenticated Users (Allow) - Read
THESHIRE\Domain Admins (Allow) - Read, Write, Enroll
THESHIRE\Domain Users (Allow) - Enroll
THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll
THESHIRE\localadmin (Allow) - Read, Write
Misconfigurations : ESC3
هناك عدة خيارات. أولاً، انقر بزر الماوس الأيمن على قالب الشهادة المتأثر في وحدة تحكم قوالب الشهادات (certtmpl.msc) ثم انقر على "خصائص"
يمكنك أيضًا تطبيق "قيود وكيل التسجيل" عبر وحدة تحكم سلطة الشهادات (certsrv.msc). على سلطة الشهادات المتأثرة، انقر بزر الماوس الأيمن على اسم سلطة الشهادات ثم انقر على "خصائص" -> "وكلاء التسجيل". هناك مزيد من المعلومات حول هذا النهج هنا.
قوالب الشهادات هي كائنات قابلة للتأمين في Active Directory، مما يعني أن لديها واصف أمان يحدد أي كيانات Active Directory لديها أذونات محددة على القالب. القوالب التي لديها تحكم وصول ضعيف تمنح كيانات غير مقصودة القدرة على تعديل الإعدادات في القالب. باستخدام حقوق التعديل، يمكن للمهاجم تعيين EKUs قابلة للاختراق (ESC1-ESC3)، وتغيير إعدادات مثل CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT (ESC1)، و/أو إزالة "متطلبات الإصدار" مثل موافقة المدير أو التوقيعات المصرح بها.
[!] Potentially vulnerable Certificate Templates:
CA : dc.theshire.local\theshire-DC-CA Name : ESC4Template SchemaVersion : 2 OID : ESC4 Template (1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.1768738.6205646) VulnerableTemplateACL : True LowPrivCanEnroll : True EnrolleeSuppliesSubject : False EnhancedKeyUsage : Client Authentication (1.3.6.1.5.5.7.3.2)|Secure Email (1.3.6.1.5.5.7.3.4)|Encrypting File System (1.3.6.1.4.1.311.10.3.4) HasAuthenticationEku : True HasDangerousEku : False EnrollmentAgentTemplate : False CAManagerApproval : False IssuanceRequirements : [Issuance Requirements] Authorized signature count: 0 Reenrollment requires: same criteria as for enrollment. ValidityPeriod : 1 years RenewalPeriod : 6 weeks Owner : THESHIRE\localadmin DACL : NT AUTHORITY\Authenticated Users (Allow) - Read, Write THESHIRE\Domain Admins (Allow) - Read, Write, Enroll THESHIRE\Domain Users (Allow) - Read, Enroll THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll THESHIRE\localadmin (Allow) - Read, Write Misconfigurations : ESC4
### التخفيفات <!-- omit in toc -->
انقر بزر الماوس الأيمن على قالب الشهادة المتأثر في وحدة تحكم قوالب الشهادات (certtmpl.msc) وانقر على "خصائص".
انتقل إلى "الأمان" وقم بإزالة إدخال التحكم في الوصول الضعيف.
## ESC5 - التحكم في الوصول الضعيف لكائنات PKI في AD
### التفاصيل <!-- omit in toc -->
يمكن أن يكون لعدد من الكائنات خارج قوالب الشهادات ومرجع الشهادات نفسه تأثير أمني على نظام AD CS بأكمله.
تشمل هذه الاحتمالات (على سبيل المثال لا الحصر):
- كائن كمبيوتر AD لخادم CA (أي الاختراق عبر RBCD)
- خادم RPC/DCOM لخادم CA
- كائنات AD المتعلقة بـ PKI. أي كائن AD أو حاوية تابعة في الحاوية CN=Public Key Services,CN=Services,CN=Configuration,DC=<COMPANY>,DC=<COM> (على سبيل المثال، حاوية قوالب الشهادات، حاوية سلطات التصديق، كائن NTAuthCertificates، إلخ.)
*نظرًا للنطاق الواسع لهذا التكوين الخاطئ المحدد، لا نقوم حاليًا بالتحقق من ESC5 افتراضيًا في هذه المجموعة.*
يمكن العثور على مسارات الوصول إلى خادم CA نفسه في مجموعة BloodHound الحالية.
يتطلب أمان خادم RPC/DCOM لخادم CA تحليلًا يدويًا.
تقوم الأوامر التالية بإخراج قائمة بالمستخدمين وحق التحكم/التحرير الذي يمتلكه المستخدم على كائن AD متعلق بـ PKI.```
$Controllers = Get-AuditPKIADObjectControllers
Format-PKIAdObjectControllers $Controllers
تأكد من أن جميع الكيانات في النتائج تحتاج بشكل مطلق إلى الصلاحيات المدرجة. غالبًا ما يكون للحسابات غير من الطبقة 0 (سواء كانت مستخدمين/مجموعات منخفضة الامتيازات أو مسؤولي خوادم غير AD ذوي امتيازات منخفضة) سيطرة على كائنات AD المتعلقة بـ PKI.
THESHIRE\Cert Publishers (S-1-5-21-3022474190-4230777124-3051344698-517) GenericAll CN=THESHIRE-DC-CA,CN=Certification Authorities,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=DC,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=DC,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
THESHIRE\DC$ (S-1-5-21-3022474190-4230777124-3051344698-1000) WriteOwner CN=THESHIRE-DC-CA,CN=Enrollment Services,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=DC,CN=CDP,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL GenericAll CN=THESHIRE-DC-CA,CN=KRA,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
THESHIRE\Domain Computers (S-1-5-21-3022474190-4230777124-3051344698-515) WriteDacl CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
THESHIRE\Domain Users (S-1-5-21-3022474190-4230777124-3051344698-513) WriteAllProperties CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
THESHIRE\john-sa (S-1-5-21-3022474190-4230777124-3051344698-1602) GenericAll CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
NT AUTHORITY\Authenticated Users (S-1-5-11) Owner CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL WriteOwner CN=MisconfiguredTemplate,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=THESHIRE,DC=LOCAL
### التخفيفات <!-- omit in toc -->
قم بإزالة أي إدخالات تحكم في الوصول قابلة للاستغلال من خلال Active Directory Users and Computers (*dsa.msc*) أو ADSIEdit (*adsiedit.msc*) لكائنات التكوين.
## ESC6 - EDITF_ATTRIBUTESUBJECTALTNAME2
### التفاصيل <!-- omit in toc -->
إذا تم قلب العلم **EDITF_ATTRIBUTESUBJECTALTNAME2** في تكوين هيئة الشهادات (Certificate Authority)، فإن *أي* طلب شهادة يمكنه تحديد أسماء بديلة للموضوع (Subject Alternative Names - SANs) تعسفية. هذا يعني أن أي قالب تم تكوينه للمصادقة على المجال ويسمح أيضًا للمستخدمين غير المتميزين بالتسجيل (على سبيل المثال، القالب الافتراضي **User**) يمكن إساءة استخدامه للحصول على شهادة تسمح لنا بالمصادقة كمسؤول مجال (أو أي مستخدم/جهاز نشط آخر).
**يجب أبدًا تفعيل هذا الإعداد في بيئتك.**
### مثال <!-- omit in toc -->```
=== Certificate Authority ===
ComputerName : dc.theshire.local
CAName : theshire-DC-CA
ConfigString : dc.theshire.local\theshire-DC-CA
IsRoot : True
AllowsUserSuppliedSans : True
VulnerableACL : False
EnrollmentPrincipals : THESHIRE\Domain Users
THESHIRE\Domain Computers
THESHIRE\certmanager
THESHIRE\certadmin
THESHIRE\Nested3
EnrollmentEndpoints :
NTLMEnrollmentEndpoints :
DACL : BUILTIN\Administrators (Allow) - ManageCA, ManageCertificates
THESHIRE\Domain Admins (Allow) - ManageCA, ManageCertificates
THESHIRE\Domain Users (Allow) - Read, Enroll
THESHIRE\Domain Computers (Allow) - Enroll
THESHIRE\Enterprise Admins (Allow) - ManageCA, ManageCertificates
THESHIRE\certmanager (Allow) - ManageCertificates, Enroll
THESHIRE\certadmin (Allow) - ManageCA, Enroll
THESHIRE\Nested3 (Allow) - ManageCertificates, Enroll
Misconfigurations : ESC6
[!] The above CA is misconfigured!
...(snip)...
[!] EDITF_ATTRIBUTESUBJECTALTNAME2 set on this CA, the following templates may be vulnerable:
CA : dc.theshire.local\theshire-DC-CA
Name : User
SchemaVersion : 1
OID : 1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.1.1
VulnerableTemplateACL : False
LowPrivCanEnroll : True
EnrolleeSuppliesSubject : False
EnhancedKeyUsage : Encrypting File System (1.3.6.1.4.1.311.10.3.4)|Secure Email (1.3.6.1.5.5.7.3.4)|Client Authentication (1.3.6.1.5.5.7.3.2)
HasAuthenticationEku : True
HasDangerousEku : False
EnrollmentAgentTemplate : False
CAManagerApproval : False
IssuanceRequirements : [Issuance Requirements]
Authorized signature count: 0
Reenrollment requires: same criteria as for enrollment.
ValidityPeriod : 1 years
RenewalPeriod : 6 weeks
Owner : THESHIRE\Enterprise Admins
DACL : NT AUTHORITY\Authenticated Users (Allow) - Read
THESHIRE\Domain Admins (Allow) - Read, Write, Enroll
THESHIRE\Domain Users (Allow) - Read, Enroll
THESHIRE\Enterprise Admins (Allow) - Read, Write, Enroll
Misconfigurations :
قم فورًا بإزالة هذه العلامة وأعد تشغيل هيئة الشهادات المتأثرة من موجه PowerShell بصلاحيات مرتفعة ضد خادم CA:``` PS C:> certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJECTALTNAME2
PS C:> Get-Service -ComputerName CA_HOST certsvc | Restart-Service -Force
## ESC7 - التحكم في الوصول إلى سلطة الشهادات الضعيفة
### Details <!-- omit in toc -->
بصرف النظر عن قوالب الشهادات، تمتلك سلطة الشهادات نفسها مجموعة من الصلاحيات التي تؤمن إجراءات CA المختلفة. يمكن الوصول إلى هذه الصلاحيات من certsrv.msc عن طريق النقر بزر الماوس الأيمن على CA، واختيار خصائص، والتبديل إلى علامة التبويب 'الأمان'.
هناك صلاحيتان حساستان أمنيًا وخطيرتان إذا كان لدى جهات غير مقصودة:
* **ManageCA** (المعروفة أيضًا باسم 'مسؤول CA') - تسمح بإجراءات إدارية لـ CA، بما في ذلك (عن بُعد) قلب بت EDITF_ATTRIBUTESUBJECTALTNAME2، مما يؤدي إلى ESC6.
* **ManageCertificates** (المعروفة أيضًا باسم 'مدير/موظف الشهادات') - تسمح للموظف بالموافقة على طلبات الشهادات المعلقة، مما يلغي شرط/حماية 'موافقة المدير' الإصدارية.
### Example <!-- omit in toc -->```
=== Certificate Authority ===
ComputerName : dc.theshire.local
CAName : theshire-DC-CA
ConfigString : dc.theshire.local\theshire-DC-CA
IsRoot : True
AllowsUserSuppliedSans : False
VulnerableACL : True
EnrollmentPrincipals : THESHIRE\Domain Users
THESHIRE\Domain Computers
THESHIRE\certmanager
THESHIRE\certadmin
THESHIRE\Nested3
EnrollmentEndpoints :
NTLMEnrollmentEndpoints :
DACL : BUILTIN\Administrators (Allow) - ManageCA, ManageCertificates
THESHIRE\Domain Admins (Allow) - ManageCA, ManageCertificates
THESHIRE\Domain Users (Allow) - ManageCA, Read, Enroll
THESHIRE\Domain Computers (Allow) - Enroll
THESHIRE\Enterprise Admins (Allow) - ManageCA, ManageCertificates
THESHIRE\certmanager (Allow) - ManageCertificates, Enroll
THESHIRE\certadmin (Allow) - ManageCA, Enroll
THESHIRE\Nested3 (Allow) - ManageCertificates, Enroll
Misconfigurations : ESC7
[!] The above CA is misconfigured!
افتح وحدة تحكم سلطة التصديق (certsrv.msc) على سلطة التصديق المتأثرة، وانقر بزر الماوس الأيمن على اسم سلطة التصديق واختر "خصائص".
انتقل إلى "الأمان" وقم بإزالة إدخال التحكم في الوصول المعرض للخطر.
ملاحظة: هذا الفحص المحدد في PSPKIAudit يتحقق فقط من وجود NTLM لأي نقاط نهاية نشر منشورة. لا يتحقق مما إذا كانت الحماية الموسعة للمصادقة موجودة لنقاط النهاية هذه الممكّنة لـ NTLM، لذلك قد تحدث نتائج إيجابية خاطئة!
[!مهم]
تم تعطيل مصادقة NTLM للحسابات في مجموعة المستخدمين المحميين. قد يفشل هذا الفحص إذا تم تشغيل PSPKIAudit أثناء تسجيل الدخول كمستخدم محمي.
يدعم AD CS عدة طرق تسجيل قائمة على HTTP عبر أدوار خادم AD CS إضافية يمكن للمسؤولين تثبيتها. جميع واجهات التسجيل هذه المستندة إلى HTTP معرضة لهجمات ترحيل NTLM.
باستخدام ترحيل NTLM، يمكن للمهاجم على جهاز مخترق انتحال أي حساب AD يقوم بمصادقة NTLM الواردة. أثناء انتحال حساب الضحية، يمكن للمهاجم الوصول إلى هذه الواجهات الويب وطلب شهادة مصادقة عميل استنادًا إلى قوالب شهادات المستخدم أو الجهاز.
=== Certificate Authority ===
ComputerName : dc.theshire.local CAName : theshire-DC-CA ConfigString : dc.theshire.local\theshire-DC-CA IsRoot : True AllowsUserSuppliedSans : False VulnerableACL : False EnrollmentPrincipals : THESHIRE\Domain Users THESHIRE\Domain Computers THESHIRE\certmanager THESHIRE\certadmin THESHIRE\Nested3 EnrollmentEndpoints : http://dc.theshire.local/certsrv/ NTLMEnrollmentEndpoints : http://dc.theshire.local/certsrv/ DACL : BUILTIN\Administrators (Allow) - ManageCA, ManageCertificates THESHIRE\Domain Admins (Allow) - ManageCA, ManageCertificates THESHIRE\Domain Users (Allow) - Read, Enroll THESHIRE\Domain Computers (Allow) - Enroll THESHIRE\Enterprise Admins (Allow) - ManageCA, ManageCertificates THESHIRE\certmanager (Allow) - ManageCertificates, Enroll THESHIRE\certadmin (Allow) - ManageCA, Enroll THESHIRE\Nested3 (Allow) - ManageCertificates, Enroll Misconfigurations : ESC8
[!] The above CA is misconfigured!
### Mitigations <!-- omit in toc -->
إما إزالة نقاط نهاية التسجيل HTTP(S)، أو تعطيل NTLM لنقاط النهاية، أو تمكين الحماية الموسعة للمصادقة. راجع **Harden AD CS HTTP Endpoints – PREVENT8** في الورقة البيضاء لمزيد من التفاصيل.
## متفرقات - التعيينات الصريحة
تخفيف آخر محتمل لبعض الحالات هو فرض تعيينات صريحة للشهادات. يؤدي هذا إلى تعطيل استخدام أسماء SAN البديلة في الشهادات عند المصادقة إلى Active Directory.
بالنسبة لـ Kerberos، يؤدي تعيين المفتاح **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc ! UseSubjectAltName** إلى 00000000 إلى فرض تعيين صريح. هناك مزيد من التفاصيل في [KB4043463](https://mskb.pkisolutions.com/kb/4043463).
تعطيل التعيينات الصريحة لـ SChannel ليس موثقًا بشكل جيد، ولكن بناءً على أبحاثنا، فإن تعيين القيم 0x1 أو 0x2 للمفتاح **HKEY_LOCAL_MACHINE\CurrentControlSet\Control\SecurityProviders\SCHANNEL ! CertificateMappingMethods** يبدو أنه يمنع أسماء SAN، ولكن هناك حاجة إلى مزيد من الاختبارات.
# فحص طلبات الشهادات الصادرة الموجودة
**تحذير:** تم اختبار هذه الوظيفة بشكل ضئيل في البيئات الكبيرة!
**ملاحظة:** راجع "Monitor User/Machine Certificate Enrollments - DETECT1" في الورقة البيضاء للحصول على معلومات إضافية وكيفية إجراء هذه عمليات البحث باستخدام certutil.
إذا كنت ترغب في فحص طلبات الشهادات الصادرة الموجودة، على سبيل المثال لمعرفة ما إذا كانت أي طلبات قد حددت أسماء SAN عشوائية، أو تم طلبها لقالب معين/بواسطة جهة معينة، فإن الدالة `Get-CertRequest [-CAComputerName COMPUTER.DOMAIN.COM | -CAName X-Y-Z]` تبني على العديد من دوال PSPKI لتوفير معلومات سياقية أكثر.
بالتحديد، يتم استخراج طلب توقيع الشهادة (CSR) الخام لكل شهادة صادرة حالياً في المجال، ويتم بناء معلومات محددة (أي، ما إذا تم تحديد SAN، واسم الطالب/الجهاز/العملية، إلخ.) من الطلب لإثراء كائن CSR.
يمكن أن تكون العلامات التالية مفيدة:
| العلامة | الوصف |
| ---------------------------- | ------------------------------------------------------------------------------------------------- |
| **-HasSAN** | إرجاع الشهادات الصادرة التي تحتوي على اسم بديل للموضوع (Subject Alternative Name) محدد في الطلب فقط. |
| **-Requester DOMAIN\USER** | إرجاع طلبات الشهادات الصادرة للمستخدم الطالب المحدد فقط. |
| **-Template TEMPLATE_NAME** | إرجاع طلبات الشهادات الصادرة لاسم القالب المحدد فقط. |
<br/>
لتصدير جميع طلبات الشهادات الصادرة إلى ملف csv، استخدم `Get-CertRequest | Export-CSV -NoTypeInformation requests.csv`.
فيما يلي مثال لإدخال نتيجة يوضح حالة تم فيها تحديد اسم بديل للموضوع (SAN) باستخدام Certify:```
CA : dc.theshire.local\theshire-DC-CA
RequestID : 4602
RequesterName : THESHIRE\cody
RequesterMachineName : dev.theshire.local
RequesterProcessName : Certify.exe
SubjectAltNamesExtension :
SubjectAltNamesAttrib : Administrator
SerialNumber : 55000011faef0fab5ffd7f75b30000000011fa
CertificateTemplate : ESC1 Template
(1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.10657968.9897558)
RequestDate : 6/3/2021 5:54:51 PM
StartDate : 6/3/2021 5:44:51 PM
EndDate : 6/3/2022 5:44:51 PM
CA : dc.theshire.local\theshire-DC-CA
RequestID : 4603
RequesterName : THESHIRE\cody
RequesterMachineName : dev.theshire.local
RequesterProcessName : Certify.exe
SubjectAltNamesExtension : Administrator
SubjectAltNamesAttrib :
SerialNumber : 55000011fb021b79cf7276c2de0000000011fb
CertificateTemplate : ESC1 Template
(1.3.6.1.4.1.311.21.8.10395027.10224472.4213181.15714845.1171465.9.10657968.9897558)
RequestDate : 6/3/2021 5:55:10 PM
StartDate : 6/3/2021 5:45:10 PM
EndDate : 6/3/2022 5:45:10 PM
خاصية SubjectAltNamesExtension تعني أن امتداد x509 SubjectAlternativeNames تم استخدامه لتحديد SAN، ويحدث ذلك للقوالب التي تحتوي على علامة CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT.
خاصية SubjectAltNamesAttrib تعني أن أزواج الاسم/القيمة x509 تم استخدامها، ويحدث ذلك عند تحديد SAN عندما تكون علامة EDITF_ATTRIBUTESUBJECTALTNAME2 لـ CA مضبوطة.
يمكن إلغاء الشهادات الصادرة الحالية باستخدام دالة Revoke-Certificate من PSPKI:
PS C:\> Get-CertificationAuthority <CAName> | Get-IssuedRequest -RequestID <X> | Revoke-Certificate -Reason "KeyCompromise"
القيم القابلة للتطبيق لـ -Reason هي "KeyCompromise" و "CACompromise" و "Unspecified".