Reverse socks5 tarpinio serverio rašymas Powershell.1 dalis

Pasakojimas apie tyrimus ir plėtrą iš 3 dalių. 1 dalis yra tiriamoji.
Yra daug bukų – dar daugiau naudos.

Problemos teiginys

Pentestų ir RedTeam kampanijų metu ne visada galima naudotis standartiniais Kliento įrankiais, tokiais kaip VPN, RDP, Citrix ir kt. kaip inkaras norint patekti į vidinį tinklą. Kai kuriose vietose standartinis VPN veikia naudojant MFA, o aparatinės įrangos prieigos raktas naudojamas kaip antras veiksnys, kitur jis žiauriai stebimas ir mūsų VPN prisijungimas iš karto tampa matomas, kaip sakoma, su viskuo, ką tai reiškia, bet kitur yra tiesiog nėra tokių priemonių.

Tokiais atvejais nuolat tenka daryti vadinamuosius „atvirkštinius tunelius“ – jungtis iš vidinio tinklo prie išorinio resurso ar mūsų valdomo serverio. Tokio tunelio viduje jau galime dirbti su Klientų vidiniais ištekliais.

Yra keletas šių grįžtamųjų tunelių variantų. Žinomiausias iš jų, be abejo, yra „Meterpreter“. SSH tuneliai su atvirkštiniu prievado peradresavimu taip pat yra labai paklausūs tarp įsilaužėlių masės. Priemonių atvirkštiniam tuneliavimui įgyvendinti yra gana daug ir daugelis jų yra gerai ištirtos ir aprašytos.
Žinoma, savo ruožtu saugumo sprendimų kūrėjai nestovi nuošalyje ir tokius veiksmus aktyviai aptinka.
Pavyzdžiui, MSF seansus sėkmingai aptinka šiuolaikinis Cisco arba Positive Tech IPS, o atvirkštinį SSH tunelį gali aptikti beveik bet kuri įprasta ugniasienė.

Todėl, norėdami išlikti nepastebėti geroje RedTeam kampanijoje, turime nestandartinėmis priemonėmis nutiesti atvirkštinį tunelį ir kuo labiau prisitaikyti prie realaus tinklo veikimo režimo.

Pabandykime rasti ar sugalvoti ką nors panašaus.

Prieš ką nors išradę, turime suprasti, kokį rezultatą norime pasiekti, kokias funkcijas turėtų atlikti mūsų tobulėjimas. Kokie bus reikalavimai tuneliui, kad galėtume dirbti maksimaliu slaptu režimu?

Akivaizdu, kad kiekvienu atveju tokie reikalavimai gali labai skirtis, tačiau remiantis darbo patirtimi galima išskirti pagrindinius:

  • dirbti su Windows-7-10 OS. Kadangi dauguma įmonių tinklų naudoja Windows;
  • klientas prisijungia prie serverio per SSL, kad išvengtų kvailo klausymosi naudojant ips;
  • Prisijungdamas klientas turi palaikyti darbą per įgaliotąjį serverį su įgaliojimu, nes Daugelyje įmonių prieiga prie interneto vyksta per tarpinį serverį. Tiesą sakant, kliento kompiuteris gali net nieko apie tai nežinoti, o tarpinis serveris naudojamas skaidriu režimu. Tačiau tokią funkciją privalome suteikti;
  • kliento dalis turi būti glausta ir nešiojama;
    Akivaizdu, kad norėdami dirbti kliento tinkle, galite įdiegti „OpenVPN“ kliento kompiuteryje ir sukurti visavertį tunelį į savo serverį (laimei, „openvpn“ klientai gali dirbti per tarpinį serverį). Bet, pirma, tai ne visada pasiteisins, nes galime ten nebūti vietiniai administratoriai, antra, tai sukels tiek triukšmo, kad padorus SIEM ar HIPS tuoj pat mus „užklups“. Idealiu atveju mūsų klientas turėtų būti vadinamoji tiesioginė komanda, nes, pavyzdžiui, yra įdiegta daug bash apvalkalų ir paleidžiama per komandinę eilutę, pavyzdžiui, kai vykdomos komandos iš žodžio makrokomandos.
  • mūsų tunelis turi būti kelių sriegių ir palaikyti daug jungčių vienu metu;
  • klientas-serveris ryšys turi turėti tam tikrą autorizaciją, kad tunelis būtų sukurtas tik mūsų klientui, o ne visiems, kurie ateina į mūsų serverį nurodytu adresu ir prievadu. Idealiu atveju nukreipimo puslapis su katėmis arba profesinėmis temomis, susijusiomis su pradiniu domenu, turėtų būti atidarytas „trečiųjų šalių naudotojams“.
    Pavyzdžiui, jei Klientas yra medicinos organizacija, tai informacijos saugos administratoriui, nusprendusiam patikrinti klinikos darbuotojo naudojamą šaltinį, puslapį su farmacijos produktais, Vikipediją su diagnozės aprašymu arba Dr. Komarovskio tinklaraštį ir pan. turėtų atsidaryti.

Esamų įrankių analizė

Prieš išrandant savo dviratį, reikia atlikti esamų dviračių analizę ir suprasti, ar mums jo tikrai reikia ir, ko gero, apie tokio funkcionalaus dviračio poreikį susimąstėme ne tik mes.

„Googlinimas“ internete (atrodo, google randame įprastai), taip pat „Github“ paieška naudojant raktinius žodžius „reverse socks“ nedavė daug rezultatų. Iš esmės viskas priklauso nuo ssh tunelių kūrimo su atvirkštiniu prievado persiuntimu ir viskuo, kas su tuo susiję. Be SSH tunelių, yra keletas sprendimų:

github.com/klsecservices/rpivot
„Kaspersky Lab“ vaikinų sukurtas ilgalaikis atvirkštinio tunelio įgyvendinimas. Pavadinimas aiškiai parodo, kam šis scenarijus skirtas. Įdiegtas Python 2.7, tunelis veikia aiškaus teksto režimu (kaip dabar madinga sakyti - labas RKN)

github.com/tonyseek/rsocks
Kitas Python įgyvendinimas, taip pat aiškiu tekstu, bet su daugiau galimybių. Jis parašytas kaip modulis ir turi API, skirtą sprendimui integruoti į jūsų projektus.

github.com/llkat/rsockstun
github.com/mis-team/rsockstun
Pirmoji nuoroda yra originali atvirkštinio sox diegimo versija Golang (kurėjas nepalaiko).
Antroji nuoroda yra mūsų peržiūra su papildomomis funkcijomis, taip pat Golang. Savo versijoje įdiegėme SSL, dirbame per tarpinį serverį su NTLM autorizacija, autorizacija kliente, nukreipimo puslapį įvedus neteisingą slaptažodį (tiksliau, peradresavimą į nukreipimo puslapį), kelių gijų režimą (t. y. keli žmonės gali dirbti su tuneliu tuo pačiu metu), tai yra kliento pingo sistema, siekiant nustatyti, ar jis gyvas, ar ne.

github.com/jun7th/tsocks
„Reverse Sox“ įdiegimas iš mūsų „Kinijos draugų“ Python. Ten tinginiams ir „nemirtingiems“ yra paruoštas dvejetainis failas (exe), surinktas kinų ir paruoštas naudoti. Čia tik kinų Dievas žino, ką dar gali turėti šis dvejetainis failas, be pagrindinės funkcijos, todėl naudokite savo rizika ir rizika.

github.com/securesocketfunneling/ssf
Gana įdomus projektas C++, skirtas reverse sox ir kt. Be atvirkštinio tunelio, jis gali atlikti prievadų persiuntimą, sukurti komandų apvalkalą ir pan.

MSF matuoklis
Čia, kaip sakoma, be komentarų. Visi net daugiau ar mažiau išsilavinę įsilaužėliai yra puikiai susipažinę su šiuo dalyku ir supranta, kaip lengvai jį gali aptikti saugos įrankiai.

Visi aukščiau aprašyti įrankiai veikia naudojant panašią technologiją: tinklo viduje esančioje mašinoje paleidžiamas iš anksto paruoštas vykdomasis dvejetainis modulis, kuris užmezga ryšį su išoriniu serveriu. Serveryje veikia SOCKS4/5 serveris, kuris priima ryšius ir perduoda juos klientui.

Visų aukščiau paminėtų įrankių trūkumas yra tas, kad kliento kompiuteryje turi būti įdiegtas Python arba Golang (ar dažnai matėte Python įdiegtą, pavyzdžiui, įmonės direktoriaus ar biuro darbuotojų mašinose?), arba iš anksto surinktą dvejetainis failas (iš tikrųjų python) turi būti nutemptas ant šio įrenginio ir scenarijus viename buteliuke) ir paleisti šį dvejetainį failą jau ten. O exe atsisiuntimas ir paleidimas taip pat yra vietinės antivirusinės ar HIPS parašas.

Apskritai išvada rodo pati save – mums reikia powershell sprendimo. Dabar pas mus skris pomidorai – sako, kad powershell jau visas nulaužtas, stebimas, blokuojamas ir pan. ir taip toliau. Tiesą sakant, ne visur. Deklaruojame atsakingai. Beje, yra daugybė būdų, kaip apeiti blokavimą (čia vėl madinga frazė apie hello RKN 🙂), pradedant nuo kvailo powershell.exe pervadinimo -> cmdd.exe ir baigiant powerdll ir t.t.

Pradėkime išradinėti

Aišku, kad pirmiausia pažiūrėsime Google ir... nieko šia tema nerasime (jei kas rado, rašykite nuorodas į komentarus). Yra tik vienas įgyvendinimas „Socks5“ ant „powershell“, tačiau tai paprastas „tiesioginis“ sox, turintis nemažai savų trūkumų (apie juos kalbėsime vėliau). Žinoma, galite šiek tiek judėdami ranka paversti jį atvirkštiniu, bet tai bus tik vieno sriegio soksas, kurio mums ne visai reikia.

Taigi, mes neradome nieko paruošto, todėl dar turėsime išradinėti savo dviratį. Mes imsime savo dviračio pagrindą mūsų vystymasis reverse sox Golang, ir mes įdiegiame klientą jam Powershell.

RSocksTun
Taigi, kaip veikia rsockstun?

RsocksTun (toliau – rs) veikimas pagrįstas dviem programinės įrangos komponentais – Yamux ir Socks5 serveriu. Socks5 serveris yra įprastas vietinis socks5, jis veikia kliente. O jungčių sutankinimas su juo (pamenate apie daugiagiją?) pateikiamas naudojant yamux (dar vienas multiplekseris). Ši schema leidžia paleisti kelis klientų socks5 serverius ir paskirstyti jiems išorinius ryšius, persiunčiant juos vienu TCP ryšiu (beveik kaip skaitiklyje) iš kliento į serverį, taip įgyvendinant kelių gijų režimą, be kurio mes tiesiog nebus. gali pilnai dirbti vidiniuose tinkluose.

„Yamux“ veikimo esmė yra ta, kad jis įveda papildomą tinklo srautų sluoksnį, įgyvendindamas jį kaip 12 baitų antraštę kiekvienam paketui. (Čia sąmoningai naudojame žodį „srautas“, o ne gija, kad nesupainiotume skaitytojo su programos srauto „gija“ - šią sąvoką naudosime ir šiame straipsnyje). Yamux antraštėje yra srauto numeris, srauto diegimo / nutraukimo vėliavėlės, perduotų baitų skaičius ir perdavimo lango dydis.

Reverse socks5 tarpinio serverio rašymas Powershell.1 dalis

Be srauto įdiegimo / nutraukimo, yamux įdiegia išlaikymo mechanizmą, kuris leidžia stebėti nustatyto ryšio kanalo veikimą. „Keeplive“ pranešimų mechanizmo veikimas sukonfigūruojamas kuriant „Yamux“ seansą. Tiesą sakant, iš nustatymų yra tik du parametrai: įjungti / išjungti ir paketų siuntimo dažnis sekundėmis. „Keepalive“ pranešimus gali siųsti „yamux“ serveris arba „yamux“ klientas. Gavusi nuolatinį pranešimą, nuotolinė šalis turi į jį atsakyti išsiųsdama lygiai tą patį pranešimo identifikatorių (iš tikrųjų numerį), kurį gavo. Apskritai, keepalive yra tas pats ping, tik skirtas yamux.

Visa multiplekserio veikimo technika: paketų tipai, jungčių nustatymo ir nutraukimo vėliavėlės bei duomenų perdavimo mechanizmas išsamiai aprašyti specifikacijos į yamux.

Pirmos dalies išvada

Taigi, pirmoje straipsnio dalyje susipažinome su kai kuriais atvirkštinių tunelių organizavimo įrankiais, pažvelgėme į jų privalumus ir trūkumus, išstudijavome Yamux multiplekserio veikimo mechanizmą ir aprašėme pagrindinius reikalavimus naujai kuriamam powershell moduliui. Kitoje dalyje kursime patį modulį, praktiškai nuo nulio. Tęsinys. Nekeisk :)

Šaltinis: www.habr.com

Добавить комментарий