Powershell-ում գրում ենք Reverse socks5 proxy-ը: Մաս 1

Պատմություն հետազոտության և զարգացման մասին 3 մասից: Մաս 1-ը հետախուզական է:
Բազմաթիվ հաճարենիներ կան՝ նույնիսկ ավելի շատ օգուտներ:

Խնդրի ձևակերպում

Pentest-ների և RedTeam արշավների ժամանակ միշտ չէ, որ հնարավոր է օգտագործել Հաճախորդի ստանդարտ գործիքները, ինչպիսիք են VPN, RDP, Citrix և այլն: որպես ներքին ցանց մուտք գործելու խարիսխ։ Որոշ տեղերում ստանդարտ VPN-ն աշխատում է MFA-ի միջոցով, իսկ ապարատային նշանն օգտագործվում է որպես երկրորդ գործոն, որոշ տեղերում դա դաժանորեն վերահսկվում է, և մեր VPN մուտքն անմիջապես տեսանելի է դառնում, ինչպես ասում են, այն ամենով, ինչ դա ենթադրում է, բայց մյուսներում կան. պարզապես նման միջոցներ չկան:

Նման դեպքերում մենք անընդհատ ստիպված ենք լինում այսպես կոչված «հակադարձ թունելներ» անել՝ միացումներ ներքին ցանցից արտաքին ռեսուրսի կամ մեր կողմից վերահսկվող սերվերի հետ: Նման թունելի ներսում մենք արդեն կարող ենք աշխատել Հաճախորդների ներքին ռեսուրսների հետ։

Այս վերադարձի թունելների մի քանի տեսակներ կան: Դրանցից ամենահայտնին, իհարկե, Meterpreter-ն է։ Հաքերային զանգվածների շրջանում մեծ պահանջարկ ունեն նաև SSH թունելները՝ հակադարձ նավահանգիստներով։ Հակադարձ թունելավորման իրականացման համար բավականին շատ միջոցներ կան, և դրանցից շատերը լավ ուսումնասիրված և նկարագրված են:
Իհարկե, իրենց հերթին, անվտանգության լուծումներ մշակողները մի կողմ չեն կանգնում և ակտիվորեն հայտնաբերում են նման գործողությունները։
Օրինակ, MSF նիստերը հաջողությամբ հայտնաբերվում են Cisco-ի կամ Positive Tech-ի ժամանակակից IPS-ի միջոցով, և հակադարձ SSH թունելը կարող է հայտնաբերվել գրեթե ցանկացած նորմալ firewall-ով:

Հետևաբար, RedTeam-ի լավ արշավում աննկատ մնալու համար մենք պետք է կառուցենք հակադարձ թունել՝ օգտագործելով ոչ ստանդարտ միջոցներ և հնարավորինս սերտորեն հարմարվենք ցանցի իրական գործառնական ռեժիմին:

Փորձենք նման բան գտնել կամ հորինել։

Ինչ-որ բան հորինելուց առաջ մենք պետք է հասկանանք, թե ինչ արդյունքի ենք ուզում հասնել, ինչ գործառույթներ պետք է կատարի մեր զարգացումը։ Ի՞նչ պահանջներ են լինելու թունելի համար, որպեսզի կարողանանք աշխատել մաքսիմալ գաղտագողի ռեժիմով։

Հասկանալի է, որ յուրաքանչյուր դեպքի համար նման պահանջները կարող են մեծապես տարբերվել, բայց աշխատանքային փորձի հիման վրա կարելի է առանձնացնել հիմնականները.

  • աշխատել Windows-7-10 OS-ով: Քանի որ կորպորատիվ ցանցերի մեծ մասը օգտագործում է Windows;
  • հաճախորդը սերվերին միանում է SSL-ի միջոցով՝ IP-ների միջոցով հիմար լսելուց խուսափելու համար.
  • Միանալիս հաճախորդը պետք է աջակցի աշխատանքը լիազորված պրոքսի սերվերի միջոցով, քանի որ Շատ ընկերություններում ինտերնետ հասանելիությունը տեղի է ունենում վստահված անձի միջոցով: Փաստորեն, հաճախորդի մեքենան կարող է նույնիսկ ոչինչ չգիտի դրա մասին, և վստահված անձը օգտագործվում է թափանցիկ ռեժիմում: Բայց մենք պետք է նման ֆունկցիոնալություն ապահովենք.
  • հաճախորդի մասը պետք է լինի հակիրճ և շարժական.
    Հասկանալի է, որ Հաճախորդի ցանցում աշխատելու համար դուք կարող եք տեղադրել OpenVPN հաճախորդի մեքենայի վրա և ստեղծել լիարժեք թունել ձեր սերվերին (բարեբախտաբար, openvpn հաճախորդները կարող են աշխատել վստահված անձի միջոցով): Բայց, նախ, սա միշտ չէ, որ կաշխատի, քանի որ մենք կարող ենք այնտեղ տեղացի ադմիններ չլինենք, և երկրորդ՝ այնքան աղմուկ կբարձրացնի, որ պարկեշտ SIEM-ը կամ HIPS-ը մեզ անմիջապես «կխփեն»: Իդեալում, մեր հաճախորդը պետք է լինի այսպես կոչված inline հրաման, քանի որ, օրինակ, բազմաթիվ bash shells ներդրվում են և գործարկվում հրամանի տողի միջոցով, օրինակ՝ բառային մակրոյից հրամաններ կատարելիս:
  • մեր թունելը պետք է լինի բազմաթելային և միաժամանակ աջակցի բազմաթիվ միացումների;
  • հաճախորդ-սերվեր կապը պետք է ունենա որոշակի թույլտվություն, որպեսզի թունելը ստեղծվի միայն մեր հաճախորդի համար, և ոչ բոլորի համար, ովքեր գալիս են մեր սերվեր նշված հասցեով և նավահանգստով: Իդեալում, «երրորդ կողմի օգտատերերի» համար պետք է բացվի վայրէջքի էջ՝ կատուներով կամ մասնագիտական ​​թեմաներով, որոնք կապված են բնօրինակ տիրույթի հետ։
    Օրինակ, եթե Հաճախորդը բժշկական կազմակերպություն է, ապա տեղեկատվական անվտանգության ադմինիստրատորի համար, ով որոշում է ստուգել այն ռեսուրսը, որին հասանելի է եղել կլինիկայի աշխատակիցը, դեղագործական արտադրանքով էջը, ախտորոշման նկարագրությամբ Վիքիպեդիան կամ բժիշկ Կոմարովսկու բլոգը և այլն: պետք է բացվի:

Գոյություն ունեցող գործիքների վերլուծություն

Նախքան ձեր սեփական հեծանիվը վերահայտնելը, դուք պետք է վերլուծեք գոյություն ունեցող հեծանիվները և հասկանաք, թե արդյոք դա մեզ իսկապես անհրաժեշտ է, և, հավանաբար, մենք միակը չենք, որ մտածել ենք նման ֆունկցիոնալ հեծանիվի անհրաժեշտության մասին:

Ինտերնետում google-ը (կարծես թե նորմալ ենք google-ում), ինչպես նաև Github-ում «reverse socks» հիմնաբառերով որոնումը շատ արդյունք չի տվել։ Հիմնականում ամեն ինչ հանգում է ssh թունելների կառուցմանը հակադարձ նավահանգիստների վերահասցեավորումով և դրա հետ կապված ամեն ինչով: Բացի SSH թունելներից, կան մի քանի լուծումներ.

github.com/klsecservices/rpivot
Հակադարձ թունելի երկարամյա իրականացում Կասպերսկու լաբորատորիայի տղաներից: Անունը պարզ է դարձնում, թե ինչի համար է նախատեսված այս սցենարը։ Իրականացված Python 2.7-ում թունելը գործում է հստակ տեքստային ռեժիմով (ինչպես հիմա նորաձև է ասել՝ բարև RKN)

github.com/tonyseek/rsocks
Մեկ այլ իրականացում Python-ում, նույնպես հստակ տեքստով, բայց ավելի շատ հնարավորություններով: Այն գրված է որպես մոդուլ և ունի API՝ լուծումը ձեր նախագծերում ինտեգրելու համար:

github.com/llkat/rsocstun
github.com/mis-team/rsocstun
Առաջին հղումը Golang-ում հակադարձ sox-ի իրականացման օրիգինալ տարբերակն է (մշակողի կողմից չի աջակցվում):
Երկրորդ հղումը մեր վերանայումն է լրացուցիչ հնարավորություններով, նաև Գոլանգում: Մեր տարբերակում մենք ներդրել ենք SSL, աշխատել վստահված անձի միջոցով NTLM թույլտվությամբ, հաճախորդի վրա թույլտվություն, սխալ գաղտնաբառի դեպքում վայրէջք էջ (ավելի ճիշտ՝ վերահղում դեպի վայրէջք էջ), բազմաշերտ ռեժիմ (այսինքն՝ մի քանի հոգի): կարող է միաժամանակ աշխատել թունելի հետ), հաճախորդին զանգելու համակարգ՝ որոշելու, թե արդյոք նա ողջ է, թե ոչ:

github.com/jun7th/tsocks
Reverse sox-ի իրականացում մեր «չինական ընկերներից» Python-ում: Այնտեղ ծույլերի և «անմահների» համար կա պատրաստի երկուական (exe)՝ չինացիների կողմից հավաքված և օգտագործման համար պատրաստ։ Այստեղ միայն չինական Աստվածը գիտի, թե բացի հիմնական ֆունկցիոնալությունից, ուրիշ ինչ կարող է պարունակել այս երկուականը, այնպես որ օգտագործեք ձեր վտանգի տակ և ռիսկով:

github.com/securesocketfunneling/ssf
Բավականին հետաքրքիր նախագիծ C++-ում reverse sox-ի իրականացման համար և այլն: Բացի հակադարձ թունելից, այն կարող է կատարել նավահանգիստների վերահասցեավորում, ստեղծել հրամանի վահանակ և այլն:

MSF չափիչ
Այստեղ, ինչպես ասում են, առանց մեկնաբանությունների։ Բոլոր նույնիսկ քիչ թե շատ կրթված հաքերները շատ լավ ծանոթ են այս բանին և հասկանում են, թե որքան հեշտությամբ այն կարող է հայտնաբերվել անվտանգության գործիքների միջոցով:

Վերը նկարագրված բոլոր գործիքներն աշխատում են նմանատիպ տեխնոլոգիայի կիրառմամբ. ցանցի ներսում գործող մեքենայի վրա գործարկվում է նախապես պատրաստված գործարկվող երկուական մոդուլ, որը կապ է հաստատում արտաքին սերվերի հետ: Սերվերը գործարկում է SOCKS4/5 սերվեր, որն ընդունում է կապերը և փոխանցում դրանք հաճախորդին:

Վերոնշյալ բոլոր գործիքների թերությունն այն է, որ կամ Python-ը կամ Golang-ը պետք է տեղադրվեն հաճախորդի մեքենայի վրա (հաճա՞խ տեսե՞լ եք Python-ը, որը տեղադրված է, օրինակ, ընկերության տնօրենի կամ գրասենյակի աշխատողների մեքենաների վրա), կամ նախապես հավաքված: երկուական (իրականում python) պետք է քաշել այս մեքենայի և սցենարի վրա մեկ շշով) և գործարկել այս երկուականն արդեն այնտեղ: Եվ exe ներբեռնելը և այն գործարկելը նույնպես տեղական հակավիրուսային կամ HIPS-ի ստորագրություն է:

Ընդհանրապես, եզրակացությունն ինքնին հուշում է՝ մեզ powershell լուծում է պետք։ Հիմա լոլիկները կթռչեն մեզ վրա, ասում են՝ powershell-ն արդեն թալանված է, վերահսկվում է, արգելափակված է և այլն։ եւ այլն։ Իրականում, ոչ ամենուր: Մենք ամենայն պատասխանատվությամբ հայտարարում ենք. Ի դեպ, արգելափակումը շրջանցելու բազմաթիվ եղանակներ կան (այստեղ էլի կա բարև RKN-ի մասին մոդայիկ արտահայտություն 🙂), սկսած powershell.exe -> cmdd.exe-ի հիմար վերանվանումից և վերջացրած powerdll-ով և այլն։

Եկեք սկսենք հորինել

Հասկանալի է, որ մենք նախ կփնտրենք Google-ում և… ոչինչ չենք գտնի այս թեմայով (եթե ինչ-որ մեկը գտել է այն, հղումները տեղադրեք մեկնաբանություններում): Կա միայն իրականացումը Socks5-ը powershell-ի վրա, բայց սա սովորական «ուղիղ» սոքս է, որն ունի իր մի շարք թերություններ (դրանց մասին կխոսենք ավելի ուշ): Դուք, իհարկե, կարող եք ձեր ձեռքի մի փոքր շարժումով այն վերածել հակառակի, բայց դա կլինի միայն միաթելային սոքս, որը մեզ այնքան էլ անհրաժեշտ չէ:

Այսպիսով, մենք պատրաստ ոչինչ չենք գտել, ուստի մենք դեռ պետք է վերահայտնենք մեր անիվը: Մենք հիմք կընդունենք մեր հեծանիվի համար մեր զարգացումը reverse sox-ը Golang-ում, և մենք դրա համար հաճախորդ ենք իրականացնում powershell-ում:

RSocksTun
Այսպիսով, ինչպես է աշխատում rsokstun-ը:

RsocksTun-ի աշխատանքը (այսուհետ՝ rs) հիմնված է երկու ծրագրային բաղադրիչի վրա՝ Yamux և Socks5 սերվեր: Socks5 սերվերը սովորական տեղական socks5 է, այն աշխատում է հաճախորդի վրա: Եվ դրա հետ կապերի մուլտիպլեքսավորումը (հիշո՞ւմ եք բազմաթելերի մասին) ապահովվում է yamux-ի միջոցով (ևս մեկ մուլտիպլեքսոր) Այս սխեման թույլ է տալիս գործարկել մի քանի հաճախորդի socks5 սերվերներ և տարածել նրանց արտաքին կապերը՝ դրանք փոխանցելով մեկ TCP կապի միջոցով (գրեթե ինչպես չափիչի) հաճախորդից սերվեր, դրանով իսկ ներդնելով բազմաշերտ ռեժիմ, առանց որի մենք պարզապես չենք լինի: ի վիճակի է լիարժեք աշխատել ներքին ցանցերում.

Yamux-ի աշխատանքի էությունն այն է, որ այն ներմուծում է հոսքերի լրացուցիչ ցանցային շերտ՝ այն իրականացնելով յուրաքանչյուր փաթեթի համար 12 բայթանոց վերնագրի տեսքով: (Այստեղ մենք միտումնավոր օգտագործում ենք «հոսք» բառը, քան թեմա, որպեսզի ընթերցողին չշփոթենք ծրագրային հոսքի «թել»-ի հետ. մենք կօգտագործենք նաև այս հայեցակարգը այս հոդվածում): Yamux վերնագիրը պարունակում է հոսքի համարը, հոսքի տեղադրման/դադարեցման դրոշները, փոխանցված բայթերի քանակը և փոխանցման պատուհանի չափը:

Powershell-ում գրում ենք Reverse socks5 proxy-ը: Մաս 1

Ի լրումն հոսքի տեղադրման/դադարեցման, yamux-ն իրականացնում է պահպանման մեխանիզմ, որը թույլ է տալիս վերահսկել հաստատված կապի ալիքի աշխատանքը: Keeplive հաղորդագրության մեխանիզմի գործարկումը կազմաձևվում է Yamux նիստ ստեղծելիս: Իրականում կարգավորումներից միայն երկու պարամետր կա՝ միացնել/անջատել և փաթեթների ուղարկման հաճախականությունը վայրկյաններով: Keepalive հաղորդագրությունները կարող են ուղարկվել yamux սերվերի կամ yamux հաճախորդի կողմից: Պահպանման հաղորդագրություն ստանալիս հեռավոր կողմը պետք է պատասխանի դրան՝ ուղարկելով նույն հաղորդագրության նույնացուցիչը (իրականում այն ​​համարը), որը ստացել է: Ընդհանրապես kealive-ը նույն պինգն է, միայն yamux-ի համար։

Մուլտիպլեքսորի գործառնական ամբողջ տեխնիկան՝ փաթեթների տեսակները, կապի կարգավորումը և ավարտման դրոշակները և տվյալների փոխանցման մեխանիզմը մանրամասն նկարագրված են. բնութագրերը yamux-ին։

Առաջին մասի եզրակացություն

Այսպիսով, հոդվածի առաջին մասում մենք ծանոթացանք հակադարձ թունելների կազմակերպման որոշ գործիքների հետ, նայեցինք դրանց առավելություններն ու թերությունները, ուսումնասիրեցինք Yamux մուլտիպլեքսերի շահագործման մեխանիզմը և նկարագրեցինք նորաստեղծ Powershell մոդուլի հիմնական պահանջները: Հաջորդ մասում մենք կմշակենք ինքնին մոդուլը, գործնականում զրոյից: Շարունակելի. Մի փոխիր :)

Source: www.habr.com

Добавить комментарий