Pagsusulat ng Reverse socks5 proxy sa powershell.Bahagi 1

Isang kwento tungkol sa pananaliksik at pag-unlad sa 3 bahagi. Ang Bahagi 1 ay eksplorasyon.
Maraming mga puno ng beech - mas maraming benepisyo.

Pahayag ng problema

Sa panahon ng mga pentest at RedTeam campaign, hindi laging posible na gamitin ang mga karaniwang tool ng Customer, gaya ng VPN, RDP, Citrix, atbp. bilang isang anchor para sa pagpasok sa panloob na network. Sa ilang mga lugar, ang isang karaniwang VPN ay gumagana gamit ang MFA at isang hardware na token ay ginagamit bilang isang pangalawang kadahilanan, sa iba ito ay brutal na sinusubaybayan at ang aming pag-login sa VPN ay agad na nakikita, tulad ng sinasabi nila, kasama ang lahat ng kasama nito, ngunit sa iba ay mayroong walang ganoong paraan.

Sa ganitong mga kaso, palagi kaming kailangang gumawa ng tinatawag na "reverse tunnels" - mga koneksyon mula sa panloob na network patungo sa isang panlabas na mapagkukunan o isang server na kinokontrol namin. Sa loob ng naturang tunnel, maaari na tayong magtrabaho kasama ang mga panloob na mapagkukunan ng mga Customer.

Mayroong ilang mga uri ng mga balik tunnel na ito. Ang pinakasikat sa kanila ay, siyempre, Meterpreter. Ang mga SSH tunnel na may reverse port forwarding ay malaki rin ang hinihiling sa mga hacker. Mayroong maraming mga paraan para sa pagpapatupad ng reverse tunneling at marami sa kanila ay mahusay na pinag-aralan at inilarawan.
Siyempre, para sa kanilang bahagi, ang mga developer ng mga solusyon sa seguridad ay hindi tumatabi at aktibong nakakakita ng mga naturang aksyon.
Halimbawa, matagumpay na na-detect ang mga session ng MSF ng modernong IPS mula sa Cisco o Positive Tech, at ang reverse SSH tunnel ay maaaring makita ng halos anumang normal na firewall.

Samakatuwid, upang manatiling hindi napapansin sa isang mahusay na kampanya ng RedTeam, kailangan nating bumuo ng reverse tunnel gamit ang hindi karaniwang paraan at iangkop nang mas malapit hangga't maaari sa totoong operating mode ng network.

Subukan nating maghanap o mag-imbento ng katulad.

Bago mag-imbento ng anuman, kailangan nating maunawaan kung ano ang resulta na nais nating makamit, kung ano ang mga function na dapat gawin ng ating pag-unlad. Ano ang mga kinakailangan para sa tunnel para makapagtrabaho tayo sa maximum stealth mode?

Malinaw na para sa bawat kaso ang mga naturang kinakailangan ay maaaring magkakaiba nang malaki, ngunit batay sa karanasan sa trabaho, ang mga pangunahing maaaring makilala:

  • gumana sa Windows-7-10 OS. Dahil ang karamihan sa mga corporate network ay gumagamit ng Windows;
  • kumokonekta ang kliyente sa server sa pamamagitan ng SSL upang maiwasan ang hangal na pakikinig gamit ang ips;
  • Kapag kumokonekta, dapat suportahan ng kliyente ang trabaho sa pamamagitan ng isang proxy server na may pahintulot, dahil Sa maraming kumpanya, ang pag-access sa Internet ay nangyayari sa pamamagitan ng isang proxy. Sa katunayan, maaaring walang alam ang client machine tungkol dito, at ginagamit ang proxy sa isang transparent na mode. Ngunit dapat tayong magbigay ng gayong pag-andar;
  • ang bahagi ng kliyente ay dapat na maigsi at portable;
    Malinaw na upang gumana sa loob ng network ng Customer, maaari mong i-install ang OpenVPN sa client machine at lumikha ng isang ganap na tunnel sa iyong server (sa kabutihang palad, ang mga openvpn client ay maaaring gumana sa pamamagitan ng isang proxy). Ngunit, una, ito ay hindi palaging gagana, dahil maaaring hindi kami mga lokal na admin doon, at pangalawa, ito ay gagawa ng napakaraming ingay na ang isang disenteng SIEM o HIPS ay agad na "mag-aagawan" sa amin. Sa isip, ang aming kliyente ay dapat na isang tinatawag na inline na utos, bilang halimbawa maraming mga bash shell ang ipinatupad, at inilunsad sa pamamagitan ng command line, halimbawa, kapag nagpapatupad ng mga utos mula sa isang salitang macro.
  • ang aming tunnel ay dapat na multi-threaded at sumusuporta sa maraming koneksyon nang sabay-sabay;
  • ang koneksyon ng client-server ay dapat may ilang uri ng awtorisasyon upang ang tunnel ay maitatag lamang para sa aming kliyente, at hindi para sa lahat na pumupunta sa aming server sa tinukoy na address at port. Sa isip, ang isang landing page na may mga pusa o propesyonal na paksang nauugnay sa orihinal na domain ay dapat magbukas para sa "mga user ng third-party."
    Halimbawa, kung ang Customer ay isang medikal na organisasyon, kung gayon para sa isang administrator ng seguridad ng impormasyon na nagpasyang suriin ang mapagkukunan na na-access ng isang empleyado ng klinika, isang pahina na may mga produktong parmasyutiko, Wikipedia na may paglalarawan ng diagnosis, o blog ni Dr. Komarovsky, atbp. .dapat buksan.

Pagsusuri ng mga umiiral na tool

Bago muling likhain ang iyong sariling bisikleta, kailangan mong gumawa ng pagsusuri sa mga umiiral na bisikleta at maunawaan kung talagang kailangan natin ito at, marahil, hindi lamang tayo ang nag-iisip tungkol sa pangangailangan para sa gayong functional na bisikleta.

Ang pag-googling sa Internet (parang normal kaming nag-google), pati na rin ang paghahanap sa Github gamit ang mga keyword na "reverse socks" ay hindi nagbigay ng maraming resulta. Karaniwan, ang lahat ay nagmumula sa pagbuo ng mga ssh tunnel na may reverse port forwarding at lahat ng konektado dito. Bilang karagdagan sa mga tunnel ng SSH, mayroong ilang mga solusyon:

github.com/klsecservices/rpivot
Isang matagal nang pagpapatupad ng isang reverse tunnel mula sa mga lalaki sa Kaspersky Lab. Nilinaw ng pangalan kung para saan ang script na ito. Ipinatupad sa Python 2.7, ang tunel ay nagpapatakbo sa cleartext mode (dahil ito ay naka-istilong sabihin ngayon - hello RKN)

github.com/tonyseek/rsocks
Ang isa pang pagpapatupad sa Python, din sa malinaw na teksto, ngunit may higit pang mga posibilidad. Ito ay nakasulat bilang isang module at may API para sa pagsasama ng solusyon sa iyong mga proyekto.

github.com/llkat/rsockstun
github.com/mis-team/rsockstun
Ang unang link ay ang orihinal na bersyon ng reverse sox na pagpapatupad sa Golang (hindi suportado ng developer).
Ang pangalawang link ay ang aming rebisyon na may mga karagdagang feature, sa Golang din. Sa aming bersyon, ipinatupad namin ang SSL, gumawa sa pamamagitan ng isang proxy na may awtorisasyon ng NTLM, awtorisasyon sa kliyente, isang landing page kung sakaling may maling password (o sa halip, isang pag-redirect sa landing page), multi-threaded mode (ibig sabihin, maraming tao maaaring gumana sa tunnel nang sabay), isang sistema ng pag-ping sa kliyente upang matukoy kung siya ay buhay o hindi.

github.com/jun7th/tsocks
Pagpapatupad ng reverse sox mula sa aming "mga kaibigang Tsino" sa Python. Doon, para sa mga tamad at "imortal", mayroong isang handa na binary (exe), na binuo ng mga Intsik at handa nang gamitin. Dito, tanging ang Chinese na Diyos ang nakakaalam kung ano pa ang maaaring taglayin ng binary na ito bukod sa pangunahing pag-andar, kaya gamitin sa iyong sariling peligro at peligro.

github.com/securesocketfunneling/ssf
Medyo isang kawili-wiling proyekto sa C++ para sa pagpapatupad ng reverse sox at higit pa. Bilang karagdagan sa reverse tunnel, maaari itong gumawa ng port forwarding, lumikha ng isang command shell, atbp.

MSF meterpreter
Dito, tulad ng sinasabi nila, walang komento. Ang lahat ng higit pa o mas kaunting mga edukadong hacker ay pamilyar sa bagay na ito at nauunawaan kung gaano kadali ito matukoy ng mga tool sa seguridad.

Ang lahat ng mga tool na inilarawan sa itaas ay gumagana gamit ang isang katulad na teknolohiya: isang pre-prepared executable binary module ay inilunsad sa isang makina sa loob ng network, na nagtatatag ng isang koneksyon sa isang panlabas na server. Ang server ay nagpapatakbo ng isang SOCKS4/5 server na tumatanggap ng mga koneksyon at inihahatid ang mga ito sa kliyente.

Ang kawalan ng lahat ng mga tool sa itaas ay ang alinman sa Python o Golang ay dapat na mai-install sa client machine (madalas mo bang nakita ang Python na naka-install sa mga makina ng, halimbawa, isang direktor ng kumpanya o mga manggagawa sa opisina?), o isang pre-assembled Ang binary (talagang python) ay dapat na i-drag papunta sa makina at script na ito sa isang bote) at patakbuhin ang binary na ito doon. At ang pag-download ng isang exe at pagkatapos ay ilunsad ito ay isa ring lagda para sa isang lokal na antivirus o HIPS.

