En historia om forskning och utveckling i tre delar. Del 1 â forskningen.
Det finns mĂ„nga bokstĂ€ver â Ă€nnu fler fördelar.
UppgiftsstÀllande
Under genomförandet av pentester och RedTeam-kampanjer Ă€r det inte alltid möjligt att anvĂ€nda kundens standardverktyg, sĂ„som VPN, RDP, Citrix etc., som en del av intrĂ€det i det interna nĂ€tverket. Vissa standard VPN:er fungerar med MFA, dĂ€r en hĂ„rdvarutoken anvĂ€nds som andra faktorer; andra övervakas strikt, och vĂ„r VPN-inloggning blir omedelbart synlig, sĂ„ att sĂ€ga â med alla följder; och pĂ„ vissa stĂ€llen finns det helt enkelt inga sĂ„dana medel.
I sĂ„dana fall mĂ„ste vi stĂ€ndigt skapa sĂ„ kallade "omvĂ€nda tunnlar" â uppkopplingar frĂ„n det interna nĂ€tverket till externa resurser eller servrar som vi kontrollerar. Inom en sĂ„dan tunnel kan vi redan arbeta med kundens interna resurser.
Det finns flera typer av sÄdana omvÀnda tunnlar. Den mest kÀnda av dem Àr naturligtvis Meterpreter. SSH-tunnlar med port-forwarding Àr ocksÄ mycket eftertraktade bland hackermassorna. Det finns mÄnga sÀtt att genomföra omvÀnd tunneleringsprocess och mÄnga av dem Àr vÀl studerade och dokumenterade.
SjÀlvklart stÄr utvecklarna av sÀkerhetslösningar inte pÄ sidan och detekterar aktivt sÄdana ÄtgÀrder.
Till exempel, MSF-sessioner upptÀcks framgÄngsrikt av moderna IPS frÄn Cisco eller Positive Tech, och en omvÀnd SSH-tunnel kan upptÀckas av nÀstan vilken normal brandvÀgg som helst.
Följaktligen, för att förbli ostraffad i en bra RedTeam-kampanj â mĂ„ste vi bygga den omvĂ€nda tunneln med okonventionella metoder och anpassa oss sĂ„ nĂ€ra verkligt nĂ€tverksarbete som möjligt.
LÄt oss försöka hitta eller uppfinna nÄgot liknande.
Innan vi uppfinner nÄgot mÄste vi förstÄ vilket resultat vi vill uppnÄ, vilka funktioner vÄr utveckling bör ha. Vilka krav kommer tunneln att ha för att vi ska kunna arbeta i maximal diskretion?
Det Àr uppenbart att sÄdana krav kan variera kraftigt i varje fall, men utifrÄn erfarenhet kan vi lyfta fram nÄgra grundprinciper:
- arbete pÄ Windows 7-10. Eftersom de flesta företagsnÀtverk anvÀnder just Windows;
- Klienten ansluter till servern via SSL för att förhindra avlyssning med hjÀlp av IPS;
- Vid anslutning mÄste klienten stödja arbete genom en proxyserver med autentisering, eftersom mÄnga företag gÄr ut pÄ internet genom en proxy. I sjÀlva verket kanske klientmaskinen inte ens vet om detta, och proxyn anvÀnds i transparent lÀge. Men denna funktionalitet mÄste vi ta hÀnsyn till;
- Klientdelen bör vara koncis och portabel;
Det Àr tydligt att för att arbeta inom kundens nÀtverk kan OpenVPN installeras pÄ klientmaskinen och skapa en fullstÀndig tunnel till sin server (lyckligtvis kan OpenVPN-klienter arbeta genom proxy). Men för det första, detta Àr inte alltid möjligt, eftersom vi kanske inte Àr lokala administratörer dÀr, och för det andra kommer det att skapa sÄ mycket ljud att en anstÀndig SIEM eller HIPS omedelbart kommer att "rapportera oss dÀr det behövs". I idealfallet bör vÄr klient vara en sÄ kallad inline-grupp, precis som mÄnga bash-skal har implementerats, och köras via kommandoraden, till exempel vid utförandet av kommandon frÄn ett Word-makro. - VÄr tunnel mÄste vara flertrÄdad och stödja flera anslutningar samtidigt;
- Anslutningen mellan klient och server bör ha nÄgon form av autentisering, sÄ att tunneln endast upprÀttas för vÄr klient, och inte för alla som kommer till vÄr server pÄ den angivna adressen och porten. I idealfallet bör en landningssida med katter eller professionell tematik relaterad till den ursprungliga domÀnen öppnas för "externa anvÀndare".
Till exempel, om kunden Àr en medicinsk organisation, bör en informationssÀkerhetsadministratör som vill kontrollera resursen som en anstÀlld pÄ kliniken har anvÀnt, fÄ öppna en sida med farmaceutiska produkter, Wikipedia med beskrivning av diagnosen eller Dr. Komarovskys blogg, etc.
Analys av befintliga verktyg
Innan vi uppfinner vÄr egen cykel - mÄste vi göra en analys av befintliga cyklar och förstÄ om vi verkligen behöver detta och sannolikt inte bara vi har tÀnkt pÄ behovet av en sÄdan funktionell cykel.
Sökning pÄ internet (vi verkar googla normalt) samt sökningar pÄ GitHub med nyckelorden "reverse socks" har inte gett mÄnga resultat. I huvudsak handlar allt om att bygga SSH-tunnlar med omvÀnd portvidarebefordran och allt som hör dÀrtill. Förutom SSH-tunnlar kan man lyfta fram nÄgra lösningar:
En gammal implementering av omvĂ€nd tunnel frĂ„n killarna pĂ„ Kaspersky Labs. Namnet visar tydligt vad det hĂ€r skriptet Ă€r avsett för. Implementerat i Python 2.7, tunneln fungerar i cleartext-lĂ€ge (som man nu sĂ€ger â hej RKN)
Ytterligare en implementering i Python, ocksÄ i cleartext, men med fler möjligheter. Skrivet som en modul och finns ett API för att integrera lösningen i sina projekt.
Den första lÀnken Àr den ursprungliga versionen av implementationen av reverse socks pÄ Go (stöds inte av utvecklaren).
Den andra lÀnken Àr vÄr egen vidareutveckling med ytterligare funktioner, ocksÄ pÄ Go. I vÄr version har vi implementerat SSL, funktionalitet genom proxy med NTLM-autentisering, klientautentisering, en landningssida vid felaktigt lösenord (eller snarare en omdirigering till landningssidan), flÀtande lÀge (dvs. tunneln kan anvÀndas av flera personer samtidigt), ett system för klientpings för att kolla om den Àr aktiv eller inte.
Implementering av omvÀnd socks av vÄra "kinesiska vÀnner" pÄ Python. DÀr ligger ocksÄ en fÀrdig binÀrfil (exe), sammanstÀlld av kineserna och redo att anvÀnda. HÀr vet bara den kinesiska guden vad som mer kan finnas i denna binÀrfil förutom grundfunktionaliteten, sÄ anvÀnd pÄ egen risk.
Ett ganska intressant projekt pÄ C++ för att implementera omvÀnd socks och mer. Förutom omvÀnd tunneling kan det göra portvidarebefordran, skapa en kommandoskal, och sÄ vidare.
MSF meterpreter
HÀr sÀger man som sagt, utan kommentarer. Alla hyggligt insatta hackare Àr vÀl bekanta med det hÀr och förstÄr hur lÀtt det kan upptÀckas av skyddsmekanismer.
Alla ovan nÀmnda verktyg fungerar enligt samma teknologi: en förberedd körbar binÀrmodul körs pÄ maskinen inom nÀtverket, som upprÀttar en koppling till en extern server. PÄ servern körs en SOCKS4/5-server som tar emot anslutningar och vidarebefordrar dem till klienten.
En nackdel med alla ovanstÄende verktyg Àr att antingen krÀvs det installerad Python eller Golang pÄ klientmaskinen (hur ofta har du stött pÄ installerad Python pÄ maskiner, till exempel hos företagets direktör eller kontorsanstÀllda?), eller sÄ mÄste du ta med en förkompilerad binÀr (faktiskt python och skript i ett och samma paket) och köra denna binÀr dÀr. Att ladda ner en exe och sedan köra den Àr ocksÄ en signatur för den lokala antivirusprogramvaran eller HIPS.
I allmĂ€nhet Ă€r slutsatsen uppenbar â vi behöver en lösning med PowerShell. Nu kommer vi att fĂ„ tomater kastade pĂ„ oss â eftersom folk sĂ€ger att PowerShell Ă€r överanvĂ€nt, övervakat, blockerat, osv. I sjĂ€lva verket Ă€r det lĂ„ngt ifrĂ„n överallt. Vi sĂ€ger detta ansvarsfullt. Förresten, det finns massor av sĂ€tt att kringgĂ„ blockeringar (hĂ€r kommer en populĂ€r fras att hĂ€lsa RKN đ), allt frĂ„n att bara döpa om powershell.exe till cmdd.exe och vidare till powerdll, osv.
Vi börjar uppfinna
SjÀlvklart kommer vi först att titta pÄ Google och⊠inte hitta nÄgot överhuvudtaget om detta Àmne (om nÄgon har hittat nÄgot, skicka gÀrna lÀnkar i kommentarerna). Det finns bara Socks5 pÄ PowerShell, men det Àr en vanlig "rak" sock, som har en rad egna nackdelar (om dessa pratar vi senare). SjÀlvklart kan man med en enkel rörelse förvandla den till en omvÀnd, men det skulle bara vara en enkeltrÄdad sock, vilket inte riktigt Àr vad vi behöver.
SÄ, vi har inte hittat nÄgot fÀrdigt, sÄ vi mÄste ÀndÄ uppfinna vÄr egen cykel. Som grund för vÄr cykel tar vi av en omvÀnd sock pÄ Golang, och vi kommer att implementera klienten till den i PowerShell.
RSocksTun
SĂ„, hur fungerar rsockstun?
I grunden för RsocksTun (nedan kallad rs) ligger tvĂ„ programkomponenter â Yamux och Socks5-servern. Socks5-servern Ă€r en vanlig lokal socks5, den startas pĂ„ klienten. Multiplexeringen av anslutningar till den (kommer ni ihĂ„g flertrĂ„digheten?) sĂ€kerstĂ€lls med hjĂ€lp av yamux (). Denna struktur möjliggör körning av flera klient-socks5-servrar och distribuerar externa anslutningar till dem genom ett enda TCP-anslutning (nĂ€stan som i meterpreter) frĂ„n klient till server, vilket möjliggör en flertrĂ„dad drift som Ă€r avgörande för att vi ska kunna arbeta effektivt i det interna nĂ€tverket.
Huvudfunktionen i yamux Ă€r att den lĂ€gger till en extra nĂ€tverksnivĂ„ av strömmar och implementerar den i form av en 12-byte rubrik för varje paket. (HĂ€r anvĂ€nder vi medvetet termen "ström" istĂ€llet för "flöde" för att inte förvirra lĂ€saren med programflödet "trĂ„d" â detta begrepp kommer vi ocksĂ„ att anvĂ€nda i denna artikel). Inuti yamux-rubriken finns streamnumret, flaggor för att etablera/avsluta strömmen, mĂ€ngden överförda byte och fönsterstorleken.

