Menulis Proxy Reverse Socks5 di PowerShell.Bagian 1

Cerita tentang penelitian dan pengembangan dalam 3 bagian. Bagian 1 bersifat eksplorasi.
Ada banyak pohon beech - bahkan lebih banyak manfaatnya.

Pernyataan masalah

Selama kampanye pentest dan RedTeam, tidak selalu memungkinkan untuk menggunakan alat standar Pelanggan, seperti VPN, RDP, Citrix, dll. sebagai jangkar untuk memasuki jaringan internal. Di beberapa tempat, VPN standar berfungsi menggunakan MFA dan token perangkat keras digunakan sebagai faktor kedua, di tempat lain VPN ini dipantau secara brutal dan login VPN kami segera terlihat, seperti yang mereka katakan, dengan semua yang diperlukan, tetapi di tempat lain ada tidak ada cara seperti itu.

Dalam kasus seperti itu, kami terus-menerus harus membuat apa yang disebut “terowongan terbalik” - koneksi dari jaringan internal ke sumber daya eksternal atau server yang kami kendalikan. Di dalam terowongan tersebut, kami sudah dapat bekerja dengan sumber daya internal Pelanggan.

Ada beberapa jenis terowongan kembali ini. Yang paling terkenal tentu saja adalah Meterpreter. Terowongan SSH dengan penerusan port terbalik juga sangat diminati di kalangan peretas. Ada cukup banyak cara untuk mengimplementasikan reverse tunneling dan banyak di antaranya telah dipelajari dan dijelaskan dengan baik.
Tentu saja, pengembang solusi keamanan tidak tinggal diam dan secara aktif mendeteksi tindakan tersebut.
Misalnya, sesi MSF berhasil dideteksi oleh IPS modern dari Cisco atau Positive Tech, dan terowongan SSH terbalik dapat dideteksi oleh hampir semua firewall normal.

Oleh karena itu, agar tidak diperhatikan dalam kampanye RedTeam yang baik, kita perlu membangun terowongan terbalik menggunakan cara-cara non-standar dan beradaptasi sedekat mungkin dengan mode operasi jaringan yang sebenarnya.

Mari kita coba mencari atau menciptakan sesuatu yang serupa.

Sebelum menemukan apa pun, kita perlu memahami hasil apa yang ingin kita capai, fungsi apa yang harus dilakukan oleh pengembangan kita. Apa saja persyaratan terowongan agar kita bisa bekerja dalam mode siluman maksimal?

Jelas bahwa untuk setiap kasus, persyaratan tersebut mungkin sangat berbeda, namun berdasarkan pengalaman kerja, yang utama dapat diidentifikasi:

  • bekerja pada OS Windows-7-10. Karena sebagian besar jaringan perusahaan menggunakan Windows;
  • klien terhubung ke server melalui SSL untuk menghindari mendengarkan bodoh menggunakan ips;
  • Saat menghubungkan, klien harus mendukung pekerjaan melalui server proxy dengan otorisasi, karena Di banyak perusahaan, akses ke Internet terjadi melalui proxy. Faktanya, mesin klien mungkin tidak mengetahui apa pun tentangnya, dan proxy digunakan dalam mode transparan. Namun kita harus menyediakan fungsionalitas tersebut;
  • bagian klien harus ringkas dan portabel;
    Jelas bahwa untuk bekerja dalam jaringan Pelanggan, Anda dapat menginstal OpenVPN pada mesin klien dan membuat terowongan lengkap ke server Anda (untungnya, klien openvpn dapat bekerja melalui proxy). Namun, pertama, hal ini tidak selalu berhasil, karena kita mungkin bukan admin lokal di sana, dan kedua, hal ini akan menimbulkan banyak kebisingan sehingga SIEM atau HIPS yang baik akan segera “mengadu” kita. Idealnya, klien kita harus berupa apa yang disebut perintah inline, seperti misalnya banyak shell bash yang diimplementasikan, dan diluncurkan melalui baris perintah, misalnya, saat menjalankan perintah dari makro Word.
  • terowongan kita harus multi-thread dan mendukung banyak koneksi secara bersamaan;
  • koneksi klien-server harus memiliki semacam otorisasi sehingga terowongan dibuat hanya untuk klien kami, dan tidak untuk semua orang yang datang ke server kami pada alamat dan port yang ditentukan. Idealnya, laman landas dengan topik kucing atau profesional yang terkait dengan domain asli harus terbuka untuk “pengguna pihak ketiga”.
    Misalnya, jika Pelanggan adalah organisasi medis, maka administrator keamanan informasi yang memutuskan untuk memeriksa sumber daya yang diakses oleh karyawan klinik, halaman dengan produk farmasi, Wikipedia dengan deskripsi diagnosis, atau blog Dr. Komarovsky, dll. .harus terbuka.

