Reverse socks5 -välityspalvelimen kirjoittaminen powershellissä.Osa 1

Tarina tutkimuksesta ja kehityksestä kolmessa osassa. Osa 3 on tutkiva.
Pyökkipuita on monia - vielä enemmän etuja.

Ongelma

Pentestien ja RedTeam-kampanjoiden aikana ei aina ole mahdollista käyttää Asiakkaan vakiotyökaluja, kuten VPN, RDP, Citrix jne. ankkurina sisäiseen verkkoon pääsyä varten. Joissain paikoissa tavallinen VPN toimii MFA:n avulla ja laitteistotunnusta käytetään toisena tekijänä, toisissa sitä valvotaan raa'asti ja VPN-kirjautumisemme tulee heti näkyviin, kuten sanotaan, kaiken sen mukanaan tuoman kanssa, mutta toisissa on ei yksinkertaisesti ole sellaisia ​​keinoja.

Tällaisissa tapauksissa meidän on jatkuvasti tehtävä niin sanottuja "käänteisiä tunneleita" - yhteyksiä sisäisestä verkosta ulkoiseen resurssiin tai palvelimeen, jota hallitsemme. Tällaisen tunnelin sisällä voimme jo työskennellä Asiakkaiden sisäisten resurssien kanssa.

Näitä paluutunneleita on useita erilaisia. Tunnetuin niistä on tietysti Meterpreter. SSH-tunneleilla, joissa on käänteinen porttivälitys, on myös suuri kysyntä hakkerimassan keskuudessa. Tapoja käänteisen tunneloinnin toteuttamiseen on melko paljon ja monet niistä ovat hyvin tutkittuja ja kuvattuja.
Tietysti omalta osaltaan tietoturvaratkaisujen kehittäjät eivät jää sivuun ja havaitsevat aktiivisesti tällaiset toimet.
Esimerkiksi Ciscon tai Positive Techin nykyaikainen IPS tunnistaa onnistuneesti MSF-istunnot, ja käänteisen SSH-tunnelin voi havaita melkein mikä tahansa normaali palomuuri.

Siksi, jotta pysyisimme huomaamattomina hyvässä RedTeam-kampanjassa, meidän on rakennettava käänteinen tunneli epätyypillisin keinoin ja mukauduttava mahdollisimman tarkasti verkon todelliseen toimintatapaan.

Yritetään löytää tai keksiä jotain vastaavaa.

Ennen kuin keksimme mitään, meidän on ymmärrettävä, minkä tuloksen haluamme saavuttaa, mitä toimintoja kehityksemme tulisi suorittaa. Mitkä ovat vaatimukset tunnelille, jotta voimme työskennellä maksimaalisessa salaamistilassa?

On selvää, että kussakin tapauksessa tällaiset vaatimukset voivat vaihdella suuresti, mutta työkokemuksen perusteella voidaan tunnistaa tärkeimmät:

  • toimii Windows-7-10-käyttöjärjestelmässä. Koska useimmat yritysverkot käyttävät Windowsia;
  • asiakas muodostaa yhteyden palvelimeen SSL:n kautta välttääkseen typerää kuuntelua ips:n avulla;
  • Yhdistettäessä asiakkaan on tuettava työtä välityspalvelimen kautta valtuutetulla tavalla, koska Monissa yrityksissä pääsy Internetiin tapahtuu välityspalvelimen kautta. Itse asiassa asiakaskone ei välttämättä edes tiedä siitä mitään, ja välityspalvelinta käytetään läpinäkyvässä tilassa. Mutta meidän on tarjottava tällainen toiminto;
  • asiakasosan tulee olla ytimekäs ja kannettava;
    On selvää, että työskennelläksesi Asiakkaan verkossa voit asentaa OpenVPN:n asiakaskoneeseen ja luoda täysimittaisen tunnelin palvelimellesi (onneksi openvpn-asiakkaat voivat toimia välityspalvelimen kautta). Mutta ensinnäkin, tämä ei aina toimi, koska emme ehkä ole siellä paikallisia ylläpitäjiä, ja toiseksi se pitää niin paljon melua, että kunnollinen SIEM tai HIPS "näki" meidät välittömästi. Ihannetapauksessa asiakkaamme tulisi olla ns. inline-komento, koska esim. monet bash-kuoret toteutetaan ja käynnistetään komentorivin kautta, esimerkiksi suoritettaessa komentoja sanamakrosta.
  • tunnelimme on oltava monisäikeinen ja tuettava useita yhteyksiä samanaikaisesti;
  • asiakas-palvelin-yhteydellä on oltava jonkinlainen valtuutus, jotta tunneli muodostetaan vain asiakkaallemme, ei kaikille, jotka tulevat palvelimellemme määritetyssä osoitteessa ja portissa. Ihannetapauksessa aloitussivu, jolla on alkuperäiseen verkkotunnukseen liittyviä kissoja tai ammattiaiheita, avautuu "kolmannen osapuolen käyttäjille".
    Jos asiakas on esimerkiksi lääketieteellinen organisaatio, tietoturvavastaavalle, joka päättää tarkistaa klinikan työntekijän käyttämän resurssin, lääketuotteita sisältävän sivun, diagnoosin kuvauksen sisältävän Wikipedian tai tohtori Komarovskyn blogin jne. pitäisi avata.

