نوشتن Reverse socks5 proxy در powershell.Part 1

داستان تحقیق و توسعه در 3 قسمت. قسمت 1 اکتشافی است.
درختان راش زیادی وجود دارد - حتی مزایای بیشتری.

بیانیه مشکل

در طول کمپین‌های پنتست و RedTeam، همیشه نمی‌توان از ابزارهای استاندارد مشتری مانند VPN، RDP، Citrix و غیره استفاده کرد. به عنوان لنگر برای ورود به شبکه داخلی. در برخی جاها، یک VPN استاندارد با استفاده از MFA کار می کند و یک توکن سخت افزاری به عنوان عامل دوم استفاده می شود، در برخی دیگر به طرز وحشیانه ای نظارت می شود و ورود VPN ما بلافاصله، همانطور که می گویند، با تمام آنچه که مستلزم آن است، قابل مشاهده می شود، اما در برخی دیگر وجود دارد. به سادگی چنین وسیله ای وجود ندارد.

در چنین مواردی، ما دائماً مجبوریم به اصطلاح "تونل های معکوس" ایجاد کنیم - اتصالات از شبکه داخلی به یک منبع خارجی یا سروری که کنترل می کنیم. در داخل چنین تونلی، ما می توانیم با منابع داخلی مشتریان کار کنیم.

انواع مختلفی از این تونل های برگشت وجود دارد. معروف ترین آنها البته مترپرتر است. تونل های SSH با ارسال پورت معکوس نیز در میان توده هکرها تقاضای زیادی دارند. ابزارهای بسیار زیادی برای اجرای تونل زنی معکوس وجود دارد و بسیاری از آنها به خوبی مطالعه و تشریح شده اند.
البته، به نوبه خود، توسعه دهندگان راه حل های امنیتی کنار نمی آیند و فعالانه چنین اقداماتی را شناسایی می کنند.
به عنوان مثال، جلسات MSF با موفقیت توسط IPS مدرن سیسکو یا Positive Tech شناسایی می شوند و یک تونل SSH معکوس را می توان تقریباً توسط هر فایروال معمولی شناسایی کرد.

بنابراین، برای اینکه در یک کمپین خوب RedTeam مورد توجه قرار نگیریم، باید یک تونل معکوس با استفاده از ابزارهای غیر استاندارد بسازیم و تا حد امکان با حالت عملیاتی واقعی شبکه سازگار شویم.

بیایید سعی کنیم چیزی مشابه پیدا کنیم یا اختراع کنیم.

قبل از اختراع هر چیزی، باید بفهمیم که می خواهیم به چه نتیجه ای برسیم، توسعه ما چه کارکردهایی را باید انجام دهد. الزامات تونل چگونه خواهد بود تا بتوانیم در حالت حداکثر مخفی کار کنیم؟

واضح است که برای هر مورد چنین الزاماتی ممکن است بسیار متفاوت باشد، اما بر اساس تجربه کاری، می توان موارد اصلی را شناسایی کرد:

  • روی سیستم عامل Windows-7-10 کار کنید. از آنجایی که اکثر شبکه های شرکتی از ویندوز استفاده می کنند.
  • مشتری از طریق SSL به سرور متصل می شود تا از گوش دادن احمقانه با استفاده از IP جلوگیری کند.
  • هنگام اتصال، مشتری باید کار را از طریق یک سرور پروکسی با مجوز پشتیبانی کند، زیرا در بسیاری از شرکت ها، دسترسی به اینترنت از طریق یک پروکسی صورت می گیرد. در واقع، ماشین کلاینت ممکن است حتی چیزی در مورد آن نداند و پروکسی در حالت شفاف استفاده می شود. اما ما باید چنین عملکردی را ارائه دهیم.
  • قسمت مشتری باید مختصر و قابل حمل باشد.
    واضح است که برای کار در شبکه مشتری، می توانید OpenVPN را روی دستگاه مشتری نصب کنید و یک تونل کامل به سرور خود ایجاد کنید (خوشبختانه، مشتریان openvpn می توانند از طریق یک پروکسی کار کنند). اما، اولا، این همیشه کار نخواهد کرد، زیرا ممکن است ما ادمین های محلی در آنجا نباشیم، و ثانیا، آنقدر سر و صدا ایجاد می کند که یک SIEM یا HIPS مناسب بلافاصله ما را "دفع" می کند. در حالت ایده‌آل، کلاینت ما باید یک فرمان به اصطلاح درون خطی باشد، به عنوان مثال، بسیاری از پوسته‌های bash پیاده‌سازی می‌شوند و از طریق خط فرمان راه‌اندازی می‌شوند، برای مثال، هنگام اجرای دستورات از یک کلمه ماکرو.
  • تونل ما باید چند رشته ای باشد و چندین اتصال را به طور همزمان پشتیبانی کند.
  • اتصال کلاینت-سرور باید نوعی مجوز داشته باشد تا تونل فقط برای مشتری ما ایجاد شود و نه برای همه کسانی که در آدرس و پورت مشخص شده به سرور ما می آیند. در حالت ایده‌آل، صفحه فرود با گربه‌ها یا موضوعات حرفه‌ای مرتبط با دامنه اصلی باید برای «کاربران شخص ثالث» باز شود.
    به عنوان مثال، اگر مشتری یک سازمان پزشکی است، برای یک مدیر امنیت اطلاعات که تصمیم می گیرد منبعی را که کارمند کلینیک به آن دسترسی داشته است، صفحه ای با محصولات دارویی، ویکی پدیا با شرح تشخیص، یا وبلاگ دکتر کوماروفسکی و غیره بررسی کند. باید باز شود.

