Schreiwen Reverse socks5 Proxy an powershell.Deel 1

Eng Geschicht iwwer Fuerschung an Entwécklung an 3 Deeler. Deel 1 ass explorativ.
Et gi vill Buchebeem - nach méi Virdeeler.

Problemerklärung

Wärend Pentesten a RedTeam Kampagnen ass et net ëmmer méiglech de Standard Tools vum Client ze benotzen, wéi VPN, RDP, Citrix, etc. als Anker fir an den internen Netz anzeginn. Op e puer Plazen funktionéiert e Standard VPN mat MFA an en Hardware Token gëtt als zweete Faktor benotzt, op anerer gëtt et brutal iwwerwaacht an eise VPN Login gëtt direkt siichtbar, wéi se soen, mat allem wat et enthält, awer an anerer sinn et einfach keng esou Mëttel.

An esou Fäll musse mir permanent sougenannte "Reverse Tunnels" maachen - Verbindunge vum internen Netzwierk op eng extern Ressource oder e Server dee mir kontrolléieren. An esou engem Tunnel kënne mir scho mat de Clienten intern Ressourcen schaffen.

Et gi verschidde Zorte vun dësen Retour Tunnel. De bekanntste vun hinnen ass natierlech Meterpreter. SSH Tunnel mat ëmgedréint Port Forwarding sinn och grouss Nofro ënnert den Hacker Massen. Et gi zimmlech vill Mëttele fir ëmgedréint Tunneling ëmzesetzen a vill vun hinnen si gutt studéiert a beschriwwen.
Natierlech, fir hiren Deel, Entwéckler vu Sécherheetsléisungen net ophalen an aktiv sou Aktiounen z'entdecken.
Zum Beispill, MSF Sessiounen sinn erfollegräich duerch modern IPS vun Cisco oder Positive Tech entdeckt, an engem ëmgedréint SSH Tunnel kann duerch bal all normal Firewall entdeckt ginn.

Dofir, fir onnotéiert an enger gudder RedTeam Kampagne ze bleiwen, musse mir en ëmgedréint Tunnel mat Net-Standard Mëttelen bauen an esou no wéi méiglech un den realen Operatiounsmodus vum Netz upassen.

Loosst eis probéieren eppes ähnleches ze fannen oder ze erfannen.

Ier mer eppes erfannen, musse mir verstoen wat Resultat mir wëllen erreechen, wéi eng Funktiounen eis Entwécklung soll ausféieren. Wat wäerten d'Ufuerderunge fir den Tunnel sinn, fir datt mir am maximale Stealth-Modus kënne schaffen?

Et ass kloer datt fir all Fall esou Ufuerderunge vill ënnerscheeden kënnen, awer op Basis vun der Aarbechtserfahrung kënnen déi Haapt identifizéiert ginn:

  • Aarbecht op Windows-7-10 OS. Well déi meescht Firmennetzwierker Windows benotzen;
  • de Client verbënnt mam Server iwwer SSL fir domm Nolauschteren mat Ips ze vermeiden;
  • Wann Dir konnektéiert, muss de Client Aarbecht duerch e Proxy Server mat Autorisatioun ënnerstëtzen, well A ville Firmen ass den Zougang zum Internet duerch e Proxy. Tatsächlech kann d'Clientmaschinn net emol eppes doriwwer wëssen, an de Proxy gëtt an engem transparenten Modus benotzt. Mä mir mussen esou Funktionalitéit ubidden;
  • de Client Deel soll präzis a portabel sinn;
    Et ass kloer datt fir am Netz vum Client ze schaffen, Dir kënnt OpenVPN op der Clientmaschinn installéieren an e vollwäertege Tunnel op Äre Server erstellen (glécklecherweis kënnen openvpn Clienten duerch e Proxy schaffen). Mä éischtens geet dat net ëmmer, well mir do vläicht keng lokal Administrateuren sinn, an zweetens wäert et sou vill Kaméidi maachen, datt en anstännegen SIEM oder HIPS eis direkt "schneit". Idealerweis soll eise Client e sougenannten Inline Kommando sinn, well zum Beispill vill Bash Shells ëmgesat ginn, an iwwer d'Kommandozeil lancéiert ginn, zum Beispill wann Dir Kommandoen aus engem Wuert Makro ausféiert.
  • eisen Tunnel muss multi-threaded sinn a vill Verbindungen gläichzäiteg ënnerstëtzen;
  • d'Client-Server Verbindung muss eng Zort Autorisatioun hunn, sou datt den Tunnel nëmme fir eise Client etabléiert ass, an net fir jiddereen deen op eise Server op der spezifizéierter Adress an Hafen kënnt. Idealerweis sollt eng Landung Säit mat Kazen oder berufflechen Themen am Zesummenhang mat der ursprénglecher Domain fir "Drëtt-Partei Benotzer" opmaachen.
    Zum Beispill, wann de Client eng medezinesch Organisatioun ass, dann fir en Informatiounssécherheetsadministrator deen decidéiert d'Ressource z'iwwerpréiwen, op déi en Employé vun der Klinik zougänglech ass, eng Säit mat pharmazeuteschen Produkter, Wikipedia mat enger Beschreiwung vun der Diagnos, oder dem Dr Komarovsky säi Blog, etc. soll opmaachen.

