Menulis proksi Socks5 terbalik dalam powershell.Bahagian 1

Sebuah cerita tentang penyelidikan dan pembangunan dalam 3 bahagian. Bahagian 1 adalah penerokaan.
Terdapat banyak pokok beech - lebih banyak faedah.

Pernyataan masalah

Semasa kempen pentest dan RedTeam, tidak selalu mungkin untuk menggunakan alat standard Pelanggan, seperti VPN, RDP, Citrix, dsb. sebagai sauh untuk memasuki rangkaian dalaman. Di sesetengah tempat, VPN standard berfungsi menggunakan MFA dan token perkakasan digunakan sebagai faktor kedua, di tempat lain ia dipantau secara kejam dan log masuk VPN kami serta-merta menjadi kelihatan, seperti yang mereka katakan, dengan semua yang diperlukan, tetapi di tempat lain terdapat cuma tiada cara sedemikian.

Dalam kes sedemikian, kami sentiasa perlu membuat apa yang dipanggil "terowong terbalik" - sambungan dari rangkaian dalaman ke sumber luaran atau pelayan yang kami kawal. Di dalam terowong sedemikian, kami sudah boleh bekerja dengan sumber dalaman Pelanggan.

Terdapat beberapa jenis terowong pemulangan ini. Yang paling terkenal daripada mereka adalah, sudah tentu, Meterpreter. Terowong SSH dengan pemajuan port terbalik juga sangat diminati di kalangan penggodam. Terdapat banyak cara untuk melaksanakan terowong terbalik dan banyak daripadanya dikaji dan diterangkan dengan baik.
Sudah tentu, bagi pihak mereka, pembangun penyelesaian keselamatan tidak mengetepikan dan secara aktif mengesan tindakan sedemikian.
Sebagai contoh, sesi MSF berjaya dikesan oleh IPS moden daripada Cisco atau Positive Tech, dan terowong SSH terbalik boleh dikesan oleh hampir mana-mana tembok api biasa.

Oleh itu, untuk kekal tanpa disedari dalam kempen RedTeam yang baik, kami perlu membina terowong terbalik menggunakan cara bukan standard dan menyesuaikan sedekat mungkin dengan mod operasi sebenar rangkaian.

Mari cuba cari atau cipta sesuatu yang serupa.

Sebelum mencipta sesuatu, kita perlu memahami hasil yang ingin kita capai, apakah fungsi pembangunan kita harus lakukan. Apakah keperluan untuk terowong itu supaya kita boleh bekerja dalam mod siluman maksimum?

Adalah jelas bahawa untuk setiap kes keperluan tersebut mungkin sangat berbeza, tetapi berdasarkan pengalaman kerja, yang utama dapat dikenalpasti:

  • berfungsi pada OS Windows-7-10. Oleh kerana kebanyakan rangkaian korporat menggunakan Windows;
  • pelanggan menyambung ke pelayan melalui SSL untuk mengelakkan mendengar bodoh menggunakan ips;
  • Apabila menyambung, pelanggan mesti menyokong kerja melalui pelayan proksi dengan kebenaran, kerana Dalam banyak syarikat, akses kepada Internet berlaku melalui proksi. Malah, mesin pelanggan mungkin tidak tahu apa-apa tentangnya, dan proksi digunakan dalam mod telus. Tetapi kita mesti menyediakan fungsi sedemikian;
  • bahagian pelanggan hendaklah ringkas dan mudah alih;
    Adalah jelas bahawa untuk bekerja dalam rangkaian Pelanggan, anda boleh memasang OpenVPN pada mesin klien dan mencipta terowong lengkap ke pelayan anda (mujurlah, klien openvpn boleh bekerja melalui proksi). Tetapi, pertama sekali, ini tidak akan sentiasa berkesan, kerana kami mungkin bukan pentadbir tempatan di sana, dan kedua, ia akan membuat begitu banyak bunyi sehingga SIEM atau HIPS yang baik akan segera "mengejek" kami. Sebaik-baiknya, pelanggan kami harus menjadi arahan sebaris yang dipanggil, contohnya banyak cengkerang bash dilaksanakan, dan dilancarkan melalui baris arahan, contohnya, apabila melaksanakan arahan daripada makro perkataan.
  • terowong kami mestilah berbilang benang dan menyokong banyak sambungan secara serentak;
  • sambungan pelanggan-pelayan mesti mempunyai beberapa jenis kebenaran supaya terowong itu ditubuhkan hanya untuk pelanggan kami, dan bukan untuk semua orang yang datang ke pelayan kami di alamat dan pelabuhan yang ditentukan. Sebaik-baiknya, halaman pendaratan dengan kucing atau topik profesional yang berkaitan dengan domain asal harus dibuka untuk "pengguna pihak ketiga".
    Contohnya, jika Pelanggan ialah organisasi perubatan, maka bagi pentadbir keselamatan maklumat yang memutuskan untuk menyemak sumber yang diakses oleh pekerja klinik, halaman dengan produk farmaseutikal, Wikipedia dengan penerangan tentang diagnosis, atau blog Dr. Komarovsky, dsb. .sepatutnya dibuka.

Analisis alatan sedia ada

Sebelum mencipta semula basikal anda sendiri, anda perlu melakukan analisis basikal sedia ada dan memahami sama ada kita benar-benar memerlukannya dan, mungkin, bukan kita sahaja yang memikirkan keperluan untuk basikal berfungsi sedemikian.

Googling di Internet (kita nampaknya google seperti biasa), serta carian di Github menggunakan kata kunci "socks terbalik" tidak memberikan banyak hasil. Pada asasnya, semuanya bergantung kepada membina terowong ssh dengan pemajuan port terbalik dan semua yang berkaitan dengannya. Sebagai tambahan kepada terowong SSH, terdapat beberapa penyelesaian:

github.com/klsecservices/rpivot
Pelaksanaan terowong terbalik yang telah lama wujud daripada lelaki di Kaspersky Lab. Nama itu menjelaskan maksud skrip ini. Dilaksanakan dalam Python 2.7, terowong beroperasi dalam mod teks jelas (seperti yang biasa disebut sekarang - hello RKN)

github.com/tonyseek/rsocks
Satu lagi pelaksanaan dalam Python, juga dalam teks jelas, tetapi dengan lebih banyak kemungkinan. Ia ditulis sebagai modul dan mempunyai API untuk menyepadukan penyelesaian ke dalam projek anda.

github.com/llkat/rsockstun
github.com/mis-team/rsockstun
Pautan pertama ialah versi asal pelaksanaan reverse sox di Golang (tidak disokong oleh pembangun).
Pautan kedua ialah semakan kami dengan ciri tambahan, juga di Golang. Dalam versi kami, kami melaksanakan SSL, bekerja melalui proksi dengan kebenaran NTLM, kebenaran pada klien, halaman pendaratan sekiranya kata laluan yang salah (atau sebaliknya, ubah hala ke halaman pendaratan), mod berbilang benang (iaitu beberapa orang boleh bekerja dengan terowong pada masa yang sama), sistem ping pelanggan untuk menentukan sama ada dia masih hidup atau tidak.

github.com/jun7th/tsocks
Pelaksanaan reverse sox daripada "rakan Cina" kami dalam Python. Di sana, untuk yang malas dan "abadi", terdapat binari siap pakai (exe), yang dipasang oleh orang Cina dan sedia untuk digunakan. Di sini, hanya Tuhan Cina yang tahu apa lagi yang mungkin mengandungi perduaan ini selain fungsi utama, jadi gunakan atas risiko dan risiko anda sendiri.

github.com/securesocketfunneling/ssf
Projek yang agak menarik dalam C++ untuk melaksanakan reverse sox dan banyak lagi. Sebagai tambahan kepada terowong terbalik, ia boleh melakukan penghantaran port, mencipta shell arahan, dsb.

Pengukur MSF
Di sini, seperti yang mereka katakan, tiada ulasan. Semua penggodam yang lebih atau kurang berpendidikan sangat biasa dengan perkara ini dan memahami betapa mudahnya ia boleh dikesan oleh alat keselamatan.

Semua alat yang diterangkan di atas berfungsi menggunakan teknologi yang serupa: modul binari boleh laku yang telah disediakan sebelumnya dilancarkan pada mesin di dalam rangkaian, yang mewujudkan sambungan dengan pelayan luaran. Pelayan menjalankan pelayan SOCKS4/5 yang menerima sambungan dan menyampaikannya kepada klien.

Kelemahan semua alat di atas ialah sama ada Python atau Golang mesti dipasang pada mesin klien (adakah anda sering melihat Python dipasang pada mesin, sebagai contoh, pengarah syarikat atau pekerja pejabat?), atau pra-dipasang binari (sebenarnya python) mesti diseret ke mesin dan skrip ini dalam satu botol) dan jalankan binari ini sudah ada. Dan memuat turun exe dan kemudian melancarkannya juga merupakan tandatangan untuk antivirus tempatan atau HIPS.

