Powershell-da Reverse socks5 proksi-serverini yozish. 1-qism

3 qismdan iborat tadqiqot va ishlanmalar haqida hikoya. 1-qism kashfiyotdir.
Ko'p olxa daraxtlari bor - bundan ham ko'proq foyda.

Muammoni shakllantirish

Pentestlar va RedTeam kampaniyalari paytida VPN, RDP, Citrix va boshqalar kabi mijozning standart vositalaridan foydalanish har doim ham mumkin emas. ichki tarmoqqa kirish uchun langar sifatida. Ba'zi joylarda standart VPN TIV yordamida ishlaydi va ikkinchi omil sifatida apparat tokeni ishlatiladi, boshqalarida u shafqatsizlarcha nazorat qilinadi va bizning VPN-ga kirishimiz darhol ko'rinadi, ular aytganidek, hamma narsaga olib keladi, ammo boshqalarda mavjud. oddiygina bunday vositalar yo'q.

Bunday hollarda biz doimo "teskari tunnellar" deb ataladigan narsalarni qilishimiz kerak - ichki tarmoqdan tashqi resursga yoki biz boshqaradigan serverga ulanish. Bunday tunnel ichida biz allaqachon Mijozlarning ichki resurslari bilan ishlashimiz mumkin.

Ushbu qaytish tunnellarining bir nechta navlari mavjud. Ulardan eng mashhuri, albatta, Meterpreter. Portni teskari yo'naltiruvchi SSH tunnellari xakerlar ommasi orasida ham katta talabga ega. Teskari tunnellarni amalga oshirish uchun juda ko'p vositalar mavjud va ularning aksariyati yaxshi o'rganilgan va tavsiflangan.
Albatta, o'z navbatida, xavfsizlik echimlarini ishlab chiquvchilar chetda turmaydi va bunday harakatlarni faol ravishda aniqlaydi.
Masalan, MSF seanslari Cisco yoki Positive Tech-dan zamonaviy IPS tomonidan muvaffaqiyatli aniqlanadi va teskari SSH tunneli deyarli har qanday oddiy xavfsizlik devori tomonidan aniqlanishi mumkin.

Shuning uchun, yaxshi RedTeam kampaniyasida e'tibordan chetda qolish uchun biz nostandart vositalardan foydalangan holda teskari tunnel qurishimiz va tarmoqning haqiqiy ish rejimiga iloji boricha moslashishimiz kerak.

Keling, shunga o'xshash narsani topishga yoki ixtiro qilishga harakat qilaylik.

Biror narsani ixtiro qilishdan oldin, biz qanday natijaga erishmoqchi ekanligimizni, rivojlanishimiz qanday funktsiyalarni bajarishi kerakligini tushunishimiz kerak. Maksimal yashirin rejimda ishlashimiz uchun tunnelga qanday talablar qo'yiladi?

Har bir holat uchun bunday talablar juda farq qilishi aniq, ammo ish tajribasiga asoslanib, asosiylarini aniqlash mumkin:

  • Windows-7-10 operatsion tizimida ishlash. Aksariyat korporativ tarmoqlar Windows-dan foydalanganligi sababli;
  • mijoz ips yordamida ahmoqona tinglashni oldini olish uchun serverga SSL orqali ulanadi;
  • Ulanishda mijoz avtorizatsiya bilan proksi-server orqali ishlashni qo'llab-quvvatlashi kerak, chunki Ko'pgina kompaniyalarda Internetga kirish proksi-server orqali amalga oshiriladi. Aslida, mijoz mashinasi bu haqda hech narsa bilmasligi mumkin va proksi-server shaffof rejimda ishlatiladi. Lekin biz bunday funksionallikni ta'minlashimiz kerak;
  • mijoz qismi qisqa va ko'chma bo'lishi kerak;
    Mijoz tarmog'ida ishlash uchun siz OpenVPN-ni mijoz mashinasiga o'rnatishingiz va serveringizga to'liq tunnel yaratishingiz mumkin (xayriyatki, openvpn mijozlari proksi-server orqali ishlashi mumkin) aniq. Ammo, birinchidan, bu har doim ham ishlamaydi, chunki biz u erda mahalliy administrator bo'lmasligimiz mumkin, ikkinchidan, bu juda ko'p shovqin qiladiki, munosib SIEM yoki HIPS darhol bizni "qo'zg'atadi". Ideal holda, bizning mijozimiz "inline" buyrug'i deb ataladigan bo'lishi kerak, masalan, ko'plab bash qobiqlari amalga oshiriladi va buyruq qatori orqali ishga tushiriladi, masalan, so'z so'zidan buyruqlarni bajarishda.
  • bizning tunnelimiz ko'p tishli bo'lishi va bir vaqtning o'zida ko'plab ulanishlarni qo'llab-quvvatlashi kerak;
  • mijoz-server ulanishi qandaydir avtorizatsiyaga ega bo'lishi kerak, shunda tunnel faqat bizning mijozimiz uchun o'rnatiladi va serverimizga ko'rsatilgan manzil va portda kelgan har bir kishi uchun emas. Ideal holda, mushuklar yoki asl domen bilan bog'liq professional mavzular bilan ochilish sahifasi "uchinchi tomon foydalanuvchilari" uchun ochilishi kerak.
    Misol uchun, agar Buyurtmachi tibbiy tashkilot bo'lsa, u holda klinika xodimi kirgan resursni, farmatsevtika mahsulotlari bilan sahifani, tashxis tavsifi bilan Vikipediyani yoki doktor Komarovskiyning blogini va hokazolarni tekshirishga qaror qilgan axborot xavfsizligi ma'muri uchun. .ochilishi kerak.

