Reverse socks5 proxy skriuwe yn powershell.Diel 1

In ferhaal oer ûndersyk en ûntwikkeling yn 3 dielen. Diel 1 is ferkennend.
D'r binne in protte beukenbeammen - noch mear foardielen.

Probleemintwurding

Tidens pentests en RedTeam-kampanjes is it net altyd mooglik om de standert ark fan 'e klant te brûken, lykas VPN, RDP, Citrix, ensfh. as anker foar it ynfieren fan it ynterne netwurk. Op guon plakken wurket in standert VPN mei MFA en wurdt in hardware-token brûkt as twadde faktor, op oaren wurdt it brutaal kontrolearre en wurdt ús VPN-login fuortendaliks sichtber, sa't se sizze, mei alles wat it meibringt, mar yn oaren binne d'r gewoan gjin sa'n middel.

Yn sokke gefallen moatte wy konstant saneamde "reverse tunnels" meitsje - ferbiningen fan it ynterne netwurk nei in eksterne boarne of in server dy't wy kontrolearje. Binnen sa'n tunnel kinne wy ​​​​al wurkje mei de ynterne boarnen fan 'e Klanten.

D'r binne ferskate farianten fan dizze weromtunnels. De bekendste fan harren is fansels Meterpreter. SSH-tunnels mei reverse port forwarding binne ek yn grutte fraach ûnder de hackermassa's. D'r binne nochal in protte middels foar it ymplementearjen fan reverse tunneling en in protte fan har binne goed studearre en beskreaun.
Fansels, foar harren diel, ûntwikkelders fan feiligens oplossings net stean oan kant en aktyf ûntdekke sokke aksjes.
Bygelyks, MSF-sesjes wurde mei súkses ûntdutsen troch moderne IPS fan Cisco of Positive Tech, en in omkearde SSH-tunnel kin wurde ûntdutsen troch hast alle normale brânmuorre.

Dêrom, om ûngemurken te bliuwen yn in goede RedTeam-kampanje, moatte wy in omkearde tunnel bouwe mei net-standert middels en sa nau mooglik oanpasse oan 'e echte wurkmodus fan it netwurk.

Litte wy besykje wat ferlykber te finen of út te finen.

Foardat wy wat útfine, moatte wy begripe hokker resultaat wy wolle berikke, hokker funksjes ús ûntwikkeling moat útfiere. Wat sille de easken wêze foar de tunnel, sadat wy yn maksimale stealth-modus wurkje kinne?

It is dúdlik dat sokke easken foar elk gefal sterk ferskille kinne, mar basearre op wurkûnderfining kinne de wichtichste wurde identifisearre:

  • wurkje op Windows-7-10 OS. Sûnt de measte bedriuwsnetwurken brûke Windows;
  • de kliïnt ferbynt mei de tsjinner fia SSL om dom harkjen te foarkommen mei ips;
  • By it ferbinen moat de kliïnt wurkje troch in proxytsjinner mei autorisaasje stypje, om't Yn in protte bedriuwen komt tagong ta it ynternet fia in proxy. Yn feite kin de kliïntmasine der net iens oer witte, en de proxy wurdt brûkt yn in transparante modus. Mar wy moatte soargje foar sokke funksjonaliteit;
  • it klantdiel moat bondich en draachber wêze;
    It is dúdlik dat om te wurkjen binnen it netwurk fan 'e klant, kinne jo OpenVPN ynstallearje op' e kliïntmasjine en in folsleine tunnel oanmeitsje nei jo server (gelokkich kinne openvpn-kliïnten wurkje fia in proxy). Mar foarearst sil dit net altyd wurkje, om't wy dêr miskien gjin lokale admins binne, en twad sil it safolle lûd meitsje dat in fatsoenlike SIEM of HIPS ús daliks "snuffelt". Ideaallik soe ús kliïnt in saneamde ynline kommando wêze moatte, lykas bygelyks in protte bash-shells wurde ymplementearre, en lansearre fia de kommandorigel, bygelyks by it útfieren fan kommando's fan in wurdmakro.
  • ús tunnel moat multi-threaded wêze en in protte ferbiningen tagelyk stypje;
  • de client-tsjinner ferbining moat hawwe wat soarte fan autorisaasje sadat de tunnel wurdt oprjochte allinnich foar ús client, en net foar elkenien dy't komt nei ús server op it oantsjutte adres en haven. Ideaallik soe in lâningsside mei katten as profesjonele ûnderwerpen relatearre oan it orizjinele domein moatte iepenje foar "brûkers fan tredden."
    Bygelyks, as de klant in medyske organisaasje is, dan foar in behearder fan ynformaasjefeiligens dy't beslút de boarne te kontrolearjen dy't in klinykmeiwurker tagong hat, in side mei farmaseutyske produkten, Wikipedia mei in beskriuwing fan 'e diagnoaze, of it blog fan Dr. Komarovsky, ensfh. moat iepen.

Analyse fan besteande ark

Foardat jo jo eigen fyts opnij útfine, moatte jo in analyze fan besteande fytsen dwaan en begripe oft wy it echt nedich binne en, wierskynlik, binne wy ​​net de iennigen dy't tocht hawwe oer de needsaak foar sa'n funksjonele fyts.

Googling op it ynternet (wy lykje normaal te googlejen), en ek sykjen op Github mei de kaaiwurden "reverse sokken" joech net folle resultaten. Yn prinsipe komt it allegear del op it bouwen fan ssh-tunnels mei trochstjoering fan omkearde poarte en alles dêrmei ferbûn. Neist SSH-tunnels binne d'r ferskate oplossingen:

github.com/klsecservices/rpivot
In langsteande ymplemintaasje fan in omkearde tunnel fan 'e jonges by Kaspersky Lab. De namme makket dúdlik wêr't dit skript foar bedoeld is. Implementearre yn Python 2.7, wurket de tunnel yn dúdlike tekstmodus (sa't it no moade is om te sizzen - hallo RKN)

github.com/tonyseek/rsocks
In oare ymplemintaasje yn Python, ek yn dúdlike tekst, mar mei mear mooglikheden. It is skreaun as in module en hat in API foar it yntegrearjen fan de oplossing yn jo projekten.

github.com/llkat/rsockstun
github.com/mis-team/rsockstun
De earste keppeling is de orizjinele ferzje fan 'e reverse sox-ymplemintaasje yn Golang (net stipe troch de ûntwikkelder).
De twadde keppeling is ús revyzje mei ekstra funksjes, ek yn Golang. Yn ús ferzje hawwe wy SSL ymplementearre, wurkje troch in proxy mei NTLM-autorisaasje, autorisaasje op 'e kliïnt, in lâningsside yn gefal fan in ferkeard wachtwurd (of leaver, in trochferwizing nei de lâningsside), multi-threaded modus (d.w.s. ferskate minsken kin tagelyk mei de tunnel wurkje), in systeem om de kliïnt te pingen om te bepalen oft hy libbet of net.

github.com/jun7th/tsocks
Implementaasje fan reverse sox fan ús "Sineeske freonen" yn Python. Dêr, foar de luie en "ûnstjerlike", is d'r in ready-made binary (exe), gearstald troch de Sinezen en klear foar gebrûk. Hjir, allinne de Sineeske God wit wat oars dizze binary kin befetsje neist de wichtichste funksjonaliteit, dus brûk op jo eigen gefaar en risiko.

github.com/securesocketfunneling/ssf
Hiel nijsgjirrich projekt yn C ++ foar it útfieren fan reverse sox en mear. Neist de omkearde tunnel kin it poarte trochstjoere, in kommando-shell oanmeitsje, ensfh.

MSF meterpreter
Hjir, sa't se sizze, gjin opmerkings. Alle noch mear of minder oplaat hackers binne tige bekend mei dit ding en begripe hoe maklik it kin wurde ûntdutsen troch feiligens ark.

Alle hjirboppe beskreaune ark wurkje mei in ferlykbere technology: in foarôf tare útfierbere binêre module wurdt lansearre op in masine binnen it netwurk, dy't in ferbining makket mei in eksterne server. De tsjinner rint in SOCKS4/5-tsjinner dy't ferbiningen akseptearret en trochstjoert nei de kliïnt.

It neidiel fan alle boppesteande ark is dat Python of Golang moatte wurde ynstallearre op 'e client masine (ha jo faak sjoen Python ynstallearre op' e masines fan, bygelyks, in bedriuw direkteur of kantoar arbeiders?), Of in pre-assembled binêr (eigentlik python) moat wurde sleept op dizze masine en skript yn ien flesse) en rinne dizze binary al dêr. En it downloaden fan in exe en dan it lansearjen is ek in hantekening foar in lokale antivirus as HIPS.

Yn 't algemien suggerearret de konklúzje himsels - wy hawwe in powershell-oplossing nedich. No sille tomaten nei ús fleane - se sizze dat powershell al allegear ferwûne is, it wurdt kontrolearre, blokkearre, ensfh. ensafuorthinne. Yn feite, net oeral. Wy ferklearje ferantwurdlik. Trouwens, d'r binne in protte manieren om blokkearjen te omgean (hjir is d'r wer in modieuze sin oer hallo RKN 🙂), begjinnend fan 'e domme omneaming fan powershell.exe -> cmdd.exe en einigje mei powerdll, ensfh.

Litte wy begjinne mei útfine

It is dúdlik dat wy earst op Google sille sjen en ... wy sille neat fine oer dit ûnderwerp (as immen it fûn hat, post keppelings yn 'e opmerkings). Der is allinnich ymplemintaasje Socks5 op powershell, mar dit is in gewoane "direkte" sox, dy't in oantal fan har eigen neidielen hat (wy sille letter oer har prate). Jo kinne, fansels, mei in lichte beweging fan jo hân, draaie it yn 'e omkearde, mar dit sil allinne wêze single-threaded sox, dat is net hielendal wat wy nedich hawwe foar ús.

Sa, wy hawwe neat fûn klear, dus wy sille noch moatte útfine ús tsjil. Wy sille as basis nimme foar ús fyts ús ûntwikkeling reverse sox yn Golang, en wy implementearje in klant foar it yn powershell.

RSocksTun
Dus hoe wurket rsockstun?

De wurking fan RsocksTun (hjirnei oantsjutten as rs) is basearre op twa software komponinten - Yamux en Socks5 tsjinner. Socks5-tsjinner is in gewoane lokale socks5, it rint op 'e kliïnt. En multiplexing fan ferbiningen dêrmei (ûnthâld oer multithreading?) wurdt levere mei yamux (noch in oare multiplexer). Dit skema lit jo ferskate client socks5-tsjinners lansearje en eksterne ferbiningen nei har fersprieden, se troch ien inkelde TCP-ferbining trochstjoere (hast lykas yn meterpreter) fan client nei server, en implementearje dêrmei in multi-threaded modus, sûnder dat wy gewoan net sille wêze yn steat om folslein te wurkjen yn 'e ynterne netwurken.

De essinsje fan hoe't yamux wurket is dat it in ekstra netwurklaach fan streamen yntrodusearret, dy't it ymplementearret yn 'e foarm fan in 12-byte koptekst foar elk pakket. (Hjir brûke wy bewust it wurd "stream" ynstee fan tried, om de lêzer net te betiizjen mei in programmastream "thread" - wy sille dit konsept ek brûke yn dit artikel). De yamux-header befettet it streamnûmer, flaggen foar it ynstallearjen/beëinigjen fan de stream, it oantal oerdroegen bytes, en de grutte fan it oerdrachtfinster.

Reverse socks5 proxy skriuwe yn powershell.Diel 1

Neist it ynstallearjen / beëinigjen fan in stream, ymplementearret yamux in keepalive-meganisme wêrmei jo de prestaasjes fan it fêststelde kommunikaasjekanaal kinne kontrolearje. De wurking fan it keeplive-berjochtmeganisme is konfigureare by it meitsjen fan in Yamux-sesje. Eins binne d'r fan 'e ynstellings mar twa parameters: ynskeakelje / útskeakelje en de frekwinsje fan it ferstjoeren fan pakketten yn sekonden. Keepalive-berjochten kinne stjoerd wurde troch in yamux-tsjinner of in yamux-kliïnt. By it ûntfangen fan in keepalive-berjocht moat de partij op ôfstân derop reagearje troch krekt deselde berjochtidentifikaasje (eigentlik in nûmer) te stjoeren dy't it ûntfongen hat. Yn 't algemien is keepalive deselde ping, allinich foar yamux.

De folsleine bestjoeringstechnyk fan 'e multiplexer: pakkettypen, ferbiningsopstelling en beëinigingsflaggen, en it gegevensoerdrachtmeganisme wurde yn detail beskreaun yn spesifikaasjes oan yamx.

Konklúzje foar it earste diel

Dat, yn it earste diel fan it artikel, hawwe wy kunde makke mei guon ark foar it organisearjen fan omkearde tunnels, seagen har foardielen en neidielen, studearre it meganisme fan wurking fan 'e Yamux-multiplexer en beskreau de basiseasken foar de nij oanmakke powershell-module. Yn it folgjende diel sille wy de module sels ûntwikkelje, praktysk fanôf it begjin. Wurdt ferfolge. Net wikselje :)

Boarne: www.habr.com

Add a comment