تجزیه و تحلیل ابزارهای موجود

قبل از اختراع مجدد دوچرخه خود، باید دوچرخه های موجود را تجزیه و تحلیل کنید و بفهمید که آیا واقعاً به آن نیاز داریم و احتمالاً ما تنها کسانی نیستیم که به نیاز به چنین دوچرخه کاربردی فکر کرده ایم.

جستجو در اینترنت (به نظر می رسد که ما معمولاً در گوگل جستجو می کنیم)، و همچنین جستجو در Github با استفاده از کلمات کلیدی "جوراب معکوس" نتایج زیادی به همراه نداشت. اساساً همه چیز به ساختن تونل‌های ssh با ارسال پورت معکوس و هر چیزی که به آن مرتبط است بازمی‌گردد. علاوه بر تونل های SSH، چندین راه حل وجود دارد:

github.com/klsecservices/rpivot
اجرای طولانی مدت یک تونل معکوس توسط بچه های آزمایشگاه کسپرسکی. نام مشخص می کند که این اسکریپت برای چه منظوری در نظر گرفته شده است. این تونل که در پایتون 2.7 پیاده‌سازی شده است، در حالت متن واضح کار می‌کند (همانطور که اکنون مد است - سلام RKN)

github.com/tonyseek/rsocks
پیاده سازی دیگری در پایتون، آن هم به صورت متن واضح، اما با امکانات بیشتر. به عنوان یک ماژول نوشته شده است و دارای یک API برای ادغام راه حل در پروژه های شما است.

github.com/llkat/rsocstun
github.com/mis-team/rsocstun
لینک اول نسخه اصلی اجرای معکوس sox در Golang است (توسط توسعه دهنده پشتیبانی نمی شود).
پیوند دوم بازبینی ما با ویژگی‌های اضافی است، همچنین در Golang. در نسخه خود، ما SSL را پیاده سازی کردیم، از طریق یک پروکسی با مجوز NTLM، مجوز روی مشتری، یک صفحه فرود در صورت رمز عبور نادرست (یا بهتر است بگوییم، تغییر مسیر به صفحه فرود)، حالت چند رشته ای (یعنی چندین نفر) کار کنیم. می تواند همزمان با تونل کار کند)، سیستمی برای پینگ کردن مشتری برای تعیین زنده بودن یا نبودن او.

github.com/jun7th/tsocks
اجرای سوکس معکوس از "دوستان چینی" ما در پایتون. در آنجا، برای تنبل ها و "جاودانه"، یک باینری آماده (exe) وجود دارد که توسط چینی ها مونتاژ شده و آماده استفاده است. در اینجا، فقط خدای چینی می داند که این باینری علاوه بر عملکرد اصلی چه چیز دیگری ممکن است داشته باشد، بنابراین با خطر و خطر خود استفاده کنید.

github.com/securesocketfunneling/ssf
یک پروژه بسیار جالب در C++ برای پیاده سازی سوکس معکوس و موارد دیگر. علاوه بر تونل معکوس، می تواند پورت فورواردینگ، ایجاد پوسته فرمان و غیره را انجام دهد.

مترفتر MSF
اینجا، همانطور که می گویند، هیچ نظری وجود ندارد. همه هکرهای حتی کم و بیش تحصیل کرده با این چیز بسیار آشنا هستند و درک می کنند که چگونه به راحتی توسط ابزارهای امنیتی قابل شناسایی است.

همه ابزارهایی که در بالا توضیح داده شد با استفاده از فناوری مشابهی کار می کنند: یک ماژول باینری اجرایی از پیش آماده شده روی ماشینی در داخل شبکه راه اندازی می شود که با یک سرور خارجی ارتباط برقرار می کند. سرور یک سرور SOCKS4/5 را اجرا می کند که اتصالات را می پذیرد و آنها را به مشتری ارسال می کند.

عیب همه ابزارهای بالا این است که باید پایتون یا گلانگ روی ماشین کلاینت نصب شود (آیا اغلب پایتون را روی ماشین‌های مثلاً یک مدیر شرکت یا کارمندان دفتر نصب کرده‌اید؟) یا یک دستگاه از پیش مونتاژ شده است. باینری (در واقع پایتون) باید روی این ماشین و اسکریپت در یک بطری کشیده شود) و این باینری را از قبل در آنجا اجرا کنید. و دانلود exe و سپس راه اندازی آن نیز امضای یک آنتی ویروس محلی یا HIPS است.

