Písanie Reverse socks5 proxy v powershell. Časť 1

Príbeh o výskume a vývoji v 3 častiach. Časť 1 je prieskumná.
Existuje veľa bukov - ešte viac výhod.

Vyhlásenie o probléme

Počas pentestov a kampaní RedTeamu nie je vždy možné použiť štandardné nástroje zákazníka, ako sú VPN, RDP, Citrix atď. ako kotva pre vstup do vnútornej siete. Niekde funguje štandardná VPN pomocou MFA a ako druhý faktor sa používa hardvérový token, inde je to brutálne monitorované a naše prihlásenie do VPN sa okamžite zviditeľní, ako sa hovorí, so všetkým, čo to obnáša, no inde sú jednoducho žiadne také prostriedky.

V takýchto prípadoch musíme neustále vytvárať takzvané „reverzné tunely“ - spojenia z internej siete s externým zdrojom alebo serverom, ktorý kontrolujeme. Vo vnútri takéhoto tunela už vieme pracovať s internými zdrojmi zákazníkov.

Existuje niekoľko druhov týchto spätných tunelov. Najznámejší z nich je samozrejme Meterpreter. SSH tunely s reverzným presmerovaním portov sú tiež veľmi žiadané medzi masami hackerov. Existuje pomerne veľa prostriedkov na implementáciu reverzného tunelovania a mnohé z nich sú dobre preštudované a opísané.
Samozrejme, vývojári bezpečnostných riešení nezostávajú bokom a aktívne odhaľujú takéto akcie.
Napríklad relácie MSF sú úspešne detekované modernými IPS od Cisco alebo Positive Tech a reverzný SSH tunel dokáže detekovať takmer každý normálny firewall.

Preto, aby sme v dobrej kampani RedTeamu zostali nepovšimnutí, musíme vybudovať spätný tunel pomocou neštandardných prostriedkov a čo najviac sa prispôsobiť reálnemu prevádzkovému režimu siete.

Skúsme niečo podobné nájsť alebo vymyslieť.

Skôr než čokoľvek vymyslíme, musíme pochopiť, aký výsledok chceme dosiahnuť, aké funkcie by mal náš vývoj vykonávať. Aké budú požiadavky na tunel, aby sme mohli pracovať v maximálnom stealth režime?

Je zrejmé, že v každom prípade sa tieto požiadavky môžu výrazne líšiť, ale na základe pracovných skúseností možno identifikovať hlavné:

  • pracovať na OS Windows-7-10. Keďže väčšina podnikových sietí používa systém Windows;
  • klient sa pripája k serveru cez SSL, aby sa zabránilo hlúpemu počúvaniu pomocou IP;
  • Pri pripájaní musí klient podporovať prácu cez proxy server s autorizáciou, pretože V mnohých spoločnostiach sa prístup na internet uskutočňuje prostredníctvom proxy. V skutočnosti o tom klientsky počítač nemusí ani vedieť a proxy sa používa v transparentnom režime. Ale musíme poskytnúť takúto funkčnosť;
  • klientska časť by mala byť stručná a prenosná;
    Je jasné, že ak chcete pracovať v sieti zákazníka, môžete nainštalovať OpenVPN na klientsky počítač a vytvoriť plnohodnotný tunel na váš server (klienti openvpn našťastie môžu pracovať cez proxy). Ale po prvé to nebude vždy fungovať, keďže tam možno nie sme lokálni admini, a po druhé, narobí to toľko hluku, že po nás slušný SIEM alebo HIPS okamžite „naserie“. V ideálnom prípade by naším klientom mal byť takzvaný inline príkaz, keďže napríklad veľa bash shellov je implementovaných a spúšťaných cez príkazový riadok, napríklad pri vykonávaní príkazov z makra slova.
  • náš tunel musí byť viacvláknový a podporovať veľa spojení súčasne;
  • spojenie klient-server musí mať nejakú autorizáciu, aby sa tunel vytvoril iba pre nášho klienta a nie pre každého, kto príde na náš server na zadanú adresu a port. V ideálnom prípade by sa vstupná stránka s mačkami alebo odbornými témami súvisiacimi s pôvodnou doménou mala otvoriť pre používateľov tretích strán.
    Napríklad, ak je Zákazníkom lekárska organizácia, potom pre správcu informačnej bezpečnosti, ktorý sa rozhodne skontrolovať zdroj, ku ktorému pristupoval zamestnanec kliniky, stránku s farmaceutickými produktmi, Wikipédiu s popisom diagnózy alebo blog Dr. Komarovského atď. . by sa malo otvoriť.

Analýza existujúcich nástrojov

Pred znovuvynájdením vlastného bicykla musíte urobiť analýzu existujúcich bicyklov a pochopiť, či to skutočne potrebujeme, a pravdepodobne nie sme jediní, ktorí premýšľali o potrebe takéhoto funkčného bicykla.

Google na internete (zdá sa, že googlime normálne), ako aj vyhľadávanie na Github pomocou kľúčových slov „reverse socks“ nepriniesli veľa výsledkov. V podstate to všetko spočíva v budovaní ssh tunelov s reverzným presmerovaním portov a všetkým, čo s tým súvisí. Okrem tunelov SSH existuje niekoľko riešení:

github.com/klsecservices/rpivot
Dlhoročná implementácia spätného tunela od ľudí z Kaspersky Lab. Z názvu je jasné, na čo je tento skript určený. Implementovaný v Pythone 2.7, tunel funguje v režime čistého textu (ako je teraz módne povedať - ahoj RKN)

github.com/tonyseek/rsocks
Ďalšia implementácia v Pythone, tiež v čistom texte, ale s viacerými možnosťami. Je napísaný ako modul a má API na integráciu riešenia do vašich projektov.

github.com/llkat/rsockstun
github.com/mis-team/rsockstun
Prvý odkaz je pôvodná verzia implementácie reverznej sox v Golang (nepodporovaná vývojárom).
Druhý odkaz je naša revízia s ďalšími funkciami, tiež v Golangu. V našej verzii sme implementovali SSL, prácu cez proxy s NTLM autorizáciou, autorizáciu na klientovi, vstupnú stránku v prípade nesprávneho hesla (alebo skôr presmerovanie na vstupnú stránku), viacvláknový režim (t.j. viacero ľudí môže súčasne pracovať s tunelom), systém pingovania klienta na zistenie, či je nažive alebo nie.

github.com/jun7th/tsocks
Implementácia reverse sox od našich „čínskych priateľov“ v Pythone. Pre lenivých a „nesmrteľných“ je tu hotová binárna (exe), zostavená Číňanmi a pripravená na použitie. Tu iba čínsky Boh vie, čo ešte môže tento binárny súbor obsahovať okrem hlavnej funkčnosti, takže ho používajte na vlastné nebezpečenstvo a riziko.

github.com/securesocketfunneling/ssf
Celkom zaujímavý projekt v C++ na implementáciu reverse sox a ďalších. Okrem spätného tunela dokáže presmerovať porty, vytvoriť príkazový shell atď.

Merač MSF
Tu, ako sa hovorí, žiadne komentáre. Všetci aj viac či menej vzdelaní hackeri túto vec veľmi dobre poznajú a chápu, ako ľahko ju môžu bezpečnostné nástroje odhaliť.

Všetky vyššie opísané nástroje fungujú pomocou podobnej technológie: na stroji vo vnútri siete sa spustí vopred pripravený spustiteľný binárny modul, ktorý vytvorí spojenie s externým serverom. Server prevádzkuje server SOCKS4/5, ktorý prijíma pripojenia a prenáša ich klientovi.

Nevýhodou všetkých vyššie uvedených nástrojov je, že na klientskom počítači musí byť nainštalovaný buď Python alebo Golang (videl ste často Python nainštalovaný na strojoch napríklad riaditeľa spoločnosti alebo pracovníkov kancelárie?), alebo vopred zostavený binárny (v skutočnosti python) je potrebné pretiahnuť na tento počítač a skript v jednej fľaši) a spustiť tento binárny súbor už tam. A stiahnutie exe a následné spustenie je tiež podpis pre lokálny antivírus alebo HIPS.

Vo všeobecnosti záver naznačuje sám seba - potrebujeme powershell riešenie. Teraz na nás vyletia paradajky – vraj powershell je už celý ošúchaný, je monitorovaný, zablokovaný atď. a tak ďalej. Vlastne nie všade. Vyhlasujeme zodpovedne. Mimochodom, existuje veľa spôsobov, ako obísť blokovanie (opäť je tu módna fráza o ahoj RKN 🙂), počnúc hlúpym premenovaním powershell.exe -> cmdd.exe a končiac powerdll atď.

Začnime vymýšľať

Je jasné, že najprv sa pozrieme na Google a... nenájdeme nič na túto tému (ak to niekto našiel, dajte odkazy do komentárov). Tam je iba uskutočnenie Socks5 na powershell, ale toto je obyčajný „priamy“ sox, ktorý má množstvo svojich nevýhod (o nich si povieme neskôr). Môžete ho, samozrejme, miernym pohybom ruky otočiť do reverzu, ale to bude len jednovláknový sox, čo nie je úplne to, čo pre nás potrebujeme.

Nenašli sme teda nič hotové, takže budeme musieť znovu vynájsť naše koleso. Budeme brať ako základ pre náš bicykel náš vývoj reverse sox v Golang a implementujeme preň klienta v powershell.

RSocksTun
Ako teda rsockstun funguje?

Prevádzka RsocksTun (ďalej len rs) je založená na dvoch softvérových komponentoch - Yamux a Socks5 server. Server Socks5 je bežný lokálny server socks5, beží na klientovi. A multiplexovanie pripojení k nemu (pamätáte si na multithreading?) je zabezpečené pomocou yamux (ešte jeden multiplexer). Táto schéma vám umožňuje spustiť niekoľko klientskych socks5 serverov a distribuovať k nim externé pripojenia, preposielať ich cez jediné TCP pripojenie (takmer ako v meterpreter) z klienta na server, čím sa implementuje viacvláknový režim, bez ktorého sa jednoducho nezaobídeme. schopný plne pracovať vo vnútorných sieťach.

Podstatou toho, ako yamux funguje, je, že zavádza ďalšiu sieťovú vrstvu streamov a implementuje ju vo forme 12-bajtovej hlavičky pre každý paket. (Tu zámerne používame slovo „stream“ namiesto vlákna, aby sme čitateľa nemýlili s programovým streamom „vlákno“ – tento pojem použijeme aj v tomto článku). Hlavička yamux obsahuje číslo streamu, príznaky pre inštaláciu/ukončenie streamu, počet prenesených bajtov a veľkosť okna prenosu.

Písanie Reverse socks5 proxy v powershell. Časť 1

Okrem inštalácie/ukončenia streamu yamux implementuje mechanizmus udržiavania, ktorý vám umožňuje monitorovať výkon vytvoreného komunikačného kanála. Činnosť mechanizmu správ keeplive sa konfiguruje pri vytváraní relácie Yamux. V skutočnosti sú z nastavení iba dva parametre: povoliť/zakázať a frekvenciu odosielania paketov v sekundách. Správy Keepalive môžu odosielať server yamux alebo klient yamux. Pri prijímaní správy o udržiavaní nažive musí na ňu vzdialená strana odpovedať odoslaním presne rovnakého identifikátora správy (v skutočnosti čísla), ktorý prijala. Vo všeobecnosti je keepalive rovnaký ping, iba pre yamux.

Celá prevádzková technika multiplexora: typy paketov, nastavenie spojenia a ukončenie a mechanizmus prenosu dát sú podrobne popísané v technické údaje na yamux.

Záver k prvej časti

V prvej časti článku sme sa teda oboznámili s niektorými nástrojmi na organizovanie reverzných tunelov, pozreli sme sa na ich výhody a nevýhody, naštudovali sme si mechanizmus fungovania multiplexora Yamux a popísali základné požiadavky na novovytvorený powershell modul. V ďalšej časti budeme vyvíjať samotný modul prakticky od začiatku. Pokračovanie nabudúce. Neprepínaj :)

Zdroj: hab.com

Pridať komentár