Scrittura proxy Reverse socks5 in powershell.Parte 1

Una storia nantu à a ricerca è u sviluppu in 3 parti. A parte 1 hè esplorativa.
Ci sò assai faggi - ancu più benefici.

Formulazione di u prublema

Durante i pentests è e campagni RedTeam, ùn hè micca sempre pussibule di utilizà l'arnesi standard di u Cliente, cum'è VPN, RDP, Citrix, etc. cum'è un ancora per entra in a reta interna. In certi lochi, una VPN standard funziona cù MFA è un token di hardware hè utilizatu cum'è un secondu fattore, in altri hè brutalmente monitoratu è u nostru login VPN diventa immediatamente visibile, cum'è dicenu, cù tuttu ciò chì implica, ma in altri ci sò simpricimenti micca tali mezi.

In tali casi, avemu constantemente à fà cusì chjamati "tunnel inversu" - cunnessione da a reta interna à una risorsa esterna o un servitore chì cuntrullemu. Dentru un tali tunnel, pudemu digià travaglià cù e risorse internu di i Clienti.

Ci sò parechje varietà di sti tunnel di ritornu. U più famosu di elli hè, sicuru, Meterpreter. I tunnelli SSH cù u portu inversu sò ancu in grande dumanda trà e masse di pirate. Ci sò assai mezi per implementà u tunneling inversu è parechji di elli sò ben studiati è descritti.
Di sicuru, per a so parte, i sviluppatori di suluzioni di sicurità ùn si mettenu da parte è rilevanu attivamente tali azzioni.
Per esempiu, e sessioni MSF sò rilevati cù successu da IPS muderni da Cisco o Positive Tech, è un tunnel SSH inversu pò esse rilevatu da quasi ogni firewall normale.

Per quessa, per esse inespertu in una bona campagna RedTeam, avemu bisognu di custruisce un tunnel inversu cù mezi non standard è adattà u più vicinu à u modu di u funziunamentu veru di a reta.

Pruvemu di truvà o inventà qualcosa simili.

Prima di inventà qualcosa, avemu bisognu di capisce quale risultatu vulemu ottene, chì funzioni deve esse realizatu u nostru sviluppu. Chì saranu i requisiti per u tunelu per pudè travaglià in modu massimu di stealth?

Hè chjaru chì per ogni casu tali esigenze pò esse assai diffirenti, ma basatu nantu à l'esperienza di travagliu, i principali ponu esse identificati:

  • travaglià nant'à Windows-7-10 OS. Siccomu a maiò parte di e rete corporative utilizanu Windows;
  • u cliente si cunnetta à u servitore via SSL per evità l'ascolta stupida cù ips;
  • Quandu si cunnetta, u cliente deve sustene u travagliu attraversu un servitore proxy cù l'autorizazione, perchè In parechje cumpagnie, l'accessu à Internet si faci per un proxy. In fatti, a macchina cliente ùn pò mancu sapè nunda di questu, è u proxy hè utilizatu in modu trasparente. Ma avemu da furnisce tali funziunalità;
  • a parte di u cliente deve esse cuncisa è portable;
    Hè chjaru chì per travaglià in a reta di u Cliente, pudete installà OpenVPN nantu à a macchina di u cliente è creà un tunelu cumpletu à u vostru servitore (sfurtunatamente, i clienti openvpn ponu travaglià cù un proxy). Ma, prima, questu ùn hà micca sempre travagliatu, postu chì ùn pudemu micca esse amministratori lucali quì, è in segundu, farà tantu rumore chì un SIEM o HIPS decentu immediatamente "snitch on" noi. Ideale, u nostru cliente deve esse un cumandamentu chjamatu inline, cum'è per esempiu parechji bash shells sò implementati, è lanciati via a linea di cumanda, per esempiu, quandu eseguisce cumandamenti da una macro di parola.
  • u nostru tunelu deve esse multi-threaded è sustene parechje cunnessione simultaneamente;
  • a cunnessione cliente-servitore deve avè qualchì tipu d'autorizazione per chì u tunelu hè stabilitu solu per u nostru cliente, è micca per tutti quelli chì venenu à u nostru servitore à l'indirizzu è u portu specificatu. Ideale, una pagina di destinazione cù i misgi o temi prufessiunali ligati à u duminiu originale deve esse apertu per "utilizatori di terzu".
    Per esempiu, se u Cliente hè una urganizazione medica, allora per un amministratore di sicurità di l'infurmazioni chì decide di verificà a risorsa chì un impiigatu di a clinica accede, una pagina cù prudutti farmaceutici, Wikipedia cù una descrizzione di u diagnosticu, o u blog di Dr Komarovsky, etc. duverebbe apre.

