Бид Powershell дээр Reverse socks5 прокси бичдэг. 1-р хэсэг

3 хэсгээс бүрдсэн судалгаа, хөгжлийн тухай өгүүллэг. 1-р хэсэг нь эрэл хайгуул юм.
Олон beech мод байдаг - үүнээс ч илүү ашиг тустай.

Асуудлын тодорхойлолт

Пентест болон RedTeam кампанит ажлын үеэр VPN, RDP, Citrix гэх мэт Хэрэглэгчийн стандарт хэрэгслийг ашиглах боломжгүй байдаг. дотоод сүлжээнд нэвтрэх зангуу болгон. Зарим газарт стандарт VPN нь MFA ашиглан ажилладаг бөгөөд техник хангамжийн токеныг хоёр дахь хүчин зүйл болгон ашигладаг бол зарим газарт үүнийг харгис хэрцгий хянаж, бидний VPN нэвтрэлт нь тэдний хэлснээр тэр даруй харагдах болно, гэхдээ заримд нь байдаг. зүгээр л ийм арга байхгүй.

Ийм тохиолдолд бид "урвуу хонгил" гэж нэрлэгддэг дотоод сүлжээнээс гадаад эх үүсвэр эсвэл бидний удирддаг сервер рүү холболт хийх шаардлагатай болдог. Ийм хонгил дотор бид Хэрэглэгчийн дотоод нөөц бололцоотой аль хэдийн ажиллаж чадна.

Эдгээр буцах хонгилын хэд хэдэн сорт байдаг. Тэдгээрийн хамгийн алдартай нь мэдээж Метерпретер юм. Урвуу порт дамжуулах SSH хонгилууд нь хакеруудын дунд маш их эрэлт хэрэгцээтэй байдаг. Урвуу хонгилыг хэрэгжүүлэх олон арга хэрэгсэл байдаг бөгөөд тэдгээрийн ихэнхийг сайтар судалж, тайлбарласан байдаг.
Мэдээжийн хэрэг, тэдний хувьд аюулгүй байдлын шийдлийг хөгжүүлэгчид хажуу тийшээ зогсдоггүй бөгөөд ийм үйлдлийг идэвхтэй илрүүлдэг.
Жишээлбэл, MSF сессийг Cisco эсвэл Positive Tech-ийн орчин үеийн IPS-ээр амжилттай илрүүлдэг ба урвуу SSH туннелийг бараг ямар ч энгийн галт ханаар илрүүлж болно.

Тиймээс RedTeam-ын сайн кампанит ажилд анзаарагдахгүй байхын тулд бид стандарт бус арга хэрэгслээр урвуу хонгил барьж, сүлжээний бодит үйл ажиллагааны горимд аль болох ойртох хэрэгтэй.

Үүнтэй төстэй зүйлийг олох эсвэл зохион бүтээхийг хичээцгээе.

Аливаа зүйлийг зохион бүтээхээсээ өмнө бид ямар үр дүнд хүрэхийг хүсч байгаагаа, бидний хөгжил ямар үүрэг гүйцэтгэх ёстойг ойлгох хэрэгтэй. Бид хамгийн нууцлаг горимд ажиллахын тулд хонгилд ямар шаардлага тавих вэ?

