Kirjutame Powershellile Reverse socks5 puhverserveri. 1. osa

Lugu teadus- ja arendustegevusest 3 osas. 1. osa on uurimuslik.
Seal on palju pöökpuid - veelgi rohkem kasu.

Probleemi avaldus

Pentestide ja RedTeami kampaaniate ajal ei ole alati võimalik kasutada Kliendi standardseid tööriistu, nagu VPN, RDP, Citrix jne. sisevõrku sisenemise ankruna. Mõnes kohas töötab tavaline VPN MFA abil ja teise tegurina kasutatakse riistvara tokenit, teisal jälgitakse seda jõhkralt ja meie VPN-i sisselogimine muutub kohe nähtavaks, nagu öeldakse, koos kõige sellega kaasnevaga, kuid mõnes kohas on selliseid vahendeid lihtsalt pole.

Sellistel juhtudel peame pidevalt tegema nn pöördtunneleid – ühendusi sisevõrgust välise ressursi või meie poolt juhitava serveriga. Sellise tunneli sees saame juba töötada klientide sisemiste ressurssidega.

Neid tagasivoolutunneleid on mitut sorti. Tuntuim neist on muidugi Meterpreter. Häkkerite hulgas on suur nõudlus ka pöördpordi suunamisega SSH tunnelite järele. Tagurpidi tunneldamise rakendamiseks on üsna palju vahendeid ja paljud neist on hästi uuritud ja kirjeldatud.
Loomulikult ei jää turvalahenduste arendajad omalt poolt kõrvale ja tuvastavad selliseid tegevusi aktiivselt.
Näiteks Cisco või Positive Techi moodne IPS tuvastab edukalt MSF-i seansse ning vastupidise SSH tunneli saab tuvastada peaaegu iga tavalise tulemüüriga.

Seetõttu peame heas RedTeami kampaanias märkamatuks jäämiseks ehitama mittestandardseid vahendeid kasutades pöördtunneli ja kohanema võimalikult täpselt võrgu reaalse töörežiimiga.

Proovime midagi sarnast leida või välja mõelda.

Enne millegi väljamõtlemist peame aru saama, millist tulemust tahame saavutada, milliseid funktsioone peaks meie areng täitma. Millised on nõuded tunnelile, et saaksime töötada maksimaalses vargusrežiimis?

On selge, et iga juhtumi puhul võivad sellised nõuded oluliselt erineda, kuid töökogemuse põhjal saab välja tuua peamised:

  • töötab operatsioonisüsteemis Windows-7-10. Kuna enamik ettevõtte võrke kasutab Windowsi;
  • klient loob ühenduse serveriga SSL-i kaudu, et vältida ips-i abil rumalat kuulamist;
  • Ühenduse loomisel peab klient toetama tööd volitusega puhverserveri kaudu, sest Paljudes ettevõtetes toimub juurdepääs Internetile puhverserveri kaudu. Tegelikult ei pruugi klientmasin sellest isegi midagi teada ja puhverserverit kasutatakse läbipaistvas režiimis. Kuid me peame pakkuma sellist funktsiooni;
  • kliendiosa peaks olema lühike ja kaasaskantav;
    On selge, et kliendi võrgus töötamiseks saate OpenVPN-i klientmasinasse installida ja oma serverisse täisväärtusliku tunneli luua (õnneks saavad openvpn-i kliendid töötada puhverserveri kaudu). Kuid esiteks see alati ei tööta, kuna me ei pruugi seal kohalikud administraatorid olla, ja teiseks teeb see nii palju müra, et korralik SIEM või HIPS lööb meid kohe kallale. Ideaalis peaks meie klient olema nn inline käsk, kuna näiteks paljud bash-shellid on realiseeritud ja käivitatud käsurea kaudu, näiteks kui käivitada käske sõna makrost.
  • meie tunnel peab olema mitme keermega ja toetama korraga paljusid ühendusi;
  • klient-server ühendusel peab olema mingisugune volitus, et tunnel rajataks ainult meie kliendile, mitte kõigile, kes tulevad meie serverisse määratud aadressil ja pordis. Ideaalis peaks kasside või algse domeeniga seotud professionaalsete teemade sihtleht avanema "kolmanda osapoole kasutajatele".
    Näiteks kui Klient on meditsiiniorganisatsioon, siis infoturbe administraatori jaoks, kes otsustab kontrollida ressurssi, millele kliiniku töötaja ligi pääses, farmaatsiatoodete lehte, Vikipeediat diagnoosi kirjeldusega või dr Komarovski ajaveebi jne. peaks avanema.

