كتابة وكيل الجوارب 5 العكسي في بوويرشيل.الجزء 1

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

صياغة المشكلة

أثناء حملات pentests وRedTeam، ليس من الممكن دائمًا استخدام الأدوات القياسية للعميل، مثل VPN وRDP وCitrix وما إلى ذلك. كمرساة للدخول إلى الشبكة الداخلية. في بعض الأماكن، تعمل شبكة VPN القياسية باستخدام MFA ويتم استخدام رمز الجهاز كعامل ثانٍ، وفي أماكن أخرى تتم مراقبتها بوحشية ويصبح تسجيل دخول VPN الخاص بنا مرئيًا على الفور، كما يقولون، بكل ما يتطلبه الأمر، ولكن في أماكن أخرى هناك ببساطة لا توجد مثل هذه الوسائل.

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

هناك عدة أنواع من أنفاق العودة هذه. وأشهرهم بالطبع المترجم. هناك أيضًا طلب كبير على أنفاق SSH مع إعادة توجيه المنفذ العكسي بين جماهير المتسللين. هناك الكثير من الوسائل لتنفيذ الأنفاق العكسية وقد تمت دراسة ووصف الكثير منها جيدًا.
بالطبع، من جانبهم، لا يقف مطورو الحلول الأمنية جانبًا ويكتشفون مثل هذه الإجراءات بنشاط.
على سبيل المثال، تم اكتشاف جلسات MSF بنجاح بواسطة IPS الحديثة من Cisco أو Positive Tech، ويمكن اكتشاف نفق SSH العكسي بواسطة أي جدار حماية عادي تقريبًا.

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

دعونا نحاول العثور على شيء مماثل أو اختراعه.

قبل اختراع أي شيء، نحتاج إلى فهم النتيجة التي نريد تحقيقها، ما هي الوظائف التي يجب أن تؤديها تنميتنا. ما هي متطلبات النفق حتى نتمكن من العمل في وضع التخفي الأقصى؟

من الواضح أن هذه المتطلبات قد تختلف اختلافًا كبيرًا في كل حالة، ولكن بناءً على الخبرة العملية، يمكن تحديد أهمها:

  • العمل على نظام التشغيل Windows-7-10. وبما أن معظم شبكات الشركات تستخدم نظام التشغيل Windows؛
  • يتصل العميل بالخادم عبر SSL لتجنب الاستماع الغبي باستخدام ips؛
  • عند الاتصال، يجب على العميل دعم العمل من خلال خادم وكيل بترخيص، لأنه في العديد من الشركات، يتم الوصول إلى الإنترنت من خلال وكيل. في الواقع، قد لا يعرف جهاز العميل أي شيء عنه، ويتم استخدام الوكيل في وضع شفاف. ولكن يجب علينا توفير مثل هذه الوظيفة؛
  • يجب أن يكون جزء العميل موجزًا ​​ومحمولًا؛
    من الواضح أنه للعمل داخل شبكة العميل، يمكنك تثبيت OpenVPN على جهاز العميل وإنشاء نفق كامل لخادمك (لحسن الحظ، يمكن لعملاء openvpn العمل من خلال وكيل). ولكن، أولاً، لن ينجح هذا دائمًا، لأننا قد لا نكون مسؤولين محليين هناك، وثانيًا، سوف يحدث الكثير من الضجيج لدرجة أن SIEM أو HIPS اللائق سوف "يتسلل إلينا" على الفور. من الناحية المثالية، يجب أن يكون عميلنا هو ما يسمى بالأمر المضمن، كما هو الحال على سبيل المثال، يتم تنفيذ العديد من قذائف bash، ويتم تشغيلها عبر سطر الأوامر، على سبيل المثال، عند تنفيذ الأوامر من ماكرو كلمة.
  • يجب أن يكون نفقنا متعدد الخيوط ويدعم العديد من الاتصالات في وقت واحد؛
  • يجب أن يتمتع اتصال خادم العميل بنوع من الترخيص بحيث يتم إنشاء النفق لعميلنا فقط، وليس لكل من يأتي إلى خادمنا على العنوان والمنفذ المحددين. من الناحية المثالية، يجب أن يتم فتح الصفحة المقصودة التي تحتوي على القطط أو الموضوعات المهنية المتعلقة بالنطاق الأصلي "لمستخدمي الطرف الثالث".
    على سبيل المثال، إذا كان العميل مؤسسة طبية، فبالنسبة لمسؤول أمن المعلومات الذي يقرر التحقق من المورد الذي وصل إليه موظف العيادة، أو صفحة تحتوي على منتجات صيدلانية، أو ويكيبيديا مع وصف للتشخيص، أو مدونة الدكتور كوماروفسكي، وما إلى ذلك . يجب أن تفتح.