به طور کلی، نتیجه گیری خود را نشان می دهد - ما به یک راه حل powershell نیاز داریم. اکنون گوجه‌فرنگی‌ها به سمت ما پرواز خواهند کرد - آنها می‌گویند که powershell در حال حاضر کاملاً هک شده است، نظارت شده است، مسدود شده است و غیره. و غیره در واقع، نه همه جا. ما با مسئولیت اعلام می کنیم. به هر حال، راه‌های زیادی برای دور زدن مسدود کردن وجود دارد (در اینجا دوباره یک عبارت شیک در مورد سلام RKN وجود دارد) از تغییر نام احمقانه powershell.exe -> cmdd.exe و پایان دادن به powerdll و غیره شروع می‌شود.

بیایید شروع به اختراع کنیم

واضح است که ابتدا در گوگل جستجو می کنیم و ... چیزی در مورد این موضوع پیدا نمی کنیم (اگر کسی آن را پیدا کرده است، لینک ها را در نظرات ارسال کنید). فقط وجود دارد پیاده سازی Socks5 در powershell، اما این یک sox معمولی "مستقیم" است که تعدادی از معایب خاص خود را دارد (ما بعداً در مورد آنها صحبت خواهیم کرد). البته می‌توانید با یک حرکت کوچک دستتان آن را به سمت معکوس تبدیل کنید، اما این فقط یک سوکس تک رشته‌ای خواهد بود که کاملاً آن چیزی نیست که ما برای ما نیاز داریم.

بنابراین، ما هیچ چیز آماده ای پیدا نکردیم، بنابراین هنوز باید چرخ خود را دوباره اختراع کنیم. ما به عنوان پایه ای برای دوچرخه خود خواهیم گرفت توسعه ما معکوس sox در Golang، و ما یک کلاینت برای آن در powershell پیاده سازی می کنیم.

RSocksTun
بنابراین چگونه rsocstun کار می کند؟

عملکرد RsocksTun (از این پس به عنوان rs نامیده می شود) بر اساس دو جزء نرم افزاری است - سرور Yamux و Socks5. سرور Socks5 یک socks5 محلی معمولی است که روی کلاینت اجرا می شود. و مالتی پلکس کردن اتصالات به آن (در مورد چند رشته ای به خاطر دارید؟) با استفاده از yamux (یک مالتی پلکسر دیگر). این طرح به شما امکان می دهد چندین سرور کلاینت socks5 را راه اندازی کنید و اتصالات خارجی را به آنها توزیع کنید، آنها را از طریق یک اتصال TCP (تقریباً مانند مترپرتر) از مشتری به سرور منتقل کنید، در نتیجه یک حالت چند رشته ای را پیاده سازی کنید، بدون آن ما به سادگی نخواهیم بود. می تواند به طور کامل در شبکه های داخلی کار کند.

ماهیت نحوه عملکرد yamux این است که یک لایه شبکه اضافی از جریان ها را معرفی می کند و آن را در قالب یک هدر 12 بایتی برای هر بسته پیاده سازی می کند. (در اینجا ما عمداً از کلمه "stream" به جای thread استفاده می کنیم تا خواننده را با جریان برنامه "thread" اشتباه نگیریم - در این مقاله از این مفهوم نیز استفاده خواهیم کرد). هدر yamux شامل شماره جریان، پرچم‌هایی برای نصب/خاتمه جریان، تعداد بایت‌های منتقل شده و اندازه پنجره انتقال است.

نوشتن Reverse socks5 proxy در powershell.Part 1

علاوه بر نصب/خاتمه یک جریان، yamux یک مکانیسم نگهدارنده را پیاده سازی می کند که به شما امکان می دهد عملکرد کانال ارتباطی ایجاد شده را نظارت کنید. عملکرد مکانیسم پیام Keeplive هنگام ایجاد یک جلسه Yamux پیکربندی می شود. در واقع، از تنظیمات تنها دو پارامتر وجود دارد: فعال/غیرفعال کردن و فرکانس ارسال بسته ها در ثانیه. پیام‌های Keepalive را می‌توان توسط سرور یاموکس یا کلاینت یاموکس ارسال کرد. هنگام دریافت پیام نگهدارنده، طرف راه دور باید با ارسال دقیقاً همان شناسه پیام (در واقع یک عدد) که دریافت کرده است، به آن پاسخ دهد. کلا Kealive همون پینگ هست فقط برای yamux.

کل تکنیک عملکرد مالتی پلکسر: انواع بسته ها، راه اندازی اتصال و پرچم های خاتمه، و مکانیسم انتقال داده به تفصیل در مشخصات فنی به یاموکس

نتیجه گیری قسمت اول

بنابراین، در قسمت اول مقاله، با برخی از ابزارهای سازماندهی تونل های معکوس آشنا شدیم، مزایا و معایب آنها را بررسی کردیم، مکانیسم عملکرد مالتی پلکسر Yamux را مطالعه کردیم و الزامات اساسی ماژول پاورشل جدید ایجاد شده را شرح دادیم. در قسمت بعدی ما خود ماژول را عملاً از ابتدا توسعه خواهیم داد. ادامه دارد. عوض نکن :)

منبع: www.habr.com

اضافه کردن نظر