Тохиолдол бүрийн хувьд ийм шаардлагууд ихээхэн ялгаатай байх нь ойлгомжтой боловч ажлын туршлага дээр үндэслэн гол зүйлийг нь тодорхойлж болно.

  • Windows-7-10 үйлдлийн систем дээр ажиллах. Ихэнх корпорацийн сүлжээнүүд Windows ашигладаг тул;
  • үйлчлүүлэгч нь ips ашиглан тэнэг сонсохоос зайлсхийхийн тулд SSL-ээр серверт холбогддог;
  • Холбох үед үйлчлүүлэгч зөвшөөрөлтэй прокси серверээр дамжуулан ажиллах ёстой, учир нь Олон компаниудад интернетэд нэвтрэх нь проксигаар дамждаг. Үнэн хэрэгтээ, үйлчлүүлэгч машин энэ талаар юу ч мэдэхгүй байж магадгүй бөгөөд прокси нь ил тод горимд ашиглагддаг. Гэхдээ бид ийм функцийг хангах ёстой;
  • үйлчлүүлэгчийн хэсэг нь товч бөгөөд зөөврийн байх ёстой;
    Хэрэглэгчийн сүлжээнд ажиллахын тулд та OpenVPN-ийг клиент машин дээр суулгаж, сервер рүүгээ бүрэн хонгил үүсгэж болох нь тодорхой байна (аз болоход openvpn үйлчлүүлэгчид прокси ашиглан ажиллах боломжтой). Гэхдээ нэгдүгээрт, энэ нь үргэлж ажиллахгүй, учир нь бид тэнд нутгийн админууд биш байж магадгүй, хоёрдугаарт, энэ нь маш их шуугиан тарьж, сайн SIEM эсвэл HIPS биднийг тэр дор нь "шохих" болно. Хамгийн тохиромжтой нь манай үйлчлүүлэгч inline команд гэж нэрлэгддэг байх ёстой, жишээ нь олон bash бүрхүүлүүд хэрэгжиж, командын мөрөөр дамжуулан ажиллуулдаг, жишээлбэл, үгийн макроноос тушаалуудыг гүйцэтгэх үед.
  • манай хонгил нь олон урсгалтай байх ёстой бөгөөд олон холболтыг нэгэн зэрэг дэмждэг;
  • Үйлчлүүлэгч-серверийн холболт нь ямар нэгэн зөвшөөрөлтэй байх ёстой бөгөөд ингэснээр туннель нь зөвхөн манай үйлчлүүлэгчид зориулагдсан болохоос манай серверт заасан хаяг, портоор ирсэн бүх хүмүүст зориулагдсан биш юм. Анхны домэйнтэй холбоотой муур эсвэл мэргэжлийн сэдвүүд бүхий буух хуудас нь "гуравдагч талын хэрэглэгчдэд" нээлттэй байх ёстой.
    Жишээлбэл, хэрэв үйлчлүүлэгч нь эмнэлгийн байгууллага бол эмнэлгийн ажилтны хандсан эх сурвалжийг шалгахаар шийдсэн мэдээллийн аюулгүй байдлын администраторын хувьд эмийн бүтээгдэхүүний хуудас, оношлогооны тайлбар бүхий Википедиа, доктор Комаровскийн блог гэх мэт. . нээх ёстой.

Одоо байгаа багаж хэрэгслийн дүн шинжилгээ

Өөрийнхөө унадаг дугуйг шинээр зохион бүтээхээсээ өмнө одоо байгаа унадаг дугуйнуудад дүн шинжилгээ хийж, энэ нь бидэнд үнэхээр хэрэгтэй эсэхийг ойлгох хэрэгтэй бөгөөд магадгүй ийм функциональ унадаг дугуй хэрэгтэй гэж бид ганцаараа бодож байгаагүй байх.

Интернэтээр хайлт хийх (бид ихэвчлэн google-ээр ажилладаг юм шиг санагддаг), мөн Github дээр "урвуу оймс" гэсэн түлхүүр үгсээр хайлт хийсэн нь тийм ч их үр дүнд хүрээгүй. Үндсэндээ энэ бүхэн урвуу порт дамжуулах болон үүнтэй холбоотой бүх зүйл бүхий ssh ​​туннел барихад хүргэдэг. SSH хонгилоос гадна хэд хэдэн шийдэл байдаг:

github.com/klsecservices/rpivot
Касперскийн лабораторийн залуусын урвуу хонгилын урт хугацааны хэрэгжилт. Нэр нь энэ скрипт нь юунд зориулагдсан болохыг тодорхой харуулж байна. Python 2.7 дээр хэрэгжсэн туннель нь тодорхой текстийн горимд ажилладаг (одоо хэлэх моод болсон - сайн уу 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 гэх мэтээр дуусч, блоклохыг тойрч гарах олон арга бий (энд сайн уу RKN гэсэн моод хэллэг байна 🙂).

Зохион бүтээж эхэлцгээе

Эхлээд бид Google-ээс хайх нь тодорхой байна ... бид энэ сэдвээр юу ч олохгүй (хэрэв хэн нэгэн үүнийг олсон бол тайлбар дээр холбоосыг нийтэлнэ үү). Зөвхөн байдаг хэрэгжүүлэлт Powershell дээрх Socks5, гэхдээ энэ нь хэд хэдэн сул талуудтай энгийн "шууд" сокс юм (бид дараа нь тэдний талаар ярих болно). Мэдээжийн хэрэг та гараа бага зэрэг хөдөлгөж, урвуу тал руу эргүүлж болно, гэхдээ энэ нь зөвхөн нэг утастай сокс байх болно, энэ нь бидэнд тийм ч чухал биш юм.

Тиймээс бид бэлэн зүйл олоогүй байгаа тул бид дугуйгаа дахин зохион бүтээх хэрэгтэй болно. Бид унадаг дугуйныхаа үндэс болгон авах болно бидний хөгжил Голанг дахь урвуу сокс, бид түүнд зориулж үйлчлүүлэгчийг powershell-д хэрэгжүүлдэг.

RSocksTun
Тэгэхээр rsockstun хэрхэн ажилладаг вэ?

RsocksTun (цаашид rs гэх) үйлдлийн систем нь Yamux болон Socks5 сервер гэсэн хоёр програм хангамжийн бүрэлдэхүүн хэсэг дээр суурилдаг. Socks5 сервер нь ердийн орон нутгийн оймс5 бөгөөд клиент дээр ажилладаг. Мөн үүнтэй холбогдох холболтыг олон талт болгох (олон урсгалыг санаж байна уу?) yamux () ашиглан хийгддэг.бас нэг мультиплексор). Энэхүү схем нь танд хэд хэдэн клиент оймс5 серверийг ажиллуулж, тэдгээрт гадаад холболтыг түгээх боломжийг олгодог бөгөөд тэдгээрийг нэг TCP холболтоор (бараг тоолууртай адил) клиентээс сервер рүү дамжуулах, ингэснээр олон урсгалтай горимыг хэрэгжүүлэх боломжийг олгодог бөгөөд үүнгүйгээр бид зүгээр л ажиллахгүй. дотоод сүлжээнд бүрэн ажиллах боломжтой.

Yamux хэрхэн ажилладагийн мөн чанар нь нэмэлт сүлжээний урсгалын давхаргыг нэвтрүүлж, пакет бүрт 12 байт толгой хэлбэрээр хэрэгжүүлдэгт оршино. (Энд бид уншигчдыг програмын урсгалын "thread" гэж андуурахгүйн тулд урсгал гэхээсээ илүү "урсгал" гэсэн үгийг зориудаар ашигладаг - бид энэ нийтлэлд мөн энэ ойлголтыг ашиглах болно). Yamux-ийн толгой хэсэгт урсгалын дугаар, дамжуулалтыг суулгах/тагсгах тугнууд, шилжүүлсэн байтуудын тоо, дамжуулах цонхны хэмжээг агуулна.

Бид Powershell дээр Reverse socks5 прокси бичдэг. 1-р хэсэг

Ямукс нь урсгалыг суулгах/таслахаас гадна тогтсон холбооны сувгийн гүйцэтгэлийг хянах боломжийг олгодог хадгалах механизмыг хэрэгжүүлдэг. Yamux сессийг үүсгэх үед хадгалах мессежийн механизмын ажиллагааг тохируулдаг. Үнэн хэрэгтээ тохиргоонуудаас зөвхөн хоёр параметр байдаг: идэвхжүүлэх/идэвхгүй болгох, секундын дотор пакет илгээх давтамж. Keepalive мессежийг yamux сервер эсвэл yamux клиентээр илгээж болно. Хадгаламжтай мессежийг хүлээн авахдаа алсын тал нь хүлээн авсан мессеж танигчийг (үнэндээ тоо) илгээж хариу өгөх ёстой. Ерөнхийдөө keepalive нь ижил ping, зөвхөн yamux-д зориулагдсан.

Мультиплексорын ажиллах техникийг бүхэлд нь: пакетийн төрлүүд, холболтын тохиргоо, дуусгавар болох тугнууд, өгөгдөл дамжуулах механизмыг дэлгэрэнгүй тайлбарласан болно. техникийн үзүүлэлтүүд yamux руу.

Эхний хэсгийн дүгнэлт

Тиймээс, нийтлэлийн эхний хэсэгт бид урвуу хонгилыг зохион байгуулах зарим хэрэгслүүдтэй танилцаж, тэдгээрийн давуу болон сул талуудыг судалж, Yamux мультиплексорын ажиллах механизмыг судалж, шинээр бий болсон powershell модулийн үндсэн шаардлагуудыг тайлбарлав. Дараагийн хэсэгт бид модулийг бараг эхнээс нь боловсруулах болно. Үргэлжлэл бий. Битгий солигоорой :)

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх