Stāsts par pētniecību un attīstību 3 daļās. 1. daļa ir pētnieciska.
Ir daudz dižskābaržu – vēl vairāk priekšrocību.
Problēmas paziņojums
Pentestu un RedTeam kampaņu laikā ne vienmēr ir iespējams izmantot Klienta standarta rīkus, piemēram, VPN, RDP, Citrix u.c. kā enkurs iekļūšanai iekšējā tīklā. Dažās vietās standarta VPN darbojas, izmantojot MFA un kā otrs faktors tiek izmantots aparatūras marķieris, citās tas tiek brutāli uzraudzīts un mūsu VPN pieteikšanās uzreiz kļūst redzama, kā saka, ar visu to, ko tas ietver, bet citās ir tādu līdzekļu vienkārši nav.
Šādos gadījumos mums pastāvīgi ir jāveido tā sauktie “reversie tuneļi” - savienojumi no iekšējā tīkla uz ārēju resursu vai serveri, kuru mēs kontrolējam. Šādā tunelī jau varam strādāt ar Klientu iekšējiem resursiem.
Ir vairākas šo atgriešanās tuneļu šķirnes. Slavenākais no tiem, protams, ir Meterpreter. SSH tuneļi ar reverso portu pāradresāciju ir arī ļoti pieprasīti hakeru vidū. Ir diezgan daudz līdzekļu reversās tunelēšanas ieviešanai, un daudzi no tiem ir labi izpētīti un aprakstīti.
Protams, no savas puses drošības risinājumu izstrādātāji nestāv malā un aktīvi konstatē šādas darbības.
Piemēram, MSF sesijas veiksmīgi nosaka mūsdienu Cisco vai Positive Tech IPS, un reverso SSH tuneli var noteikt gandrīz jebkurš parasts ugunsmūris.
Tāpēc, lai labā RedTeam kampaņā paliktu nepamanīti, mums ir jāizbūvē reversais tunelis, izmantojot nestandarta līdzekļus un pēc iespējas tuvāk jāpielāgojas reālajam tīkla darbības režīmam.
Mēģināsim atrast vai izdomāt ko līdzīgu.
Pirms kaut ko izdomāt, mums ir jāsaprot, kādu rezultātu vēlamies sasniegt, kādas funkcijas būtu jāveic mūsu attīstībai. Kādas būs prasības tunelim, lai mēs varētu strādāt maksimāli slepenā režīmā?
Ir skaidrs, ka katrā gadījumā šādas prasības var ievērojami atšķirties, taču, pamatojoties uz darba pieredzi, var identificēt galvenās:
- darbs ar OS Windows-7.–10. Tā kā lielākā daļa korporatīvo tīklu izmanto Windows;
- klients izveido savienojumu ar serveri, izmantojot SSL, lai novērstu muļķīgu klausīšanos, izmantojot ips;
- Pieslēdzoties klientam jāatbalsta darbs caur starpniekserveri ar autorizāciju, jo Daudzos uzņēmumos piekļuve internetam notiek, izmantojot starpniekserveri. Faktiski klienta iekārta var pat neko par to nezināt, un starpniekserveris tiek izmantots caurspīdīgā režīmā. Bet mums ir jānodrošina šāda funkcionalitāte;
- klienta daļai jābūt kodolīgai un pārnēsājamai;
Ir skaidrs, ka darbam klienta tīklā ir iespējams instalēt klienta datorā. OpenVPN un izveidot pilnvērtīgu tuneli uz savu serveri (par laimi, OpenVPN klienti var darboties, izmantojot starpniekserveri). Taču, pirmkārt, tas ne vienmēr darbosies, jo mēs, iespējams, neesam lokālie administratori, un, otrkārt, tas radītu tik lielu troksni, ka cienījama SIEM vai HIPS sistēma nekavējoties ziņotu par mums. Ideālā gadījumā mūsu klientam vajadzētu būt iekļautai komandai, tāpat kā daudzām Bash čaulām, un darboties no komandrindas, piemēram, izpildot komandas no Word makro. - mūsu tunelim jābūt ar vairākiem pavedieniem un vienlaikus jāatbalsta daudzi savienojumi;
- klienta-servera savienojumam ir jābūt kaut kādai autorizācijai, lai tunelis tiktu izveidots tikai mūsu klientam, nevis visiem, kas nāk pie mūsu servera norādītajā adresē un ostā. Ideālā gadījumā galvenā lapa ar kaķiem vai profesionālām tēmām, kas saistītas ar sākotnējo domēnu, ir jāatver “trešās puses lietotājiem”.
Piemēram, ja Klients ir medicīnas organizācija, tad informācijas drošības administratoram, kurš nolemj pārbaudīt resursu, kuram piekļuva klīnikas darbinieks, lapu ar farmaceitiskajiem produktiem, Vikipēdiju ar diagnozes aprakstu vai doktora Komarovska emuāru utt. vajadzētu atvērt.
Esošo rīku analīze
Pirms sava velosipēda izgudrošanas no jauna ir jāveic esošo velosipēdu analīze un jāsaprot, vai tas mums tiešām ir vajadzīgs un, iespējams, neesam vienīgie, kas aizdomājušies par šāda funkcionāla velosipēda nepieciešamību.
Googlēšana internetā (šķiet, ka googlē normāli), kā arī meklēšana Github, izmantojot atslēgvārdus “reverse socks”, nedeva daudz rezultātu. Būtībā tas viss ir saistīts ar ssh tuneļu izveidi ar reverso portu pārsūtīšanu un visu, kas ar to saistīts. Papildus SSH tuneļiem ir vairāki risinājumi:
Ilgstoša apgrieztā tuneļa ieviešana no Kaspersky Lab puišiem. Nosaukums skaidri parāda, kam šis skripts ir paredzēts. Ieviests Python 2.7, tunelis darbojas skaidrā teksta režīmā (kā tagad ir modē teikt - sveiki RKN)
Vēl viena ieviešana Python, arī skaidrā tekstā, bet ar vairāk iespējām. Tas ir rakstīts kā modulis, un tam ir API risinājuma integrēšanai jūsu projektos.
Pirmā saite ir reversās sox ieviešanas sākotnējā versija Golangā (izstrādātājs to neatbalsta).
Otrā saite ir mūsu pārskatīšana ar papildu funkcijām, arī Golangā. Mūsu versijā mēs ieviesām SSL, strādājam caur starpniekserveri ar NTLM autorizāciju, autorizāciju klientā, galveno lapu nepareizas paroles gadījumā (vai drīzāk novirzīšanu uz galveno lapu), vairāku pavedienu režīmu (t.i., vairāki cilvēki). var vienlaikus strādāt ar tuneli), sistēma, kas klientam tiek nosūtīta, lai noteiktu, vai viņš ir dzīvs vai nē.
Reverse sox ieviešana no mūsu “ķīniešu draugiem” Python. Tur slinkajiem un “nemirstīgajiem” ir gatavs binārs (exe), ko ķīnieši ir samontējuši un gatavs lietošanai. Šeit tikai ķīniešu Dievs zina, ko vēl šis binārs var saturēt, izņemot galveno funkcionalitāti, tāpēc izmantojiet to uz savu risku un risku.
Diezgan interesants projekts C++, lai ieviestu reverse sox un daudz ko citu. Papildus reversajam tunelim tas var veikt portu pāradresāciju, izveidot komandu apvalku utt.
MSF mēraparāts
Šeit, kā saka, bez komentāriem. Visi pat vairāk vai mazāk izglītoti hakeri ļoti labi pārzina šo lietu un saprot, cik viegli to var atklāt ar drošības rīkiem.
Visi iepriekš aprakstītie rīki darbojas, izmantojot līdzīgu tehnoloģiju: datorā tīkla iekšienē tiek palaists iepriekš sagatavots izpildāms binārais modulis, kas izveido savienojumu ar ārēju serveri. Serveris darbina SOCKS4/5 serveri, kas pieņem savienojumus un pārsūta tos klientam.
Visu iepriekš minēto rīku trūkums ir tāds, ka klienta datorā ir jāinstalē Python vai Golang (vai bieži esat redzējis Python instalētu, piemēram, uzņēmuma direktora vai biroja darbinieku mašīnās?), vai arī iepriekš samontētam. binārais (faktiski python) ir jāievelk uz šīs mašīnas un skripts vienā pudelē) un palaist šo bināro jau tur. Un exe lejupielāde un pēc tam tā palaišana ir arī paraksts vietējam antivīrusam vai HIPS.
Kopumā secinājums liek domāt – mums ir nepieciešams powershell risinājums. Tagad pie mums lidos tomāti - saka, ka powershell jau viss ir izjaukts, tiek uzraudzīts, bloķēts utt. un tā tālāk. Patiesībā ne visur. Mēs deklarējam atbildīgi. Starp citu, ir ļoti daudz veidu, kā apiet bloķēšanu (šeit atkal ir modīga frāze par hello RKN 🙂), sākot ar stulbu powershell.exe pārdēvēšanu -> cmdd.exe un beidzot ar powerdll utt.
Sāksim izgudrot
Skaidrs, ka vispirms meklēsim Google un... neko par šo tēmu neatradīsim (ja kāds ir atradis, ievietojiet saites komentāros). Ir tikai Socks5 uz powershell, taču tas ir parasts “tiešais” sox, kuram ir vairāki savi trūkumi (par tiem mēs runāsim vēlāk). Jūs, protams, varat ar vieglu rokas kustību pārvērst to pretējā virzienā, bet tas būs tikai viena vītnes sox, kas mums nav gluži tas, kas mums vajadzīgs.
Tātad, mēs neesam atraduši neko gatavu, tāpēc mums joprojām būs jāizgudro savs ritenis. Mēs ņemsim par pamatu mūsu velosipēdam reverse sox Golangā, un mēs tam ieviešam klientu Powershell.
RSocksTun
Tātad, kā darbojas rsockstun?
RsocksTun (turpmāk tekstā rs) darbība balstās uz diviem programmatūras komponentiem - Yamux un Socks5 serveri. Socks5 serveris ir parasts vietējais socks5, tas darbojas uz klienta. Un savienojumu multipleksēšana ar to (atceries par daudzpavedienu?) tiek nodrošināta, izmantojot yamux (). Šī shēma ļauj palaist vairākus klienta socks5 serverus un izplatīt tiem ārējos savienojumus, pārsūtot tos caur vienu TCP savienojumu (gandrīz kā mērinstrumentā) no klienta uz serveri, tādējādi ieviešot vairāku pavedienu režīmu, bez kura mēs vienkārši neiztiksim. spēj pilnvērtīgi strādāt iekšējos tīklos.
Yamux darbības būtība ir tāda, ka tas ievieš papildu tīkla straumju slāni, ieviešot to 12 baitu galvenes veidā katrai paketei. (Šeit mēs apzināti lietojam vārdu “straume”, nevis pavediens, lai nesajauktu lasītāju ar programmas straumes “pavedienu” - šo jēdzienu izmantosim arī šajā rakstā). Yamux galvenē ir straumes numurs, karodziņi straumes instalēšanai/pārtraukšanai, pārsūtīto baitu skaits un pārsūtīšanas loga lielums.