Analisis alat yang ada

Sebelum menciptakan kembali sepeda Anda sendiri, Anda perlu melakukan analisis terhadap sepeda yang ada dan memahami apakah kita benar-benar membutuhkannya dan, mungkin, kita bukan satu-satunya yang memikirkan perlunya sepeda fungsional tersebut.

Googling di Internet (sepertinya kita google biasa), maupun pencarian di Github dengan kata kunci “reverse socks” tidak membuahkan banyak hasil. Pada dasarnya, semuanya bermuara pada membangun terowongan ssh dengan penerusan port terbalik dan segala sesuatu yang berhubungan dengannya. Selain terowongan SSH, ada beberapa solusi:

github.com/klsecservices/rpivot
Implementasi terowongan terbalik yang sudah lama dilakukan oleh orang-orang di Kaspersky Lab. Namanya memperjelas tujuan skrip ini. Diimplementasikan dalam Python 2.7, terowongan beroperasi dalam mode teks jelas (seperti yang biasa dikatakan sekarang - halo RKN)

github.com/tonyseek/rsocks
Implementasi lain dalam Python, juga dalam teks jelas, tetapi dengan lebih banyak kemungkinan. Itu ditulis sebagai modul dan memiliki API untuk mengintegrasikan solusi ke dalam proyek Anda.

github.com/llkat/rsockstun
github.com/mis-team/rsockstun
Tautan pertama adalah versi asli implementasi reverse sox di Golang (tidak didukung oleh pengembang).
Tautan kedua adalah revisi kami dengan fitur tambahan, juga di Golang. Dalam versi kami, kami menerapkan SSL, bekerja melalui proxy dengan otorisasi NTLM, otorisasi pada klien, laman landas jika kata sandi salah (atau lebih tepatnya, pengalihan ke laman landas), mode multi-utas (yaitu beberapa orang dapat bekerja dengan terowongan pada saat yang sama), suatu sistem melakukan ping ke klien untuk menentukan apakah dia masih hidup atau tidak.

github.com/jun7th/tsocks
Implementasi reverse sox dari “teman Cina” kami dengan Python. Di sana, untuk yang malas dan “abadi”, ada biner (exe) yang sudah jadi, dirakit oleh orang Cina dan siap digunakan. Di sini, hanya Tuhan Tiongkok yang tahu apa lagi isi biner ini selain fungsi utama, jadi gunakan dengan risiko dan risiko Anda sendiri.

github.com/securesocketfunneling/ssf
Proyek yang cukup menarik di C++ untuk mengimplementasikan reverse sox dan banyak lagi. Selain terowongan terbalik, ia dapat melakukan penerusan porta, membuat shell perintah, dll.

Penerjemah meteran MSF
Di sini, seperti yang mereka katakan, tidak ada komentar. Semua peretas yang kurang lebih terpelajar sangat memahami hal ini dan memahami betapa mudahnya hal ini dapat dideteksi oleh alat keamanan.

Semua alat yang dijelaskan di atas bekerja menggunakan teknologi serupa: modul biner yang dapat dieksekusi yang telah disiapkan diluncurkan pada mesin di dalam jaringan, yang membuat koneksi dengan server eksternal. Server menjalankan server SOCKS4/5 yang menerima koneksi dan meneruskannya ke klien.

Kerugian dari semua alat di atas adalah Python atau Golang harus diinstal pada mesin klien (pernahkah Anda melihat Python diinstal pada mesin, misalnya, direktur perusahaan atau pekerja kantoran?), atau sudah dirakit sebelumnya. biner (sebenarnya python) harus diseret ke mesin ini dan skrip dalam satu botol) dan menjalankan biner ini sudah ada di sana. Dan mengunduh exe lalu meluncurkannya juga merupakan tanda tangan untuk antivirus lokal atau HIPS.

Secara umum, kesimpulannya menunjukkan dirinya sendiri - kita memerlukan solusi PowerShell. Sekarang tomat akan terbang ke arah kita - mereka bilang PowerShell sudah usang, dipantau, diblokir, dll. dan seterusnya. Faktanya, tidak di semua tempat. Kami menyatakan secara bertanggung jawab. Omong-omong, ada banyak cara untuk melewati pemblokiran (di sini sekali lagi ada ungkapan modis tentang halo RKN 🙂), mulai dari penggantian nama bodoh PowerShell.exe -> cmdd.exe dan diakhiri dengan powerdll, dll.

Mari kita mulai menciptakan

Jelas bahwa pertama-tama kita akan mencari di Google dan… kita tidak akan menemukan apa pun tentang topik ini (jika seseorang menemukannya, posting tautan di komentar). Ada saja implementasi Socks5 di PowerShell, tetapi ini adalah sox “langsung” biasa, yang memiliki sejumlah kelemahan (kita akan membicarakannya nanti). Anda dapat, tentu saja, dengan sedikit gerakan tangan Anda, mengubahnya menjadi yang sebaliknya, tetapi ini hanya akan menjadi sox berulir tunggal, yang tidak sesuai dengan kebutuhan kita.

Jadi, kami belum menemukan apa pun yang siap pakai, jadi kami masih harus menemukan kembali roda kami. Kami akan mengambil sebagai dasar untuk sepeda kami perkembangan kita membalikkan sox di Golang, dan kami mengimplementasikan klien untuk itu di PowerShell.

RSocksTun
Jadi bagaimana cara kerja rsockstun?

Pengoperasian RsocksTun (selanjutnya disebut rs) didasarkan pada dua komponen perangkat lunak - server Yamux dan Socks5. Server Socks5 adalah Socks5 lokal biasa, berjalan pada klien. Dan multiplexing koneksi ke sana (ingat tentang multithreading?) disediakan menggunakan yamux (multiplexer lain). Skema ini memungkinkan Anda untuk meluncurkan beberapa server kaus kaki5 klien dan mendistribusikan koneksi eksternal ke sana, meneruskannya melalui satu koneksi TCP (hampir seperti di meterpreter) dari klien ke server, sehingga menerapkan mode multi-utas, yang tanpanya kita tidak akan bisa mampu sepenuhnya bekerja di jaringan internal.

Inti dari cara kerja yamux adalah ia memperkenalkan lapisan aliran jaringan tambahan, mengimplementasikannya dalam bentuk header 12-byte untuk setiap paket. (Di sini kami sengaja menggunakan kata "stream" daripada thread, agar tidak membingungkan pembaca dengan program stream "thread" - kami juga akan menggunakan konsep ini di artikel ini). Header yamux berisi nomor aliran, tanda untuk memasang/mengakhiri aliran, jumlah byte yang ditransfer, dan ukuran jendela transfer.

Menulis Proxy Reverse Socks5 di PowerShell.Bagian 1

Selain memasang/mengakhiri aliran, yamux menerapkan mekanisme keepalive yang memungkinkan Anda memantau kinerja saluran komunikasi yang ada. Pengoperasian mekanisme pesan keeplive dikonfigurasikan saat membuat sesi Yamux. Sebenarnya dari pengaturannya hanya ada dua parameter: aktifkan/nonaktifkan dan frekuensi pengiriman paket dalam hitungan detik. Pesan Keepalive dapat dikirim oleh server yamux atau klien yamux. Saat menerima pesan keepalive, pihak jarak jauh harus meresponsnya dengan mengirimkan pengenal pesan yang sama persis (sebenarnya nomor) yang diterimanya. Secara umum keepalive pingnya sama, hanya untuk yamux.

Seluruh teknik pengoperasian multiplexer: jenis paket, pengaturan koneksi dan flag terminasi, serta mekanisme transfer data dijelaskan secara rinci di spesifikasi ke yamux.

Kesimpulan dari bagian pertama

Jadi, di bagian pertama artikel, kami berkenalan dengan beberapa alat untuk mengatur terowongan terbalik, melihat kelebihan dan kekurangannya, mempelajari mekanisme pengoperasian multiplexer Yamux dan menjelaskan persyaratan dasar untuk modul PowerShell yang baru dibuat. Pada bagian selanjutnya kita akan mengembangkan modul itu sendiri, secara praktis dari awal. Bersambung. Jangan beralih :)

Sumber: www.habr.com

Tambah komentar