Sa pangkalahatan, ang konklusyon ay nagmumungkahi mismo - kailangan namin ng solusyon sa powershell. Ngayon ay lilipad sa amin ang mga kamatis - sabi nila, ang powershell ay na-hackney na, ito ay sinusubaybayan, na-block, atbp. at iba pa. Sa katunayan, hindi sa lahat ng dako. Ipinapahayag namin nang responsable. Sa pamamagitan ng paraan, maraming mga paraan upang i-bypass ang pag-block (narito muli ang isang naka-istilong parirala tungkol sa hello RKN πŸ™‚), simula sa hangal na pagpapalit ng pangalan ng powershell.exe -> cmdd.exe at nagtatapos sa powerdll, atbp.

Simulan na natin ang pag-imbento

Malinaw na titingnan muna natin ang Google at... wala tayong makikita sa paksang ito (kung may nakahanap nito, mag-post ng mga link sa mga komento). meron lang pagpapatupad Socks5 sa powershell, ngunit ito ay isang ordinaryong "direktang" sox, na may ilang mga sariling disadvantages (pag-uusapan natin ang mga ito sa ibang pagkakataon). Maaari mong, siyempre, sa isang bahagyang paggalaw ng iyong kamay, i-on ito sa kabaligtaran, ngunit ito ay magiging single-threaded sox lamang, na hindi gaanong kailangan natin para sa atin.

Kaya, wala kaming nahanap na anumang handa, kaya kailangan pa rin naming baguhin ang aming gulong. Kukunin namin bilang batayan para sa aming bisikleta ating pag-unlad reverse sox sa Golang, at nagpapatupad kami ng kliyente para dito sa powershell.

RSocksTun
Kaya paano gumagana ang rsockstun?

Ang operasyon ng RsocksTun (mula dito ay tinutukoy bilang rs) ay batay sa dalawang bahagi ng software - Yamux at Socks5 server. Ang server ng Socks5 ay isang regular na lokal na socks5, tumatakbo ito sa kliyente. At ang multiplexing ng mga koneksyon dito (tandaan ang tungkol sa multithreading?) ay ibinibigay gamit ang yamux (isa pang multiplexer). Ang scheme na ito ay nagpapahintulot sa iyo na maglunsad ng ilang mga client socks5 server at ipamahagi ang mga panlabas na koneksyon sa kanila, ipasa ang mga ito sa pamamagitan ng isang solong koneksyon sa TCP (halos tulad ng sa meterpreter) mula sa kliyente patungo sa server, at sa gayon ay nagpapatupad ng multi-threaded mode, kung wala ito ay hindi tayo magiging magagawang ganap na magtrabaho sa mga panloob na network.

Ang kakanyahan ng kung paano gumagana ang yamux ay ang pagpapakilala nito ng karagdagang network layer ng mga stream, na nagpapatupad nito sa anyo ng isang 12-byte na header para sa bawat packet. (Narito, sinasadya naming gamitin ang salitang "stream" sa halip na thread, upang hindi malito ang mambabasa sa isang stream ng programa na "thread" - gagamitin din namin ang konseptong ito sa artikulong ito). Ang header ng yamux ay naglalaman ng numero ng stream, mga flag para sa pag-install/pagwawakas ng stream, ang bilang ng mga byte na inilipat, at ang laki ng window ng paglilipat.

Pagsusulat ng Reverse socks5 proxy sa powershell.Bahagi 1

Bilang karagdagan sa pag-install/pagwawakas ng isang stream, ang yamux ay nagpapatupad ng isang keepalive na mekanismo na nagbibigay-daan sa iyong subaybayan ang pagganap ng itinatag na channel ng komunikasyon. Ang pagpapatakbo ng mekanismo ng keeplive na mensahe ay na-configure kapag gumagawa ng session ng Yamux. Sa totoo lang, sa mga setting ay mayroon lamang dalawang parameter: paganahin/pagana at ang dalas ng pagpapadala ng mga packet sa ilang segundo. Ang mga mensahe ng Keepalive ay maaaring ipadala ng isang yamux server o isang yamux client. Kapag tumatanggap ng isang keepalive na mensahe, ang malayong partido ay dapat tumugon dito sa pamamagitan ng pagpapadala ng eksaktong parehong identifier ng mensahe (talagang isang numero) na natanggap nito. Sa pangkalahatan, ang keepalive ay ang parehong ping, para lamang sa yamux.

Ang buong pamamaraan ng pagpapatakbo ng multiplexer: mga uri ng packet, setup ng koneksyon at mga flag ng pagwawakas, at ang mekanismo ng paglilipat ng data ay inilarawan nang detalyado sa mga pagtutukoy sa yamux.

Konklusyon sa unang bahagi

Kaya, sa unang bahagi ng artikulo, nakilala namin ang ilang mga tool para sa pag-aayos ng mga reverse tunnel, tiningnan ang kanilang mga pakinabang at kawalan, pinag-aralan ang mekanismo ng pagpapatakbo ng Yamux multiplexer at inilarawan ang mga pangunahing kinakailangan para sa bagong nilikha na module ng powershell. Sa susunod na bahagi ay bubuo tayo ng modyul mismo, halos mula sa simula. Itutuloy. Wag kang lumipat :)

Pinagmulan: www.habr.com

Magdagdag ng komento