Powershell жүйесінде кері socks5 проксиін жазу. 1-бөлім

3 бөлімнен тұратын зерттеулер мен әзірлемелер туралы әңгіме. 1-бөлім барлау болып табылады.
Көптеген бук ағаштары бар - одан да көп пайдасы бар.

Мәселенің тұжырымы

Пентесттер мен RedTeam науқандары кезінде VPN, RDP, Citrix және т.б. сияқты Тұтынушының стандартты құралдарын пайдалану әрқашан мүмкін бола бермейді. ішкі желіге кіру үшін якорь ретінде. Кейбір жерлерде стандартты VPN СІМ көмегімен жұмыс істейді және екінші фактор ретінде аппараттық таңбалауыш пайдаланылады, басқаларында ол қатыгездікпен бақыланады және біздің VPN логиніміз бірден көрінеді, олар айтқандай, ол барлық нәрсеге әкеледі, бірақ басқаларында бар мұндай құралдар жоқ.

Мұндай жағдайларда біз үнемі «кері туннельдер» деп аталатындарды - ішкі желіден сыртқы ресурсқа немесе біз басқаратын серверге қосылымдарды жасауымыз керек. Мұндай туннельдің ішінде біз қазірдің өзінде Тұтынушылардың ішкі ресурстарымен жұмыс істей аламыз.

Бұл қайтару туннельдерінің бірнеше түрі бар. Олардың ішіндегі ең танымалы, әрине, Meterpreter. Кері портты бағыттайтын SSH туннельдері де хакерлердің арасында үлкен сұранысқа ие. Кері туннельдеуді жүзеге асырудың көптеген құралдары бар және олардың көпшілігі жақсы зерттелген және сипатталған.
Әрине, өз тарапынан қауіпсіздік шешімдерін әзірлеушілер шетте қалмайды және мұндай әрекеттерді белсенді түрде анықтайды.
Мысалы, MSF сеанстары Cisco немесе Positive Tech заманауи IPS арқылы сәтті анықталады және кері SSH туннелі кез келген қалыпты желіаралық қалқан арқылы анықталуы мүмкін.

Сондықтан жақсы RedTeam науқанында назардан тыс қалу үшін стандартты емес құралдарды пайдаланып кері туннель салу және желінің нақты жұмыс режиміне барынша бейімделу керек.

Осыған ұқсас нәрсені табуға немесе ойлап табуға тырысайық.

Кез келген нәрсені ойлап шығармас бұрын, біз қандай нәтижеге қол жеткізгіміз келетінін, біздің дамуымыз қандай функцияларды орындауы керек екенін түсінуіміз керек. Біз максималды жасырын режимде жұмыс істей алуымыз үшін туннельге қандай талаптар қойылады?

Әрбір жағдай үшін мұндай талаптар айтарлықтай ерекшеленуі мүмкін екені анық, бірақ жұмыс тәжірибесіне сүйене отырып, негізгілерін анықтауға болады:

  • Windows-7-10 операциялық жүйесінде жұмыс істеу. Көптеген корпоративтік желілер Windows жүйесін пайдаланатындықтан;
  • ips арқылы ақымақ тыңдауды болдырмау үшін клиент серверге SSL арқылы қосылады;
  • Қосылу кезінде клиент авторизациясы бар прокси сервер арқылы жұмысты қолдауы керек, өйткені Көптеген компанияларда Интернетке кіру прокси арқылы жүзеге асады. Шындығында, клиент машинасы бұл туралы ештеңе білмеуі мүмкін және прокси мөлдір режимде пайдаланылады. Бірақ біз мұндай функционалдылықты қамтамасыз етуіміз керек;
  • клиент бөлігі қысқа және портативті болуы керек;
    Тұтынушы желісінде жұмыс істеу үшін клиенттік компьютерге OpenVPN орнатуға және серверіңізге толыққанды туннель жасауға болатыны анық (бақытымызға орай, openvpn клиенттері прокси арқылы жұмыс істей алады). Бірақ, біріншіден, бұл әрқашан жұмыс істемейді, өйткені біз ол жерде жергілікті әкімші болмауымыз мүмкін, ал екіншіден, ол соншалықты шу шығаратыны сонша, лайықты SIEM немесе HIPS бізді бірден «қағып алады». Ең дұрысы, біздің клиент кірістірілген пәрмен деп аталатын болуы керек, мысалы, көптеген bash қабықшалары орындалады және пәрмен жолы арқылы іске қосылады, мысалы, сөз макросынан пәрмендерді орындау кезінде.
  • біздің туннель көп ағынды болуы және бір уақытта көптеген қосылымдарды қолдауы керек;
  • клиент-сервер қосылымында авторизацияның қандай да бір түрі болуы керек, осылайша туннель біздің серверге көрсетілген мекенжай мен порт бойынша келетіндердің барлығы үшін емес, тек біздің клиент үшін орнатылады. Ең дұрысы, бастапқы доменге қатысты мысықтар немесе кәсіби тақырыптар бар бастапқы бет «үшінші тарап пайдаланушылары» үшін ашылуы керек.
    Мысалы, егер Тұтынушы медициналық ұйым болса, онда емхана қызметкері кірген ресурсты, фармацевтикалық өнімдері бар бетті, диагноздың сипаттамасы бар Википедияны немесе доктор Комаровскийдің блогын тексеруге шешім қабылдаған ақпараттық қауіпсіздік әкімшісі үшін және т.б. .ашуы керек.