Analisi di i strumenti esistenti

Prima di reinventà a vostra propria bicicletta, avete bisognu di fà una analisi di e biciclette esistenti è capisce s'ellu ci hè veramente bisognu è, prubabilmente, ùn simu micca l'unichi chì anu pensatu à a necessità di una bicicletta cusì funziunale.

Googling in Internet (ci pare di google nurmale), è ancu di ricerca in Github cù e parolle chjave "calzini inversi" ùn hà micca datu assai risultati. In fondu, tuttu si riduce à a custruzione di tunnel ssh cù u portu inversu è tuttu ciò chì hè cunnessu cun ellu. In più di i tunnel SSH, ci sò parechje soluzioni:

github.com/klsecservices/rpivot
Una implementazione longa di un tunnel inversu da i ragazzi di Kaspersky Lab. U nome rende chjaru ciò chì stu script hè destinatu. Implementatu in Python 2.7, u tunnel opera in modu di testu chjaru (cum'è hè di moda per dì avà - salutu RKN)

github.com/tonyseek/rsocks
Un'altra implementazione in Python, ancu in testu chjaru, ma cù più pussibulità. Hè scrittu cum'è un modulu è hà una API per integrà a suluzione in i vostri prughjetti.

github.com/llkat/rsockstun
github.com/mis-team/rsockstun
U primu ligame hè a versione originale di l'implementazione di sox inversa in Golang (micca supportatu da u sviluppatore).
U sicondu ligame hè a nostra rivisione cù funzioni supplementari, ancu in Golang. In a nostra versione, avemu implementatu SSL, travaglià attraversu un proxy cù l'autorizazione NTLM, l'autorizazione nantu à u cliente, una pagina di destinazione in casu di una password incorrecta (o megliu, una redirezzione à a pagina di destinazione), modu multi-threaded (vale à dì parechje persone). pò travaglià cù u tunelu à u stessu tempu), un sistema di ping u cliente per stabilisce s'ellu hè vivu o micca.

github.com/jun7th/tsocks
Implementazione di reverse sox da i nostri "amici chinesi" in Python. Quì, per i pigri è "immortali", ci hè un binariu ready-made (exe), assemblatu da i Cinesi è prontu per l'usu. Quì, solu u Diu Cinese sà ciò chì stu binariu pò cuntene in più di a funziunalità principale, cusì aduprà à u vostru propiu periculu è risicu.

github.com/securesocketfunneling/ssf
Un prughjettu abbastanza interessante in C++ per l'implementazione di reverse sox è più. In più di u tunelu inversu, pò fà u portu forwarding, creà una shell di cumanda, etc.

MSF meterpreter
Quì, cum'è dicenu, senza cumenti. Tutti i pirate ancu più o menu educati sò assai familiarizati cù sta cosa è capiscenu quantu facilmente pò esse rilevatu da i strumenti di sicurezza.

Tutti l'arnesi descritti sopra travaglianu cù una tecnulugia simili: un modulu binari eseguibile pre-preparatu hè lanciatu nantu à una macchina in a reta, chì stabilisce una cunnessione cù un servitore esternu. U servitore gestisce un servitore SOCKS4/5 chì accetta e cunnessione è li trasmette à u cliente.

U svantaghju di tutti l'arnesi di sopra hè chì o Python o Golang deve esse installatu nantu à a macchina di u cliente (avete vistu spessu Python installatu nantu à e macchine, per esempiu, un direttore di l'impresa o un impiegatu?), o un pre-assemblatu. binariu (in realtà python) deve esse trascinatu nantu à sta macchina è script in una buttiglia) è eseguisce stu binariu digià quì. È scaricate un exe è poi lanciate hè ancu una firma per un antivirus locale o HIPS.