Mavjud vositalarni tahlil qilish

O'z velosipedingizni ixtiro qilishdan oldin, siz mavjud velosipedlarni tahlil qilishingiz va bizga haqiqatan ham kerakmi yoki yo'qligini tushunishingiz kerak va, ehtimol, biz bunday funktsional velosipedga ehtiyoj haqida o'ylamaganmiz.

Internetda googling (biz odatdagidek google-ga o'xshaymiz), shuningdek, Github-da "teskari paypoq" kalit so'zlari yordamida qidiruv ko'p natijalar bermadi. Asosan, bularning barchasi portni teskari yo'naltirish va u bilan bog'liq bo'lgan barcha narsalar bilan ssh tunnellarini qurishga to'g'ri keladi. SSH tunnellaridan tashqari, bir nechta echimlar mavjud:

github.com/klsecservices/rpivot
Kasperskiy laboratoriyasidagi yigitlardan teskari tunnelning uzoq vaqtdan beri amalga oshirilishi. Ism ushbu skript nima uchun mo'ljallanganligini aniq ko'rsatib beradi. Python 2.7 da amalga oshirilgan tunnel aniq matn rejimida ishlaydi (hozir aytish moda - salom RKN)

github.com/tonyseek/rsocks
Python-da yana bir dastur, aniq matnda, lekin ko'proq imkoniyatlarga ega. U modul sifatida yozilgan va yechimni loyihalaringizga integratsiyalash uchun APIga ega.

github.com/llkat/rsockstun
github.com/mis-team/rsockstun
Birinchi havola Golang-da teskari soksni amalga oshirishning asl versiyasidir (ishlab chiquvchi tomonidan qo'llab-quvvatlanmaydi).
Ikkinchi havola - bu Golangda ham qo'shimcha funktsiyalar bilan bizning tahririmiz. Bizning versiyamizda biz SSL-ni joriy qildik, NTLM avtorizatsiyasi bilan proksi-server orqali ishladik, mijozda avtorizatsiya, noto'g'ri parol bo'lsa ochilish sahifasi (aniqrog'i, ochilish sahifasiga yo'naltirish), ko'p tarmoqli rejim (ya'ni bir nechta odam) tunnel bilan bir vaqtning o'zida ishlashi mumkin) , mijozning tirik yoki yo'qligini aniqlash uchun unga ping yuborish tizimi.

github.com/jun7th/tsoks
Python-da "xitoylik do'stlarimiz" dan teskari soksni amalga oshirish. U erda dangasa va "o'lmas" uchun xitoylar tomonidan yig'ilgan va foydalanishga tayyor bo'lgan tayyor binar (exe) mavjud. Bu erda, bu ikkilik asosiy funksiyadan tashqari yana nimani o'z ichiga olishi mumkinligini faqat Xitoy Xudosi biladi, shuning uchun o'zingizning xavf-xataringiz va xavfingiz ostida foydalaning.

github.com/securesocketfunneling/ssf
C++ da teskari sox va boshqalarni amalga oshirish uchun juda qiziqarli loyiha. Teskari tunnelga qo'shimcha ravishda u portni yo'naltirish, buyruq qobig'ini yaratish va hokazolarni amalga oshirishi mumkin.

MSF hisoblagichi
Bu erda, ular aytganidek, sharhlar yo'q. Ko'proq yoki kamroq ma'lumotga ega bo'lgan barcha xakerlar bu narsa bilan juda yaxshi tanish va uni xavfsizlik vositalari bilan qanchalik oson aniqlash mumkinligini tushunishadi.

Yuqorida tavsiflangan barcha vositalar shunga o'xshash texnologiya yordamida ishlaydi: tashqi server bilan ulanishni o'rnatadigan tarmoq ichidagi mashinada oldindan tayyorlangan bajariladigan ikkilik modul ishga tushiriladi. Server ulanishlarni qabul qiluvchi va ularni mijozga uzatuvchi SOCKS4/5 serverini ishga tushiradi.

Yuqoridagi barcha vositalarning kamchiliklari shundaki, Python yoki Golang mijoz mashinasiga o'rnatilishi kerak (masalan, kompaniya direktori yoki ofis xodimlarining mashinalarida Python o'rnatilganligini tez-tez ko'rganmisiz?) yoki oldindan yig'ilgan. ikkilik (aslida python) ushbu mashinaga va bitta shishadagi skriptga sudrab olinishi kerak va bu ikkilik faylni u erda ishga tushiring. Va exe faylini yuklab olish va keyin uni ishga tushirish ham mahalliy antivirus yoki HIPS uchun imzo.

Umuman olganda, xulosa o'zini ko'rsatadi - bizga powershell yechimi kerak. Endi pomidorlar bizga uchib ketishadi - ular aytishlaricha, powershell allaqachon buzilgan, u kuzatilgan, bloklangan va hokazo. va h.k. Aslida, hamma joyda emas. Biz mas'uliyat bilan e'lon qilamiz. Aytgancha, bloklashni chetlab o'tishning ko'plab usullari mavjud (bu erda yana salom RKN haqida moda iborasi bor 🙂), powershell.exe -> cmdd.exe nomini ahmoqona o'zgartirishdan boshlab va powerdll bilan tugaydigan va hokazo.

Keling, ixtiro qilishni boshlaylik

Avvalo biz Google-ga qarashimiz aniq va ... biz bu mavzu bo'yicha hech narsa topa olmaymiz (agar kimdir topsa, izohlarda havolalarni joylashtiring). Faqat bor amalga oshirish Powershell-da paypoq 5, lekin bu oddiy "to'g'ridan-to'g'ri" sox bo'lib, uning bir qator kamchiliklari bor (bular haqida keyinroq gaplashamiz). Siz, albatta, qo'lingizning engil harakati bilan uni teskarisiga aylantirishingiz mumkin, ammo bu faqat bitta ipli sox bo'ladi, bu bizga kerak bo'lgan narsa emas.

Shunday qilib, biz tayyor narsa topmadik, shuning uchun biz hali ham g'ildirakni qayta ixtiro qilishimiz kerak. Biz velosipedimiz uchun asos qilib olamiz bizning rivojlanishimiz Golang-da teskari soks va biz buning uchun mijozni powershell-da amalga oshiramiz.

RSocksTun
Xo'sh, rsockstun qanday ishlaydi?

RsocksTun (bundan buyon matnda rs deb yuritiladi) ishi ikkita dasturiy komponentga - Yamux va Socks5 serveriga asoslangan. Socks5 serveri oddiy mahalliy socks5 bo'lib, u mijozda ishlaydi. Va unga ulanishlarni multiplekslash (ko'p oqim haqida eslaysizmi?) Yamux () yordamida amalga oshiriladi.yana bir multipleksor). Ushbu sxema sizga bir nechta mijoz socks5 serverlarini ishga tushirish va ularga tashqi ulanishlarni tarqatish, ularni bitta TCP ulanishi orqali (deyarli meterpreterda bo'lgani kabi) mijozdan serverga yo'naltirish imkonini beradi va shu bilan ko'p tarmoqli rejimni amalga oshiradi, ularsiz biz shunchaki ishlamaymiz. ichki tarmoqlarda to'liq ishlashga qodir.

Yamux qanday ishlashining mohiyati shundaki, u har bir paket uchun 12 baytlik sarlavha ko'rinishida amalga oshiruvchi qo'shimcha tarmoqli oqim qatlamini taqdim etadi. (Bu erda biz o'quvchini dastur oqimi "ip" bilan aralashtirib yubormaslik uchun ip emas, balki ataylab "oqim" so'zidan foydalanamiz - biz ushbu maqolada ushbu tushunchadan ham foydalanamiz). Yamux sarlavhasida oqim raqami, oqimni o'rnatish/tugatish uchun bayroqlar, uzatilgan baytlar soni va uzatish oynasining o'lchami mavjud.

Powershell-da Reverse socks5 proksi-serverini yozish. 1-qism

Oqimni o'rnatish/to'xtatishdan tashqari, yamux o'rnatilgan aloqa kanalining ishlashini kuzatish imkonini beruvchi ushlab turish mexanizmini amalga oshiradi. Yamux seansini yaratishda jonli xabar mexanizmining ishlashi sozlangan. Aslida, sozlamalardan faqat ikkita parametr mavjud: yoqish/o'chirish va paketlarni soniyalarda yuborish chastotasi. Keepalive xabarlari Yamux serveri yoki Yamux mijozi tomonidan yuborilishi mumkin. Ehtiyotkorlik xabarini olayotganda, uzoq tomon o'zi qabul qilgan xabar identifikatorini (aslida raqam) yuborish orqali unga javob berishi kerak. Umuman olganda, keepalive bir xil ping, faqat yamux uchun.

Multiplekserning butun ishlash texnikasi: paket turlari, ulanishni sozlash va tugatish bayroqlari va ma'lumotlarni uzatish mexanizmi ushbu maqolada batafsil tavsiflangan. texnik xususiyatlar yamuxga.

Birinchi qismga xulosa

Shunday qilib, maqolaning birinchi qismida biz teskari tunnellarni tashkil qilish uchun ba'zi vositalar bilan tanishdik, ularning afzalliklari va kamchiliklarini ko'rib chiqdik, Yamux multipleksorining ishlash mexanizmini o'rgandik va yangi yaratilgan powershell moduliga qo'yiladigan asosiy talablarni tasvirlab berdik. Keyingi qismda biz modulning o'zini deyarli noldan ishlab chiqamiz. Davomi bor. O'zgartirmang :)

Manba: www.habr.com

a Izoh qo'shish