الهجمات بين الثقة بين المجالات



عاجلاً أم آجلاً ، أثناء المكبوتة ، تنشأ المهمة المتمثلة في تسوية الغابة بأكملها - شريطة أن تكون هناك أي حقوق في أحد المجالات. في مثل هذه اللحظات ، يطرح الكثير من الأسئلة حول الصناديق ، وممتلكاتهم ، والهجمات بأنفسهم. دعونا نحاول معرفة كل شيء.

يتم استخدام الثقة بين المجالات لمصادقة مستخدمي مجال ما على وحدة تحكم مجال آخر. بمعنى آخر ، بحيث يمكن للمستخدمين من المجال A الوصول إلى موارد المجال B. يمكن أن يكون هيكل المجال من نوعين:

  • أشجار المجال
  • غابات المجال.



عند إنشاء شجرة المجالات بين المجالات ، يتم تأسيس علاقات ثقة متعدية بشكل افتراضي. جميع أجهزة الكمبيوتر مشتركة:

  • كتالوج عالمي
  • مساحة الاسم.
  • المخطط.

يمكن دمج أشجار المجال في الغابات. عند إنشاء مجموعة تفرعات مجال ، يتم إنشاء علاقات ثقة متعدية ، وتتشارك جميع أجهزة الكمبيوتر في المجموعة في ما يلي:

  • كتالوج عالمي
  • المخطط.

يوضح الجدول أدناه أنواع الثقة بين المجالات وخصائصها.

عددنوع الثقةTransitivityاتجاهآلية المصادقةوصف
1خارجيغير متعديةفي اتجاه واحد أو في اتجاهينNTLM فقطيتم تثبيتها بين المجالات التي تنتمي إلى غابات مختلفة ، أو مع مجال Windows NT 4.0.
2مملكةمتعدية أو غير متعديةفي اتجاه واحد أو في اتجاهينKerberos فقطمثبتة بين مجالات Windows وغير Windows باستخدام بروتوكول Kerberos. يمكن استخدام هذا النوع من الثقة لتوفير مصادقة شاملة على أنظمة Windows و UNIX.
3غابةمتعدفي اتجاه واحد أو في اتجاهينKerberos أو NTLMتعيين بين الغابات. في الوقت نفسه ، يقرر المسؤولون بأنفسهم ما إذا كانت العلاقة ثنائية أم أحادية الجانب.
4الاختصارمتعدفي اتجاه واحد أو في اتجاهينKerberos أو NTLMتعيين بين مجالات الأشجار المختلفة التي تنتمي إلى نفس الغابة. يستخدم لتقليل مسار الثقة ، وبالتالي زيادة كفاءة التفاعل بين المجالين.
5بين الوالدين والطفلمتعدفي اتجاهينKerberos أو NTLMيتم تثبيتها تلقائيًا عند إنشاء مجال جديد في الشجرة. داخل شجرة المجال ، يتم وصف العلاقات بواسطة مخطط الوالدين والطفل.
6الثقة شجرة الجذرمتعدفي اتجاهينKerberos أو NTLMيتم التثبيت تلقائيًا عند إنشاء شجرة مجال جديدة في مجموعة تفرعات موجودة. في الواقع ، يتم تأسيس الثقة بين مجال جذر الغابة والمجال الذي تم إنشاؤه ، والذي سيكون هو الجذر للشجرة الجديدة.

بشكل أكثر وضوحًا ، يتم توضيح أنواع علاقات الثقة بين المجالات في الصورة أدناه.



Transitivity (Transitivity)


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



يمكن استخدام الثقة غير التبادلية لرفض الثقة مع المجالات الأخرى.

الاتجاه (اتجاه)


مسار علاقة الثقة هو سلسلة من علاقات الثقة بين المجالات التي يجب تلقي طلبات المصادقة عليها. بمعنى آخر ، قبل مصادقة مستخدم ، يتم تحديد الثقة بين المجالات. بالنسبة لمستخدمي المجال A للوصول إلى موارد المجال D ، يجب أن يثق المجال D في المجال A.

