Pisanje Reverse socks5 proxyja u powershellu. 1. dio

Priča o istraživanju i razvoju u 3 dijela. Prvi dio je istraživački.
Ima mnogo bukovih stabala - još više koristi.

Formuliranje problema

Tijekom pentestova i RedTeam kampanja nije uvijek moguće koristiti kupčeve standardne alate, kao što su VPN, RDP, Citrix itd. kao sidro za ulazak u internu mrežu. Na nekim mjestima standardni VPN radi pomoću MFA-a, a hardverski token se koristi kao drugi faktor, na drugima se brutalno nadzire i naša VPN prijava odmah postaje vidljiva, kako kažu, sa svime što ona podrazumijeva, no na drugima postoje jednostavno nema takvih sredstava.

U takvim slučajevima stalno moramo praviti takozvane “obrnute tunele” - veze s interne mreže na vanjski resurs ili poslužitelj koji kontroliramo. Unutar takvog tunela već možemo raditi s unutarnjim resursima kupaca.

Postoji nekoliko varijanti ovih povratnih tunela. Najpoznatiji od njih je, naravno, Meterpreter. SSH tuneli s reverse port forwardingom također su u velikoj potražnji među hakerskim masama. Postoji dosta načina za implementaciju obrnutog tuneliranja i mnogi od njih su dobro proučeni i opisani.
Naravno, sa svoje strane, programeri sigurnosnih rješenja ne stoje po strani i aktivno otkrivaju takve radnje.
Na primjer, MSF sesije uspješno detektira moderni IPS tvrtke Cisco ili Positive Tech, a obrnuti SSH tunel može detektirati gotovo svaki normalni vatrozid.

Stoga, kako bismo ostali nezapaženi u dobroj RedTeam kampanji, moramo izgraditi obrnuti tunel koristeći nestandardna sredstva i prilagoditi se što je moguće bliže stvarnom načinu rada mreže.

Pokušajmo pronaći ili izmisliti nešto slično.

Prije nego što bilo što izmislimo, moramo razumjeti kakav rezultat želimo postići, koje bi funkcije naš razvoj trebao obavljati. Koji će biti zahtjevi za tunel kako bismo mogli raditi u maksimalnom stealth modu?

Jasno je da se za svaki slučaj takvi zahtjevi mogu uvelike razlikovati, ali na temelju radnog iskustva mogu se identificirati glavni:

  • rad na OS-u Windows-7-10. Budući da većina korporativnih mreža koristi Windows;
  • klijent se spaja na poslužitelj putem SSL-a kako bi se izbjeglo glupo slušanje korištenjem ips-a;
  • Prilikom povezivanja, klijent mora podržavati rad preko proxy poslužitelja s autorizacijom, jer U mnogim tvrtkama pristup Internetu odvija se putem proxyja. Zapravo, klijentsko računalo možda čak i ne zna ništa o tome, a proxy se koristi u transparentnom načinu rada. Ali moramo osigurati takvu funkcionalnost;
  • klijentski dio treba biti sažet i prenosiv;
    Jasno je da je za rad unutar mreže klijenta moguće instalirati na klijentsko računalo OpenVPN i postavite potpuni tunel do vašeg poslužitelja (srećom, OpenVPN klijenti mogu raditi putem proxyja). Ali, prvo, to neće uvijek funkcionirati, budući da možda nismo lokalni administratori, a drugo, stvorilo bi toliko buke da bi nas ugledni SIEM ili HIPS sustav odmah prijavio. Idealno bi bilo da naš klijent bude inline naredba, poput mnogih Bash školjki, i da se pokreće iz naredbenog retka, na primjer, prilikom izvršavanja naredbi iz Word makronaredbe.
  • naš tunel mora biti multi-threaded i podržavati mnogo veza istovremeno;
  • veza klijent-poslužitelj mora imati nekakvu autorizaciju kako bi se tunel uspostavio samo za našeg klijenta, a ne za sve koji dolaze na naš server na navedenu adresu i port. U idealnom slučaju, odredišna stranica s mačkama ili stručnim temama povezanim s izvornom domenom trebala bi se otvoriti za "korisnike treće strane".
    Na primjer, ako je kupac medicinska organizacija, tada za administratora informacijske sigurnosti koji odluči provjeriti resurs kojem je pristupio zaposlenik klinike, stranicu s farmaceutskim proizvodima, Wikipediju s opisom dijagnoze ili blog dr. Komarovskog itd. . treba otvoriti.

Analiza postojećih alata

Prije ponovnog izuma vlastitog bicikla potrebno je napraviti analizu postojećih bicikala i shvatiti treba li nam to doista, a vjerojatno nismo jedini koji su razmišljali o potrebi za takvim funkcionalnim biciklom.

Guglanje po internetu (čini se da guglamo normalno), kao i pretraživanje na Githubu pomoću ključnih riječi “obrnute čarape” nije dalo puno rezultata. Uglavnom, sve se svodi na izgradnju ssh tunela s reverse port forwardingom i svime što je povezano s tim. Osim SSH tunela, postoji nekoliko rješenja:

github.com/klsecservices/rpivot
Dugogodišnja implementacija obrnutog tunela od momaka iz Kaspersky Laba. Iz imena je jasno čemu je ova skripta namijenjena. Implementiran u Python 2.7, tunel radi u načinu čistog teksta (kako je sada moderno reći - pozdrav RKN)

github.com/tonyseek/rsocks
Još jedna implementacija u Pythonu, također u čistom tekstu, ali s više mogućnosti. Napisan je kao modul i ima API za integraciju rješenja u vaše projekte.

github.com/llkat/rsockstun
github.com/mis-team/rsockstun
Prva poveznica je izvorna verzija implementacije obrnutog soxa u Golangu (ne podržava programer).
Druga poveznica je naša revizija s dodatnim značajkama, također na Golangu. U našoj verziji implementirali smo SSL, rad preko proxyja s NTLM autorizacijom, autorizacijom na klijentu, odredišnu stranicu u slučaju netočne lozinke (odnosno preusmjeravanje na odredišnu stranicu), višenitni način rada (tj. nekoliko ljudi može raditi s tunelom u isto vrijeme), sustav pinganja klijenta kako bi se utvrdilo je li živ ili ne.

github.com/jun7th/tsocks
Implementacija obrnutog soxa od naših “kineskih prijatelja” u Pythonu. Tamo, za lijene i “besmrtne”, postoji gotova binarna datoteka (exe), koju su Kinezi sklopili i spremna za upotrebu. Ovdje samo kineski Bog zna što još ova binarna datoteka može sadržavati osim glavne funkcionalnosti, stoga koristite na vlastitu odgovornost i rizik.

github.com/securesocketfunneling/ssf
Prilično zanimljiv projekt u C++ za implementaciju obrnutog soxa i više. Osim obrnutog tunela, može raditi prosljeđivanje portova, kreirati naredbenu ljusku itd.

MSF meterpreter
Ovdje, kako kažu, nema komentara. Svi čak i više ili manje educirani hakeri itekako su upoznati s ovom stvarčicom i razumiju kako je lako detektiraju sigurnosni alati.

Svi gore opisani alati rade koristeći sličnu tehnologiju: unaprijed pripremljeni izvršni binarni modul pokreće se na stroju unutar mreže, koji uspostavlja vezu s vanjskim poslužiteljem. Poslužitelj pokreće SOCKS4/5 poslužitelj koji prihvaća veze i prosljeđuje ih klijentu.

Nedostatak svih gore navedenih alata je da se ili Python ili Golang moraju instalirati na klijentsko računalo (jeste li često viđali instaliran Python na strojevima npr. direktora tvrtke ili uredskih radnika?), ili već montiran binarni (zapravo python) mora se dovući na ovaj stroj i skripta u jednoj boci) i pokrenuti ovaj binarni već tamo. A preuzimanje exe i njegovo pokretanje također je potpis za lokalni antivirus ili HIPS.

Općenito, zaključak se nameće sam po sebi - trebamo powershell rješenje. Sada će rajčice letjeti na nas - kažu da je powershell već otrcan, nadziran je, blokiran itd. i tako dalje. Zapravo, ne svugdje. Izjavljujemo odgovorno. Usput, postoji mnogo načina za zaobilaženje blokiranja (ovdje opet postoji modna fraza o zdravo RKN 🙂), počevši od glupog preimenovanja powershell.exe -> cmdd.exe i završavajući s powerdll, itd.

Počnimo izmišljati

Jasno je da ćemo prvo potražiti na Googleu i… nećemo naći ništa na ovu temu (ako je netko pronašao neka postavi linkove u komentarima). Postoji samo izvršenje Socks5 na powershellu, ali ovo je obični "izravni" sox, koji ima niz svojih nedostataka (o njima ćemo kasnije). Možete ga, naravno, laganim pokretom ruke okrenuti u obrnuto, ali to će biti samo sox s jednom niti, što nam i nije baš ono što nam treba.

Dakle, nismo pronašli ništa gotovo, pa ćemo ipak morati ponovno izmisliti vlastiti kotač. Uzet ćemo kao osnovu za naš bicikl naš razvoj reverse sox u Golangu, a mi implementiramo klijenta za njega u powershell.

RSocksTun
Dakle, kako radi rsockstun?

Rad RsocksTun-a (u daljnjem tekstu rs) temelji se na dvije programske komponente - Yamux i Socks5 server. Socks5 poslužitelj je obični lokalni socks5, radi na klijentu. A multipleksiranje veza s njim (sjećate li se višenitnosti?) omogućeno je pomoću yamuxa (još jedan multipleksor). Ova shema vam omogućuje da pokrenete nekoliko klijentskih socks5 poslužitelja i distribuirate vanjske veze na njih, prosljeđujući ih kroz jednu TCP vezu (gotovo kao u meterpreteru) od klijenta do poslužitelja, čime se implementira višenitni način rada, bez kojeg jednostavno nećemo biti sposobni u potpunosti raditi u internim mrežama.

Bit načina na koji yamux radi je da uvodi dodatni mrežni sloj tokova, implementirajući ga u obliku 12-bajtnog zaglavlja za svaki paket. (Ovdje namjerno koristimo riječ "tok", a ne nit, kako ne bismo zbunili čitatelja s programskim tokom "nit" - također ćemo koristiti ovaj koncept u ovom članku). Zaglavlje yamuxa sadrži broj toka, zastavice za instaliranje/prekidanje toka, broj prenesenih bajtova i veličinu prozora prijenosa.

Pisanje Reverse socks5 proxyja u powershellu. 1. dio

Uz instaliranje/prekidanje toka, yamux implementira mehanizam za održavanje aktivnosti koji vam omogućuje praćenje performansi uspostavljenog komunikacijskog kanala. Rad mehanizma poruka keeplive konfigurira se prilikom kreiranja Yamux sesije. Zapravo, od postavki postoje samo dva parametra: omogućiti/onemogućiti i učestalost slanja paketa u sekundama. Keepalive poruke mogu slati yamux poslužitelj ili yamux klijent. Kada primi poruku za održavanje aktivnosti, udaljena strana mora na nju odgovoriti slanjem potpuno istog identifikatora poruke (zapravo broja) koji je primila. Općenito, keepalive je isti ping, samo za yamux.

Cijela tehnika rada multipleksera: tipovi paketa, postavljanje veze i zastavice za završetak te mehanizam prijenosa podataka detaljno su opisani u tehnički podaci na yamux.

Zaključak na prvi dio

Dakle, u prvom dijelu članka upoznali smo se s nekim alatima za organiziranje obrnutih tunela, pogledali njihove prednosti i nedostatke, proučili mehanizam rada Yamux multipleksera i opisali osnovne zahtjeve za novostvoreni modul powershell. U sljedećem dijelu ćemo razviti sam modul, praktički od nule. Nastavit će se. Ne mijenjaj :)

Izvor: www.habr.com

Kupite pouzdan hosting za stranice s DDoS zaštitom, VPS VDS poslužiteljima 🔥 Kupite pouzdan web hosting sa DDoS zaštitom, VPS VDS servere | ProHoster