Olemasolevate tööriistade analüüs

Enne oma jalgratta taasleiutamist tuleb teha olemasolevate jalgrataste analüüs ja aru saada, kas meil on seda tõesti vaja ja ilmselt pole me ainsad, kes sellise funktsionaalse jalgratta vajalikkusele mõelnud.

Internetis guugeldamine (paistame, et guugeldame tavaliselt), samuti Githubist otsimine märksõnade “reverse socks” abil ei andnud kuigi palju tulemusi. Põhimõtteliselt taandub kõik ssh-tunnelite ehitamisele koos pöördpordi edastamisega ja kõige sellega, mis sellega seotud. Lisaks SSH tunnelitele on mitmeid lahendusi:

github.com/klsecservices/rpivot
Kaspersky Labi meeste pikaajaline pöördtunneli rakendamine. Nimest selgub, milleks see skript on mõeldud. Python 2.7-s rakendatud tunnel töötab selgetekstirežiimis (nagu praegu on moes öelda - tere RKN)

github.com/tonyseek/rsocks
Teine rakendus Pythonis, samuti selgetekstis, kuid rohkemate võimalustega. See on kirjutatud moodulina ja sellel on API lahenduse integreerimiseks teie projektidesse.

github.com/llkat/rsockstun
github.com/mis-team/rsockstun
Esimene link on Golangi vastupidise sox-rakenduse algversioon (arendaja seda ei toeta).
Teine link on meie redaktsioon koos lisafunktsioonidega, ka Golangis. Meie versioonis rakendasime SSL-i, töötame läbi NTLM-i autoriseerimisega puhverserveri, kliendi autoriseerimise, vale parooli korral sihtlehe (või pigem suunasime sihtlehele), mitme lõimega režiimi (st mitu inimest). saab samaaegselt töötada tunneliga) , kliendi pingimise süsteem, et teha kindlaks, kas ta on elus või mitte.

github.com/jun7th/tsocks
Reverse Soxi rakendamine meie "hiina sõpradelt" Pythonis. Seal on laiskade ja “surematute” jaoks valmis kahendfail (exe), mille on kokku pannud hiinlased ja mis on kasutusvalmis. Siin teab ainult Hiina jumal, mida see kahendfail lisaks põhifunktsioonidele veel sisaldada võib, nii et kasutage seda omal ohul ja riskil.

github.com/securesocketfunneling/ssf
Päris huvitav projekt C++ keeles reverse Soxi ja muu juurutamiseks. Lisaks pöördtunnelile saab sellega teha pordi suunamist, luua käsukesta jne.

MSF arvesti
Siin, nagu öeldakse, pole kommentaare. Kõik isegi rohkem või vähem haritud häkkerid on selle asjaga väga kursis ja mõistavad, kui kergesti seda turvatööriistad tuvastavad.

Kõik ülalkirjeldatud tööriistad töötavad sarnase tehnoloogia abil: võrgusiseses masinas käivitatakse eelnevalt ettevalmistatud käivitatav binaarmoodul, mis loob ühenduse välise serveriga. Serveris töötab SOCKS4/5 server, mis aktsepteerib ühendusi ja edastab need kliendile.

Kõigi ülaltoodud tööriistade miinuseks on see, et klientmasinasse tuleb installida kas Python või Golang (kas olete sageli näinud Pythonit paigaldatuna näiteks ettevõtte direktori või kontoritöötajate masinatele?), või eelmonteeritud binaar (tegelikult python) tuleb sellesse masinasse tirida ja skript ühes pudelis) ja see binaar juba seal käivitada. Ja exe-faili allalaadimine ja seejärel käivitamine on ka kohaliku viirusetõrje või HIPS-i signatuur.