تحليل الأدوات الموجودة

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

البحث على الإنترنت على Google (يبدو أننا نستخدم Google بشكل طبيعي)، وكذلك البحث على Github باستخدام الكلمات الرئيسية "reverse socks" لم يعطِ نتائج كثيرة. في الأساس، يتعلق الأمر كله ببناء أنفاق SSH مع إعادة توجيه المنفذ العكسي وكل ما يتعلق به. بالإضافة إلى أنفاق SSH، هناك العديد من الحلول:

github.com/klsecservices/rpivot
تنفيذ طويل الأمد للنفق العكسي من قبل العاملين في Kaspersky Lab. يوضح الاسم الغرض من هذا البرنامج النصي. تم تنفيذ النفق في Python 2.7، ويعمل في وضع النص الواضح (كما هو شائع الآن - مرحبًا RKN)

github.com/tonyseek/rsocks
تطبيق آخر في بايثون، أيضًا بنص واضح، ولكن مع المزيد من الإمكانيات. تمت كتابته كوحدة نمطية ويحتوي على واجهة برمجة التطبيقات (API) لدمج الحل في مشاريعك.

github.com/llkat/rsockstun
github.com/mis-team/rsockstun
الرابط الأول هو الإصدار الأصلي لتطبيق Reverse Sox في Golang (غير مدعوم من قبل المطور).
الرابط الثاني هو نسختنا مع ميزات إضافية، وأيضا في Golang. في نسختنا، قمنا بتطبيق SSL، والعمل من خلال وكيل مع ترخيص NTLM، وتفويض العميل، وصفحة مقصودة في حالة وجود كلمة مرور غير صحيحة (أو بالأحرى، إعادة التوجيه إلى الصفحة المقصودة)، ووضع متعدد الخيوط (أي عدة أشخاص يمكن أن يعمل مع النفق في نفس الوقت)، وهو نظام اختبار اتصال العميل لتحديد ما إذا كان على قيد الحياة أم لا.

github.com/jun7th/tsocks
تنفيذ العكسي من "أصدقائنا الصينيين" في بايثون. هناك، بالنسبة للكسول و"الخالد"، يوجد ثنائي جاهز (exe)، تم تجميعه بواسطة الصينيين وجاهز للاستخدام. هنا، وحده الله الصيني يعلم ما قد يحتويه هذا الثنائي إلى جانب الوظيفة الرئيسية، لذا استخدمه على مسؤوليتك الخاصة.

github.com/securesocketfunneling/ssf
مشروع مثير للاهتمام للغاية في لغة C++ لتنفيذ تطبيق Reverse Sox والمزيد. بالإضافة إلى النفق العكسي، يمكنه القيام بإعادة توجيه المنفذ، وإنشاء غلاف أوامر، وما إلى ذلك.

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

تعمل جميع الأدوات الموضحة أعلاه باستخدام تقنية مماثلة: يتم تشغيل وحدة ثنائية قابلة للتنفيذ معدة مسبقًا على جهاز داخل الشبكة، مما يؤدي إلى إنشاء اتصال مع خادم خارجي. يقوم الخادم بتشغيل خادم SOCKS4/5 الذي يقبل الاتصالات وينقلها إلى العميل.

عيب جميع الأدوات المذكورة أعلاه هو أنه يجب تثبيت Python أو Golang على جهاز العميل (هل سبق لك أن رأيت Python مثبتًا على أجهزة، على سبيل المثال، مدير شركة أو موظف في مكتب؟) يجب سحب الثنائي (في الواقع بيثون) إلى هذا الجهاز والبرنامج النصي في زجاجة واحدة) وتشغيل هذا الثنائي هناك بالفعل. ويعد تنزيل ملف exe ثم تشغيله بمثابة توقيع لبرنامج مكافحة فيروسات محلي أو HIPS.

