
Kestrel v.1.1.0
أداة تعداد أمني لأكتيف ديركتوري منخفضة الظهور تستخدم واجهات ADSI/COM الأصلية. تعدّد قوائم ACL، والتفويض، وعلاقات الثقة، وADCS، وأهداف Kerberoast، ومسارات الهجوم دون الحاجة إلى .NET أو PowerShell، مع إنتاج مخرجات متوافقة مع BloodHound.
Kestrel
BloodHound يريك المسار. Kestrel يريك ما هو موجود في الداخل بالفعل.
الجميع يرسمون نفس الشيء: مسار الهجوم - من يستطيع الوصول إلى Domain Admin. إنه السؤال الصحيح، والأدوات التي تجيب عليه ممتازة. لكن الرسم البياني لـ«من يستطيع الوصول إلى من» أعمى عن فئة كاملة من المشاكل، لأن بعض أسوأ الأشياء في Active Directory ليست مسارًا على الإطلاق.
إنها باب خلفي ملحوم في سمة (attribute). شهادة تظل تصادق لفترة طويلة بعد إعادة تعيين كلمة المرور. صلاحية مطبوعة في المخطط (schema) نفسه، بحيث يرثها كل كائن يُنشأ من الآن فصاعدًا بصمت. حساب محذوف احتفظ شخص ما بهدوء بحق إعادته. كائن مخفي عن التعداد بواسطة ACE واحد يمنع القراءة.
لا شيء من ذلك يظهر كحافة (edge) في رسم بياني. كل ذلك موجود في دليلك الآن. يقرؤه Kestrel - باستدعاءات Windows أصلية، وصلاحيات مستخدم نطاق عادي، دون خادم، ودون Python، ودون وكيل، وببصمة على وحدة تحكم النطاق (domain controller) مقيدة لدرجة أنها موثقة حدثًا بحدث.
ملف .exe واحد. أمر واحد. كل ما يلي.
كنت تنظر في الاتجاه الخاطئ
النظام البيئي الهجومي لـ Active Directory - SharpHound وimpacket وCertipy والرسم البياني الذي يقف خلفها - ممتاز، وكلها تنظر إلى السطح نفسه: قابلية الوصول (reachability). ينظر Kestrel إلى الأبعاد الثلاثة التي لا يستطيع ذلك السطح التعبير عنها.
- الزمن. الرسم البياني لقطة سريعة (snapshot). يقرأ Kestrel بيانات تعريف النسخ المتماثل (replication metadata) - متى تغيرت سمة من Tier-0 وأي DC كان مصدرها. صلاحية DCSync الممنوحة الليلة الماضية ليست النتيجة نفسها لصلاحية موجودة منذ سنوات، وواحدة فقط منهما تعني أنك تتعرض للهجوم الآن.
- الاستمرارية في سمة، لا في حافة. Shadow credentials، وSID history، وإعادة إحياء القبور (reanimate-tombstones)، وبوابات خلفية في
defaultSecurityDescriptorبالمخطط، وكائنات مخفية، وACEs من نوع deny لـOWNER RIGHTS، ومفاتيح AD FS DKM. لا تجمع أدوات الرسوم البيانية هذه الأشياء لأنه لا توجد حافة لرسمها. - الوضع الدفاعي، معكوسًا. ليس «من يستطيع الهجوم»، بل «ما هو غير محمي» - حساب Tier-0 خارج نطاقه المعزول، حساب المزامنة ذو RID العشوائي الذي لم يضع له أحد وسمًا، سياسة القفل التي لا تكبح أبدًا هجمات التخمين (spray).
ليس الأمر أن Kestrel أسرع من رسم بياني. إنه يجيب عن أسئلة لا يستطيع الرسم البياني طرحها.
كل خطايا Active Directory، في ملف exe أصلي واحد
| الخطيئة | ما يجده Kestrel | الأعلام (Flags) |
|---|---|---|
| النسخ المتماثل والتفويض | صلاحيات DCSync (من يمكنه النسخ المتماثل - دون النسخ أبدًا)، تفويض غير مقيد / مقيد / RBCD / S4U | --acl · --delegation |
| إساءة استخدام الشهادات | AD CS ESC1–5/9، مرجع تصديق (CA) مارق في مخزن NTAuth، استمرارية شهادات طويلة العمر، ACL لمفتاح AD FS DKM - الشرط المسبق لـ Golden SAML | --adcs · --adfs |
| الاستمرارية في السمات | Shadow credentials، حقن SID history، صلاحيات إعادة إحياء القبور، كائنات مخفية، بوابات خلفية في defaultSecurityDescriptor بالمخطط، adminCount يتيمة | --shadowcreds · --sidhistory · --acl · --schema · --adminsdholder |
| بيانات اعتماد نصية وقابلة للكسر | GPP cpassword، أسرار unattend/sysprep وكلمات مرور السكربتات عبر SYSVOL، حسابات قابلة للـ Kerberoast والـ AS-REP roast، فجوات في تغطية LAPS | --gpp · --roast · --laps |
| عبر النطاقات والهجين | كيانات رئيسية أجنبية في مجموعات مميزة، حسابات مزامنة Entra Connect موسومة كـ Tier-0، وضع الثقة (trust)، حسابات آلات أُنشئت عبر MachineAccountQuota (mS-DS-CreatorSID) | --groups · --trust · --machines |
| الوضع والاستطلاع | سياسة كلمات المرور / PSO، عمر krbtgt، إعدادات GPO لـ LLMNR / NBT-NS / WDigest / NTLMv1، قراء gMSA، أجهزة كمبيوتر قديمة، طوبولوجيا التفويض | --pwdpolicy · --policy · --gmsa · --stale |
أكثر من عشرين فحصًا تنتشر عادةً عبر اثني عشر سكربتًا ولغتين. هنا هي ملف ثنائي واحد - وتنتهي بنتيجة واحدة مرتبة حسب الخطورة.
سطر واحد
Kestrel.exe --all --report audit.html
شغّل كل شيء. احصل على تقرير HTML الكامل. وفي نهاية وحدة التحكم تمامًا، الجزء المهم:
═══ Kestrel - Prioritized Findings ═══
CRITICAL DCSync CORP\svc_sql - non-default principal can replicate directory changes (DCSync)
→ fix: remove GetChanges/GetChangesAll from the principal on the domain head (dsacls) unless it is a DC
CRITICAL AD FS CN=... - read access to the DKM key (Golden SAML precondition)
→ fix: remove non-default read ACEs on the DKM object (dsacls) and rotate the token-signing certificate
HIGH Persistence CN=... - object hidden from enumeration via a broad deny-read ACE
→ fix: inspect the hidden object and remove the broad deny-read ACE (dsacls)
[=] 2 critical · 1 high · 0 medium · 0 low
ليس جدارًا من المخرجات. بل النتائج المهمة، مرتبة، ولكل منها الأمر اللازم لإغلاقها.
ملف exe واحد. أحمر، أزرق، بنفسجي.
- أحمر / رمادي - تعداد الاستمرارية والتفويض الذي يفوته الرسم البياني، تصدير مباشر إلى BloodHound CE OpenGraph (
--opengraph) لدمجه مع مجموعتك الحالية، أو الانطلاق من أي كيان رئيسي (principal) (--from). - أزرق - قائمة نتائج مرتبة وقابلة للمعالجة؛
--diffمقابل لقطة الأسبوع الماضي لرصد ما تغير؛ وأداة بصمتها الاكتشافية الدقيقة منشورة لتتمكن من إدراجها في قائمتك البيضاء وضبط نظام التنبيه الخاص بك حولها. - بنفسجي - قطعة أثرية واحدة يقرؤها الطرفان بالطريقة نفسها. الأحمر يجدها، والأزرق يصلحها، والجميع يشير إلى رقم السطر نفسه.
قابلة للاكتشاف بالتصميم
Kestrel للقراءة فقط. لا يكتب أبدًا إلى الدليل، ولا ينسخ مطلقًا، ولا يحتاج SeSecurityPrivilege، ولا يلمس السحابة. قراءة من يمكنه تنفيذ DCSync لا تشبه على الشبكة (wire) تنفيذ DCSync إطلاقًا - لا DRSUAPI، ولا توقيع نسخ متماثل 4662. كل استعلام يشغله وكل حدث يمكنه (ولا يمكنه) توليده مُفهرس في FOOTPRINT.md. مدقق يخبر المدافع بالضبط كيف يكتشفه ليس تناقضًا - بل هو المغزى كله.
بداية سريعة
احصل على بناء (build). كل تشغيل CI ناجح ينشر قطعة أثرية Kestrel.exe - حمّلها من تبويب Actions، دون الحاجة إلى سلسلة أدوات (toolchain).
أو ابنِه بنفسك. Visual Studio (v143+) أو MSBuild:
git clone https://github.com/ssteelfactor-oss/Kestrel.git
cd Kestrel
msbuild Kestrel.vcxproj /p:Configuration=Release /p:Platform=x64
لغة C نقية، بلا أي تبعيات خارجية. ابنِه بـ /MT وستحصل على ملف تنفيذي واحد مكتفٍ ذاتيًا - ضعه على جهاز منضم إلى النطاق، وشغّله بأي مستخدم عادي.
شغّله.
Kestrel.exe --all --report audit.html # everything, HTML report + ranked findings
Kestrel.exe --acl --adcs --adfs # pick specific checks
Kestrel.exe --paths --from CORP\jdoe # attack paths from one principal
Kestrel.exe --all --diff last-week.json # what changed since the last snapshot
Kestrel.exe --all --opengraph graph.json # export to BloodHound CE OpenGraph
الوحدات
شغّل --all، أو اختر أي مجموعة فرعية. المساعدة الكاملة: Kestrel.exe --help.
| العلم (Flag) | الفحص |
|---|---|
--acl | حواف ACL، صلاحيات DCSync، نظافة المالك/الوراثة/الشكل الأساسي (canonical)، كائنات مخفية، إعادة إحياء القبور |
--groups | عضوية مميزة متعدية + كيانات أمنية أجنبية |
--delegation | تفويض غير مقيد / مقيد / RBCD / S4U2Self |
--paths / --from | تحليل مسار الهجوم نحو Tier-0 (اختياريًا من كيان رئيسي معين) |
--adcs | تدقيق قوالب الشهادات / مرجع التصديق في AD CS (ESC1–5/9) + مخزن NTAuth + الصلاحية |
--adfs | ACL لمفتاح AD FS DKM (الشرط المسبق لـ Golden SAML) |
--schema | تدقيق الباب الخلفي في defaultSecurityDescriptor بالمخطط |
--trust | وضع الثقة بين النطاقات / الغابات |
--machines | حسابات آلات أُنشئت عبر MachineAccountQuota (mS-DS-CreatorSID) |
--roast | حسابات قابلة للـ Kerberoast + AS-REP roast |
--shadowcreds | بيانات اعتماد الظل (Shadow credentials) (msDS-KeyCredentialLink) |
--sidhistory | حقن sIDHistory (مميز / أجنبي) |
--adminsdholder | كائنات adminCount=1 يتيمة |
--gpp | مسح أسرار SYSVOL - GPP cpassword، unattend، بيانات اعتماد السكربتات |
--gpolateral | مجموعات محلية عبر GPO → حواف جانبية (AdminTo / CanRDP / CanPSRemote / ExecuteDCOM) |
--policy | سياسة أمان GPO (LLMNR / NBT-NS / WDigest / NTLMv1) |
--pwdpolicy | سياسة كلمات المرور / PSO · عمر krbtgt · MachineAccountQuota |
--hygiene | نظافة بيانات الاعتماد (PASSWD_NOTREQD / DONT_EXPIRE / قابلة للعكس / تسريبات في الوصف) |
--gmsa | تعداد قارئي كلمات مرور gMSA |
--laps | تغطية LAPS (القديمة + Windows LAPS 2023+) |
--stale | أجهزة كمبيوتر قديمة عبر lastLogonTimestamp |
--topology | طوبولوجيا أجهزة الكمبيوتر عبر فك ترميز SPN |
--adws | كشف نقطة نهاية ADWS (9389/TCP لكل DC) |
المخرجات والتوافق: --report <file> (.html / .json / .yaml) · --opengraph <file> (BloodHound CE) · --diff <snapshot.json> · --verbose.
الثوابت التصميمية
هذه وعود، وليست تفضيلات - الأسباب التي تجعل تشغيله في الإنتاج آمنًا. خرق أي منها هو ثغرة أمنية (انظر SECURITY.md).
- للقراءة فقط - لا ينشئ أو يعدل أو يحذف أي كائن في الدليل أبدًا. أحداث قراءة/وصول فقط، ولا أحداث تعديل أبدًا.
- مستخدم نطاق عادي - لا تصعيد صلاحيات، ولا
SeSecurityPrivilege، وأقنعة أمان عبر DACL فقط. - بلا نسخ متماثل - يكتشف من يمكنه تنفيذ DCSync؛ ولا يستدعي DRSUAPI بنفسه أبدًا.
- الدليل وSYSVOL فقط - لا RPC/SMB ضد الأجهزة الأعضاء.
- بلا مراوغة - لا تجزئة استعلامات، ولا ألعاب توقيت، ولا العبث بالسجلات. انظر FOOTPRINT.md.
- محلي فقط (On-prem) - لا استدعاءات Entra / Graph / سحابة؛ يدقق البصمة التي يتركها الهجين في AD.
- أصلي ومكتفٍ ذاتيًا - لغة C نقية، بلا تبعيات خارجية، ملف
.exeواحد.
خارطة الطريق
| الإصدار | الحالة | الإنجاز |
|---|---|---|
| v0.13 | ✅ | وضع شروط الدخول |
| v0.14 | ✅ | عمق ACL + حواف جانبية |
| v0.15 | ✅ | تدقيق بنية ACL (من فئة ADeleg) |
| v0.16 | ✅ | استمرارية خفية + عمق SYSVOL / ADCS |
| v0.17 | ✅ | بصمة عبر النطاقات + الهجين |
| v0.18 | ✅ | نظافة الاستعلامات + بصمة صادقة |
| v1.0 | ✅ | مكتمل الميزات: نتائج مرتبة + معالجة (remediation)، CI، Apache 2.0 |
| v1.1 | 🔲 | خط زمني (Temporal timeline) · كشف DC مارق / DCShadow · ADIDNS · مراجعة الوضع الدفاعي |
التوثيق
- FOOTPRINT.md - أثر LDAP / SYSVOL الدقيق الذي يتركه كل فحص، وأحداث DC التي يولّدها (ولا يمكنه توليدها).
- SECURITY.md - الإبلاغ، والنطاق، والثوابت التصميمية كضمانات قابلة للتحقق.
- LICENSE - Apache 2.0.
متعلقات
المشروع الأم: NetEnum - تعداد Active Directory عبر ADSI / COM / LDAP.
المؤلف
@ssteelfactor-oss - أبحاث أمنية ودواخل COM / Windows.
الترخيص
مرخّص بموجب رخصة Apache 2.0 - انظر LICENSE. مُقدَّم «كما هو»، دون أي ضمان؛ شغّله فقط ضد أدلة مرخص لك بتدقيقها.