Shkruajmë Reverse socks5 proxy në PowerShell. Pjesa 1

Historia e kĂ«rkimit dhe zhvillimit nĂ« 3 pjesĂ«. Pjesa 1 — kĂ«rkimi.
Ka shumĂ« libra — por edhe mĂ« shumĂ« dobi.

Vendosja e detyrës

GjatĂ« realizimit tĂ« pĂ«ntestĂ«ve dhe fushatave RedTeam, nuk Ă«shtĂ« gjithmonĂ« e mundur tĂ« pĂ«rdoren mjetet standarde tĂ« KlientĂ«ve, si VPN, RDP, Citrix etj., pĂ«r tĂ« hyrĂ« nĂ« rrjetin e brendshĂ«m. NdonjĂ«herĂ« VPN-i standard punon me MFA dhe si faktor i dytĂ« pĂ«rdoret njĂ« token fizik, ndonjĂ«herĂ« monitorohet ashpĂ«r dhe hyrja jonĂ« pĂ«rmes VPN-it bĂ«het e dukshme menjĂ«herĂ«, siç thonĂ« — me tĂ« gjitha pasojat, dhe nĂ« disa raste nuk ka fare kĂ«to mjete.

NĂ« raste tĂ« tilla, Ă«shtĂ« e nevojshme tĂ« krijohen vazhdimisht kĂ«shtu quajturat "tuneli tĂ« kundĂ«rt" — lidhje nga rrjeti i brendshĂ«m nĂ« njĂ« burim tĂ« jashtĂ«m ose njĂ« server tĂ« kontrolluar nga ne. NĂ« brendĂ«si tĂ« kĂ«tij tuneli, mund tĂ« punojmĂ« me resurset e brendshme tĂ« KlientĂ«ve.

Ekzistojnë disa lloje të tillë tunesh të kundërt. I njohuri është, sigurisht, Meterpreter. Po ashtu, shumë të përdorura në radhët e hakerëve janë tunelët SSH me port për të kundërt. Ka shumë mjete për realizimin e tunelimit të kundërt dhe shumë prej tyre janë studiuar mirë dhe janë përshkruar.
Sigurisht, nga ana e tyre, zhvilluesit e zgjidhjeve mbrojtëse nuk qëndrojnë mënjanë dhe aktivisht detektojnë veprime të tilla.
Për shembull, seancat MSF detektohen me sukses nga IPS moderne nga Cisco ose Positive Tech, ndërsa një tunel të kundërt SSH mund të zbulohen praktikisht nga çdo firewall normal.

Prandaj, pĂ«r tĂ« mbetur tĂ« padukshĂ«m nĂ« njĂ« fushatĂ« tĂ« mirĂ« RedTeam — ne duhet tĂ« krijojmĂ« tunelin e kundĂ«rt me mjete jo standarde dhe tĂ« pĂ«rshtatemi sa mĂ« afĂ«r mĂ«nyrĂ«s reale tĂ« punĂ«s sĂ« rrjetit.

Le të përpiqemi të gjejmë ose të shpikim diçka të tillë.

Para se të shpikim diçka, duhet të kuptojmë se çfarë rezultati duam të arrijmë, cilat funksione duhet të plotësojë zhvillimi ynë. Cilat do të jenë kërkesat për tunelin, që ne të mund të punojmë në një mod maksimumi të fshehtë?

ËshtĂ« e qartĂ« se pĂ«r çdo rast kĂ«rkesat mund tĂ« ndryshojnĂ« ndjeshĂ«m, por nga pĂ«rvoja e punĂ«s mund tĂ« identifikojmĂ« disa kĂ«rkesa kryesore:

  • punon nĂ« sistemet operative Windows-7-10. Sepse nĂ« shumicĂ«n e rrjeteve korporative pĂ«rdoret pikĂ«risht Windows;
  • klienti lidhet me serverin pĂ«rmes SSL pĂ«r tĂ« pĂ«rjashtuar ndjekjen e thjeshtĂ« nga mjetet ips;
  • kur lidhja bĂ«het, klienti duhet tĂ« mbĂ«shtesĂ« punĂ«n pĂ«rmes njĂ« serveri proxy me autorizim, sepse nĂ« shumĂ« kompani, dalja nĂ« internet ndodh pĂ«rmes proxy. NĂ« tĂ« vĂ«rtetĂ«, makina klient mund tĂ« mos e dijĂ« fare kĂ«tĂ«, dhe proxy pĂ«rdoret nĂ« mod transparence. Por kĂ«tĂ« funksionalitet ne duhet ta parashikojmĂ«;
  • pjesa klient duhet tĂ« jetĂ« e thjeshtĂ« dhe portable;
    Sigurisht, për të punuar brenda rrjetit të Klientit, në makinën klient mund të instalojmë OpenVPN dhe të ngrisim një tunel të plotë deri në serverin tonë (për fat të mirë, klientët e openvpn dinë të punojnë përmes proxy). Por, së pari, kjo nuk funksionon gjithmonë, pasi mund të mos jemi administratë lokale aty, dhe së dyti, krijon aq shumë zhurmë sa që një SIEM i rregullt ose HIPS do të 'informojë' menjëherë për ne. Në ideal, klienti ynë duhet të jetë një ekip i quajtur inline, siç është realizuar në shumë shell-e bash, dhe të fillohet përmes komandës, për shembull, kur ekzekutohet komandat nga makros nga Word.
  • tuneli ynĂ« duhet tĂ« jetĂ« shumĂ«-fibrik dhe tĂ« mbĂ«shtesĂ« shumĂ« lidhje njĂ«kohĂ«sisht;
  • lidhja klient-server duhet tĂ« ketĂ« ndonjĂ« autorizim, nĂ« mĂ«nyrĂ« qĂ« tuneli tĂ« vendoset vetĂ«m pĂ«r klientin tonĂ«, dhe jo pĂ«r tĂ« gjithĂ« ata qĂ« vijnĂ« nĂ« serverin tonĂ« nĂ« adresĂ«n dhe portin e caktuar. NĂ« ideal, pĂ«r 'pĂ«rdoruesit e jashtĂ«m', duhet tĂ« hapet njĂ« faqe nĂ« tĂ« cilĂ«n shfaqen kafshĂ« tĂ« vogla ose tema profesionale tĂ« lidhura me domainin burim.
    Për shembull, nëse Klienti është një organizatë mjekësore, atëherë për administruesin e sigurisë së informacionit, të vendosur të kontrollojë burimin që ka vizituar punonjësi i klinikës, duhet të hapet një faqe me produkte farmaceutike, Wikipedia me përshkrimin e diagnozës ose blogu i doktor Komarovskit etj.

Analiza e mjeteve ekzistuese

Para se tĂ« shpikim biçikletĂ«n tonĂ« — Ă«shtĂ« e nevojshme tĂ« bĂ«jmĂ« njĂ« analizĂ« tĂ« biçikletave ekzistuese dhe tĂ« kuptojmĂ« nĂ«se pĂ«r tĂ« vĂ«rtetĂ« na nevojitet dhe ndoshta nuk jemi vetĂ«m qĂ« kemi menduar pĂ«r nevojĂ«n e njĂ« biçiklete funksionale tĂ« tillĂ«.

Kërkimi në internet (duket se po e bëjmë mjaft mirë), si dhe kërkimi në GitHub me fjalët kyçe "reverse socks" nuk ka dhënë shumë rezultate. Kryesisht, gjithçka ka të bëjë me ndërtimin e tunelëve ssh me port forwarding të kundërt dhe gjithçka tjetër që lidhet me të. Përveç tunelëve SSH, mund të veçojmë disa zgjidhje:

github.com/klsecservices/rpivot
NjĂ« implementim i vjetĂ«r i tunelit tĂ« kundĂ«rt nga ekipi i Laboratorit Kaspersky. Nga emri Ă«shtĂ« e qartĂ« pĂ«r çfarĂ« Ă«shtĂ« krijuar ky skript. ËshtĂ« realizuar nĂ« Python 2.7, tuneli punon nĂ« mĂ«nyrĂ« cleartext (siç thuhet tani — pĂ«rshĂ«ndetje RKN)

github.com/tonyseek/rsocks
NjĂ« tjetĂ«r implementim nĂ« Python, gjithashtu nĂ« cleartext, por me mĂ« shumĂ« mundĂ«si. ËshtĂ« shkruar si njĂ« modul dhe ka API pĂ«r integrim nĂ« projektet e tua.

github.com/llkat/rsockstun
github.com/mis-team/rsockstun
Lidhja e parĂ« — versioni origjinal i implementimit tĂ« reverse socks nĂ« Golang (nuk mbĂ«shtetet nga zhvilluesi).
Lidhja e dytĂ« — Ă«shtĂ« pĂ«rmirĂ«simi ynĂ« me karakteristika shtesĂ«, gjithashtu nĂ« Golang. NĂ« versionin tonĂ« kemi implementuar SSL, punĂ« pĂ«rmes proxy me autorizim NTLM, autorizimin nĂ« klient, faqe njohjeje nĂ« rast tĂ« fjalĂ«kalimit tĂ« gabuar (me saktĂ«si — redirect nĂ« faqen njohĂ«se), modin shumĂ«-fijor (dmth. disa njerĂ«z mund tĂ« punojnĂ« me tunelin njĂ«kohĂ«sisht), sistemin e pings pĂ«r klientin pĂ«r tĂ« parĂ« nĂ«se Ă«shtĂ« aktiv apo jo.

github.com/jun7th/tsocks
Implementimi i reverse socks nga "miqtë tanë kinezë" në Python. Po ashtu, për ata që janë të lenj, ka një binary të gatshëm (exe), e përgatitur nga kinezët dhe gati për përdorim. Këtu vetëm Zoti kinez e di se çfarë tjetër mund të ketë në këtë binary, përveç funksionalitetit kryesor, prandaj përdorini me kujdes.

github.com/securesocketfunneling/ssf
Një projekt mjaft interesant në C++ për realizimin e reverse socks dhe jo vetëm. Përveç tunelit të kundërt, ai mund të realizojë port forwarding, krijimin e shell komandash, etj.

MSF meterpreter
Siç thonë, pa kommentare. Të gjithë hackerët disi të arsimuar janë të njohur mirë me këtë gjë dhe kuptojnë se sa lehtë zbulohet nga mjetet e mbrojtjes.

Të gjitha mjetet e përmendura më sipër punojnë me një teknologji të ngjashme: në makinën brenda rrjetit ekzekutohet një modul ekzekutues i përgatitur më parë, që krijon një lidhje me serverin e jashtëm. Në server çelet një server SOCKS4/5, që pranon lidhjet dhe i transmeton ato te klienti.

Disavantazhi i tĂ« gjitha mjeteve tĂ« lartpĂ«rmendura Ă«shtĂ« se ose nĂ« makinĂ«n e klientit nevojitet tĂ« jetĂ« instaluar Python ose Golang (sa shpesh keni hasur se Python Ă«shtĂ« instaluar nĂ« makinat, pĂ«r shembull, tĂ« drejtorĂ«ve tĂ« kompanive ose punonjĂ«sve tĂ« zyrĂ«s?), ose nĂ« kĂ«tĂ« makinĂ« duhet tĂ« çojmĂ« njĂ« binary tĂ« pĂ«rgatitur mĂ« parĂ« (praktikisht python dhe skripti nĂ« njĂ« paketĂ«) dhe tĂ« ekzekutojmĂ« atĂ« atje. NdĂ«rsa shkarkimi i njĂ« exe dhe nisim atĂ« — Ă«shtĂ« njĂ« signeature tjetĂ«r pĂ«r antivirusin lokal ose HIPS.

NĂ« pĂ«rgjithĂ«si, pĂ«rfundimi duket i qartĂ« — na nevojitet njĂ« zgjidhje nĂ« PowerShell. Tani do na fluturojnĂ« domate — se PowerShell Ă«shtĂ« e konsumuar tashmĂ«, monitorohet, blokohen etj. e.tj. NĂ« tĂ« vĂ«rtetĂ« — aspak kudo. E kemi thĂ«nĂ« me pĂ«rgjegjĂ«si. PĂ«r mĂ« tepĂ«r, ekzistojnĂ« shumĂ« mĂ«nyra pĂ«r tĂ« anashkaluar bllokimet (kĂ«tu pĂ«rsĂ«ri frazĂ« e njohur pĂ«r shprehja "pĂ«rshĂ«ndetje RKN 🙂"), qĂ« fillon me thjesht riemĂ«rimin e powershell.exe -> cmdd.exe dhe pĂ«rfundon me powerdll etj.

Fillojmë të shpikim

E qartĂ« Ă«shtĂ« qĂ« sĂ« pari do shikojmĂ« nĂ« Google dhe
 nuk do gjejmĂ« asgjĂ« nĂ« lidhje me kĂ«tĂ« temĂ« (nĂ«se dikush ka gjetur — dĂ«rgoni lidhjet nĂ« komentet). Ka vetĂ«m implementimi Socks5 nĂ« PowerShell, por ky Ă«shtĂ« njĂ« "direkt" socks i zakonshĂ«m, qĂ« ka njĂ« seri tĂ« metash (pĂ«r to do flasim mĂ« vonĂ«). Sigurisht, mund ta shndĂ«rrojmĂ« nĂ« reverse me njĂ« lĂ«vizje, por kjo do tĂ« jetĂ« vetĂ«m njĂ« socks me njĂ« fijĂ«, qĂ« pĂ«r ne nuk Ă«shtĂ« krejtĂ«sisht ajo qĂ« na nevojitet.

Tani, nuk gjetëm asgjë të gatshme, prandaj do të na duhet të shpikim biçikletën tonë. Si bazë për biçikletën tonë, do të marrim zhvillimin tonë të reverse socks në Golang, dhe do ta realizojmë klientin e tij në PowerShell.

RSocksTun
Tani, si funksionon rsockstun?

NĂ« thelb tĂ« funksionimit tĂ« RsocksTun (mĂ« tej — rs) qĂ«ndrojnĂ« dy komponentĂ« programorĂ« — Yamux dhe serveri Socks5. Serveri Socks5 Ă«shtĂ« njĂ« socks5 lokal normal, qĂ« niset nĂ« klient. Dhe shumĂ«fijorĂ«simi i lidhjeve nĂ« tĂ« (mos e harroni shumĂ«fijorin?) sigurohet nga yamux (yet another multiplexer). Ky skemĂ« lejon qĂ« tĂ« nisin disa serverĂ« socks5 klientĂ«sh dhe tĂ« shpĂ«rndajnĂ« lidhjet e jashtme te ata, duke i kaluar ato pĂ«rmes njĂ« lidhjeje tĂ« vetme TCP (gati si nĂ« meterpreter) nga klienti nĂ« server, duke realizuar kĂ«shtu njĂ« mod shumĂ«fijor, pa tĂ« cilin nuk do tĂ« mund tĂ« punojmĂ« plotĂ«sisht nĂ« rrjetin e brendshĂ«m.

The essence of yamux's operation lies in the fact that it introduces an additional network layer of streams, implementing it as a 12-byte header for each packet. (Here we intentionally use the word "stream" instead of "ĐżĐŸŃ‚ĐŸĐș" to avoid confusing the reader with the programming thread concept — which we will also use in this article). Inside the yamux header are the stream number, flags for setting up/terminating the stream, the number of bytes being transferred, and the window size.

Shkruajmë Reverse socks5 proxy në PowerShell. Pjesa 1

In addition to setting up/terminating streams, yamux implements a keepalive mechanism that allows monitoring the operability of the established communication channel. The operation of the keepalive message mechanism is configured when creating a Yamux session. Essentially, there are only two parameters in the settings: enable/disable and the frequency of packet sending in seconds. The keepalive messages can be sent by the yamux server as well as the yamux client. Upon receiving a keepalive message, the remote side must respond with a packet containing the exact same message identifier (in fact — a number) that it received. In general, keepalive is just like a ping, but specifically for yamux.

The detailed workings of the multiplexer: packet types, flags for establishing and terminating connections, and the data transmission mechanism are described in specifikacioni the yamux.

Conclusion to the first part

So, in the first part of the article, we got acquainted with some tools for organizing reverse tunnels, examined their advantages and disadvantages, studied the operation mechanism of the Yamux multiplexer, and outlined the main requirements for the newly created PowerShell module. In the next part, we will tackle the module's development from scratch. Stay tuned 🙂

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster