Psaní Reverse Socks5 proxy v powershell. Část 1

Příběh o výzkumu a vývoji ve 3 částech. Část 1 je průzkumná.
Existuje mnoho buků - ještě více výhod.

Formulace problému

Během pentestů a kampaní RedTeam není vždy možné použít standardní nástroje zákazníka, jako je VPN, RDP, Citrix atd. jako kotva pro vstup do vnitřní sítě. Někde funguje standardní VPN pomocí MFA a jako druhý faktor se používá hardwarový token, jinde se brutálně hlídá a naše VPN přihlášení se okamžitě zviditelní, jak se říká, se vším, co to obnáší, jinde jsou ale prostě žádné takové prostředky.

V takových případech musíme neustále vytvářet takzvané „reverzní tunely“ - spojení z vnitřní sítě s externím zdrojem nebo serverem, který řídíme. Uvnitř takového tunelu již můžeme pracovat s interními zdroji zákazníků.

Existuje několik druhů těchto návratových tunelů. Nejznámější z nich je samozřejmě Meterpreter. SSH tunely s reverzním přesměrováním portů jsou také velmi žádané mezi masami hackerů. Prostředků pro implementaci zpětného tunelování je poměrně hodně a mnoho z nich je dobře prostudováno a popsáno.
Vývojáři bezpečnostních řešení samozřejmě nestojí stranou a aktivně takové akce odhalují.
Například relace MSF jsou úspěšně detekovány moderními IPS od Cisco nebo Positive Tech a reverzní SSH tunel dokáže detekovat téměř každý normální firewall.

Proto, abychom v dobré kampani RedTeamu zůstali bez povšimnutí, musíme vybudovat zpětný tunel pomocí nestandardních prostředků a co nejvíce se přizpůsobit reálnému provoznímu režimu sítě.

Zkusme něco podobného najít nebo vymyslet.

Než cokoliv vymyslíme, musíme pochopit, jakého výsledku chceme dosáhnout, jaké funkce by měl náš vývoj plnit. Jaké budou požadavky na tunel, abychom mohli pracovat v maximálním stealth režimu?

Je jasné, že pro každý případ se tyto požadavky mohou značně lišit, ale na základě pracovních zkušeností lze identifikovat ty hlavní:

  • pracovat na OS Windows-7-10. Protože většina podnikových sítí používá Windows;
  • klient se připojuje k serveru přes SSL, aby se vyhnul hloupému naslouchání pomocí ips;
  • Při připojování musí klient podporovat práci přes proxy server s autorizací, protože V mnoha společnostech probíhá přístup k internetu přes proxy. Ve skutečnosti o tom klientský počítač nemusí ani nic vědět a proxy se používá v transparentním režimu. Ale takovou funkcionalitu musíme poskytnout;
  • klientská část by měla být stručná a přenosná;
    Je jasné, že pro práci v síti zákazníka si můžete nainstalovat OpenVPN na klientský počítač a vytvořit plnohodnotný tunel na váš server (klienti openvpn naštěstí umí pracovat přes proxy). Ale za prvé to nebude fungovat vždy, protože tam možná nejsme místní admini, a zadruhé to nadělá tolik hluku, že nás slušný SIEM nebo HIPS okamžitě „nasere“. V ideálním případě by naším klientem měl být takzvaný inline příkaz, protože například mnoho bash shellů je implementováno a spouštěno přes příkazový řádek, například při provádění příkazů z makra slova.
  • náš tunel musí být vícevláknový a podporovat mnoho spojení současně;
  • spojení klient-server musí mít nějakou autorizaci, aby byl tunel vytvořen pouze pro našeho klienta a ne pro každého, kdo přichází na náš server na zadanou adresu a port. V ideálním případě by se pro „uživatele třetích stran“ měla otevřít vstupní stránka s kočkami nebo odbornými tématy souvisejícími s původní doménou.
    Pokud je například Zákazníkem lékařská organizace, pak pro správce informační bezpečnosti, který se rozhodne zkontrolovat zdroj, ke kterému zaměstnanec kliniky přistupoval, stránku s farmaceutickými produkty, Wikipedii s popisem diagnózy nebo blog Dr. Komarovského atd. . by se mělo otevřít.

Analýza existujících nástrojů

Než znovu vynaleznete své vlastní kolo, musíte provést analýzu stávajících jízdních kol a pochopit, zda je skutečně potřebujeme, a pravděpodobně nejsme jediní, kdo přemýšlel o potřebě takového funkčního kola.

Hledání na internetu (zdá se, že googlujeme normálně), stejně jako hledání na Github pomocí klíčových slov „reverse socks“ nepřineslo mnoho výsledků. V podstatě jde o budování ssh tunelů s reverzním přesměrováním portů a vším, co s tím souvisí. Kromě tunelů SSH existuje několik řešení:

github.com/klsecservices/rpivot
Dlouhotrvající implementace zpětného tunelu od lidí z Kaspersky Lab. Z názvu je jasné, k čemu je tento skript určen. Implementován v Pythonu 2.7, tunel funguje v režimu čistého textu (jak je nyní módní říkat - ahoj RKN)

github.com/tonyseek/rsocks
Další implementace v Pythonu, také v čistém textu, ale s více možnostmi. Je napsán jako modul a má API pro integraci řešení do vašich projektů.

github.com/llkat/rsockstun
github.com/mis-team/rsockstun
První odkaz je původní verze implementace reverse sox v Golang (nepodporovaná vývojářem).
Druhý odkaz je naše revize s dalšími funkcemi, také v Golangu. V naší verzi jsme implementovali SSL, práci přes proxy s autorizací NTLM, autorizaci na klientovi, vstupní stránku v případě nesprávného hesla (nebo spíše přesměrování na vstupní stránku), vícevláknový režim (tj. více lidí může pracovat současně s tunelem), systém pingování klienta, aby se zjistilo, zda je naživu nebo ne.

github.com/jun7th/tsocks
Implementace reverse sox od našich „čínských přátel“ v Pythonu. Tam je pro líné a „nesmrtelné“ připravená binárka (exe), sestavená Číňany a připravená k použití. Zde pouze čínský bůh ví, co dalšího může tato binárka obsahovat kromě hlavní funkčnosti, takže ji používejte na vlastní nebezpečí a riziko.

github.com/securesocketfunneling/ssf
Docela zajímavý projekt v C++ pro implementaci reverse sox a další. Kromě zpětného tunelu umí přesměrovat porty, vytvořit příkazový shell atd.

Lékaři bez hranic
Tady, jak se říká, žádné komentáře. Všichni i více či méně vzdělaní hackeři tuto věc velmi dobře znají a chápou, jak snadno ji mohou bezpečnostní nástroje odhalit.

Všechny výše popsané nástroje fungují pomocí podobné technologie: na stroji uvnitř sítě se spustí předem připravený spustitelný binární modul, který naváže spojení s externím serverem. Server provozuje server SOCKS4/5, který přijímá připojení a předává je klientovi.

Nevýhodou všech výše uvedených nástrojů je, že na klientském počítači musí být nainstalován buď Python nebo Golang (viděli jste často Python nainstalovaný na strojích např. ředitele společnosti nebo kancelářských pracovníků?), nebo předem sestavený binární (ve skutečnosti python) musí být přetažen na tento stroj a skript v jedné lahvičce) a spustit tento binární soubor již tam. A stažení exe a následné spuštění je také podpis pro lokální antivirus nebo HIPS.

Obecně se závěr naznačuje sám - potřebujeme powershell řešení. Teď na nás poletí rajčata - říkají, že powershell je již celý otřepaný, je monitorován, blokován atd. a tak dále. Vlastně ne všude. Odpovědně prohlašujeme. Mimochodem, je spousta způsobů, jak obejít blokování (tady je opět módní fráze o hello RKN 🙂), počínaje stupidním přejmenováním powershell.exe -> cmdd.exe a konče powerdll atd.

Začněme vymýšlet

Je jasné, že nejdřív se podíváme na Google a... nic na toto téma nenajdeme (pokud to někdo našel, dejte odkazy do komentářů). Existuje pouze implementace Socks5 na powershell, ale jedná se o obyčejný „přímý“ sox, který má řadu svých nevýhod (o nich si povíme později). Můžete ji samozřejmě mírným pohybem ruky otočit do rubu, ale to bude pouze jednovláknové sox, což pro nás není úplně to, co potřebujeme.

Takže jsme nenašli nic hotového, takže budeme muset naše kolo znovu vynalézt. Vezmeme jako základ pro naše kolo náš vývoj reverse sox v Golangu a implementujeme pro něj klienta v powershell.

RSocksTun
Jak tedy rsockstun funguje?

Provoz RsocksTun (dále jen rs) je založen na dvou softwarových komponentách - Yamux a Socks5 server. Server Socks5 je běžný místní server socks5, běží na klientovi. A multiplexování připojení k němu (pamatujete na multithreading?) je zajištěno pomocí yamux (další multiplexer). Toto schéma vám umožňuje spustit několik klientských socks5 serverů a distribuovat k nim externí připojení, přesměrovat je přes jediné TCP spojení (téměř jako v meterpreteru) z klienta na server, čímž implementujete vícevláknový režim, bez kterého se prostě neobejdeme. schopen plně pracovat ve vnitřních sítích.

Podstatou toho, jak yamux funguje, je to, že zavádí další síťovou vrstvu proudů a implementuje ji ve formě 12bajtové hlavičky pro každý paket. (Zde záměrně používáme slovo „stream“ spíše než vlákno, abychom čtenáře nepletli s programovým proudem „vlákno“ – tento pojem použijeme i v tomto článku). Hlavička yamux obsahuje číslo streamu, příznaky pro instalaci/ukončení streamu, počet přenesených bajtů a velikost okna přenosu.

Psaní Reverse Socks5 proxy v powershell. Část 1

Kromě instalace/ukončení streamu implementuje yamux mechanismus keepalive, který vám umožní sledovat výkon zavedeného komunikačního kanálu. Činnost mechanismu zpráv keeplive se konfiguruje při vytváření relace Yamux. Ve skutečnosti jsou z nastavení pouze dva parametry: povolení/zakázaní a frekvence odesílání paketů v sekundách. Zprávy Keepalive mohou být odesílány serverem yamux nebo klientem yamux. Při přijímání zprávy o zachování stavu na ni musí vzdálená strana odpovědět zasláním přesně stejného identifikátoru zprávy (ve skutečnosti čísla), který přijala. Obecně platí, že keepalive je stejný ping, pouze pro yamux.

Celá provozní technika multiplexeru: typy paketů, nastavení připojení a ukončovací příznaky a mechanismus přenosu dat jsou podrobně popsány v Specifikace na yamux.

Závěr k první části

V první části článku jsme se tedy seznámili s některými nástroji pro organizaci reverzních tunelů, podívali se na jejich výhody a nevýhody, nastudovali mechanismus fungování multiplexeru Yamux a popsali základní požadavky na nově vytvořený powershell modul. V příštím díle budeme vyvíjet samotný modul prakticky od nuly. Pokračování příště. Nepřepínat :)

Zdroj: www.habr.com

Přidat komentář