In generale, a cunclusione suggerisce sè stessu - avemu bisognu di una suluzione powershell. Avà i pumati volaranu à noi - dicenu chì a powershell hè digià tutta chjappata, hè monitorata, bluccata, etc. eccetera. In fatti, micca in ogni locu. Dichjaremu in modu rispunsevule. A propositu, ci sò parechje manere di scaccià u bluccatu (qui di novu ci hè una frasa di moda nantu à ciao RKN 🙂), partendu da a stupida rinominazione di powershell.exe -> cmdd.exe è finisce cù powerdll, etc.

Cuminciamu à inventà

Hè chjaru chì prima cercheremu in Google è... ùn truveremu nunda nantu à questu tema (se qualchissia l'hà trovu, post ligami in i cumenti). Ci hè solu implementazione Socks5 in powershell, ma questu hè un sox "direttu" ordinariu, chì hà una quantità di i so svantaghji (ne parlemu dopu). Puderete, sicuru, cun un ligeru muvimentu di a manu, trasfurmà in u reversu, ma questu serà solu un sox à filu unicu, chì ùn hè micca bè ciò chì avemu bisognu per noi.

Dunque, ùn avemu micca truvatu nunda di prontu, cusì avemu sempre da reinventà a nostra rota. Piglieremu cum'è a basa per a nostra bicicletta u nostru sviluppu reverse sox in Golang, è implementemu un cliente per questu in powershell.

RSocksTun
Allora cumu funziona rsockstun?

L'operazione di RsocksTun (in seguitu chjamatu rs) hè basatu annantu à dui cumpunenti di software - Yamux è Socks5 server. U servitore Socks5 hè un socks5 locale regularmente, corre nantu à u cliente. È a multiplexazione di cunnessione à questu (ricurdate di u multithreading?) hè furnita cù yamux (un altru multiplexer). Stu schema vi permette di lancià parechji servitori di cliente socks5 è di distribuisce cunnessi esterni à elli, trasmettenduli per una sola cunnessione TCP (quasi cum'è in meterpreter) da u cliente à u servitore, implementendu cusì un modu multi-threaded, senza quale ùn seremu micca solu. capace di travaglià cumplettamente in e rete internu.

L'essenza di u funziunamentu di yamux hè chì introduce una strata di rete supplementaria di flussi, implementendu in a forma di un capu di 12 byte per ogni pacchettu. (Quì avemu deliberatamente aduprà a parolla "flussu" invece di filu, per ùn cunfundà u lettore cù un flussu di prugramma "filu" - avemu ancu aduprà stu cuncettu in questu articulu). L'intestazione yamux cuntene u numeru di flussu, bandiere per installà / finisce u flussu, u numeru di bytes trasferiti, è a dimensione di a finestra di trasferimentu.

Scrittura proxy Reverse socks5 in powershell.Parte 1

In più di installà / finisce un flussu, yamux implementa un mecanismu keepalive chì permette di monitorà u rendiment di u canali di cumunicazione stabilitu. U funziunamentu di u mekanismu di u messagiu keeplive hè cunfiguratu quandu crea una sessione Yamux. In fatti, di i paràmetri sò solu dui parametri: attivà / disattivà è a frequenza di mandà pacchetti in seconde. I missaghji Keepalive ponu esse mandati da un servitore yamux o un cliente yamux. Quandu riceve un missaghju keepalive, u partitu remoto deve risponde à ellu mandendu esattamente u stessu identificatore di missaghju (in realtà un numeru) chì hà ricevutu. In generale, keepalive hè u listessu ping, solu per yamux.

Tutta a tecnica operativa di u multiplexer: tippi di pacchetti, installazione di cunnessione è bandieri di terminazione, è u mecanismu di trasferimentu di dati sò descritti in dettagliu in quaternu à yamux.

Conclusioni à a prima parte

Dunque, in a prima parte di l'articulu, avemu avutu cunniscenze cù qualchi strumenti per urganizà tunnels inversi, fighjulà i so vantaghji è i disadvantages, studiatu u mecanismu di funziunamentu di u multiplexer Yamux è descrive i requisiti basi per u modulu Powershell di novu creatu. In a parti dopu avemu da sviluppà u modulu stessu, praticamenti da zero. À seguità. Ùn cambiate micca :)

Source: www.habr.com

Add a comment