
تقييم مسارات الهجوم في BloodHound مع مراعاة كشف الأنظمة - أهدأ مسار نحو هدفك، معاير عبر خمسة مستويات كشف (audit/EDR/Elastic/MDI/WDAC) إضافةً إلى Azure.

تقييم مسارات الهجوم في Active Directory مع مراعاة الكشف. DreadHost Research | رفيق لـ OffsetInspect (PowerShell) وOffsetScan (Rust)
يعثر BloodHound (وPlumHound فوقه) على مسار واحد نحو الهدف. يستوعب NoiseHound بيانات الرسم البياني نفسها ويعيد ترتيب المسارات حسب التكلفة المتوقعة للكشف بدلاً من عدد القفزات، حتى يتمكن المشغّل من السؤال "ما هو أهدأ طريق إلى Domain Admin" بدلاً من مجرد "ما هو أحد الطرق".
جديد هنا؟ Operator Walkthrough هو أسرع طريقة لرؤية ما يفعله هذا - جولة عملية مدعومة بلقطات الشاشة من التثبيت إلى إثبات مفهوم حي لـ BloodHound CE (تُكتب الدرجات مرة أخرى في الواجهة)، ومحرك DeadAir، وتقرير فجوة الكشف الخاص بالفريق الأزرق.
حالة المشروع (v1.2.0): مستقر ومُختبَر على بيانات BloodHound حقيقية عبر نطاقات متعددة. 37 من أصل 77 حافة في المجموعة مُقاسة معمليًا عبر خمسة مستويات كشف محلية (Windows audit، وDefender for Endpoint، وElastic SIEM، وتنبيهات Defender for Identity أثناء التشغيل، وWDAC audit) بالإضافة إلى مستوى Azure/Entra مُقاس - تُشحن كستة ملفات تعريف جاهزة في
profiles/، مع إثبات حلقي مغلق أنها تغيّر ترتيب المسارات (docs/VALIDATION.md). تتضمن المجموعة 13 حافة Azure/Entra (docs/AZURE.md)، قابلة للاستيعاب مباشرة من مخرجات AzureHound. الحواف المحلية غير المُقاسة وجميع حواف Azure تحمل تقديرات خبيرة؛ وأداة المعايرة (noisehound-calibrate) هي الطريقة التي تُقاس بها، وبيئتك الخاصة أيضًا. تعامل مع الترتيبات غير المُعايَرة كإرشاد مدروس جيدًا، وليس كحقيقة مطلقة.
للاستخدام في المهام المصرّح بها فقط. تقيّم هذه الأداة مسارات الهجوم لتخطيط OPSEC ضد الأنظمة التي لديك إذن كتابي باختبارها.
NoiseHound مشروع مجتمعي مستقل. وهو غير تابع لـ SpecterOps أو مشروع BloodHound، ولا مُعتمد منهما، ولا مرتبط بهما؛ بل يستهلك تنسيق البيانات المفتوح الخاص بـ BloodHound.
.zip)، أو ملف JSON خام، أو دليل من
عمليات التصدير إلى رسم بياني داخلي. كما يُقبل تنسيق JSON مُطبَّع {nodes, edges}
للتحليل دون الاتصال بالشبكة والاختبارات. تُصنَّع حواف تصعيد AD CS ESC1-8
في وقت التحميل من حقائق قوالب الشهادات وCA التي يجمعها BloodHound (انظر أدناه).effective_noise_score (0-100). حيثما تربط عدة حقوق الزوج نفسه
من العُقد، يُختار الأهدأ. أنواع الحواف الغائبة عن المجموعة تعود
افتراضيًا إلى درجة متحفظة (60) حتى تفشل الفجوات بأمان بدلًا من التقليل من الإبلاغ.
ويضبط ملف تعريف البيئة الاختياري الدرجات وفقًا لوضع الكشف المُعلن للهدف (انظر أدناه).ضوضاء المسار ليست عمدًا مجموعًا بسيطًا. فإطلاق الكشف نفسه مرتين ليس بصخب مضاعف (فرز SOC، وليس عدد الأحداث الخام). يستخدم NoiseHound:
path_score = max(edge_scores) * 0.6 + mean(edge_scores) * 0.4
يُرجّح هذا نحو الخطوة الفردية الأعلى صوتًا (فغالبًا ما تُحرق خطوة سيئة واحدة العملية بأكملها) مع مراعاة التعرض التراكمي في الوقت نفسه. الأوزان قابلة للضبط (--max-weight / --mean-weight) بحيث يمكن ضبطها تجريبيًا بمجرد توفر بيانات كشف حقيقية من مختبر APT29/Caldera.
كما يُبلّغ كل مسار عن احتمالية كشف - أي فرصة إطلاقه تنبيهًا مترابطًا - عبر مزج الحافة الأعلى صوتًا مع OR الضجيجي التراكمي لجميع الحواف (يُضبط عبر --correlation). وهو يجيب عن سؤال مختلف عن درجة الضجيج: فقد يكون لمسار قصير لكن عالٍ الصوت احتمالية إجمالية أقل للكشف من مسار طويل لكن هادئ. رتّب حسبها باستخدام --rank-by probability.
بالنسبة للرسوم البيانية الكبيرة، يُوجَّه الحل إلى DeadAir، وهو محرك Rust مرافق (طبقة OffsetScan-to-OffsetInspect). يبقى NoiseHound الواجهة الأمامية الغنية بالميزات - الاستيعاب، والمجموعة، والبيئة/Sigma، والقيود، وإعداد التقارير - ويسلّم الرسم البياني المُجهَّز إلى المحرك الذي يحلّه، لذا تكون النتائج متطابقة في كلتا الحالتين.
--engine auto (الافتراضي): DeadAir عندما يُعثر على ملفه التنفيذي و كان الرسم البياني كبيرًا (>= 5000 عقدة)؛ وإلا فمحرك Python المدمج.--engine python: فرض المحرك المدمج (لا حاجة لملف تنفيذي).--engine rust: فرض DeadAir (يُظهر أخطاءً إذا كان الملف التنفيذي مفقودًا).يُعثر على DeadAir عبر $NOISEHOUND_DEADAIR، ثم PATH، ثم بناء الشقيق ../deadair/target/{release,debug}/. وهو أسرع بمقدار 10-100x على الرسوم البيانية الكبيرة (يُحلّ رسم بياني بـ 250k عقدة في ~2s مقابل ~30s في Python) مع إنتاج تصنيفات متطابقة بايتًا ببايت. ويُسجّل المخرجات أي محرك قد شُغّل.
يسحب الضجيج وعدد القفزات واحتمالية الكشف في اتجاهات مختلفة، لذا يُرجع --pareto حدود Pareto - كل مسار لا يتفوق عليه أي مسار آخر في الثلاثة دفعة واحدة - بدلًا من فرض فائز واحد. وللعمليات الحقيقية قيود: --avoid NODE يُبقي المسار بعيدًا عن مضيف محدد (صندوق قفز مراقب بـ EDR، أو honeypot)، و--avoid-edge TYPE يرفض تقنية ما (مثل --avoid-edge DCSync). كلاهما قابل للتكرار ويُعاد الحل فوريًا.
python -m noisehound -i export.zip -s jdoe -o "Domain Admins" --pareto
python -m noisehound -i export.zip -s jdoe -o "Domain Admins" --avoid FILESERVER01 --avoid-edge HasSession
إن توجيه المسارات الموزون في BloodHound ليس جديدًا، لذا إليك التموضع الصادق: