Shkrimi i përfaqësuesit Reverse socks5 në powershell.Pjesa 1

Një histori për kërkimin dhe zhvillimin në 3 pjesë. Pjesa 1 është eksploruese.
Ka shumë pemë ahu - edhe më shumë përfitime.

Formulimi i problemit

Gjatë pentesteve dhe fushatave RedTeam, nuk është gjithmonë e mundur të përdoren mjetet standarde të Klientit, si VPN, RDP, Citrix, etj. si një ankorë për hyrjen në rrjetin e brendshëm. Në disa vende, një VPN standarde funksionon duke përdorur MFA dhe një shenjë harduerike përdoret si faktor i dytë, në të tjera monitorohet brutalisht dhe identifikimi ynë VPN bëhet menjëherë i dukshëm, siç thonë ata, me gjithçka që përfshin, por në të tjera ka thjesht nuk ka mjete të tilla.

Në raste të tilla, ne vazhdimisht duhet të bëjmë të ashtuquajturat "tunele të kundërt" - lidhje nga rrjeti i brendshëm me një burim të jashtëm ose një server që ne kontrollojmë. Brenda një tuneli të tillë, ne tashmë mund të punojmë me burimet e brendshme të klientëve.

Ekzistojnë disa lloje të këtyre tuneleve të kthimit. Më i famshmi prej tyre është, natyrisht, Meterpreter. Tunelet SSH me përcjellje të portit të kundërt janë gjithashtu në kërkesë të madhe në mesin e masave të hakerëve. Ka mjaft mjete për zbatimin e tunelit të kundërt dhe shumë prej tyre janë studiuar dhe përshkruar mirë.
Sigurisht, nga ana e tyre, zhvilluesit e zgjidhjeve të sigurisë nuk qëndrojnë mënjanë dhe zbulojnë në mënyrë aktive veprime të tilla.
Për shembull, seancat e MSF zbulohen me sukses nga IPS moderne nga Cisco ose Positive Tech, dhe një tunel i kundërt SSH mund të zbulohet nga pothuajse çdo mur zjarri normal.

Prandaj, për të mbetur pa u vënë re në një fushatë të mirë RedTeam, duhet të ndërtojmë një tunel të kundërt duke përdorur mjete jo standarde dhe të përshtatemi sa më afër që të jetë e mundur me mënyrën reale të funksionimit të rrjetit.

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

Para se të shpikim diçka, duhet të kuptojmë se çfarë rezultati duam të arrijmë, cilat funksione duhet të kryejë zhvillimi ynë. Cilat do të jenë kërkesat për tunelin që të mund të punojmë në modalitetin maksimal të fshehtë?

Është e qartë se për secilin rast kërkesat e tilla mund të ndryshojnë shumë, por bazuar në përvojën e punës, ato kryesore mund të identifikohen:

  • punoni në Windows-7-10 OS. Meqenëse shumica e rrjeteve të korporatave përdorin Windows;
  • klienti lidhet me serverin përmes SSL për të shmangur dëgjimin e trashë duke përdorur IP;
  • Kur lidhet, klienti duhet të mbështesë punën përmes një serveri proxy me autorizim, sepse Në shumë kompani, qasja në internet ndodh përmes një përfaqësuesi. Në fakt, makina e klientit mund të mos dijë asgjë për të, dhe përfaqësuesi përdoret në një mënyrë transparente. Por ne duhet të ofrojmë një funksionalitet të tillë;
  • pjesa e klientit duhet të jetë koncize dhe e lëvizshme;
    Është e qartë se për të punuar brenda rrjetit të klientit, mund të instaloni OpenVPN në makinën e klientit dhe të krijoni një tunel të plotë në serverin tuaj (për fat të mirë, klientët openvpn mund të punojnë përmes një përfaqësuesi). Por, së pari, kjo nuk do të funksionojë gjithmonë, pasi ne mund të mos jemi administratorë lokalë atje, dhe së dyti, do të bëjë aq shumë zhurmë sa një SIEM ose HIPS i mirëfilltë do të na "rrëmbejë" menjëherë. Në mënyrë ideale, klienti ynë duhet të jetë i ashtuquajturi komandë inline, siç për shembull zbatohen shumë predha bash dhe lëshohen përmes linjës së komandës, për shembull, kur ekzekutohen komanda nga një makro fjalësh.
  • tuneli ynë duhet të jetë me shumë fije dhe të mbështesë shumë lidhje në të njëjtën kohë;
  • lidhja klient-server duhet të ketë një lloj autorizimi në mënyrë që tuneli të krijohet vetëm për klientin tonë, dhe jo për të gjithë ata që vijnë në serverin tonë në adresën dhe portin e specifikuar. Idealisht, një faqe ulje me mace ose tema profesionale që lidhen me domenin origjinal duhet të hapet për "përdoruesit e palëve të treta".
    Për shembull, nëse Klienti është një organizatë mjekësore, atëherë për një administrator të sigurisë së informacionit i cili vendos të kontrollojë burimin që ka aksesuar një punonjës i klinikës, një faqe me produkte farmaceutike, Wikipedia me një përshkrim të diagnozës ose blogun e Dr. Komarovsky, etj. duhet të hapet.

Analiza e mjeteve ekzistuese

Përpara se të rishpikni biçikletën tuaj, duhet të bëni një analizë të biçikletave ekzistuese dhe të kuptoni nëse kemi vërtet nevojë për të dhe, ndoshta, nuk jemi të vetmit që kemi menduar për nevojën e një biçiklete kaq funksionale.

Googlimi në internet (duket se kërkojmë normalisht në google), si dhe kërkimi në Github duke përdorur fjalët kyçe "çorape të kundërta" nuk dha shumë rezultate. Në thelb, gjithçka varet nga ndërtimi i tuneleve ssh me përcjelljen e portit të kundërt dhe gjithçka që lidhet me të. Përveç tuneleve SSH, ekzistojnë disa zgjidhje:

github.com/klsecservices/rpivot
Një zbatim i gjatë i një tuneli të kundërt nga djemtë në Kaspersky Lab. Emri e bën të qartë se për çfarë synohet ky skenar. I implementuar në Python 2.7, tuneli funksionon në modalitetin e tekstit të qartë (siç është në modë të thuhet tani - përshëndetje RKN)

github.com/tonyseek/rsocks
Një tjetër zbatim në Python, gjithashtu në tekst të qartë, por me më shumë mundësi. Është shkruar si një modul dhe ka një API për integrimin e zgjidhjes në projektet tuaja.

github.com/llkat/rsocstun
github.com/mis-team/rsocstun
Lidhja e parë është versioni origjinal i zbatimit të kundërt sox në Golang (nuk mbështetet nga zhvilluesi).
Lidhja e dytë është rishikimi ynë me veçori shtesë, gjithashtu në Golang. Në versionin tonë, ne kemi implementuar SSL, kemi punuar përmes një përfaqësuesi me autorizim NTLM, autorizim në klient, një faqe uljeje në rast të një fjalëkalimi të pasaktë (ose më mirë, një ridrejtim në faqen e uljes), modalitet me shumë fije (d.m.th. disa njerëz mund të punojë me tunelin në të njëjtën kohë), një sistem i pingimit të klientit për të përcaktuar nëse ai është gjallë apo jo.

github.com/jun7th/tsocks
Zbatimi i reverse sox nga "miqtë tanë kinezë" në Python. Atje, për dembelët dhe "të pavdekshmit", ekziston një binar i gatshëm (exe), i montuar nga kinezët dhe gati për përdorim. Këtu, vetëm Zoti kinez e di se çfarë tjetër mund të përmbajë ky binar përveç funksionalitetit kryesor, kështu që përdorni me rrezikun dhe rrezikun tuaj.

github.com/securesocketfunneling/ssf
Një projekt mjaft interesant në C++ për zbatimin e reverse sox dhe më shumë. Përveç tunelit të kundërt, ai mund të bëjë përcjelljen e portit, të krijojë një guaskë komandimi, etj.

Njehsori i MSF
Këtu, siç thonë ata, nuk ka komente. Të gjithë hakerët edhe pak a shumë të arsimuar janë shumë të njohur me këtë gjë dhe e kuptojnë se sa lehtë mund të zbulohet nga mjetet e sigurisë.

Të gjitha mjetet e përshkruara më sipër punojnë duke përdorur një teknologji të ngjashme: një modul binar i ekzekutueshëm i përgatitur paraprakisht lëshohet në një makinë brenda rrjetit, i cili krijon një lidhje me një server të jashtëm. Serveri drejton një server SOCKS4/5 që pranon lidhjet dhe i transmeton ato te klienti.

Disavantazhi i të gjitha mjeteve të mësipërme është se Python ose Golang duhet të instalohen në makinën e klientit (a keni parë shpesh Python të instaluar në makinat e, për shembull, një drejtori kompanie ose punonjës zyre?), ose një të montuar paraprakisht binar (në fakt python) duhet të tërhiqet në këtë makinë dhe skript në një shishe) dhe ta ekzekutoni këtë binar tashmë atje. Dhe shkarkimi i një exe dhe më pas lëshimi i tij është gjithashtu një nënshkrim për një antivirus lokal ose HIPS.

Në përgjithësi, përfundimi sugjeron vetë - ne kemi nevojë për një zgjidhje powershell. Tani domatet do të fluturojnë drejt nesh - ata thonë se powershell tashmë është e gjitha e hackney, është monitoruar, bllokuar, etj. e kështu me radhë. Në fakt, jo kudo. Ne deklarojmë me përgjegjësi. Nga rruga, ka shumë mënyra për të anashkaluar bllokimin (këtu përsëri ekziston një frazë në modë për përshëndetje RKN 🙂), duke filluar nga riemërtimi budalla i powershell.exe -> cmdd.exe dhe duke përfunduar me powerdll, etj.

Le të fillojmë të shpikim

Është e qartë se së pari do të shikojmë në Google dhe ... nuk do të gjejmë asgjë për këtë temë (nëse dikush e ka gjetur, postoni lidhjet në komente). Eshte vetem zbatim Socks5 në powershell, por ky është një sox i zakonshëm "i drejtpërdrejtë", i cili ka një sërë disavantazhesh të veta (ne do të flasim për to më vonë). Sigurisht, me një lëvizje të lehtë të dorës, mund ta ktheni atë në të kundërt, por kjo do të jetë vetëm sox me një fije, e cila nuk është ajo që na nevojitet.

Pra, ne nuk kemi gjetur asgjë të gatshme, kështu që do të na duhet të rishpikim timonin tonë. Ne do të marrim si bazë për biçikletën tonë zhvillimin tonë reverse sox në Golang, dhe ne implementojmë një klient për të në powershell.

RSocksTun
Pra, si funksionon rsocstun?

Funksionimi i RsocksTun (në tekstin e mëtejmë rs) bazohet në dy komponentë softuerësh - serveri Yamux dhe Socks5. Serveri Socks5 është një socks5 i rregullt lokal, ai funksionon në klient. Dhe shumëfishimi i lidhjeve me të (kujtoni për multithreading?) sigurohet duke përdorur yamux (një tjetër multiplekser). Kjo skemë ju lejon të nisni disa serverë klientësh socks5 dhe të shpërndani lidhje të jashtme tek ata, duke i përcjellë ato përmes një lidhjeje të vetme TCP (pothuajse si në metërpreter) nga klienti në server, duke zbatuar kështu një modalitet me shumë fije, pa të cilin thjesht nuk do të jemi të aftë për të punuar plotësisht në rrjetet e brendshme.

Thelbi i mënyrës se si funksionon yamux është se ai prezanton një shtresë shtesë të rrjetit të rrymave, duke e zbatuar atë në formën e një titulli 12 bajt për secilën paketë. (Këtu ne përdorim qëllimisht fjalën "stream" dhe jo fillesë, në mënyrë që të mos ngatërrojmë lexuesin me një "thread" të një transmetimi programi - ne gjithashtu do ta përdorim këtë koncept në këtë artikull). Kreu i yamux përmban numrin e transmetimit, flamujt për instalimin/përfundimin e transmetimit, numrin e bajteve të transferuara dhe madhësinë e dritares së transferimit.

Shkrimi i përfaqësuesit Reverse socks5 në powershell.Pjesa 1

Përveç instalimit/përfundimit të një transmetimi, yamux zbaton një mekanizëm mbajtës që ju lejon të monitoroni performancën e kanalit të vendosur të komunikimit. Funksionimi i mekanizmit të mesazheve keeplive konfigurohet kur krijoni një sesion Yamux. Në fakt, nga cilësimet ekzistojnë vetëm dy parametra: aktivizoni/çaktivizoni dhe frekuencën e dërgimit të paketave në sekonda. Mesazhet Keepalive mund të dërgohen nga një server yamux ose një klient yamux. Kur merr një mesazh mbajtës, pala në distancë duhet t'i përgjigjet atij duke dërguar saktësisht të njëjtin identifikues mesazhi (në fakt një numër) që ka marrë. Në përgjithësi, keepalive është i njëjti ping, vetëm për yamux.

E gjithë teknika e funksionimit të multiplekserit: llojet e paketave, konfigurimi dhe terminimi i lidhjes dhe mekanizmi i transferimit të të dhënave janë përshkruar në detaje në specifikimet te yamux.

Përfundim në pjesën e parë

Pra, në pjesën e parë të artikullit, ne u njohëm me disa mjete për organizimin e tuneleve të kundërta, shikuam avantazhet dhe disavantazhet e tyre, studiuam mekanizmin e funksionimit të multiplekserit Yamux dhe përshkruam kërkesat themelore për modulin e krijuar rishtazi powershell. Në pjesën tjetër do të zhvillojmë vetë modulin, praktikisht nga e para. Vazhdon. Mos ndërroni :)

Burimi: www.habr.com

Shto një koment