
تحديد مسارات الهجوم في BloodHound التي تكسر هيكل طبقات Active Directory الخاص بك.
تحديد مسارات الهجوم في بلدهاوند التي تخترق تسلسل الـ AD الخاص بك
إمبروهند هو تطبيق dotnet مستقل يعمل على نظام ويندوز x64 بواجهة رسومية. لاستخدام إمبروهند، يجب تشغيل SharpHound لجمع البيانات اللازمة من الـ AD. ثم تقوم برفع البيانات إلى تثبيت بلدهاوند الخاص بك. سيتصل إمبروهند بقاعدة بيانات Neo4j الأساسية لـ بلدهاوند. في إمبروهند، ستقوم بتصنيف الـ AD إلى مستويات (tiers) عبر هيكل الوحدات التنظيمية (OU)، وسيقوم إمبروهند بتحديد علاقات الـ AD التي تمكن كائنات الـ AD من اختراق كائن من مستوى أعلى (أقرب إلى الصفر) وحفظ انتهاكات التسلسل في ملف csv.
عرض إمبروهند في قرية الخصوم في مؤتمر DEF CON
1. إعداد قاعدة بيانات بلدهاوند الخاصة بك
جمع بيانات بلدهاوند باستخدام SharpHound في الـ AD الخاص بك
ملاحظة: سيؤدي ذلك إلى توليد ضوضاء في برنامج الحماية الخاص بك، ونظام SIEM، إلخ.
مثال: تشغيل SharpHound.exe من موجه الأوامر، جمع الكل (نعم، GPOLocalGroup غير مضمنة في "الكل"):
SharpHound.exe --CollectionMethods All,GPOLocalGroup
نصيحة 1: استخدم معامل
Domainلجمع البيانات من نطاقات أخرى في الغابة.
نصيحة 2: للحصول على المزيد من البيانات، استخدم طريقة جمع جلسات التكرار
رفع بيانات بلدهاوند الخاصة بك في واجهة بلدهاوند الرسومية
يوجد خلل في بلدهاوند يتسبب أحيانًا في تخطي ملف النطاق json عند رفع ملف zip لبيانات بلدهاوند. تحقق من إحصائيات قاعدة البيانات في بلدهاوند بعد رفع البيانات وتأكد من وجود كائنات النطاق.
2. تثبيت إضافة APOC لـ Neo4j (تمكن عمليات الرسم البياني الرائعة التي نحتاجها)
قم بتنزيل APOC الإصدار المطابق لإصدار Neo4j لديك (apoc-x.x.x.x-all.jar).
ابحث عن إصدار APOC المطابق لإصدار Neo4j في مصفوفة التوافق.
حاول تذكر أين قمت بتثبيت Neo4j وضع ملف APOC jar في: $NEO4J_HOME/plugins/
/var/lib/neo4j/قم بتحرير neo4j.conf في محرر النصوص المفضل لديك للسماح بالوصول غير المقيد إلى APOC عن طريق استبدال السطر:
#dbms.security.procedures.unrestricted=my.extensions.example,my.procedures.*
بـ
dbms.security.procedures.unrestricted=apoc.*
/etc/neo4j/neo4j.conf$NEO4J_HOME/conf/neo4j.confإذا كنت ترغب في تشغيل إمبروهند على مضيف و بلدهاوند على آخر، يجب عليك السماح بالاتصالات عن بُعد بقاعدة بيانات Neo4j على مضيف بلدهاوند. للقيام بذلك، قم بإزالة # من السطر
#dbms.default_listen_address=0.0.0.0فيneo4j.conf.
3. قم بتنزيل وتشغيل أحدث إصدار من ImproHound.exe في ويندوز (x64)
تأكد من أنه يمكنك تسجيل الدخول إلى قاعدة بيانات بلدهاوند باستخدام نفس بيانات الاعتماد التي تستخدمها في واجهة بلدهاوند الرسومية.

أدخل بيانات اعتماد قاعدة البيانات وقم بإنشاء اتصال. إنها نفس بيانات الاعتماد التي تستخدمها في واجهة بلدهاوند الرسومية.

