
تقييم مسارات هجوم BloodHound مع مراعاة الاكتشاف - اعثر على الطريق الأكثر هدوءًا إلى هدفك، مُعايرًا عبر مستويات التدقيق/EDR/SIEM.

تقييم مسارات الهجوم في Active Directory مع مراعاة الكشف. DreadHost Research | رفيق لأداتي OffsetInspect (PowerShell) وOffsetScan (Rust)
يجد BloodHound (وPlumHound فوقه) مسارًا إلى الهدف. يستوعب NoiseHound نفس بيانات الرسم البياني ويعيد ترتيب المسارات حسب التكلفة المتوقعة للكشف بدلاً من عدد القفزات، بحيث يمكن للمشغّل أن يسأل "ما هي أهدأ طريقة للوصول إلى Domain Admin" بدلاً من مجرد "ما هي طريقة".
جديد هنا؟ ابدأ بـ دليل المشغّل — برنامج تعليمي عملي يعتمد على لقطات الشاشة ينتقل بك من التثبيت إلى إثبات مفهوم مباشر على BloodHound CE (تُكتب النتائج مرة أخرى إلى واجهة BloodHound)، ومحرك DeadAir، وتقرير فجوة الكشف للفريق الأزرق.
حالة المشروع (v1.0): مستقر ومُختبر على بيانات BloodHound حقيقية عبر مجالات متعددة. 30 من أصل 57 حافة من مجموعة الحواف أصبحت الآن مُقاسة مخبريًا عبر أربع طبقات كشف (التدقيق، Defender for Endpoint، وElastic SIEM، ووضعية MDI) - وتُشحن كملفات تعريف جاهزة في
profiles/، مع إثبات حلقة مغلقة أنها تغيّر ترتيب المسارات (docs/VALIDATION.md). الحواف ~28 المتبقية لا تزال تحمل تقديرات خبراء؛ منظومة المعايرة (noisehound-calibrate,docs/CALIBRATION.md) هي الكيفية التي تُقاس بها هي وبيئتك الخاصة. تعامل مع الترتيبات غير المعايرة كإرشادات مدروسة، وليست حقيقة مطلقة.
للاستخدام في المهام المصرح بها فقط. تقوم هذه الأداة بتقييم مسارات الهجوم لتخطيط OPSEC ضد أنظمة لديك إذن كتابي لاختبارها.
NoiseHound هو مشروع مجتمعي مستقل. وهو غير تابع لـ SpecterOps أو مشروع BloodHound، وليس مُصادقًا عليه من قبلهما، ولا يرتبط بهما؛ فهو يستخدم تنسيق البيانات المفتوح الخاص بـ BloodHound.
استيعاب تصدير BloodHound CE (.zip)، أو ملف JSON خام، أو مجلد
من التصديرات إلى رسم بياني داخلي. يُقبل أيضًا تنسيق JSON مُطبّع {nodes, edges}
للتحليل والاختبارات دون اتصال. تُولَّد حواف تصعيد AD CS ESC1-8
عند التحميل من حقائق قالب الشهادة والمرجع المصدري (CA)
التي يجمعها BloodHound (انظر أدناه).
شرح كل حافة من مجموعة بيانات قياسات الحواف، مع إرفاق
effective_noise_score (0-100). عندما تربط عدة صلاحيات نفس الزوج
من العقد، تُختار الأهدأ. أنواع الحواف غير الموجودة في المجموعة يكون افتراضها
درجة متحفظة (60) بحيث تفشل الفجوات بأمان بدلاً من التقليل في التبليغ.
ملف تعريف البيئة الاختياري يعدّل الدرجات وفقًا لوضعية الكشف المُعلنة
للهدف (انظر أدناه).
حل أهدأ المسارات. لأن درجة المسار هي عنق زجاجة زائد متوسط (وليست مجموعًا بسيطًا)، لا يمكن تحسينها مباشرة بواسطة Dijkstra. يجمع الحلّال بين مسح العتبة (لكل مستوى ضوضاء مميز، أهدأ مسار يبقى تحته) وبين تمرير k-الأقصر-بالوزن المحدود، ثم يعيد ترتيب الاتحاد بالدرجة الحقيقية للمسار. مسح العتبة هو شبكة أمان الصحة: فهو يُظهر مسارًا طويلًا لكنه هادئ بشكل موحد، وهو ما كان سيرتّبه بحث بمجموع الأوزان النقي أدنى من مسار قصير لكنه صاخب.
الإبلاغ كنص، أو JSON (متوافق مع مخطط نتائج OffsetInspect)، أو تقرير HTML مستقل بذاته بتنسيق يطابق مجموعة الأدوات.
ضوضاء المسار ليست مجموعًا بسيطًا عن عمد. تفعيل نفس الكشف مرتين ليس ضعف الصخب (فرز SOC، وليس عدد الأحداث الخام). يستخدم NoiseHound:``` path_score = max(edge_scores) * 0.6 + mean(edge_scores) * 0.4
هذا يرجّح كفة الخطوة الواحدة الأكثر ضجيجًا (خطوة سيئة واحدة غالبًا ما تُفشل العملية
برمتها) مع الاستمرار في مراعاة التعرّض التراكمي. الأوزان قابلة للضبط
(`--max-weight` / `--mean-weight`) بحيث يمكن معايرتها تجريبيًا بمجرد توفّر بيانات
كشف حقيقية من مختبر APT29/Caldera.
كما يُبلّغ كل مسار عن **احتمالية اكتشاف** - وهي فرصة إطلاقه
تنبيهًا مرتبطًا - من خلال مزج الحافة الأعلى ضجيجًا مع noisy-OR التراكمي لجميع
الحواف (مضبوطة عبر `--correlation`). وهي تجيب عن سؤال مختلف عن درجة الضجيج:
فمسار قصير لكنه صاخب قد تكون احتمالية اكتشافه الإجمالية *أقل* من مسار
طويل لكنه هادئ. رتّب بالاعتماد عليها عبر `--rank-by probability`.
### المحرك ثنائي المستوى (DeadAir)
بالنسبة للرسوم البيانية الكبيرة، يُرسَل الحل إلى [DeadAir](https://github.com/warpedatom/DeadAir)، وهو محرك
Rust مصاحب (مستوى OffsetScan إلى OffsetInspect). تبقى NoiseHound
الواجهة الأمامية الغنية بالميزات - الاستيعاب، والمدونة (corpus)، والبيئة/Sigma، والقيود،
وإعداد التقارير - وتسلّم الرسم البياني المجهّز إلى أي محرك يحلّه، لذلك
تكون النتائج متطابقة في الحالتين.
- `--engine auto` (الافتراضي): يستخدم DeadAir عند العثور على ملفه التنفيذي *و* كان الرسم البياني
كبيرًا (>= 5000 عقدة)؛ خلاف ذلك يستخدم الحلّال المدمج في بايثون.
- `--engine python`: فرض استخدام الحلّال المدمج (لا حاجة لملف تنفيذي).
- `--engine rust`: فرض استخدام DeadAir (يُصدر خطأً إذا كان الملف التنفيذي مفقودًا).
يُعثر على DeadAir عبر `$NOISEHOUND_DEADAIR`، ثم عبر `PATH`، ثم عبر مجلد البناء المجاور
`../deadair/target/{release,debug}/`. وهو أسرع بمقدار 10-100x على الرسوم البيانية الكبيرة
(رسم بياني بـ 250k عقدة يُحل في ~2s مقابل ~30s في بايثون) مع إنتاج ترتيبات
مطابقة بايتًا ببايت. يسجّل المخرَج المحرك الذي تم استخدامه.
### المسارات متعددة الأهداف والمقيّدة
الضجيج وعدد القفزات واحتمالية الاكتشاف تسحب في اتجاهات مختلفة، لذلك
`--pareto` يُرجع **حدود باريتو** - كل مسار لا يتفوق عليه أي مسار آخر في
المعايير الثلاثة معًا - بدلاً من فرض مسارٍ وحيدٍ كأفضل نتيجة. والعمليات الحقيقية
لها قيود: `--avoid NODE` يُبقي المسار بعيدًا عن مضيف معيّن (صندوق قفز مراقَب بواسطة EDR،
أو honeypot)، و`--avoid-edge TYPE` يرفض أسلوبًا/تقنية
(مثال: `--avoid-edge DCSync`). كلا الخيارين قابلان للتكرار ويعيدان الحل فورًا.```bash
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 ليس جديدًا، لذا إليك التموضع الصريح:
مساهمة NoiseHound هي الدمج: مجموعة نصوص قابلة للقراءة آليًا تربط حواف BloodHound ببيانات الاكتشاف، وإعادة حل موزونة بالضوضاء مؤطّرة كعمليات OPSEC للمشغّل ("الطريق الأكثر هدوءًا إلى DA")، ونموذج بيئة يتكيف مع الوضع المُعلن للهدف، وحلقة معايرة تحوّل اكتشافات المختبر إلى نتائج مُقاسة. حسابات الرسم البياني أمر شائع؛ المجموعة النصية والتأطير هما الأساس. قيمتها بقدر جودة المجموعة النصية، ولهذا فإن المعايرة و المساهمة المجتمعية من الدرجة الأولى - انظر أدناه.
cd NoiseHound python -m pip install -r requirements.txt # networkx>=3.0
noisehound command on PATH:python -m pip install -e .
يتطلب Python 3.10+.
## الاستخدام```bash
# Text summary (default)
python -m noisehound --input export.zip --objective "Domain Admins" --source jdoe
# JSON, for downstream tooling / correlation across the DreadHost suite
python -m noisehound -i export.zip -o "Domain Admins" -s jdoe -f json --out paths.json
# Self-contained HTML report
python -m noisehound -i export.zip -o "Domain Admins" -s jdoe -f html --out report.html
أولاً، تحقق من سلامة المُحلِّل على ملف التصدير الخاص بك (رسوم بيانية تكرارية + تغطية المجموعة النصية، بدون معالجة المسارات) - أسرع طريقة للتحقق من NoiseHound على بيانات حقيقية:```bash noisehound-inspect -i export.zip
### Live BloodHound CE / Neo4j
بدلاً من ملف zip، وجّه `--input` إلى قاعدة بيانات Neo4j التي يملؤها BloodHound CE،
ويقرأ NoiseHound الرسم البياني (المُحلَّل مسبقاً) مباشرة عبر Bolt:```bash
pip install 'noisehound[neo4j]'
export NEO4J_PASSWORD=bloodhoundcommunityedition # match your BHCE compose
noisehound-inspect -i bolt://localhost:7687
python -m noisehound -i bolt://localhost:7687 -s jdoe -o "Domain Admins"
شغّل BloodHound CE (يضمّ Neo4j على المنفذ 7687) باستخدام compose الرسمي:
curl -L https://ghst.ly/getbhce | docker compose -f - up.
جرّبه على العينات المرفقة:```bash python -m noisehound -i samples/sample_graph.json -s jdoe -o "Domain Admins" -d CONTOSO.LOCAL python -m noisehound -i samples/sample_bloodhound_ce.zip -s jdoe -o "Domain Admins" python -m noisehound -i samples/sample_adcs_ce.zip -s jdoe -o "Domain Admins" # ADCS ESC1
python -m noisehound -i samples/sample_fullspectrum_ce.zip -s ALICE -o "Domain Admins" -d CONTOSO.LOCAL -k 3
هذه الأخيرة هي أوضح عرض للأطروحة: الطريق الأكثر هدوءًا إلى Domain Admins هو مسار الجلسات من 4 قفزات، والذي يأتي في المرتبة *فوق* مسار RDP من 3 قفزات ومسار ADCS ESC1 من قفزة واحدة - أكبر عدد من القفزات، وأقل ضوضاء.
يوضح المثال القيمة الأساسية: الطريق الأكثر هدوءًا هو مسار جلسات من 4 قفزات (النتيجة 19.9)، ويأتي *فوق* اختصار ForceChangePassword من قفزتين (36.4). عدد القفزات الأقل لا يعني ضوضاء أقل.
### وضع كشف الفجوات للفريق الأزرق
الطريق الأكثر هدوءًا هو حيث يكون الكشف أضعف، لذا أضف `--defensive` لعكس المخرجات لصالح المدافعين: فهو يحدد الحواف التي تكون هادئة فقط لأن بيانات التتبع الخاصة بها متوقفة أو غائبة، ويعيّن كل واحدة إلى عنصر التحكم الذي يمكنه اكتشافها، ويُرتب عناصر التحكم هذه حسب مقدار رفعها لدرجة الطريق الأكثر هدوءًا.```bash
python -m noisehound -i export.zip -s jdoe -o "Domain Admins" --defensive
على العينة كاملة الطيف، يجد أن المسار الأكثر هدوءًا إلى Domain Admins يعتمد على وصول غير مكتشف إلى LSASS (HasSession, 20 -> 65 إذا تم تجهيزه) ويوصي بنشر Sysmon Event 10 - إغلاق تلك الفجوة الواحدة يرفع المسار الأكثر هدوءًا من 19.9 إلى 48.4. انظر docs/ROADMAP.md لمعرفة أين يتجه هذا النموذج وبقية أجزائه.
لا يمكن لدرجة مجموعة بيانات ثابتة أن تعرف ما إذا كان الهدف المحدد يفعّل تدقيق كائن 4662، أو يشغّل Sysmon، أو يدير حل ITDR مثل MDI - ومع ذلك فإن هذه العوامل تغيّر الضوضاء الحقيقية للحافة بشكل كبير (DCSync شبه صامت دون تدقيق 4662 وشبه مؤكد الاكتشاف معه). بدلاً من الادعاء بأن رقمًا واحدًا يناسب كل بيئة، قم بتعريف حالة الهدف في ملف JSON صغير ويقوم NoiseHound بتعديل الدرجات بشفافية استنادًا إلى تعليقات القياس الخاصة بمجموعة البيانات:```json { "name": "CONTOSO.LOCAL-prod", "object_auditing_4662": true, "ds_change_auditing_5136": false, "edr": "MDI", "sysmon": true, "powershell_logging_4104": true, "adjustments": { "HasSession": 65 } }
التعديلات لا *ترفع* الدرجة أبدًا إلا نحو حدّ أدنى للكشف تُوحيه الوضعية
المُعلنة. `adjustments` هي تجاوزات صارمة على مستوى كل حافة - المكان المخصص
لتسجيل القيم التي عايرتها مقابل مختبرك الخاص. هذه مدخلات يقدّمها المشغّل،
وليست قياسًا؛ فهي لا تحل محل التحقق الحي في المرحلة 2، لكنها تحوّل
المجموعة الثابتة من "رقم واحد لكل البيئات" إلى "الرقم الخاص بالبيئة"
التي تتواجد فيها فعلًا". في العينة المرفقة، الإعلان عن الملف التعريفي المذكور أعلاه
يقلب المسار الأكثر هدوءًا من مسار جلسة تفريغ LSASS إلى مسار الكتابة إلى
دليل - وهو القرار الصحيح بمجرد تفعيل بيانات المضيف.```bash
python -m noisehound -i samples/sample_graph.json -s jdoe -o "Domain Admins" \
-e samples/env_profile.example.json
أسبقية الدرجة: static -> environment-adjusted -> live (Phase 2).
ملفات تعريف البيئة تكون جيدة فقط بقدر الأرقام التي تضعها فيها.
noisehound-calibrate يُغلق الحلقة: شغّل التقنيات في مختبر كشف،
وسجّل ما انطلق، ويصدر ملف تعريف بيئة معايرًا.
لقد تم ذلك. profiles/ يوفر ثلاثة ملفات تعريف مُقاسة من
نطاق Hyper-V Vulnerable-AD حقيقي — طبقات التدقيق، وEDR (Defender for Endpoint)، وElastic
SIEM، و30 حافة — أنتجتها المنظومة الآلية (lab/) وهذه الأداة. استخدمها
مباشرة، أو قِس بيئتك الخاصة:```bash
noisehound -i export.zip -s jdoe -o "Domain Admins" -e profiles/vulnad-hyperv-audit.json
noisehound-calibrate -i lab_detections.json -o env.calibrated.json noisehound -i export.zip -s jdoe -o "Domain Admins" -e env.calibrated.json
نموذج الدرجات هو مُقدِّر انكماشي، صادق بشأن حجم العينة:```
p = detections / runs (detection probability)
lab_score = p * severity_loudness + (1 - p) * residual
w = runs / (runs + smoothing) (confidence in the lab)
calibrated = w * lab_score + (1 - w) * corpus_static
lab_score هي التكلفة المتوقعة للاكتشاف - خطورة SOC عند إطلاقها،
وقيمة متبقية صغيرة عندما لا تُطلق. الوزن w يمنع تشغيلًا واحدًا من
تجاوز المجموعة بينما يسمح لنتيجة جيدة العينات بالسيطرة. في
المثال، يرتفع HasSession من 20 ثابتة إلى 52 (التقط المختبر تفريغ LSASS
في 4 من 5 مرات تشغيل) بينما ينخفض Kerberoast من 60 إلى 34 (لم تُطلق أبدًا). استخدم
--merge existing.json لدمج معايرة جديدة فوق ملف تعريف مع الحفاظ على
أعلام الوضع الخاصة به، و --smoothing / --residual لضبط النموذج.
ملفات تعريف البيئة والمعايرة مُعلنة ذاتيًا. noisehound-sigma
يقوم بالتقييم مقابل عمليات الكشف التي كتبها المدافع فعليًا: وجّهه إلى
مجموعة قواعد Sigma وسيحدد أي حواف المجموعة ستُطلق عليها كل قاعدة
(مطابقةً معرّفات أحداث القياس عن بُعد للحافة وتقنية ATT&CK)، ثم يُصدر
ملف تعريف بيئة يرفع الحواف المغطاة - كبديل مباشر لـ --environment.```bash
noisehound-sigma -r ./sigma-rules/ -o env.sigma.json
python -m noisehound -i export.zip -s jdoe -o "Domain Admins" -e env.sigma.json --defensive
المطابقة متعمّدة بحذر بحيث لا تخفي أي فجوة أبدًا: لا تُحتسب القاعدة إلا إذا
كانت تشير إلى معرّف حدث يولّده الحافّة *و*، عندما تكون القاعدة موسومة بـ
ATT&CK، يتوافق أسلوبها معها - لذلك لا تُنسب قاعدة DCSync من نوع DS-Access (4662)
خطأً إلى تغطية قراءات LAPS التي تشاركها معرّف الحدث فقط. يسرد التقرير
ما تغطيه قواعدك، والأكثر فائدةً، حوافّ الهجوم التي لا تغطيها أي قاعدة.
وبالاقتران مع `--defensive`، يجيب هذا على السؤال: "بالنظر إلى الاكتشافات التي
نشرتها، أين يبقى مسار هجومي الأكثر هدوءًا غير مرئي؟"
---
## AD CS ESC1-8
عند التحميل، ينفّذ NoiseHound نسخة مركّزة من معالجة BloodHound اللاحقة لـ ADCS،
مولّفًا حوافّ تصعيد من حقائق قالب/المرجع المصدق المحتفظ بها. يصبح حق `Enroll` على
قالب هشّ حافّة `ADCSESCn` مباشرة من الأصل إلى مجموعة Domain Admins في النطاق (RID 512)،
لذا يكون تصعيد الشهادات قابلاً للتتبع ومُسجَّلًا مثل أي حافّة أخرى:
| Edge | Condition |
|------|-----------|
| `ADCSESC1` | تقديم المُسجَّل للموضوع + EKU لمصادقة العميل، دون موافقات/توقيعات RA |
| `ADCSESC2` | EKU لأي غرض / SubCA، دون موافقة |
| `ADCSESC3` | قالب وكيل تسجيل + قالب مصادقة على نفس المرجع المصدق |
| `ADCSESC4` | تحكم كتابة خطير في قالب منشور |
| `ADCSESC5` | التحكم في كائن المرجع المصدق أو الكمبيوتر المستضيف له |
| `ADCSESC6` | المرجع المصدق لديه `EDITF_ATTRIBUTESUBJECTALTNAME2` مضبوطًا |
| `ADCSESC7` | `ManageCA` / `ManageCertificates` على المرجع المصدق |
| `ADCSESC8` | نقطة تسجيل ويب HTTP قابلة للاستغلال (إكراه + ترحيل NTLM) |
جرّبه: `python -m noisehound -i samples/sample_adcs_ce.zip -s jdoe -o "Domain Admins"`.
تبسيطات موثّقة (تتجه نحو الأمان بإظهار المزيد من المسارات): قيود التسجيل على
مستوى المرجع المصدق غير مُمثَّلة (يُعتبر تسجيل القالب كافيًا)؛ يغطي ESC5 كائن المرجع
المصدق ومضيفه، وليس كل حاوية PKI؛ ESC9/10/13 خارج النطاق. الحواف الاصطناعية ESC الموجودة
مسبقًا في تصدير خضع للمعالجة اللاحقة يتم الحفاظ عليها.
---
## مجموعة البيانات (`edge_mappings/`)
مجموعة بيانات حوافّ التتبع هي جوهر هذه الأداة الفعلي؛ فالكود
هو رياضيات بيانات بيانية بسيطة نسبيًا فوقها. كل ملف `edge_mappings/<Edge>.json`
يربط نوع حافّة من BloodHound بسطح اكتشافه:
- مصادر التتبع المتوقعة (معرّفات أحداث أمان Windows، ومعرّفات أحداث Sysmon،
والشبكة، وطرق الاستدلال EDR/ITDR) مع موثوقية لكل مصدر وما إذا كان
التدقيق ذو الصلة مفعّلًا افتراضيًا
- درجة ضوضاء ثابتة (0-100)
- أسلوب MITRE، والصلاحية المطلوبة مسبقًا، وبدائية الإساءة المعتادة، وملاحظات```json
{
"edge_type": "DCSync",
"static_noise_score": 85,
"telemetry": [
{"source": "windows_security", "event_id": 4662,
"detail": "Directory Service Access - requires object auditing (default OFF)",
"reliability": "high_if_auditing_enabled", "default_enabled": false},
{"source": "edr_heuristic", "product_class": "MDI",
"detail": "Non-DC hosts issuing DRSGetNCChanges - high fidelity",
"reliability": "high"}
],
"mitre_technique": "T1003.006",
"notes": "Assumes default audit policy (mostly OFF) but high EDR/MDI coverage."
}
توسيع مجموعة البيانات هو المجال الذي يجب أن يذهب إليه معظم الجهد المستمر. أضف ملف JSON جديد، والتزم بالمخطط (يتم التحقق منه عند التحميل)، وسيتم التقاطه تلقائيًا. يشتمل الإصدار v0.3 على 43 نوعًا من الحواف تغطي حواف إساءة استخدام ACL، وKerberos، والتفويض، وADCS ESC1-8، وLAPS/gMSA، وGPO، والثقة، وحقوق الوصول التي تهم إيجاد المسارات.
تُستمد الدرجات من مصفوفة الضوضاء في DreadHost Red Team Operator Playbook (تعيينات أحداث Windows/Sysmon، وتقييمات ضوضاء التقنيات) وحقائق كشف AD القياسية. اضبطها وفقًا لبيانات الكشف من مختبرك الخاص.
profiles/ (مستويات audit / EDR / Elastic) مع تحقق بحلقة مغلقة. المتبقي: الحواف الأخرى البالغ عددها ~28 (coercion/relay، ADCS ESC2-13، وCanRDP)، وطبقة تنبيهات وقت التشغيل MDI (الوضعية تعمل؛ يحتاج مسار التنبيه إلى DC على bare-metal/ Ludus - انظر docs/CALIBRATION.md)، ومحور ملف تعريف الأدوات القابل للتحديد (docs/TOOLING_AXIS.md) بحيث تعكس الدرجات الأساليب الجاهزة مقابل الأساليب الأصلية.live_noise_score المأخوذ من إعداد Defender/Sysmon/audit لهدف حقيقي، مع إعادة استخدام منطق حدود الكشف في OffsetInspect. يدعم annotate() بالفعل تجاوز live_scores؛ ويُضاف خطاف CLI في المرحلة 2.مجموعة البيانات قابلة للتوسعة من قبل المجتمع، وهنا تكمن أهمية المساهمات. إضافة حافة هي ملف JSON واحد يتم التحقق منه عند التحميل وفي CI:```bash noisehound-validate # schema + consistency checks over the corpus python -m pytest tests/ -q
انظر [CONTRIBUTING.md](https://github.com/warpedatom/noisehound/blob/HEAD/CONTRIBUTING.md) للمخطط، ودليل التقييم، وإرشادات PR، و[`docs/edge_schema.json`](https://github.com/warpedatom/noisehound/blob/HEAD/docs/edge_schema.json) لمخطط الحواف الرسمي.
## المعايرة باستخدام مختبر
يتم قياس 30 حافة (انظر [`profiles/`](https://github.com/warpedatom/noisehound/blob/HEAD/profiles/))؛ أما الباقي فهي تقديرات حتى تقوم بقياسها، وكل بيئة تختلف عن الأخرى. [`docs/CALIBRATION.md`](https://github.com/warpedatom/noisehound/blob/HEAD/docs/CALIBRATION.md) هو دليل تشغيل كامل: طوبولوجيا المختبر، وسياسة تدقيق Windows الدقيقة وإعداد Sysmon لجعل معرّفات أحداث المجموعة تعمل، ودليل تمرين لكل حافة، وطبقة واقعية APT29 عبر Caldera، وكيفية تجميع النتائج في ملف تعريف معاير. ابدأ باستخدام `noisehound-calibrate --template -o lab_detections.json`.
تعمل مجموعة [`lab/`](https://github.com/warpedatom/noisehound/blob/HEAD/lab/) على أتمتة أدوات الرصد: يقوم `Enable-Telemetry.ps1` بتشغيل سياسة التدقيق، وتسجيل كتل البرامج النصية، وDCSync SACL، وSysmon؛ ويقوم `Collect-Detections.ps1` بإحصاء ما تم إطلاقه في نافذة زمنية. وتعتمد على [GOAD](https://github.com/Orange-Cyberdefense/GOAD) أو [Vulnerable-AD](https://github.com/WazeHell/vulnerable-AD) (أو مختبر CRTP/CRTO الخاص بك) للمجال الضعيف نفسه بدلاً من إعادة تنفيذها.
## الاستخدام المسؤول
NoiseHound مخصص لاختبار الأمن المصرح به، وتمارين الفريق الأرجواني، وهندسة الاكتشاف، والبحث. يقرأ بيانات BloodHound التي جمعتها بالفعل ويحسب التصنيفات؛ ولا ينفذ أي شيء ضد هدف. استخدمه فقط حيث لديك إذن كتابي صريح. يجب ألا تتضمن المساهمات بيانات خاصة بهدف معين أو بيانات من أنشطة حقيقية.
## الاختبار```bash
python -m pytest tests/ # with pytest
python tests/test_noisehound.py # dependency-light smoke run
noisehound/ engine: schema, corpus, ingest, adcs, annotate, environment, solver, report, cli, calibrate edge_mappings/ the telemetry corpus (one JSON per edge type) - the IP samples/ sample_graph.json, sample_bloodhound_ce.zip, sample_adcs_ce.zip, sample_fullspectrum_ce.zip, env_profile.example.json, lab_detections.example.json, sample_report.html docs/ WALKTHROUGH.md (start here), CYPHER.md, VALIDATION.md, CALIBRATION.md, ROADMAP.md, seed_demo_graph.cypher, seed_showcase_graph.cypher, images/ tests/ unit + end-to-end tests
| Option | Meaning |
|---|
--input, -i | ملفات BloodHound .zip أو .json أو مجلد ملفات التصدير |
--source, -s | المبدأ الأساسي للبدء (jdoe أو معرف كائن) |
--objective, -o | العقدة الهدف (Domain Admins أو معرف كائن) |
--paths, -k | عدد المسارات الأكثر هدوءًا المطلوب إرجاعها (الافتراضي 5) |
--format, -f | text (الافتراضي)، أو json، أو html |
--defensive | عرض الفريق الأزرق: فجوات الاكتشاف على المسارات الأكثر هدوءًا + الإصلاحات |
--rank-by | noise (الافتراضي) أو probability (احتمال تنبيه مرتبط) |
--correlation | معامل ارتباط SOC لـ P(detected)، من 0 إلى 1 (الافتراضي 0.5) |
--pareto | إرجاع حدود باريتو عبر الضوضاء/القفزات/P(detect) |
--engine | auto (الافتراضي)، أو python، أو rust (محرك DeadAir) |
--avoid NODE | استبعاد عقدة من جميع المسارات (قابل للتكرار) |
--avoid-edge TYPE | استبعاد نوع حافة من جميع المسارات (قابل للتكرار) |
--corpus | تجاوز دليل مجموعة بيانات تعيين الحواف |
--environment, -e | JSON لحالة الهدف المُعلن من المشغّل (يعدّل الدرجات) |
--max-weight / --mean-weight | أوزان التسجيل (يجب أن يكون مجموعها 1.0) |
--default-noise | درجة لأنواع الحواف غير الموجودة في مجموعة البيانات (الافتراضي 60) |