اتجاه الثقة هو من نوعين:

  • واحد من جانب و.
  • ثنائية.

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

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

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

ارتباطات لمزيد من أنواع الثقة المتعمقة:


Kerberos بين المجالات الموثوقة


النظر في مثال. العميل يحاول الوصول إلى خادم.

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


تبدأ التغييرات من النقطة 4: تظهر بطاقة TGT بين النطاقات ، ما يسمى تذكرة الإحالة ، والتي يتم تشفيرها / توقيعها باستخدام مفتاح interm مجال تم إنشاؤه من كلمة مرور موثوق بها. يتم تعيين كلمة مرور موثوقة عند إنشاء الثقة ومعروفة لدى كل من وحدات التحكم بالمجال. باستخدام تذكرة TGT بين النطاقات ، يمكن لمستخدم المجال 1 طلب تذكرة TGS للوصول إلى موارد المجال 2.



NTLM بين المجالات الموثوقة




  1. يرسل العميل طلب المصادقة مباشرة إلى المورد نفسه ، الموجود في مجال آخر ، والذي يريد الوصول إليه.
  2. يستقبل الخادم طلبًا من العميل ويرسل إليه ردًا CHALLENGE_MESSAGE ، والذي يحتوي على تسلسل عشوائي من 8 بايت. يطلق عليه تحدي Server.
  3. يقوم العميل ، بعد تلقيه تسلسل Server Challenge من الخادم ، بتشفير هذا التسلسل بكلمة المرور الخاصة به ، ثم يرسل إلى الخادم استجابة تحتوي على 24 بايت.
  4. يرسل الخادم طلبًا واستجابة لوحدة التحكم في المجال ب.
  5. في حالة المصادقة بين الصناديق ، يتم تنفيذ المنطق التالي:

    • فحص علاقات الثقة الاتجاه.
      • يتم إرسال بيانات اعتماد العميل إلى المجال أ للمصادقة.
      • إذا لم تكن هناك علاقة ثقة ، يتم التحقق من الانتقائية باستخدام المجال أ.

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


    6-8. الجواب مع القرار بشأن مصادقة العميل.

    الهجمات بين الثقة بين المجالات


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

    قائمة الصناديق


    هناك 3 طرق رئيسية لإدراج قوائم الثقة في مجال:

    1. من خلال Win32 API ؛
    2. عبر طرق .NET.
    3. من خلال LDAP.

    Win32 API

    يتم تنفيذ التعداد عن طريق استدعاء الدالة DsEnumerateDomainTrusts ، والتي تُرجع البنية DS_DOMAIN_TRUSTSA . باستخدام هذه الطريقة ، يتم إرجاع SID و GUID للمجال الهدف والأعلام والسمات التي تميز الثقة الحالية في المجال.

    الأعلام
    DS_DOMAIN_DIRECT_INBOUNDتعداد المجالات التي تثق مباشرة في المجال الذي لديه اسم الخادم كعضو.
    DS_DOMAIN_DIRECT_OUTBOUNDتعداد المجالات الموثوق بها مباشرة من قبل المجال الذي لديه ServerName كعضو.
    DS_DOMAIN_IN_FORESTتعداد المجالات التي هي عضو في نفس المجال الأم الذي يحتوي على ServerName كعضو.
    DS_DOMAIN_NATIVE_MODEتعداد المجالات التي يعمل فيها المجال الأساسي في الوضع الأصلي لنظام التشغيل Windows 2000.
    DS_DOMAIN_PRIMARYتعداد المجالات التي هي المجال الأساسي للمجال الذي يحتوي على ServerName كعضو.
    DS_DOMAIN_TREE_ROOTتعداد المجالات الموجودة في جذر مجموعة التفرعات والتي لها اسم الخادم كعضو.


    سمات


    TRUST_ATTRIBUTE_NON_TRANSITIVEعدم السماح بالنقل.
    TRUST_ATTRIBUTE_UPLEVEL_ONLYارتباط الثقة غير صالح لأنظمة تشغيل العميل الأقدم من Windows 2000.
    TRUST_ATTRIBUTE_FILTER_SIDSمجالات الحجر الصحي.
    TRUST_ATTRIBUTE_FOREST_TRANSITIVEقد يحتوي رابط الثقة على معلومات ثقة المجموعة.
    TRUST_ATTRIBUTE_CROSS_ORGANIZATIONهذه الثقة إلى مجال / مجموعة تفرعات ليست جزءًا من هذا المشروع.
    TRUST_ATTRIBUTE_TREAT_AS_EXTERNALيتم التعامل مع الثقة على أنها خارجية لأغراض حدود الثقة.
    TRUST_ATTRIBUTE_WITHIN_FORESTالثقة داخلية لهذه الغابة.


    يقوم BloodHound بجمع المعلومات باستخدام طريقة Win32 API.



    صافي

    يتم استخدام الأسلوب GetCurrentDomain من مساحة الاسم [System.DirectoryServices.ActiveDirectory.Domain] ، والتي تُرجع مثيل فئة System.DirectoryServices.ActiveDirectory.Domain . تطبق هذه الفئة طريقة GetAllTrustRelationships ، والتي تُرجع كل علاقات الثقة للمجال الحالي.

    ([System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()).GetAllTrustRelationships() 

    باستخدام هذه الطريقة يتم تطبيقه في الوحدة النمطية Get-DomainTrust في PowerView .



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

    LDAP

    يتم تخزين معلومات ثقة المجال في "Active Directory" ككائن فئة للفئة trustDomain .

    مثال للاستخدام:

     dsquery * -filter "(objectClass=trustedDomain)" -attr * 



    يستخدم PowerView هذه الطريقة افتراضيًا.



    مع معلومات حول المجالات وأنواع الثقة ، يمكنك الانتقال مباشرة إلى الهجوم نفسه. النظر في 2 الخيارات:

    1. لقد نجحنا في اختراق المجال ، ولدينا حقوق مسؤول المجال.
    2. ليس لدينا حقوق مسؤول المجال.

    مع حقوق المسؤول إلى واحدة من المجالات


    بناءً على المجال الذي تم اختراقه ، يمكن تمييز عدة متجهات هجومية:


    عددبدء المجال موقف المهاجمنطاق الهجومتقنية الهجومعلاقة الثقة
    1جذرطفلGolden Ticket + Enterprise Admin Groupعالم بين (اتجاهين)
    2طفلطفلSID عملية التاريخبين الوالد والطفل بين الوالدين (في اتجاهين)
    3طفلجذرSID عملية التاريخ
    الثقة عملية التذاكر
    عالم-شجرة-الجذر (اتجاهين)
    4الغابة 1الغابة 2علة الطابعةالغابات بين المجالات أو الثقة الخارجية (اتجاهان)

    تجدر الإشارة إلى أنه من أجل التنفيذ الناجح لجميع المتجهات ، من الضروري وجود ثقة ثنائية بين المجالات.

    1. عملية SID التاريخ


    تم تقديم محفوظات SID لتسهيل ترحيل المستخدمين من مجال إلى آخر. تحتوي السمة على كائنات SID السابقة. في كل مرة ينتقل فيها كائن من مجال إلى آخر ، يتم إنشاء SID جديد ، يصبح كائن SID. تتم إضافة SID السابق إلى الخاصية sIDHistory.

    تحتوي كل مجموعة على مجموعة مستخدم Enterprise Admins موجودة فقط في مجال الجذر ولديها حقوق المسؤول المحلي على وحدات تحكم المجال لجميع المجالات التابعة في مجموعة التفرعات. ظهر هذا الهجوم لأول مرة من قِبل شون ميتكالف في BlackHat USA 2015 . جوهر الهجوم هو أننا نصدر تذكرة ذهبية مع إضافة SID إضافية لمجموعة Enterprise Admins. يتم ذلك عن طريق إضافة ExtraSids في البنية KERB_SID_AND_ATTRIBUTES ، والتي يتم إرسالها في البنية KERB_VALIDATION_INFO .



    الهجوم التجريبي:



    يحتوي Impacket على برنامج نصي يقوم بأتمتة كل هذا.

    2. Golden Ticket + Enterprise Admin Group


    امتلاك حقوق المسؤول في مجال الجذر ، يمكننا إنشاء تذكرة ذهبية بإضافة مستخدم إلى مجموعة Enterprise Admins (519).

     Kerberos::golden /domain:<domain> /sid:<domain_SID> /krbtgt:<ntlm_hash_krbtgt_user> /user:<user> /groups:500,501,513,512,520,518,519 /ptt 

    كما هو موضح أعلاه ، لدى Enterprise Admin حقوق المسؤول المحلي لنطاقات DC التابعة. وبالتالي ، سوف نكون قادرين على تسوية جميع مجالات الطفل في الغابة.

    3. تشغيل تذاكر الثقة


    للوصول إلى مورد باستخدام بروتوكول Kerberos ، فأنت بحاجة إلى بطاقة TGS ، والتي يتم تشفيرها بتجزئة NTLM لكلمة مرور حساب الخدمة. وحدة تحكم المجال تخزن فقط تجزئات كلمات مرور المستخدم الخاصة بمجالها ، لذلك عندما يحتاج مستخدم من المجال A إلى الوصول إلى مورد في المجال B ، يتم استخدام مفتاح المجال المشترك. يتم إنشاء هذا المفتاح على أساس كلمة مرور موثوق بها ، والتي يتم تعيينها عند إنشاء علاقات ثقة بين المجالات في نفس المجال الأم. في قاعدة بيانات كلمة المرور (NTDS.dit) على وحدة تحكم المجال ، يمكنك العثور على مستخدمين بعلامة $ في النهاية. يتم استخدام كلمة المرور الخاصة بهم أيضًا لإنشاء مفاتيح بين المجالين. لإنشاء تذكرة TGT بين المجالات ، نحتاج إلى كلمة مرور تجزئة لهذا الحساب.

     Kerberos::golden /user:<user> /domain:<domain> /sid:<sid_domain> /sids:<extra_sid_entrprice_admin_group_from _another_domain> /aes256:<aes256_trust_user_password> /service:krbtgt /target:<target_domain> /ptt 

    الهجوم التجريبي:



    الهجوم ذو صلة خاصة عندما لاحظت خدمة IS وجود تهديد وغيرت كلمة المرور krbtgt 2 مرات. في هذه الحالة ، سنكون قادرين على إنشاء تذاكر ذهبية باستخدام كلمة مرور موثوق بها بين المجالات.

    4. علة الطابعة


    يحتوي بروتوكول الطباعة عن بعد لـ Windows Print System (MS-RPRN) على تمكين الأسلوب RpcRemoteFindFirstPrinterChangeNotification (Ex) افتراضيًا ، مما يتيح لك فرض المصادقة على أي كمبيوتر يشغل خدمة Spooler على المضيف المحدد باستخدام بروتوكول Kerberos أو NTLM. في حالة c NTLM ، يمكننا تشغيل NTLM-relay ، أو البدء في كسر كلمة مرور الكمبيوتر (لم يتم التغلب عليها أبدًا). في حالة Kerberos ، هناك حاجة إلى جهاز خطر مع تفويض غير محدود. ثم يمكننا التقاط تذكرة TGT وتطوير هجوم.

    الهجوم التجريبي:



    يوضح الشكل أدناه الخطوات الموضحة في الفيديو.



    ليس لدينا حقوق مسؤول المجال


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



    من الميزات ، تجدر الإشارة إلى أنه يتم نسخ مجموعات AD Domain Local و AD Global بدون أعضاء المجموعة في الكتالوج العمومي ، ويتم نسخ مجموعات AD Universal مع المستخدمين.
    نظرًا للطريقة التي يتم بها تعداد المجموعات من خلال الكتالوج العمومي ، يمكن أن تختلف نتائج الوصلة الخلفية [أي أن البحث memb قد يختلف ، اعتمادًا على ما إذا كنت تبحث في الكتالوج العمومي (المنفذ 3268) أو المجال (المنفذ 389) ، نوع مجموعات ينتمي إليها المستخدم (مجموعات عمومية مقابل مجموعات المجال المحلية).
    في حالة عدم وجود حقوق مسؤول المجال ، نقوم بتعداد الكائنات. نحن مهتمون بـ:
    1. مستخدمو مجال آخر لديهم حقوق المسؤول المحلي على الأجهزة الموجودة في نطاقنا.
    2. مستخدمون من مجالات أخرى أعضاء في مجموعات مجال المستخدم. مجموعات تحتوي على مستخدمين من مجال آخر.
    3. مديري دوري أبطال آسيا

    1. مستخدمو مجال آخر لديهم حقوق المسؤول المحلي على الأجهزة في نطاقنا


    ابحث عن مستخدمين من مجال آخر هم المسؤولون المحليون على المضيفين في نطاقنا في BloodHound:

     MATCH (c:Computer) OPTIONAL MATCH p1 = (u1)-[:AdminTo]->(c) WHERE NOT u1.domain = c.domain WITH p1,c OPTIONAL MATCH p2 = (u2)-[:MemberOf*1..]->(:Group)-[:AdminTo]->(c) WHERE NOT u2.domain = c.domain RETURN p1,p2 



    القيادة في PowerView :

     Get-NetLocalGroupMember <server> 

    2. المستخدمين من المجالات الأخرى ، التي تتألف من مجموعات مجال المستخدم. مجموعات تحتوي على مستخدمين من مجال آخر


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

     Get-DomainGroup -Properties name, grouptype, member, DistinguishedName -LDAPFilter '(member=*)' -SearchBase "GC://jet.lab" 



    عند تنفيذ استعلام إلى الكتالوج العمومي ، نرى مجموعة Universal Group واحدة فقط مع نوع AD Universal من المجال one.jet.lab.

    إذا قمنا بتنفيذ استعلام LDAP المباشر على one.jet.lab ، فسنرى مجموعات أخرى من النوع AD Domain local و AD Global.



    من المهم مراعاة ذلك عند تعداد المستخدمين والمجموعات.

    الأوامر في PowerView :

     Get-DomainForeignUser -Domain <Domain> Get-DomainForeignGroupMember -Domain <Domain> 





    3. رؤساء دوري أبطال آسيا


    يمكن الوصول إلى واصف أمان ntSecurityDescriptor (https://docs.microsoft.com/en-us/windows/win32/adschema/a-ntsecuritydescriptor) لجميع المستخدمين من المجالات الموثوقة ويتم نسخه في الكتالوج العمومي. وبالتالي ، يمكننا الاستعلام عن جميع DACLs لجميع الكائنات في مجالات الثقة وتصفية المستخدمين من المجالات الأخرى.

     Get-DomainObjectAcl -Domain jet.lab -ResolveGuids | ?{$_.SecurityIdentifier -like 'SID_Domain*'} 



    لذلك ، تمكنا من تحديد المستخدم مايك من المجال forestc.lab ، الذي كان لديه حقوق للمجموعة العالمية في مجال jet.lab.

    يتم استخدام PS SID Filtering والمصادقة الانتقائية للحماية بين الغابات. أدى الهجوم بين الغابات باستخدام SID Filtering إلى تمكين dirkjan من مدونته . أيضًا في 9 يوليو ، أصدرت Microsoft تحديثًا يعطل تفويض TGT بين الغابات افتراضيًا. الآن كل شيء ، القصة مع تفويض غير محدود والتسوية من غابة واحدة من أخرى باستخدام بروتوكول Kerberos لم يعد يعمل.

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


All Articles