Förutom att etablera/avsluta strömmen har yamux en mekanism för keepalive, som tillÄter övervakning av funktionen hos den etablerade kommunikationskanalen. Keepalive-mekanismen justeras nÀr en Yamux-session skapas. Faktum Àr att det endast finns tvÄ instÀllningar: aktivera/inaktivera och frekvensen för paketöverföringar i sekunder. Keepalive-meddelanden kan skickas av bÄde yamux-servern och yamux-klienten. NÀr ett keepalive-meddelande mottas, Àr den avlÀgsna sidan skyldig att svara med exakt samma identifierare för meddelandet (faktiskt ett nummer) som den tog emot. Generellt sett Àr keepalive detsamma som en ping, bara för yamux.
Detaljerad teknik för multiplexerns funktion: typer av paket, flaggor för etablering och avslutning av anslutningar, dataöverföringsmekanismen beskrivs i till yamux.
Slutsats till den första delen
SĂ„, i den första delen av artikeln bekantade vi oss med vissa verktyg för att organisera omvĂ€nda tunnlar, sĂ„g deras för- och nackdelar, studerade funktionen hos Yamux-multiplexern och beskrev de grundlĂ€ggande kraven för den nyss skapade powershell-modulen. I nĂ€sta del kommer vi att fokusera pĂ„ utvecklingen av sjĂ€lva modulen, praktiskt taget frĂ„n grunden. FortsĂ€ttning följer. HĂ€ng kvar đ
KĂ€lla: habr.com