Secara umum, kesimpulannya menunjukkan dirinya sendiri - kita memerlukan penyelesaian powershell. Sekarang tomato akan terbang ke arah kita - mereka mengatakan powershell sudah digodam, ia dipantau, disekat, dsb. dan sebagainya. Malah, tidak di mana-mana. Kami mengisytiharkan secara bertanggungjawab. Ngomong-ngomong, terdapat banyak cara untuk memintas penyekatan (di sini sekali lagi terdapat frasa bergaya tentang hello RKN πŸ™‚), bermula dari penamaan semula bodoh powershell.exe -> cmdd.exe dan berakhir dengan powerdll, dll.

Mari kita mula mencipta

Sudah jelas bahawa mula-mula kita akan melihat di Google dan... kita tidak akan menemui apa-apa tentang topik ini (jika seseorang telah menemuinya, siarkan pautan dalam ulasan). Ada sahaja pelaksanaan Socks5 pada powershell, tetapi ini adalah sox "langsung" biasa, yang mempunyai beberapa kelemahannya sendiri (kita akan membincangkannya kemudian). Anda boleh, sudah tentu, dengan sedikit pergerakan tangan anda, mengubahnya menjadi yang terbalik, tetapi ini hanya akan menjadi sox berulir tunggal, yang tidak cukup apa yang kita perlukan untuk kita.

Jadi, kami tidak menemui apa-apa yang siap, jadi kami masih perlu mencipta semula roda kami. Kami akan mengambil sebagai asas untuk basikal kami pembangunan kita reverse sox di Golang, dan kami melaksanakan pelanggan untuknya dalam powershell.

RSocksTun
Jadi bagaimanakah rsockstun berfungsi?

Operasi RsocksTun (selepas ini dirujuk sebagai rs) adalah berdasarkan dua komponen perisian - pelayan Yamux dan Socks5. Pelayan Socks5 ialah socks5 tempatan biasa, ia dijalankan pada pelanggan. Dan pemultipleksan sambungan kepadanya (ingat tentang multithreading?) disediakan menggunakan yamux (satu lagi pemultipleks). Skim ini membolehkan anda melancarkan beberapa pelayan socks5 pelanggan dan mengedarkan sambungan luaran kepada mereka, memajukannya melalui satu sambungan TCP tunggal (hampir seperti dalam meterpreter) dari klien ke pelayan, dengan itu melaksanakan mod berbilang benang, tanpanya kami tidak akan mampu bekerja sepenuhnya dalam rangkaian dalaman.

Intipati cara yamux berfungsi ialah ia memperkenalkan lapisan rangkaian tambahan aliran, melaksanakannya dalam bentuk pengepala 12-bait untuk setiap paket. (Di sini kami sengaja menggunakan perkataan "strim" dan bukannya benang, supaya tidak mengelirukan pembaca dengan aliran program "benang" - kami juga akan menggunakan konsep ini dalam artikel ini). Pengepala yamux mengandungi nombor strim, bendera untuk memasang/menamatkan strim, bilangan bait yang dipindahkan dan saiz tetingkap pemindahan.

Menulis proksi Socks5 terbalik dalam powershell.Bahagian 1

Selain memasang/menamatkan aliran, yamux melaksanakan mekanisme keepalive yang membolehkan anda memantau prestasi saluran komunikasi yang telah ditetapkan. Operasi mekanisme mesej keeplive dikonfigurasikan semasa membuat sesi Yamux. Sebenarnya, daripada tetapan terdapat hanya dua parameter: dayakan/lumpuhkan dan kekerapan menghantar paket dalam beberapa saat. Mesej Keepalive boleh dihantar oleh pelayan yamux atau pelanggan yamux. Apabila menerima mesej keepalive, pihak jauh mesti membalasnya dengan menghantar pengecam mesej yang sama (sebenarnya nombor) yang diterimanya. Secara umum, keepalive adalah ping yang sama, hanya untuk yamux.

Keseluruhan teknik pengendalian pemultipleks: jenis paket, persediaan sambungan dan bendera penamatan, dan mekanisme pemindahan data diterangkan secara terperinci dalam spesifikasi kepada yamux.

Kesimpulan untuk bahagian pertama

Oleh itu, pada bahagian pertama artikel, kami berkenalan dengan beberapa alat untuk mengatur terowong terbalik, melihat kelebihan dan kekurangannya, mengkaji mekanisme operasi pemultipleks Yamux dan menerangkan keperluan asas untuk modul powershell yang baru dibuat. Di bahagian seterusnya kita akan membangunkan modul itu sendiri, secara praktikal dari awal. Akan bersambung. jangan tukar :)

Sumber: www.habr.com

Tambah komen