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:
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)
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.
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.
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.
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
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
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 (
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.
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
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