قصة البحث والتطوير في 3 أجزاء. الجزء 1 - البحث.
هناك العديد من الزان - المزيد من الفوائد.
بيان المشكلة
أثناء إجراء حملات pentests و RedTeam ، لا يمكن دائمًا استخدام الوسائل المعتادة للعملاء ، مثل VPN ، RDP ، Citrix ، إلخ. كحل لإدخال الشبكة الداخلية. في مكان ما ، تعمل VPN بشكل منتظم وفقًا لـ MFA ويتم استخدام الرمز المميز للحديد كعامل ثانٍ ، في مكان ما تتم مراقبته بشدة ويصبح دخول VPN الخاص بنا مرئيًا على الفور ، كما يقولون - مع كل العواقب ، لكن في مكان ما لا توجد مثل هذه الوسائل.
في مثل هذه الحالات ، يجب دائمًا القيام بما يسمى "الأنفاق العكسية" - الاتصالات من الشبكة الداخلية إلى مورد خارجي أو الخادم الذي نتحكم فيه. داخل هذا النفق ، يمكننا بالفعل العمل مع الموارد الداخلية للعملاء.
هناك عدة أنواع من هذه الأنفاق العكسية. الأكثر شهرة منهم ، بالطبع ، هو متربرتر. كما أن أنفاق SSH مع توجيه المنافذ العكسي مطلوبة بشدة بين مجموعات المتسللين. هناك الكثير من أدوات النفق العكسي والكثير منها تمت دراستها ووصفها بشكل جيد.
بالطبع ، من جانبهم ، لا يقف مطورو الحلول الواقية ويكتشفون بنشاط مثل هذه الإجراءات.
على سبيل المثال ، تم اكتشاف جلسات MSF بنجاح بواسطة IPS الحديث من Cisco أو Positive Tech ، ويمكن اكتشاف نفق SSH العكسي بواسطة أي جدار حماية عادي تقريبًا أو أقل.
لذلك ، لكي لا نلحظ أي اهتمام في حملة RedTeam جيدة ، نحتاج إلى إنشاء نفق عكسي بوسائل غير قياسية والتكيف مع الوضع الحقيقي للشبكة قدر الإمكان.
دعنا نحاول إيجاد أو ابتكار شيء مشابه.
قبل أن تخترع شيئًا ما ، يجب أن تفهم النتيجة التي نريد أن نحققها ، وما هي الوظائف التي يجب أن يؤديها تطويرنا. ماذا ستكون متطلبات النفق حتى نتمكن من العمل في وضع التخفي الأقصى؟
من الواضح أنه بالنسبة لكل حالة ، يمكن أن تختلف هذه المتطلبات اختلافًا كبيرًا ، ولكن من التجربة يمكننا التمييز بين المتطلبات الرئيسية:
- العمل على نظام التشغيل ويندوز 7-10. لأن معظم شبكات الشركات تستخدم ويندوز ؛
- يتصل العميل بالخادم عبر SSL لمنع الاستماع الغبي باستخدام IPS ؛
- عند الاتصال ، يجب أن يدعم العميل العملية من خلال خادم وكيل بترخيص ، مثل العديد من الشركات الوصول إلى الإنترنت من خلال وكيل. في الواقع ، قد لا يعرف الجهاز العميل شيئًا عن ذلك ، ويتم استخدام الخادم الوكيل في وضع شفاف. ولكن يجب أن نضع هذه الوظيفة ؛
- يجب أن يكون الجزء العميل موجزا والمحمولة.
من الواضح أنه للعمل داخل شبكة العميل على جهاز العميل ، يمكنك تثبيت OpenVPN ورفع نفق كامل إلى خادمك (حيث يمكن لعملاء openvpn العمل من خلال الوكلاء). ولكن ، أولاً ، لا ينجح هذا دائمًا ، حيث أننا قد لا نكون مدراء محليين هناك ، وثانيًا ، سيكون هناك الكثير من الضجيج بحيث أن SIEM أو HIPS اللائق "سوف يطرقوننا على الفور". من الناحية المثالية ، يجب أن يكون عميلنا يسمى أمر مضمن ، على سبيل المثال ، يتم تنفيذ العديد من قذائف bash وتشغيلها من خلال سطر الأوامر ، على سبيل المثال ، عند تنفيذ الأوامر من ماكرو word. - يجب أن يكون لدينا نفق متعدد مؤشرات الترابط ودعم العديد من الاتصالات في نفس الوقت ؛
- يجب أن يكون لاتصال العميل - الخادم نوع من التفويض حتى يتم إنشاء النفق لعملائنا فقط ، وليس لكل من يأتي بخادمنا على العنوان والمنفذ المحددين. من الناحية المثالية ، بالنسبة إلى "مستخدمي الطرف الثالث" ، يجب فتح صفحة مقصودة بها أختام أو موضوعات مهنية متعلقة بالنطاق المصدر.
على سبيل المثال ، إذا كان العميل مؤسسة طبية ، فيجب فتح مسؤول أمن المعلومات الذي قرر التحقق من المورد الذي استخدمه موظف العيادة أو صفحة تحتوي على منتجات صيدلانية أو ويكيبيديا مع وصف للتشخيص أو مدونة للدكتور كوماروفسكي ، إلخ.
تحليل الأدوات الحالية
قبل اختراع دراجتك ، تحتاج إلى تحليل الدراجات الموجودة وفهم ما إذا كنا نحتاجها حقًا ، وربما ليس فقط فكرنا في الحاجة إلى مثل هذه الدراجة الوظيفية.
غوغلينغ على شبكة الإنترنت (يبدو أننا على ما يرام مع جوجل) ، وكذلك البحث في جيثب للكلمات الرئيسية "الجوارب العكسية" ، لم يعط الكثير من النتائج. في الأساس ، كل ذلك يعود إلى بناء أنفاق ssh مع إعادة توجيه المنفذ العكسي وكل ما يتعلق بها. بالإضافة إلى أنفاق SSH ، يمكن تمييز العديد من الحلول:
github.com/klsecservices/rpivotتطبيق قديم للنفق العكسي من اللاعبين من Kaspersky Lab. بالاسم ، من الواضح معنى هذا النص البرمجي. تم تنفيذه في Python 2.7 ، ويعمل النفق في وضع نص واضح (حيث من المألوف أن نقول الآن - مرحبًا بـ ILV)
github.com/tonyseek/rsocksتطبيق الثعبان الآخر هو أيضا في نص واضح ، ولكن هناك المزيد من الخيارات. إنه مكتوب كوحدة نمطية وهناك واجهة برمجة تطبيقات لدمج الحل في مشاريعك.
github.com/llkat/rsockstungithub.com/mis-team/rsockstunالرابط الأول هو الإصدار الأولي من تطبيق Sox العكسي على Golang (غير معتمد من قبل المطور).
الرابط الثاني هو بالفعل مراجعتنا مع رقائق إضافية ، وأيضا على golang. في إصدارنا ، قمنا بتطبيق طبقة المقابس الآمنة (SSL) ، من خلال وكيل باستخدام ترخيص NTLM ، إذن العميل ، صفحة مقصودة بها كلمة مرور غير صحيحة (أو بالأحرى إعادة توجيه إلى صفحة مقصودة) ، وضع متعدد الخيوط (أي يمكن أن يعمل العديد من الأشخاص مع النفق في نفس الوقت) ، نظام بينغ للعميل سواء كان حياً أم لا.
github.com/jun7th/tsocksعكس تنفيذ Sox من "أصدقائنا الصينيين" في الثعبان. هناك من أجل كسول و "خالد" تكمن في binar الجاهزة (exe) ، التي تم تجميعها من قبل الصينيين وجاهزة للاستخدام. هنا ، يعلم الإله الصيني فقط أنه يمكن أن يكون هناك أكثر من الوظيفة الرئيسية في هذا الثنائي ، لذلك استخدمه على مسؤوليتك الخاصة ومخاطرك.
github.com/securesocketfunneling/ssfمشروع C ++ مثير للاهتمام لتنفيذ الجوارب العكسية وأكثر من ذلك. بالإضافة إلى النفق العكسي ، يمكنه القيام بإعادة توجيه المنافذ وإنشاء قشرة أوامر وما إلى ذلك.
Msf meterpreterهنا ، كما يقولون ، لا تعليق. جميع المتسللين الأكثر أو الأقل تعليماً على دراية بهذا الشيء وفهموا مدى سهولة اكتشافه بواسطة معدات الحماية.
تعمل جميع الأدوات المذكورة أعلاه على تقنية مماثلة: على جهاز داخل الشبكة ، يتم إطلاق وحدة ثنائية قابلة للتنفيذ معدة مسبقًا ، والتي تنشئ اتصالًا بخادم خارجي. يبدأ الخادم خادم SOCKS4 / 5 ، الذي يقبل الاتصالات ويرجمها إلى العميل.
عيوب جميع الأدوات المذكورة أعلاه هي إما أن Python أو Golang مطلوب على جهاز العميل (هل رأيت في كثير من الأحيان Python مثبتًا على الأجهزة ، على سبيل المثال ، مديري الشركة أو عمال المكاتب؟) ، أو هل تحتاج إلى سحب binar مُجمَّع مسبقًا إلى هذا الجهاز (بالفعل python والبرنامج النصي في زجاجة واحدة) وتشغيل هذا binar بالفعل هناك. وتنزيل exe مع إطلاقه اللاحق هو أيضًا توقيع لمكافحة فيروسات أو HIPS محلي.
بشكل عام ، توحي الخاتمة نفسها - نحن بحاجة إلى حل على بوويرشيل. الآن سوف تطير إلينا الطماطم (البندورة) ، كما يقولون ، كل ذلك ، يتم مراقبتها ، حظرها ، إلخ. إلخ في الواقع - ليس في كل مكان. نعلن بمسؤولية. بالمناسبة ، هناك العديد من الطرق لتجاوز الأقفال (هنا مرة أخرى العبارة العصرية حول الترحيب بـ ILV :)) ، بدءًا من إعادة تسمية أغبياء powershell.exe -> cmdd.exe وتنتهي بـ powerdll ، إلخ.
البدء في اختراع
من الواضح أننا في البداية سنبحث في Google و ... لن نعثر على أي شيء في هذا الموضوع (إذا وجد شخص ما - ألقي روابط في التعليقات). لا يوجد سوى
تطبيق Socks5 على powerhell ، ولكن هذا هو Sox المعتاد "المباشر" ، والذي يحتوي على عدد من عيوبه (سنتحدث عنها لاحقًا). يمكنك بالطبع تحويلها إلى عكس مع نقرة من الرسغ ، لكنها ستكون مجرد سوكس ذو خيط واحد ، وهذا ليس بالضبط ما نحتاجه بالنسبة لنا.
لذلك ، لم نجد أي شيء جاهزًا ، لذلك لا يزال يتعين علينا اختراع دراجتنا. كأساس للدراجة لدينا ، نأخذ تطويرنا
من الجوارب العكسية على golang ، ونحن ننفذ العميل على بوويرشيل.
RSocksTunفكيف يعمل rsockstun؟
في قلب عمل RsocksTun (المشار إليها فيما يلي باسم rs) ، هناك مكونان من مكونات البرنامج - خادم Yamux و Socks5. خادم Socks5 هو socks5 محلي منتظم ، وهو يعمل على العميل. وتعدد إرسال الاتصالات به (تذكر حول multithreading؟) يتم توفيره باستخدام yamux (
بعد معدد آخر ). يسمح لك هذا المخطط بتشغيل العديد من خوادم socks5 العميل وتوزيع الاتصالات الخارجية عليها ، وإعادة توجيهها من خلال اتصال TCP واحد (مثل تقريبًا في مترتر) من العميل إلى الخادم ، وبالتالي تحقيق وضع متعدد الخيوط ، وبدون ذلك لا يمكننا العمل بالكامل في الداخل الشبكة.
يكمن جوهر yamux في أنه يقدم مستوى إضافيًا من التدفقات على الشبكة ، مما يجعله رأسًا من 12 بايت لكل حزمة. (هنا نستخدم كلمة "دفق" عن قصد ، وليس دفقًا ، حتى لا نخلط القارئ مع موضوع سلسلة "سلسلة" - هذا المفهوم سوف نستخدمه أيضًا في هذه المقالة). داخل رأس yamux يحتوي على رقم الدفق وعلامات إعداد / إنهاء الدفق وعدد البايتات المنقولة وحجم نافذة النقل.

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