بشكل عام، الاستنتاج يقترح نفسه - نحن بحاجة إلى حل بوويرشيل. الآن سوف تطير الطماطم نحونا - يقولون إن powershell مبتذل بالفعل، ويتم مراقبته، وحظره، وما إلى ذلك. وما إلى ذلك وهلم جرا. في الواقع، ليس في كل مكان. نعلن بمسؤولية. بالمناسبة، هناك الكثير من الطرق لتجاوز الحظر (هنا مرة أخرى توجد عبارة عصرية حول مرحبًا RKN 🙂)، بدءًا من إعادة تسمية powershell.exe الغبية -> cmdd.exe وانتهاءً بـ powerdll، وما إلى ذلك.

لنبدأ في الاختراع

من الواضح أننا سننظر أولاً إلى Google و... لن نجد أي شيء حول هذا الموضوع (إذا وجده شخص ما، فقم بنشر الروابط في التعليقات). هناك فقط تطبيق Socks5 على بوويرشيل، ولكن هذا هو الجوارب العادية "المباشرة"، والتي لديها عدد من عيوبها (سنتحدث عنها لاحقا). يمكنك، بالطبع، بحركة طفيفة من يدك، تحويلها إلى الاتجاه المعاكس، ولكن هذا سيكون فقط الجوارب ذات الخيط الواحد، وهو ليس ما نحتاجه تمامًا.

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

RSocksTun
إذًا كيف يعمل rsockstun؟

يعتمد تشغيل RsocksTun (المشار إليه فيما يلي باسم rs) على مكونين برمجيين - خادم Yamux وSocks5. خادم Socks5 هو خادم Socks5 محلي عادي، يعمل على العميل. ويتم توفير تعدد الاتصالات به (تذكر تعدد مؤشرات الترابط؟) باستخدام yamux (معدد آخر). يتيح لك هذا المخطط إطلاق العديد من خوادم SOCKS5 العميلة وتوزيع الاتصالات الخارجية عليها، وإعادة توجيهها من خلال اتصال TCP واحد (كما هو الحال في جهاز Meterpreter تقريبًا) من العميل إلى الخادم، وبالتالي تنفيذ وضع متعدد الخيوط، والذي بدونه لن نكون ببساطة قادرة على العمل بشكل كامل في الشبكات الداخلية.

جوهر كيفية عمل yamux هو أنه يقدم طبقة شبكة إضافية من التدفقات، وينفذها في شكل رأس 12 بايت لكل حزمة. (هنا نتعمد استخدام كلمة "دفق" بدلاً من خيط، حتى لا نخلط بين القارئ وبين دفق برنامج "خيط" - سنستخدم هذا المفهوم أيضًا في هذه المقالة). يحتوي رأس yamux على رقم الدفق، وإشارات تثبيت/إنهاء الدفق، وعدد البايتات المنقولة، وحجم نافذة النقل.

كتابة وكيل الجوارب 5 العكسي في بوويرشيل.الجزء 1

بالإضافة إلى تثبيت/إنهاء البث، يطبق yamux آلية استمرارية تسمح لك بمراقبة أداء قناة الاتصال المنشأة. يتم تكوين تشغيل آلية رسالة keeplive عند إنشاء جلسة Yamux. في الواقع، يوجد في الإعدادات معلمتان فقط: تمكين/تعطيل وتكرار إرسال الحزم في ثوانٍ. يمكن إرسال رسائل Keepalive بواسطة خادم yamux أو عميل yamux. عند تلقي رسالة استمرارية، يجب على الطرف البعيد الاستجابة لها عن طريق إرسال نفس معرف الرسالة (في الواقع رقم) الذي تلقاه. بشكل عام، Keepalive هو نفس الأمر ping، فقط لـ yamux.

يتم وصف تقنية تشغيل معدد الإرسال بالكامل: أنواع الحزم وإعداد الاتصال وعلامات الإنهاء وآلية نقل البيانات بالتفصيل في مواصفة إلى ياموكس.

خاتمة للجزء الأول

لذلك، في الجزء الأول من المقال، تعرفنا على بعض الأدوات لتنظيم الأنفاق العكسية، ونظرنا في مزاياها وعيوبها، ودرسنا آلية تشغيل مُضاعِف Yamux ووصفنا المتطلبات الأساسية لوحدة Powershell التي تم إنشاؤها حديثًا. في الجزء التالي، سنقوم بتطوير الوحدة نفسها، عمليًا من الصفر. يتبع. لا تبديل :)

المصدر: www.habr.com

إضافة تعليق