Üldiselt viitab järeldus iseenesest – vajame powershelli lahendust. Nüüd lendavad tomatid meile vastu – öeldakse, et powershell on juba hakitud, seda jälgitakse, blokeeritakse jne. ja nii edasi. Tegelikult mitte igal pool. Me deklareerime vastutustundlikult. Muide, blokeerimisest mööda hiilimiseks on palju võimalusi (siin on jälle moekas fraas tere RKN-i kohta 🙂), alustades powershell.exe -> cmdd.exe lolli ümbernimetamisest ja lõpetades powerdll-iga jne.

Alustame leiutamist

Selge on see, et kõigepealt vaatame Google'ist ja… me ei leia sellel teemal midagi (kui keegi on selle leidnud, postitage lingid kommentaaridesse). On ainult rakendamine Socks5 powershellil, kuid see on tavaline "otsene" sox, millel on mitmeid oma puudusi (neist räägime hiljem). Muidugi võite selle kerge käeliigutusega ka vastupidiseks muuta, kuid see on ainult ühe keermega sox, mida me ei vaja.

Niisiis, me ei leidnud midagi valmis, seega peame ikkagi oma ratta uuesti leiutama. Võtame oma jalgratta aluseks meie areng reverse sox Golangis ja rakendame selle jaoks kliendi Powershellis.

RSocksTun
Niisiis, kuidas rsockstun töötab?

RsocksTuni (edaspidi rs) töö põhineb kahel tarkvarakomponendil - Yamux ja Socks5 server. Socks5 server on tavaline kohalik socks5, see töötab kliendil. Ja ühenduste multipleksimine sellega (mäletate mitme lõimega ühendamist?) toimub yamuxi (veel üks multiplekser). See skeem võimaldab käivitada mitu kliendi socks5 serverit ja levitada neile väliseid ühendusi, edastades need ühe TCP-ühenduse kaudu (peaaegu nagu meterpreteris) kliendist serverisse, rakendades seeläbi mitme lõimega režiimi, ilma milleta me lihtsalt ei tööta. võimeline täielikult töötama sisevõrkudes.

Yamuxi toimimise olemus seisneb selles, et see tutvustab täiendavat voogude võrgukihti, rakendades seda iga paketi 12-baidise päise kujul. (Siin kasutame meelega sõna "voog", mitte niit, et mitte ajada lugejat segadusse programmivoo "lõimega" - seda mõistet kasutame ka selles artiklis). Yamuxi päis sisaldab voo numbrit, voo installimise/lõpetamise lippe, ülekantud baitide arvu ja edastusakna suurust.

Kirjutame Powershellile Reverse socks5 puhverserveri. 1. osa

Lisaks voo installimisele/lõpetamisele rakendab yamux ellujäämismehhanismi, mis võimaldab jälgida loodud sidekanali toimivust. Keeplive sõnumimehhanismi töö konfigureeritakse Yamuxi seansi loomisel. Tegelikult on seadistustel ainult kaks parameetrit: lubamine/keelamine ja pakettide saatmise sagedus sekundites. Keepalive sõnumeid saab saata yamuxi server või yamuxi klient. Keepalive sõnumi saamisel peab kaugosaline sellele vastama, saates täpselt sama sõnumi identifikaatori (tegelikult numbri), mille ta sai. Üldiselt on keepalive sama ping, ainult yamuxi jaoks.

Multiplekseri kogu töötehnikat: pakettide tüübid, ühenduse seadistamise ja lõpetamise lipud ning andmeedastusmehhanism on üksikasjalikult kirjeldatud spetsifikatsioonid Yamuxi juurde.

Kokkuvõte esimesest osast

Niisiis tutvusime artikli esimeses osas mõningate pöördtunnelite korraldamise tööriistadega, vaatlesime nende eeliseid ja puudusi, uurisime Yamuxi multiplekseri töömehhanismi ja kirjeldasime vastloodud powershelli mooduli põhinõudeid. Järgmises osas arendame moodulit ennast, praktiliselt nullist. Jätkub. ära vaheta :)

Allikas: www.habr.com

Lisa kommentaar