Papildus straumes instalēšanai/pārtraukšanai yamux ievieš uzturēšanas mehānismu, kas ļauj pārraudzīt izveidotā sakaru kanāla veiktspēju. Keeplive ziņojumu mehānisma darbība tiek konfigurēta, veidojot Yamux sesiju. Faktiski no iestatījumiem ir tikai divi parametri: iespējot/atspējot un pakešu sūtīšanas biežums sekundēs. Keepalive ziņojumus var nosūtīt yamux serveris vai yamux klients. Saņemot saglabāšanas ziņojumu, attālajai pusei ir jāatbild uz to, nosūtot tieši tādu pašu ziņojuma identifikatoru (faktiski numuru), ko tā saņēma. Vispār keepalive ir tas pats ping, tikai priekš yamux.
Visa multipleksora darbības tehnika: pakešu veidi, savienojuma iestatīšanas un beigu karodziņi, kā arī datu pārsūtīšanas mehānisms ir detalizēti aprakstīts uz Yamux.
Secinājums pirmajai daļai
Tātad raksta pirmajā daļā iepazināmies ar dažiem reverso tuneļu organizēšanas rīkiem, apskatījām to priekšrocības un trūkumus, izpētījām Yamux multipleksora darbības mehānismu un aprakstījām pamatprasības jaunizveidotajam powershell modulim. Nākamajā daļā mēs izstrādāsim pašu moduli, praktiski no nulles. Turpinājums sekos. Nepārslēdzies :)
Avots: www.habr.com
