
تقرير كشف Splunk لثغرة CVE-2026-54121 (CertiGhost): إساءة استخدام مطاردة شهادات AD CS المؤدية إلى اختراق كامل للنطاق. كشف مُتحقق منه معمليًا، وخطوات فرز، وتحقيق في الحوادث ضد وحدة تحكم نطاق حية.
يصف هذا المستند كشف Splunk المبني من أجل CVE-2026-54121. وهو يتبع التنسيق القياسي لحالات استخدام الكشف بحيث يمكن إدراجه في كتالوج الكشف بالطريقة نفسها التي يحافظ بها فريق هندسة كشف حقيقي على كتالوجه.
نظرة عامة
بناء الكشف
الاستجابة والتحقق
خارطة الطريق
البيانات الوصفية
تنبيه : Certighost ( CVE-2026-54121 )
يكشف عن إساءة استخدام آلية تتبع تسجيل الشهادات في AD CS الموصوفة في CVE-2026-54121. تُعلِّم القاعدة أحداث دورة حياة الشهادة على CA حيث لا يُحلّ هدف التتبع الذي قدّمه الطالب (السمة cdc) إلى وحدة التحكم بالمجال (Domain Controller) الشرعية، وهي الآلية الدقيقة التي يستخدمها Certighost لجعل CA تُصدر شهادة تحتوي على بيانات هوية وحدة التحكم بالمجال لطالب منخفض الصلاحيات، مما يؤدي إلى اختراق كامل للمجال والاستيلاء عليه.
يستند الكشف إلى هدف التتبع cdc بدلاً من إنشاء حسابات الأجهزة، لأن تنبيه Microsoft الخاص بـ CVE-2026-54121 يذكر أن الشرط المسبق للحساب هو إما قيمة ms-DS-MachineAccountQuota الافتراضية أو حساب يتحكم به المهاجم مسبقاً. إن قاعدة مبنية على إنشاء الحساب ستغفل المسار الثاني بالكامل، وستعتمد أيضاً على حدوث إنشاء الحساب والاستغلال ضمن النافذة الزمنية نفسها. أما فحص cdc فيغطي كلا المسارين ولا يعتمد على ذلك.
تغطي هذه القاعدة مرحلة طلب الشهادة وإصدارها من سلسلة الهجوم.
| التكتيك | التقنية (المعرّف) | الدليل |
|---|---|---|
| تصعيد الصلاحيات | إساءة استخدام آلية التحكم في رفع الصلاحيات (T1548) | مستخدم نطاق منخفض الصلاحيات يرفع صلاحياته إلى صلاحيات وحدة تحكم النطاق عبر شهادة AD CS مزوّرة |
| الوصول إلى بيانات الاعتماد | سرقة أو تزوير شهادات المصادقة (T1649) | جوهر Certighost - تُستخدم سمات cdc/rmd للحصول على شهادة تحمل مواد هوية وحدة تحكم النطاق |
| الوصول إلى بيانات الاعتماد | تفريغ بيانات اعتماد نظام التشغيل: DCSync (T1003.006) | يُستخدم TGT الخاص بحساب وحدة تحكم النطاق لتنفيذ تكرار MS-DRSR - لاستخراج krbtgt وجميع تجزئات الحسابات |
| الوصول إلى بيانات الاعتماد | التذكرة الذهبية (T1558.001) | باستخدام تجزئة krbtgt، يزوّر المهاجم تذاكر Kerberos TGT إلى ما لا نهاية، ويظل صامدًا أمام إعادة تعيين كلمات المرور |
| التهرب من الدفاعات | استخدام مواد مصادقة بديلة: Pass-the-Ticket (T1550.003) | تُستخدم تذكرة TGT المستندة إلى شهادة للمصادقة بصفة وحدة تحكم النطاق، ثم يُنفَّذ DCSync باستخدام تلك التذكرة |
| الاستمرارية | إنشاء حساب: حساب محلي (T1136.001) | يُنشأ حساب جهاز عبر ms-DS-MachineAccountQuota للمصادقة على نقطة نهاية LDAP خبيثة |
| الحركة الجانبية | استخدام مواد مصادقة بديلة (T1550) | تمنح شهادة وحدة تحكم النطاق وصولًا كاملًا إلى الشبكة مكافئًا لحساب وحدة تحكم النطاق |
| الاستكشاف | حساب النطاق (T1087.002) | يكشف تعداد LDAP الأولي عن CA وDC ومعرّف أمان النطاق (SID) وGUID وقيمة MAQ |
4886 (تم استلام طلب شهادة)4887 (تم إصدار شهادة)4888 (تم رفض طلب شهادة)![مصادر السجلات مؤكدة مباشرةً في Splunk، المضيف DC01، EventCodes 4886/4887 موجودة، هدف المطاردة 172[.]66[.]66[.]33 مستخرج لمعرّفات الطلبات 12، 13، 14](images/log-sources.png)
index=wineventlog-lab sourcetype=WinEventLog source="WinEventLog:Security"
(EventCode=4886 OR EventCode=4887 OR EventCode=4888) cdc
| fields _time EventCode Request_ID Requester Attributes Subject host Message
| rex field=Message "(?m)^cdc:(?<chase_cdc>\S+)"
| where isnotnull(chase_cdc) AND lower(chase_cdc)!="dc01.atlasvec.lab"
| stats min(_time) as _time
values(Requester) as requester
values(Attributes) as template
values(chase_cdc) as chase_target
values(Subject) as cert_subject
values(EventCode) as codes
values(host) as ca_host
by Request_ID
| eval status = case(mvfind(codes,"4887")>=0,"ISSUED",
mvfind(codes,"4888")>=0,"DENIED",
true(),"PENDING")
| eval severity = "critical"
| sort - _time
| rename ca_host as "CA Host", Request_ID as "Request ID",
requester as "User Requester", template as "Certificate Template",
chase_target as "Chase Target (cdc)", cert_subject as "Issued Subject",
status as "Outcome", severity as "Severity",
_time as "Timestamp"
| table "Timestamp" "CA Host" "Request ID" "User Requester" "Certificate Template" "Chase Target (cdc)" "Issued Subject" "Outcome" "Severity"