Analyse vun bestehend Tools

Ier Dir Ären eegene Vëlo nei erfannen, musst Dir eng Analyse vun existéierende Vëloen maachen a verstoen ob mir et wierklech brauchen a wahrscheinlech net déi eenzeg sinn, déi iwwer d'Noutwendegkeet vun esou engem funktionnelle Vëlo geduecht hunn.

Googelen um Internet (mir schéngen normalerweis ze Google), wéi och d'Sich op Github mat de Schlësselwieder "Reverse Socks" huet net vill Resultater ginn. Prinzipiell geet et alles erof op ssh-Tunnel ze bauen mat ëmgedréint Port Forwarding an alles wat domat verbonnen ass. Zousätzlech zu SSH Tunnel ginn et verschidde Léisungen:

github.com/klsecservices/rpivot
Eng laangjäreg Ëmsetzung vun engem ëmgedréint Tunnel vun de Kärelen am Kaspersky Lab. Den Numm mécht kloer fir wat dëst Skript geduecht ass. Am Python 2.7 implementéiert, funktionnéiert den Tunnel am Kloertextmodus (wéi et elo moudesch ass ze soen - Hallo RKN)

github.com/tonyseek/rsocks
Eng aner Implementatioun am Python, och am Kloertext, awer mat méi Méiglechkeeten. Et ass als Modul geschriwwen an huet eng API fir d'Léisung an Äre Projeten z'integréieren.

github.com/llkat/rsockstun
github.com/mis-team/rsockstun
Den éischte Link ass d'Original Versioun vun der ëmgedréint Sox Implementatioun zu Golang (net vum Entwéckler ënnerstëtzt).
Den zweete Link ass eis Versioun mat zousätzlech Funktiounen, och am Golang. An eiser Versioun hu mir SSL implementéiert, schaffen duerch e Proxy mat NTLM Autorisatioun, Autorisatioun um Client, eng Landung Säit am Fall vun engem falsche Passwuert (oder éischter, e Viruleedung op d'Landung Säit), Multi-threaded Modus (dh e puer Leit kann gläichzäiteg mam Tunnel schaffen), e System fir de Client ze pingelen fir ze bestëmmen ob hien lieweg ass oder net.

github.com/jun7th/tsocks
Ëmsetzung vun ëmgedréint Sox vun eise "Chinese Frënn" am Python. Do, fir déi faul an "onstierwlech", gëtt et e fäerdege Binär (exe), vun de Chinesen zesummegesat a prett fir ze benotzen. Hei, nëmmen de Chinese Gott weess wat soss dëser binär Nieft der Haaptrei Funktionalitéit enthalen kann, also benotzen op Är eegen Gefor a Risiko.

github.com/securesocketfunneling/ssf
Zimlech en interessante Projet am C ++ fir ëmgedréint Sox a méi ëmzesetzen. Zousätzlech zum ëmgedréint Tunnel kann et Port Forwarding maachen, e Kommando Shell erstellen, etc.

MSF Meterpreter
Hei, wéi se soen, keng Kommentaren. All souguer méi oder manner gebilt Hacker si ganz vertraut mat dëser Saach a verstinn wéi einfach et duerch Sécherheetsinstrumenter erkannt ka ginn.

All déi uewe beschriwwen Tools funktionnéieren mat enger ähnlecher Technologie: e virbereet ausführbare binäre Modul gëtt op enger Maschinn am Netz lancéiert, déi eng Verbindung mat engem externen Server erstellt. De Server leeft e SOCKS4/5 Server deen Verbindungen akzeptéiert an se un de Client relaiséiert.

Den Nodeel vun all den uewe genannten Tools ass datt entweder Python oder Golang op der Clientmaschinn installéiert musse ginn (hues du dacks Python op de Maschinnen vun z.B. engem Firmendirekter oder Büroaarbechter installéiert gesinn?), Oder e pre-montéierten binär (eigentlech Python) muss op dës Maschinn a Skript an enger Fläsch geschleeft ginn) a lafen dës Binär schonn do. An en exe eroflueden an dann starten ass och eng Ënnerschrëft fir e lokalen Antivirus oder HIPS.