يقوم إمبروهند بإنشاء تسمية 'TierX' على العقد في قاعدة بيانات بلدهاوند. إذا كنت قد استخدمت إمبروهند سابقًا مع قاعدة بيانات بلدهاوند هذه، فسيُطلب منك ما إذا كنت ترغب في المتابعة مع التسلسل الذي أنشأته بالفعل أو البدء من جديد.

يمنحك إمبروهند خيار تعيين 'التسلسل الافتراضي' والذي سيقوم بتعيين مديري النطاق في المستوى 0، ومستخدمي النطاق في المستوى 2، إلخ، أو تعيين جميع الكائنات في المستوى 2.

هذه هي الصفحة التي ستقوم فيها بتصنيف كائنات الـ AD إلى مستويات. تعرض النافذة هيكل الوحدة التنظيمية. كل كائن من كائنات الـ AD له قيمة مستوى يمكن زيادتها أو تقليلها باستخدام الأسهم.
تعيين الأطفال إلى مستوى
إذا قمت بتحديد نطاق أو حاوية AD، يمكنك النقر على 'تعيين الأطفال إلى مستوى' لتعيين جميع الأطفال (بشكل متكرر) إلى مستوى النطاق/الحاوية المحددة.
تعيين الأعضاء إلى مستوى
إذا قمت بتحديد مجموعة، يمكنك النقر على 'تعيين الأطفال إلى مستوى' لتعيين جميع الأعضاء (بشكل متكرر) إلى مستوى المجموعة المحددة.
تعيين مستوى لسياسات المجموعة (GPOs)
إذا قمت بالنقر على 'تعيين مستوى لسياسات المجموعة'، فسيتم تعيين كل سياسة مجموعة إلى مستوى الوحدة التنظيمية الأعلى مستوى (الأقرب إلى الصفر) التي ترتبط بها سياسة المجموعة. سياسات المجموعة غير المرتبطة بوحدة تنظيمية لن يتغير مستوىها.
الحصول على انتهاكات التسلسل
ابحث عن جميع العلاقات في قاعدة بيانات بلدهاوند حيث يمتلك كائن الـ AD السيطرة على كائن الـ AD من مستوى أعلى (أقرب إلى الصفر).
يتم إنشاء ملفي CSV كخرج:
adobjects-[timestamp].csv: جميع كائنات الـ AD والمستوى الذي تنتمي إليه.
tiering-violations-[timestamp].csv: انتهاكات التسلسل.
مثال على السجلات في ملف CSV الخاص بالانتهاكات:
السجل الأول هو حساب خدمة من المستوى 1 لديه صلاحية تغيير كلمة مرور حساب مستخدم من المستوى 0. العلاقة موروثة. لسوء الحظ، ليس من الممكن دائمًا رؤية من أين تم توريث العلاقة في بيانات بلدهاوند، ولكن يمكنك التحقق يدويًا من خلال فحص الصلاحيات على كائن الـ AD المستهدف في المستخدمين وأجهزة الكمبيوتر. السجل الثاني هو مجموعة لديها صلاحية تحرير سياسة مجموعة، والتي من المحتمل أن تكون مرتبطة بوحدة تنظيمية تحتوي على خوادم من المستوى 0 لأنها سياسة مجموعة من المستوى 0.
يمكنك الاطلاع على جميع أنواع العلاقات وكيفية استغلالها هنا.
إذا اكتشفت أن كائنًا ما في مستوى مرتفع جدًا (أقرب إلى الصفر)، يجب عليك تصحيحه في إمبروهند، ثم التحقق من وجود انتهاكات باستخدام هذا الكائن كمصدر (SOURCE). إذا كان الكائن في مستوى منخفض جدًا (أقرب إلى اللانهاية)، يجب عليك تصحيحه في إمبروهند والتحقق من وجود انتهاكات باستخدام الكائن كهدف (TARGET).
حذف التسلسل
سيتم حذف جميع تسميات المستويات والعقد التي أنشأها إمبروهند في قاعدة بيانات بلدهاوند.
من المهم تصنيف كائنات الـ AD بشكل صحيح. إذا قمت بتعيين وحدة تحكم النطاق ومستخدم عادي منخفض الامتياز ككائنات من المستوى 0، فلن يجد إمبروهند أن وصول المسؤول للمستخدم إلى وحدة تحكم النطاق يعد انتهاكًا للتسلسل. نفس الحالة إذا أضفت كليهما إلى المستوى 2.
يتم تصنيف أجهزة الكمبيوتر بناءً على مدى أهمية اختراقها.
يتم تصنيف المستخدمين بناءً على أجهزة الكمبيوتر التي يمكنهم تسجيل الدخول إليها وكائنات الـ AD التي يسيطرون عليها. مثال على صلاحية السيطرة يمكن أن يكون مستخدم لديه حقوق تحرير سياسات المجموعة المرتبطة بخوادم من المستوى 1، مما يجعله كائنًا من المستوى 1.
المجموعة تنتمي إلى أدنى مستوى (أقرب إلى اللانهاية) من أعضائها، ما لم تحتوي المجموعة على أعضاء سيئين، على سبيل المثال مستخدم عادي كعضو في مديري النطاق.
أمثلة: مستخدمو النطاق هم مجموعة من المستوى 2 حتى لو كان مستخدمو المستوى 0 الخاصون بك أعضاء في المجموعة لأن العضوية في مستخدمي النطاق هي التي تمنح المستخدمين الامتيازات. من ناحية أخرى، مجموعة مديري النطاق هي مجموعة من المستوى 0 لأن العضوية في هذه المجموعة تجعل المستخدمين مميزين جدًا. وحدات تحكم النطاق القابلة للاستنساخ ليس لديها امتيازات AD حسب علمي، ولكن يجب أن تحتوي فقط على كائنات من المستوى 0 أي وحدات تحكم النطاق، لذا فهي مجموعة من المستوى 0.
الحاوية تنتمي إلى أعلى مستوى (أقرب إلى الصفر) من كائناتها الفرعية، أو أعلى.
مثال: لديك جميع مستخدمي المستوى 0 والمستوى 1 والمستوى 2 في حاوية المستخدمين. المستخدم الذي لديه صلاحية تحكم كامل على حاوية المستخدمين سيكون قادرًا على اختراق جميع المستخدمين بما في ذلك مستخدمي المستوى 0 (باستثناء بعض المحميين ولكن هذا ليس مهمًا للمثال)، لذلك يجب أن تكون حاوية المستخدمين كائنًا من المستوى 0.
يتم تحديد مستوى سياسة المجموعة من خلال مستوى الوحدات التنظيمية المرتبطة بها. تنتمي سياسة المجموعة إلى أعلى مستوى (أقرب إلى الصفر) من الوحدات التنظيمية المرتبطة بها. استخدم زر 'تعيين مستوى لسياسات المجموعة' للتأكد من أن جميع سياسات المجموعة تتبع هذا المبدأ.
مثال: مستخدم لديه صلاحية تحرير سياسة مجموعة مرتبطة بوحدة تنظيمية من المستوى 1 سيكون قادرًا على التحكم في عضوية المسؤولين على جميع الخوادم الموجودة تحت الوحدة التنظيمية من المستوى 1 عن طريق تعديل سياسة المجموعة.
أعد تشغيل Neo4j
systemctl restart neo4jnet stop neo4j && net start neo4j (PowerShell: net stop neo4j; net start neo4j)| SourceTier | SourceType | SourceName | SourceDistinguishedname | Relation | IsInherited | TargetTier | TargetType | TargetName | TargetDistinguishedname |
|---|
| Tier1 | User | [email protected] | CN=svc-monitor,CN=Users,DC=hot,DC=local | ForceChangePassword | True | Tier0 | User | [email protected] | CN=T0_JBK,CN=Users,DC=hot,DC=local |
| Tier2 | Group | [email protected] | CN=Wrk-Admins,CN=Groups,DC=hot,DC=local | GenericWrite | Tier0 | GPO | [email protected] | CN={6AC1786C-016F-11D2-945F-00C04fB984F9},CN=Policies,CN=System,DC=hot,DC=local |