Olemassa olevien työkalujen analyysi

Ennen oman pyörän keksimistä uudelleen, sinun on tehtävä analyysi olemassa olevista pyöristä ja ymmärrettävä, tarvitsemmeko sitä todella, ja luultavasti emme ole ainoita, jotka ovat miettineet tällaisen toimivan pyörän tarvetta.

Internetin googaaminen (näyttäisimme googlettavan normaalisti) sekä haku Githubista avainsanoilla "reverse socks" eivät tuottaneet paljon tuloksia. Pohjimmiltaan kaikki perustuu ssh-tunneleiden rakentamiseen käänteisellä portin edelleenlähetyksellä ja kaikella siihen liittyvällä. SSH-tunnelien lisäksi ratkaisuja on useita:

github.com/klsecservices/rpivot
Kaspersky Labin kaverien pitkäaikainen käänteisen tunnelin toteutus. Nimestä käy selväksi, mihin tämä kirjoitus on tarkoitettu. Python 2.7:ssä toteutettu tunneli toimii selkeätekstitilassa (kuten nyt on muotia sanoa - hei RKN)

github.com/tonyseek/rsocks
Toinen toteutus Pythonissa, myös selkeäteksti, mutta enemmän mahdollisuuksia. Se on kirjoitettu moduuliksi ja siinä on API, jolla voit integroida ratkaisun projekteihisi.

github.com/llkat/rsockstun
github.com/mis-team/rsockstun
Ensimmäinen linkki on alkuperäinen versio käänteisen sox-toteutuksen Golangissa (kehittäjä ei tue).
Toinen linkki on versiomme lisäominaisuuksilla, myös Golangissa. Versiossamme otimme käyttöön SSL:n, työskentelimme NTLM-valtuutetun välityspalvelimen kautta, asiakkaan valtuutuksen, aloitussivun väärän salasanan tapauksessa (tai pikemminkin uudelleenohjauksen aloitussivulle), monisäikeisen tilan (eli useita ihmisiä). voi työskennellä tunnelin kanssa samaan aikaan), järjestelmä, jolla asiakas voi pingata sen selvittämiseksi, onko hän elossa vai ei.

github.com/jun7th/tsocks
Reverse Soxin toteutus "kiinalaisilta ystäviltämme" Pythonissa. Siellä laiskoille ja "kuolemattomille" on valmis binaari (exe), jonka kiinalaiset ovat koonneet ja valmiina käyttöön. Täällä vain kiinalainen Jumala tietää, mitä muuta tämä binaari voi sisältää päätoimintojen lisäksi, joten käytä omalla vaarallasi ja riskilläsi.

github.com/securesocketfunneling/ssf
Melko mielenkiintoinen projekti C++:lla reverse soxin ja muiden toteuttamiseen. Käänteisen tunnelin lisäksi se voi suorittaa porttiohjauksen, luoda komentotulkin jne.

MSF mittari
Täällä, kuten sanotaan, ei kommentteja. Kaikki enemmän tai vähemmän koulutetut hakkerit tuntevat tämän asian hyvin ja ymmärtävät kuinka helposti se voidaan havaita tietoturvatyökaluilla.

Kaikki yllä kuvatut työkalut toimivat samalla tekniikalla: verkon sisällä olevalle koneelle käynnistetään valmiiksi valmisteltu suoritettava binäärimoduuli, joka muodostaa yhteyden ulkoiseen palvelimeen. Palvelimella on SOCKS4/5-palvelin, joka hyväksyy yhteydet ja välittää ne asiakkaalle.

Kaikkien yllä olevien työkalujen haittana on, että asiakaskoneelle on asennettava joko Python tai Golang (oletko usein nähnyt Pythonin asennettavan esimerkiksi yrityksen johtajan tai toimistotyöntekijöiden koneisiin?), tai esiasennettu binaari (oikeastaan ​​python) täytyy vetää tälle koneelle ja skripti yhdessä pullossa) ja ajaa tämä binaari jo siellä. Ja exe-tiedoston lataaminen ja käynnistäminen on myös allekirjoitus paikalliselle virustorjuntaohjelmalle tai HIPS:lle.

