Pisanje Reverse socks5 proxy u powershell-u. 1. dio

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

Izjava o problemu

Tokom pentestova i RedTeam kampanja, nije uvijek moguće koristiti standardne alate Kupca, kao što su VPN, RDP, Citrix itd. kao sidro za ulazak u internu mrežu. Na nekim mjestima standardni VPN radi koristeći MFA i 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 podrazumijeva, ali na nekima postoje jednostavno nema takvih sredstava.

U takvim slučajevima stalno moramo praviti takozvane “obrnute tunele” – konekcije iz interne mreže na vanjski resurs ili server koji kontroliramo. Unutar takvog tunela već možemo raditi sa internim resursima kupaca.

Postoji nekoliko varijanti ovih povratnih tunela. Najpoznatiji od njih je, naravno, Meterpreter. SSH tuneli sa obrnutim prosljeđivanjem portova također su u velikoj potražnji među hakerskim masama. Postoji dosta sredstava za implementaciju obrnutog tuneliranja i mnoga od njih su dobro proučena i opisana.
Naravno, sa svoje strane, programeri sigurnosnih rješenja ne stoje po strani i aktivno otkrivaju takve radnje.
Na primjer, MSF sesije se uspješno otkrivaju modernim IPS-om kompanije Cisco ili Positive Tech, a obrnuti SSH tunel može biti otkriven skoro svakim normalnim zaštitnim zidom.

Stoga, da bismo ostali neprimijeć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 nešto izmislimo, moramo razumjeti koji rezultat želimo postići, koje funkcije naš razvoj treba da obavlja. Koji će biti zahtjevi za tunel da bismo mogli raditi u maksimalnom stealth modu?

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

  • rade na Windows-7-10 OS. Budući da većina korporativnih mreža koristi Windows;
  • klijent se povezuje na server preko SSL-a kako bi izbjegao glupo slušanje koristeći ips;
  • Prilikom povezivanja, klijent mora podržavati rad preko proxy servera sa autorizacijom, jer U mnogim kompanijama pristup internetu se odvija preko proxyja. U stvari, klijentska mašina možda čak i ne zna ništa o tome, a proxy se koristi u transparentnom režimu. Ali mi moramo pružiti takvu funkcionalnost;
  • klijentski dio treba da bude sažet i prenosiv;
    Jasno je da za rad unutar mreže klijenta možete instalirati OpenVPN na klijentskoj mašini i kreirati punopravni tunel do vašeg servera (na sreću, openvpn klijenti mogu raditi preko proxyja). Ali, kao prvo, to neće uvijek funkcionirati, jer tamo možda nismo lokalni admini, a drugo, napravit će toliku buku da će nas pristojan SIEM ili HIPS odmah „podbaciti“. U idealnom slučaju, naš klijent bi trebao biti takozvana inline naredba, jer se na primjer mnoge bash ljuske implementiraju i pokreću preko komandne linije, na primjer, kada se izvršavaju naredbe iz word makroa.
  • naš tunel mora biti višenitni i podržavati mnoge veze istovremeno;
  • veza klijent-server mora imati neku vrstu autorizacije kako bi se tunel uspostavio samo za našeg klijenta, a ne za sve koji dolaze na naš server na zadatu adresu i port. U idealnom slučaju, odredišna stranica s mačkama ili profesionalnim temama vezanim za originalnu domenu trebala bi se otvoriti za „korisnike trećih strana“.
    Na primjer, ako je Kupac medicinska organizacija, onda 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. Komarovsky, itd. Trebalo bi da se otvori.

Analiza postojećih alata

Prije nego što ponovo osmislite vlastiti bicikl, morate napraviti analizu postojećih bicikala i shvatiti da li nam je zaista potreban i vjerovatno nismo jedini koji su razmišljali o potrebi za takvim funkcionalnim biciklom.

Guglanje na internetu (izgleda da guglamo normalno), kao i pretraživanje na Githubu koristeći ključne riječi “obrnute čarape” nije dalo mnogo rezultata. U osnovi, sve se svodi na izgradnju ssh tunela s obrnutim prosljeđivanjem portova i svega š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 Lab-a. Ime jasno govori čemu je ova skripta namijenjena. Implementiran u Python 2.7, tunel radi u modu čistog teksta (kako je sada moderno reći - zdravo RKN)

github.com/tonyseek/rsocks
Još jedna implementacija u Python-u, također u čistom tekstu, ali sa 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 veza je originalna verzija reverse sox implementacije u Golangu (nije podržana od strane programera).
Druga veza je naša revizija sa dodatnim karakteristikama, takođe na Golangu. U našoj verziji implementirali smo SSL, rad preko proxyja sa NTLM autorizacijom, autorizaciju na klijentu, odredišnu stranicu u slučaju neispravne lozinke (tačnije, preusmjeravanje na odredišnu stranicu), multi-threaded mod (tj. nekoliko ljudi može raditi sa tunelom u isto vrijeme), sistem pingovanja klijenta kako bi se utvrdilo da li je živ ili ne.