Қолданыстағы құралдарды талдау

Өзіңіздің велосипедіңізді қайта ойлап таппас бұрын, сіз қолданыстағы велосипедтерге талдау жасап, оның бізге шынымен қажет екенін түсінуіңіз керек және, бәлкім, мұндай функционалды велосипедтің қажеттілігі туралы ойлаған жалғыз біз емеспіз.

Интернетте Google іздеу (біз әдетте google-ді іздейтін сияқтымыз), сондай-ақ Github-та «кері шұлықтар» кілт сөздерін пайдаланып іздеу көп нәтиже бермеді. Негізінде, мұның бәрі кері портты бағыттау және онымен байланысты барлық нәрсе бар ssh туннельдерін құруға байланысты. SSH туннельдерінен басқа, бірнеше шешімдер бар:

github.com/klsecservices/rpivot
Касперский зертханасындағы жігіттердің кері туннельді көптен бері жүзеге асыруы. Атау бұл сценарийдің не үшін арналғанын анық көрсетеді. Python 2.7-де енгізілген туннель таза мәтіндік режимде жұмыс істейді (қазір айту сәнге айналған - Hello RKN)

github.com/tonyseek/rsocks
Python-дағы тағы бір іске асыру, сонымен қатар анық мәтінде, бірақ көп мүмкіндіктермен. Ол модуль ретінде жазылған және шешімді жобаларыңызға біріктіруге арналған API бар.

github.com/llkat/rsockstun
github.com/mis-team/rsockstun
Бірінші сілтеме Голангтағы кері соксты енгізудің түпнұсқа нұсқасы (әзірлеуші ​​қолдамайды).
Екінші сілтеме - бұл Голанг тіліндегі қосымша мүмкіндіктері бар біздің редакциямыз. Біздің нұсқада біз SSL енгіздік, NTLM авторизациясы бар прокси арқылы жұмыс істедік, клиентте авторизация, қате пароль болған жағдайда бастапқы бет (дәлірек айтқанда, қону бетіне қайта бағыттау), көп ағынды режим (яғни бірнеше адам). туннельмен бір уақытта жұмыс істей алады) , клиенттің тірі немесе жоқ екенін анықтау үшін пинг жасау жүйесі.

github.com/jun7th/tsocks
Python тіліндегі «қытайлық достарымыздан» кері соксты енгізу. Онда жалқау және «өлмейтін» үшін қытайлықтар жинаған және пайдалануға дайын екілік (exe) бар. Мұнда тек қытай құдайы бұл екілік файлда негізгі функциядан басқа нені қамтуы мүмкін екенін біледі, сондықтан өз қауіп-қатеріңізге және тәуекеліңізге пайдаланыңыз.

github.com/securesocketfunneling/ssf
C++ тілінде кері соксты және т.б. енгізуге арналған өте қызықты жоба. Кері туннельден басқа, ол портты қайта жіберуді, командалық қабықшаны құруды және т.б.

MSF өлшеушісі
Мұнда, олар айтқандай, түсініктемелер жоқ. Барлық азды-көпті білімді хакерлер бұл нәрсемен жақсы таныс және оны қауіпсіздік құралдары арқылы оңай анықтауға болатындығын түсінеді.

Жоғарыда сипатталған құралдардың барлығы ұқсас технология арқылы жұмыс істейді: алдын ала дайындалған орындалатын екілік модуль желі ішіндегі машинада іске қосылады, ол сыртқы сервермен байланыс орнатады. Сервер қосылымдарды қабылдайтын және оларды клиентке жіберетін SOCKS4/5 серверін іске қосады.

Жоғарыда аталған құралдардың барлығының кемшілігі: Python немесе Golang клиенттік құрылғыға орнатылуы керек (мысалы, компания директорының немесе кеңсе қызметкерлерінің машиналарында Python орнатылғанын жиі көрдіңіз бе?) немесе алдын ала құрастырылған. екілік (шын мәнінде python) осы машинаға және сценарийді бір бөтелкеге ​​апару керек және осы екілік файлды сол жерде іске қосыңыз. Ал exe файлын жүктеп алып, оны іске қосу да жергілікті антивирус немесе HIPS үшін қолтаңба болып табылады.

Тұтастай алғанда, қорытынды өзін көрсетеді - бізге powershell шешімі қажет. Енді қызанақтар бізге ұшады - олар Powershell қазірдің өзінде бұзылған дейді, ол бақыланады, бұғатталған және т.б. және т.б. Шындығында, барлық жерде емес. жауапкершілікпен мәлімдейміз. Айтпақшы, бұғаттауды айналып өтудің көптеген жолдары бар (бұл жерде тағы да сәлем РКН туралы сәнді сөз бар 🙂), powershell.exe -> cmdd.exe атын ақымақ өзгертуден бастап және powerdll-ге дейін және т.б.

Ойлап шығаруды бастайық

Алдымен Google-ды іздейтініміз анық және ... бұл тақырып бойынша ештеңе таба алмаймыз (егер біреу оны тапқан болса, сілтемелерді түсініктемелерде жариялаңыз). Тек бар іске асыру Powershell-дегі Socks5, бірақ бұл қарапайым «тікелей» сокс, оның бірқатар кемшіліктері бар (олар туралы кейінірек айтатын боламыз). Сіз, әрине, қолыңыздың аздап қозғалысы арқылы оны керісінше айналдыра аласыз, бірақ бұл тек бір жіпті сокс болады, бұл бізге қажет нәрсе емес.

Сонымен, біз дайын ештеңе таппадық, сондықтан біз әлі де дөңгелекті қайта ойлап табуымыз керек. Біз велосипедімізге негіз аламыз біздің дамуымыз Голангтағы кері сокс, және біз оған клиентті powershell-де енгіземіз.

RSocksTun
Сонымен, rsockstun қалай жұмыс істейді?

RsocksTun (бұдан әрі - rs) жұмысы екі бағдарламалық құрал құрамдастарына - Yamux және Socks5 серверіне негізделген. Socks5 сервері тұрақты жергілікті socks5 болып табылады, ол клиентте жұмыс істейді. Ал оған қосылымдарды мультиплекстеу (көп ағынды туралы есіңізде ме?) yamux () көмегімен қамтамасыз етіледі.тағы бір мультиплексор). Бұл схема бірнеше клиенттік socks5 серверлерін іске қосуға және оларға сыртқы қосылымдарды таратуға мүмкіндік береді, оларды бір TCP қосылымы арқылы (метерпретердегідей дерлік) клиенттен серверге қайта бағыттайды, осылайша көп ағынды режимді жүзеге асырады, онсыз біз жай болмайды. ішкі желілерде толық жұмыс істей алады.

Yamux жұмысының мәні мынада: ол ағындардың қосымша желілік қабатын енгізеді, оны әрбір пакет үшін 12 байт тақырып түрінде жүзеге асырады. (Мұнда біз оқырманды бағдарлама ағынымен «ағын» шатастырмау үшін жіптен гөрі «ағын» сөзін қолданамыз - біз осы мақалада бұл ұғымды да қолданамыз). Yamux тақырыбы ағын нөмірін, ағынды орнату/тоқтату жалауларын, тасымалданатын байттардың санын және тасымалдау терезесінің өлшемін қамтиды.

Powershell жүйесінде кері socks5 проксиін жазу. 1-бөлім

Ағынды орнату/тоқтатумен қатар, yamux орнатылған байланыс арнасының жұмысын бақылауға мүмкіндік беретін сақтау механизмін жүзеге асырады. Yamux сеансын жасау кезінде сақталатын хабар механизмінің жұмысы конфигурацияланады. Іс жүзінде параметрлердің екі параметрі бар: қосу/өшіру және секундтардағы пакеттерді жіберу жиілігі. Keepalive хабарламаларын yamux сервері немесе yamux клиенті жіберуі мүмкін. Сақтау хабарын алған кезде қашықтағы тарап оған дәл сол хабар идентификаторын (шын мәнінде сан) жіберу арқылы жауап беруі керек. Жалпы, keepalive бірдей пинг, тек yamux үшін.

Мультиплексордың бүкіл жұмыс істеу техникасы: пакет түрлері, қосылымды орнату және тоқтату жалаушалары және деректерді беру механизмі мына бөлімде егжей-тегжейлі сипатталған. сипаттамалары yamux-қа.

Бірінші бөлімге қорытынды

Сонымен, мақаланың бірінші бөлігінде біз кері туннельдерді ұйымдастырудың кейбір құралдарымен таныстық, олардың артықшылықтары мен кемшіліктерін қарастырдық, Yamux мультиплексорының жұмыс істеу механизмін зерттедік және жаңадан құрылған powershell модуліне қойылатын негізгі талаптарды сипаттадық. Келесі бөлімде біз модульдің өзін іс жүзінде нөлден дамытамыз. Жалғасы бар. Ауыспаңыз :)

Ақпарат көзі: www.habr.com

пікір қалдыру