Yleisesti ottaen johtopäätös ehdottaa itsestään - tarvitsemme powershell-ratkaisun. Nyt tomaatit lentävät meille - sanotaan, että powershell on jo kokonaan hakkeroitu, sitä valvotaan, estetään jne. ja niin edelleen. Itse asiassa ei kaikkialla. Ilmoitamme vastuullisesti. Muuten, on monia tapoja ohittaa esto (tässä on taas muodikas lause hello RKN:stä 🙂), alkaen typerästä powershell.exe -> cmdd.exe - uudelleennimeämisestä ja päättyen powerdlliin jne.

Aloitetaan keksiminen

Selvää on, että ensin katsomme Googlesta ja… emme löydä tästä aiheesta mitään (jos joku on löytänyt, laittakaa linkkejä kommentteihin). On vain toteutus Socks5 powershellissä, mutta tämä on tavallinen "suora" sox, jolla on useita omia haittoja (puhumme niistä myöhemmin). Voit tietysti kääntää sen käänteiseksi pienellä käden liikkeellä, mutta tämä on vain yksisäikeistä soksia, jota emme aivan tarvitse meille.

Emme siis ole löytäneet mitään valmista, joten meidän on vielä keksittävä pyörämme uudelleen. Otamme pyörämme pohjaksi kehitystämme reverse sox Golangissa, ja toteutamme sille asiakkaan powershellissä.

RSocksTun
Joten miten rsockstun toimii?

RsocksTunin (jäljempänä rs) toiminta perustuu kahteen ohjelmistokomponenttiin - Yamux- ja Socks5-palvelimeen. Socks5-palvelin on tavallinen paikallinen socks5, se toimii asiakkaalla. Ja yhteyksien multipleksointi siihen (muistatko monisäikeen?) tarjotaan käyttämällä yamuxia (vielä yksi multiplekseri). Tämän mallin avulla voit käynnistää useita client socks5 -palvelimia ja jakaa ulkoisia yhteyksiä niille välittäen ne yhden TCP-yhteyden kautta (melkein kuten meterpreterissä) asiakkaalta palvelimelle, mikä toteuttaa monisäikeisen tilan, jota ilman emme yksinkertaisesti toimi. pystyy toimimaan täysin sisäverkoissa.

Yamuxin toiminnan ydin on, että se ottaa käyttöön ylimääräisen verkkokerroksen streameja toteuttaen sen 12-tavuisen otsikon muodossa jokaiselle paketille. (Tässä käytämme tarkoituksella sanaa "virta" ketjun sijaan, jotta emme sekoita lukijaa ohjelmavirran "säikeeseen" - käytämme tätä käsitettä myös tässä artikkelissa). Yamux-otsikko sisältää virran numeron, liput virran asentamiseen/lopettamiseen, siirrettyjen tavujen määrän ja siirtoikkunan koon.

Reverse socks5 -välityspalvelimen kirjoittaminen powershellissä.Osa 1

Virran asennuksen/lopetuksen lisäksi yamux toteuttaa säilytysmekanismin, jonka avulla voit seurata muodostetun viestintäkanavan suorituskykyä. Keeplive-viestimekanismin toiminta konfiguroidaan Yamux-istuntoa luotaessa. Itse asiassa asetuksista on vain kaksi parametria: käyttöönotto/pois käytöstä ja pakettien lähetystiheys sekunneissa. Keepalive-viestejä voi lähettää yamux-palvelin tai yamux-asiakas. Kun etäosapuoli vastaanottaa ylläpitoviestin, sen on vastattava siihen lähettämällä täsmälleen sama viestin tunniste (itse asiassa numero), jonka se vastaanotti. Yleensä keepalive on sama ping, vain yamuxille.

Multiplekserin koko toimintatekniikka: pakettityypit, yhteydenmuodostus- ja lopetusliput sekä tiedonsiirtomekanismi on kuvattu yksityiskohtaisesti kohdassa tekniset tiedot Yamuxille.

Johtopäätös ensimmäiseen osaan

Joten artikkelin ensimmäisessä osassa tutustuimme joihinkin työkaluihin käänteisten tunneleiden järjestämiseen, tarkastelimme niiden etuja ja haittoja, tutkimme Yamux-multiplekserin toimintamekanismia ja kuvailimme äskettäin luodun powershell-moduulin perusvaatimuksia. Seuraavassa osassa kehitämme itse moduulia, käytännössä tyhjästä. Jatkuu. Älä vaihda :)

Lähde: will.com

Lisää kommentti