github.com/jun7th/tsocks
Implementacija reverse sox-a 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 šta još ova binarna datoteka može sadržavati osim glavne funkcionalnosti, pa koristite na vlastitu odgovornost i rizik.

github.com/securesocketfunneling/ssf
Prilično zanimljiv projekat u C++ za implementaciju reverse sox-a i više. Osim obrnutog tunela, može raditi prosljeđivanje portova, kreirati komandnu ljusku itd.

MSF meterpreter
Ovdje, kako kažu, nema komentara. Svi čak i manje-više obrazovani hakeri su dobro upoznati s ovom stvari i razumiju kako se lako može otkriti sigurnosnim alatima.

Svi gore opisani alati rade koristeći sličnu tehnologiju: unaprijed pripremljeni izvršni binarni modul se pokreće na mašini unutar mreže, koja uspostavlja vezu sa eksternim serverom. Server pokreće SOCKS4/5 server koji prihvata veze i prenosi ih klijentu.

Nedostatak svih gore navedenih alata je u tome što se ili Python ili Golang moraju instalirati na klijentsku mašinu (da li ste često vidjeli Python instaliran na strojevima, na primjer, direktora kompanije ili uredskih radnika?), ili prethodno sastavljen binarni (zapravo python) se mora prevući na ovu mašinu i skriptu u jednoj boci) i pokrenuti ovu binarnu datoteku već tamo. A preuzimanje exe i zatim pokretanje istog je također potpis lokalnog antivirusa ili HIPS-a.

Općenito, zaključak se nameće sam od sebe - potrebno nam je powershell rješenje. Sada će paradajz letjeti na nas - kažu powershell je već sav hackneyed, nadgledan, blokiran itd. i tako dalje. U stvari, ne svuda. Izjavljujemo odgovorno. Inače, postoji mnogo načina da se zaobiđe blokiranje (ovdje je opet moderna fraza o zdravom RKN 🙂), počevši od glupog preimenovanja powershell.exe -> cmdd.exe i završavajući powerdll-om itd.

Počnimo da izmišljamo

Jasno je da ćemo prvo potražiti na Guglu i... nećemo naći ništa o ovoj temi (ako je neko našao, objavite linkove u komentarima). Postoji samo implementacija Socks5 na powershell-u, ali ovo je običan "direktni" sox, koji ima niz svojih nedostataka (o njima ćemo kasnije). Možete ga, naravno, laganim pokretom ruke pretvoriti u obrnuti, ali ovo će biti samo jednonitni sox, što nam i nije baš ono što nam treba.

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

RSocksTun
Pa kako radi rsockstun?

Rad RsocksTun-a (u daljem tekstu rs) zasniva se na dvije softverske komponente - Yamux i Socks5 server. Socks5 server je običan lokalni socks5, radi na klijentu. A multipleksiranje veza na njega (sjećate li se višenitnog rada?) je omogućeno pomoću yamuxa (još jedan multiplekser). Ova shema vam omogućava da pokrenete nekoliko klijentskih socks5 servera i distribuirate vanjske veze na njih, prosljeđujući ih preko jedne TCP veze (skoro kao u meterpreteru) od klijenta do servera, čime se implementira višenitni način rada, bez kojeg jednostavno nećemo biti sposoban da u potpunosti radi u internim mrežama.

Suština 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č "stream" umjesto nit, kako ne bismo zbunili čitaoca sa programskim streamom "thread" - ovaj koncept ćemo također koristiti u ovom članku). Yamux zaglavlje sadrži broj toka, zastavice za instaliranje/ukidanje toka, broj bajtova koji se prenose i veličinu prozora za prijenos.

Pisanje Reverse socks5 proxy u powershell-u. 1. dio

Pored instaliranja/ukidanja toka, yamux implementira mehanizam održavanja koji vam omogućava da nadgledate performanse uspostavljenog komunikacionog kanala. Rad mehanizma za održavanje poruka konfiguriše se prilikom kreiranja Yamux sesije. Zapravo, od podešavanja postoje samo dva parametra: omogući/onemogući i učestalost slanja paketa u sekundama. Keepalive poruke može slati yamux server ili yamux klijent. Prilikom primanja poruke o održavanju aktivnosti, udaljena strana mora odgovoriti na nju slanjem potpuno istog identifikatora poruke (zapravo broja) koji je primila. U principu, keepalive je isti ping, samo za yamux.

Cjelokupna tehnika rada multipleksera: tipovi paketa, postavljanje veze i zastavice za završetak, te mehanizam prijenosa podataka detaljno su opisani u specifikacije to yamux.

Zaključak za prvi dio

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

izvor: www.habr.com

Dodajte komentar