Am Allgemengen, proposéiert d'Conclusioun selwer - mir brauchen eng Powershell Léisung. Elo fléien Tomaten op eis - si soen datt Powershell schonn alles gehackt ass, et gëtt iwwerwaacht, blockéiert, etc. a sou weider. Tatsächlech net iwwerall. Mir erklären responsabel. Iwwregens, et gi vill Weeër fir d'Blockéierung z'iwwergoen (hei gëtt et nach eng Kéier e fashionable Saz iwwer Hallo RKN 🙂), ugefaange vum domm Ëmbenennung vu powershell.exe -> cmdd.exe an ophalen mat powerdll, etc.

Loosst eis ufänken ze erfannen

Et ass kloer datt mir als éischt op Google kucken an ... mir wäerten näischt iwwer dëst Thema fannen (wann een et fonnt huet, post Linken an de Kommentaren). Et gëtt nëmmen Ëmsetzung Socks5 op Powershell, awer dëst ass e gewéinleche "direkten" Sox, deen eng Rei vu sengen Nodeeler huet (mir wäerte méi spéit iwwer si schwätzen). Dir kënnt selbstverständlech mat enger liichter Beweegung vun Ärer Hand an d'Réck ëmdréinen, awer dëst wäert nëmmen eenzel Threaded Sox sinn, wat net ganz ass wat mir fir eis brauchen.

Also, mir hunn näischt fäerdeg fonnt, also musse mir eis Rad nach nei erfannen. Mir huelen als Basis fir eise Vëlo eis Entwécklung ëmgedréint sox zu Golang, a mir ëmsetzen e Client fir et an Powershell.

RSocksTun
Also wéi funktionnéiert rsockstun?

D'Operatioun vu RsocksTun (nodréiglech als rs bezeechent) baséiert op zwee Softwarekomponenten - Yamux a Socks5 Server. Socks5 Server ass e reguläre lokale Socks5, et leeft um Client. A Multiplexing vu Verbindunge mat et (erënnert Iech un Multithreading?) gëtt mat yamux (nach en anere Multiplexer). Dëse Schema erlaabt Iech e puer Client socks5 Serveren ze lancéieren an extern Verbindunge mat hinnen ze verdeelen, se duerch eng eenzeg TCP Verbindung weiderginn (bal wéi am Meterpreter) vu Client op Server, an doduerch e Multi-threaded Modus ëmsetzen, ouni deen mir einfach net wäerte sinn fäeg voll an den internen Netzwierker ze schaffen.

D'Essenz vu wéi yamux funktionnéiert ass datt et eng zousätzlech Netzwierkschicht vu Streame virstellt, déi se a Form vun engem 12-Byte Header fir all Paket implementéiert. (Hei benotze mir bewosst d'Wuert "Stream" anstatt Fuedem, fir de Lieser net mat engem Programm Stream "Thread" ze verwiesselen - mir wäerten dëst Konzept och an dësem Artikel benotzen). Den Yamux Header enthält d'Streamnummer, Fändelen fir de Stream z'installéieren / ofzeschléissen, d'Zuel vun den transferéierte Bytes an d'Gréisst vun der Transferfenster.

Schreiwen Reverse socks5 Proxy an powershell.Deel 1

Zousätzlech fir e Stroum z'installéieren / ofzeschléissen, implementéiert yamux e Keepalive Mechanismus deen Iech erlaabt d'Leeschtung vum etabléierte Kommunikatiounskanal ze iwwerwaachen. D'Operatioun vum Keeplive Message Mechanismus ass konfiguréiert wann Dir eng Yamux Sessioun erstellt. Eigentlech, vun den Astellunge ginn et nëmmen zwee Parameteren: aktivéieren / auszeschalten an d'Frequenz vun der Sendung vu Paketen a Sekonnen. Keepalive Messagen kënne vun engem yamux Server oder engem yamux Client geschéckt ginn. Wann Dir e Keepalive Message kritt, muss d'Fernpartei drop reagéieren andeems se genau deeselwechte Message Identifizéierer (tatsächlech eng Nummer) schéckt wéi se krut. Am Allgemengen, Keepalive ass dee selwechte Ping, nëmme fir Yamux.

Déi ganz Operatiounstechnik vum Multiplexer: Pakettypen, Verbindungsopstellung an Terminéierungsfäegkeeten, an den Datenübertragungsmechanismus ginn am Detail beschriwwen. Spezifikatioune zu yamux.

Conclusioun zum éischten Deel

Also, am éischten Deel vum Artikel hu mir e puer Tools fir d'Organisatioun vun ëmgedréint Tunnel vertraut, hir Virdeeler an Nodeeler gekuckt, de Mechanismus vun der Operatioun vum Yamux Multiplexer studéiert a beschriwwen d'Basisfuerderunge fir den nei erstallten Powershell Modul. Am nächsten Deel wäerte mir de Modul selwer entwéckelen, praktesch vun Null. Fortsetzung kënnt no. net wiesselen :)

Source: will.com

Setzt e Commentaire