تُجمَّع الأحداث حسب معرّف الطلب (Request ID) بحيث يظهر دورة الحياة الكاملة لطلب خبيث واحد (received، ثم issued أو denied) في صف واحد.
تضمّنت النسخة الأولى من هذا الكشف Event ID 4741 (إنشاء حساب حاسوب) كشرط مسبق، استنادًا إلى إثبات المفهوم العام الذي يوضّح إنشاء الحساب كجزء من سلسلة الهجوم. غير أن تنبيه Microsoft الخاص بـ CVE-2026-54121 يذكر شرط حساب الجهاز المسبق إما كقيمة افتراضية لـ ms-DS-MachineAccountQuota أو حساب جهاز يتحكم به المهاجم مسبقًا.
المهاجم الذي يسلك المسار الثاني يستخدم حساب جهاز يتحكم به بالفعل ولا يولّد أي حدث 4741. وقد حُدِّثت القاعدة لتستند حصريًا على هدف التتبع cdc، لتغطي بذلك مساري الاستغلال بحكم التصميم.
كما يزيل هذا أي اعتماد على حدوث إنشاء الحساب وإساءة استخدام الشهادة ضمن النافذة الزمنية نفسها. فبإمكان المهاجم إنشاء حساب الجهاز قبل محاولة الاستغلال أو بعدها بأيام وتبقى القاعدة فعّالة.
يقتصر البحث الأساسي على أحداث تدقيق أمان AD CS على DC01 (4886، 4887، 4888) ويُصفّي مسبقًا الأحداث التي تحتوي على السلسلة النصية الحرفية "cdc"، إذ لا تحمل سوى محاولات إساءة استخدام التتبع هذه السمة في حقل Message.
لكل حدث مطابق، يستخرج البحث وجهة التتبع من سطر cdc: في حقل Message. وتُستبعَد الأحداث التي تغيب فيها هذه القيمة أو التي تطابق DC FQDN الشرعي (dc01.atlasvec.lab).
تُعلَّم الأحداث التي تشير فيها قيمة cdc إلى أي هدف آخر، إذ إن هذا هو الشرط الدقيق الذي تُوجَّه فيه CA للتتبع خارج البنية التحتية الشرعية لوحدات التحكم بالمجال (DC)، وهو جوهر استغلال هذا الـ CVE.
حرجة - قيمة ثابتة تُضبط مباشرة في منطق البحث. لا تُحسب على مقياس، فكل تطابق تنتجه هذه القاعدة يُعامَل كحرج لأن الشرط الذي تكشفه (تتبّع CA لوجهة يتحكم بها الطالب خارج نطاق DC) هو البدائية الاستغلالية نفسها.