Es esmu sakne. Linux OS privilēģiju eskalācijas izpratne

2020. gada pirmo ceturksni pavadÄ«ju, gatavojoties OSCP eksāmenam. Informācijas meklÄ“Å”ana Google tÄ«klā un daudzi ā€œakliā€ mēģinājumi aizņēma visu manu brÄ«vo laiku. ÄŖpaÅ”i grÅ«ti bija izprast privilēģiju palielināŔanas mehānismus. PWK kursā Å”ai tēmai tiek pievērsta liela uzmanÄ«ba, taču ar mācÄ«bu materiāliem nekad nepietiek. Internetā ir daudz rokasgrāmatu ar noderÄ«gām komandām, taču es neesmu cienÄ«tājs akli sekot ieteikumiem, nesaprotot, pie kā tas novedÄ«s.

Vēlos dalÄ«ties ar jums tajā, ko uzzināju, gatavojoties eksāmenam un sekmÄ«gi nokārtojot eksāmenu (ieskaitot periodiskus apmeklējumus Hack The Box). Es izjutu spēcÄ«gu pateicÄ«bas sajÅ«tu par katru informācijas daļiņu, kas man palÄ«dzēja apzinātāk iet ā€œIzmēģiniet grÅ«tākā€ ceļu. Tagad ir mans laiks atdot kopienai.

Es vēlos sniegt jums rokasgrāmatu par to, kā palielināt privilēģijas operētājsistēmā OS Linux, kurā ir ietverta visbiežāk sastopamo vektoru un saistÄ«to funkciju analÄ«ze, kas jums noteikti noderēs. Bieži vien paÅ”i privilēģiju palielināŔanas mehānismi ir diezgan vienkārÅ”i, grÅ«tÄ«bas rodas informācijas strukturÄ“Å”anā un analÄ«zē. Tāpēc es nolēmu sākt ar ā€œapskates ekskursijuā€ un pēc tam aplÅ«kot katru vektoru atseviŔķā rakstā. Ceru, ka ietaupÄ«Å”u kādu laiku tēmas izpētei.

Es esmu sakne. Linux OS privilēģiju eskalācijas izpratne

Tātad, kāpēc privilēģiju eskalācija ir pat iespējama 2020. gadā, ja metodes ir bijuÅ”as labi zināmas ļoti ilgu laiku? Faktiski, ja lietotājs pareizi rÄ«kojas ar sistēmu, tajā patieŔām nebÅ«s iespējams palielināt privilēģijas. Galvenā globālā problēma, kas rada Ŕādas iespējas, ir nedroÅ”a konfigurācija. ÄŖpaÅ”s nedroÅ”as konfigurācijas gadÄ«jums ir arÄ« novecojuÅ”u programmatÅ«ras versiju klātbÅ«tne, kas satur sistēmas ievainojamÄ«bas.

Privilēģiju eskalācija, izmantojot nedroÅ”u konfigurāciju

Pirmkārt, tiksim galā ar nedroÅ”u konfigurāciju. Sāksim ar IT speciālisti bieži izmanto rokasgrāmatas un resursus, piemēram, stackoverflow, no kurām daudzas satur nedroÅ”as komandas un konfigurācijas. Spilgts piemērs - ziņas ka kods, kas visvairāk kopēts no stackoverflow, satur kļūdu. Pieredzējis administrators redzēs aploksni, taču tas ir ideālā pasaulē. Pat kompetenti speciālisti palielināta darba slodze spēj kļūdÄ«ties. Iedomājieties, ka administrators gatavo un saskaņo dokumentāciju nākamajam konkursam, vienlaikus iedziļinoties jaunajā tehnoloÄ£ijā, ko paredzēts ieviest nākamajā ceturksnÄ«, vienlaikus periodiski risinot lietotāju atbalsta problēmas. Un tad viņam tiek dots uzdevums ātri iestatÄ«t pāris virtuālās maŔīnas un ieviest tajās pakalpojumus. Kāda, jÅ«suprāt, ir iespējamÄ«ba, ka admins vienkārÅ”i nepamanÄ«s jamb? Tad mainās speciālisti, bet kruÄ·i paliek, savukārt uzņēmumi vienmēr cenÅ”as samazināt izmaksas, tostarp IT personālam.

Pseidočaula un jailbreak

Sistēmas čaula, kas iegÅ«ta ekspluatācijas posmā, bieži ir ierobežota, it Ä«paÅ”i, ja to ieguvāt, uzlaužot tÄ«mekļa servera lietotāju. Piemēram, čaulas ierobežojumi var neļaut palaist komandu sudo, radot kļūdu:

sudo: no tty present and no askpass program specified

Kad jums ir apvalks, iesaku izveidot pilnvērtīgu termināli, piemēram, izmantojot Python.

python -c 'import pty;pty.spawn("/bin/bash")'

JÅ«s varat jautāt: "Kāpēc man ir vajadzÄ«gas tÅ«kstoÅ” komandu, ja es varu izmantot vienu, piemēram, failu pārsÅ«tÄ«Å”anai?" Fakts ir tāds, ka sistēmas ir konfigurētas atŔķirÄ«gi; konkrētajā resursdatorā var nebÅ«t instalēts Python, bet tajā var bÅ«t Perl. Prasme ir spēt veikt pazÄ«stamas lietas sistēmā bez pazÄ«stamiem rÄ«kiem. Pilnu funkciju sarakstu var atrast Å”eit.

Zemu priviliģētu apvalku var iegÅ«t, izmantojot komandas 1 Šø komandas 2 (pārsteidzoÅ”i, pat GIMP).

Skatīt komandu vēsturi

Linux apkopo visu failā izpildÄ«to komandu vēsturi ~ / .bash_history. Ja serveris tiek aktÄ«vi izmantots un tā vēsture netiek notÄ«rÄ«ta, pastāv liela varbÅ«tÄ«ba, ka Å”ajā failā tiks atrasti akreditācijas dati. Vēstures dzÄ“Å”ana ir vienkārÅ”i neērta. Ja administrators ir spiests izvēlēties desmit stāvu komandas caur , viņam, protams, bÅ«s ērtāk izsaukt Å”o komandu no vēstures, nevis ievadÄ«t to vēlreiz. Turklāt daudzi cilvēki nezina par Å”o "uzlauÅ”anu". Ja sistēmā ir alternatÄ«vi apvalki, piemēram, Zsh vai Fish, tiem ir sava vēsture. Lai parādÄ«tu komandu vēsturi jebkurā čaulā, vienkārÅ”i ierakstiet komandu vēsturi.

cat ~/.bash_history
cat ~/.mysql_history
cat ~/.nano_history
cat ~/.php_history
cat ~/.atftp_history

Ir dalÄ«ts hostings, kurā serveris tiek izmantots vairāku vietņu mitināŔanai. Parasti ar Å”o konfigurāciju katram resursam ir savs lietotājs ar atseviŔķu mājas direktoriju un virtuālo resursdatoru. Tātad, ja tas ir nepareizi konfigurēts, .bash_history failu varat atrast tÄ«mekļa resursa saknes direktorijā.

Paroļu meklÄ“Å”ana failu sistēmā un uzbrukumi blakus sistēmām

JÅ«su paÅ”reizējais lietotājs var lasÄ«t dažādu pakalpojumu konfigurācijas failus. Tajos jÅ«s varat atrast akreditācijas datus skaidrā tekstā - paroles, lai piekļūtu datu bāzei vai saistÄ«tiem pakalpojumiem. To paÅ”u paroli var izmantot gan piekļuvei datu bāzei, gan root lietotāja autorizācijai (akreditācijas personāls).
Gadās, ka atrastie akreditācijas dati pieder pakalpojumiem citos saimniekdatoros. Uzbrukuma izveide infrastruktÅ«rai, izmantojot apdraudētu resursdatoru, nav sliktāka nekā citu resursdatoru izmantoÅ”ana. Blakus esoŔās sistēmas var atrast arÄ«, failu sistēmā meklējot IP adreses.

grep -lRi "password" /home /var/www /var/log 2>/dev/null | sort | uniq #Find string password (no cs) in those directories
grep -a -R -o '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' /var/log/ 2>/dev/null | sort -u | uniq #IPs inside logs

Ja apdraudētajam resursdatoram ir tÄ«mekļa lietojumprogramma, kas pieejama no interneta, labāk ir izslēgt tās žurnālus no IP adreÅ”u meklÄ“Å”anas. Diez vai mums noderēs resursa lietotāju adreses no interneta, taču iekŔējā tÄ«kla adreses (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) un kurp tās dodas, spriežot pēc žurnāliem. , varētu interesēt.

Sudo

Komanda sudo dod lietotājam iespēju izpildÄ«t komandu saknes kontekstā, izmantojot savu paroli vai neizmantojot paroli vispār. Daudzām operācijām operētājsistēmā Linux ir nepiecieÅ”amas root tiesÄ«bas, taču darbināŔana kā root tiek uzskatÄ«ta par ļoti sliktu praksi. Tā vietā labāk ir piemērot selektÄ«vas atļaujas komandu izpildei saknes kontekstā. Tomēr daudzus Linux rÄ«kus, tostarp standarta rÄ«kus, piemēram, vi, var izmantot, lai likumÄ«gā veidā palielinātu privilēģijas. Lai atrastu piemērotu metodi, iesaku meklēt Å”eit.

Pirmā lieta, kas jums jādara, kad iegÅ«stat piekļuvi sistēmai, ir palaist komandu sudo -l. Tas parādÄ«s atļauju izmantot sudo komandu. Ja tiek iegÅ«ts lietotājs bez paroles (piemēram, apache vai www-data), privilēģiju eskalācijas vektors, izmantojot sudo, ir maz ticams. Lietojot sudo, sistēma prasÄ«s paroli. JÅ«s arÄ« nevarēsit iestatÄ«t paroli, izmantojot komandu passwd; tā prasÄ«s lietotāja paÅ”reizējo paroli. Bet, ja sudo joprojām ir pieejams, tad bÅ«tÄ«bā jums ir jāmeklē:

  • jebkuri tulki, ikviens var radÄ«t čaulu (PHP, Python, Perl);
  • jebkuri teksta redaktori (vim, vi, nano);
  • jebkuri skatÄ«tāji (mazāk, vairāk);
  • jebkura spēja strādāt ar failu sistēmu (cp, mv);
  • RÄ«ki, kuru izvade ir bash, interaktÄ«va vai izpildāma komanda (awk, find, nmap, tcpdump, man, vi, vim, ansible).

Suid/Sgid

Internetā ir daudz rokasgrāmatu, kas iesaka apkopot visas suid/sgid komandas, taču retā rakstā ir sniegta informācija par to, ko darÄ«t ar Ŕīm programmām. Var atrast privilēģiju palielināŔanas iespējas, kas neņem vērā ļaunprātÄ«gu izmantoÅ”anu Å”eit. Turklāt vairākiem izpildāmiem failiem ir noteiktas OS versijas ievainojamÄ«bas, piemēram.

Ideālā pasaulē jÅ«s palaist visas instalētās pakotnes, izmantojot vismaz searchsploit. Praksē tas jādara ar populārākajām programmām, piemēram, sudo. Vienmēr ir arÄ« iespēja izmantot un atbalstÄ«t automatizētu rÄ«ku izstrādi, kas no privilēģiju eskalācijas viedokļa izcels interesantus izpildāmos failus ar iestatÄ«tajiem suid/sgid bitiem. Es sniegÅ”u Ŕādu rÄ«ku sarakstu attiecÄ«gajā raksta sadaļā.

Rakstāmie skripti, kurus saknes kontekstā vada Cron vai Init

Cron darbus var palaist dažādos lietotāju kontekstos, tostarp root. Ja cron uzdevums ir iestatÄ«ts ar saiti uz izpildāmo failu un tas ir pieejams rakstÄ«Å”anai, to var viegli aizstāt ar ļaunprātÄ«gu uzdevumu un privilēģiju eskalāciju. Tomēr pēc noklusējuma failus ar cron uzdevumiem var lasÄ«t jebkurÅ” lietotājs.

ls -la /etc/cron.d  # show cron jobs 

LÄ«dzÄ«ga situācija ir ar init. AtŔķirÄ«ba ir tāda, ka uzdevumi cron tiek izpildÄ«ti periodiski, bet init - sistēmas startÄ“Å”anas laikā. DarbÄ«bai bÅ«s nepiecieÅ”ama sistēmas atsāknÄ“Å”ana, un daži pakalpojumi var netikt startēti (ja tie nav reÄ£istrēti startÄ“Å”anas laikā).

ls -la /etc/init.d/  # show init scripts 

Varat arÄ« meklēt failus, kurus var rakstÄ«t jebkurÅ” lietotājs.

find / -perm -2 -type f 2>/dev/null # find world writable files

Metode ir diezgan labi zināma; pieredzējuÅ”i sistēmas administratori rÅ«pÄ«gi izmanto komandu chmod. Tomēr internetā lielākajā daļā rokasgrāmatu ir aprakstÄ«ta maksimālo tiesÄ«bu noteikÅ”ana. NepieredzējuÅ”u sistēmu administratoru pieeja ā€œvienkārÅ”i strādāā€ principā rada iespējas privilēģiju eskalācijai. Ja iespējams, labāk ir meklēt komandu vēsturē nedroÅ”u chmod izmantoÅ”anu.

chmod +w /path 
chmod 777 /path

Apvalka piekļuves iegūŔana citiem lietotājiem

Mēs aplÅ«kojam lietotāju sarakstu mapē /etc/passwd. Mēs pievērÅ”am uzmanÄ«bu tiem, kam ir apvalks. JÅ«s varat apgrÅ«tināt Å”os lietotājus - iespējams, ka ar iegÅ«tā lietotāja palÄ«dzÄ«bu galu galā bÅ«s iespējams palielināt privilēģijas.

Lai uzlabotu droŔību, iesaku vienmēr ievērot vismazāko privilēģiju principu. Ir arÄ« lietderÄ«gi pavadÄ«t laiku, lai pārbaudÄ«tu nedroÅ”as konfigurācijas, kas varētu palikt pēc problēmu novērÅ”anas - tas ir sistēmas administratora ā€œtehniskais pienākumsā€.

PaŔu rakstīts kods

Ir vērts rÅ«pÄ«gi apskatÄ«t izpildāmos failus lietotāja mājas direktorijā un tÄ«mekļa serverÄ« (/var/www/, ja nav norādÄ«ts citādi). Å ie faili var izrādÄ«ties pilnÄ«gi nedroÅ”s risinājums un satur neticami kruÄ·us. Protams, ja tÄ«mekļa servera direktorijā ir kāds ietvars, nav jēgas meklēt tajā nulles dienu kā daļu no pentest, taču ir ieteicams atrast un izpētÄ«t pielāgotas modifikācijas, spraudņus un komponentus.

Lai palielinātu droŔību, labāk, ja iespējams, izvairÄ«ties no akreditācijas datu izmantoÅ”anas paÅ”u rakstÄ«tos skriptos, kā arÄ« no potenciāli bÄ«stamas funkcionalitātes, piemēram, /etc/shadow lasÄ«Å”anas vai manipulācijas ar id_rsa.

Privilēģiju paaugstināŔana, izmantojot ievainojamÄ«bas

Pirms mēģināt palielināt privilēģijas, izmantojot ekspluatāciju, ir svarÄ«gi saprast failu pārsÅ«tÄ«Å”ana uz mērÄ·a resursdatoru. Papildus parastajiem rÄ«kiem, piemēram, ssh, ftp, http (wget, curl), ir vesels iespēju "zoodārzs"..

Lai uzlabotu sistēmas droŔību, regulāri atjauniniet to uz jaunāko stabils versijas, kā arÄ« mēģiniet izmantot uzņēmumam paredzētus izplatÄ«jumus. Citādi tas notiek reti, taču ir situācijas, kad apt jauninājums padara sistēmu nederÄ«gu.

Pakalpojumu izmantoŔana, kas darbojas saknes lietotāja kontekstā

Daži Linux pakalpojumi darbojas kā root. Tos var atrast, izmantojot komandu ps aux | grep sakne. Šādā gadÄ«jumā pakalpojums var netikt reklamēts internetā un ir pieejams lokāli. Ja tam ir publiski izlietojumi, tos var droÅ”i izmantot: pakalpojuma avārija kļūmes gadÄ«jumā ir daudz mazāk svarÄ«ga nekā OS avārija.

ps -aux | grep root # Linux

Par veiksmÄ«gāko gadÄ«jumu var uzskatÄ«t uzlauzta pakalpojuma darbÄ«bu saknes lietotāja kontekstā. SMB pakalpojuma darbÄ«ba nodroÅ”ina priviliģētu piekļuvi SISTĒMAI Windows sistēmās (piemēram, izmantojot ms17-010). Tomēr Linux sistēmās tas nav izplatÄ«ts, tāpēc jÅ«s varat pavadÄ«t daudz laika, lai palielinātu privilēģijas.

Linux kodola ievainojamību izmantoŔana

Å is ir ceļŔ, kas jums jāiet pēdējam. NeveiksmÄ«ga darbÄ«ba var izraisÄ«t sistēmas avāriju, un atsāknÄ“Å”anas gadÄ«jumā daži pakalpojumi (tostarp tie, caur kuriem tika iegÅ«ts sākotnējais apvalks) var netikt startēts. Gadās, ka administrators vienkārÅ”i aizmirsa izmantot komandu systemctl enable. Turklāt tas radÄ«s lielu neapmierinātÄ«bu ar jÅ«su darbu, ja operācija netika saskaņota.
Ja nolemjat izmantot avota kodus no exploitdb, noteikti izlasiet komentārus skripta sākumā. Cita starpā tajā parasti ir norādÄ«ts, kā pareizi apkopot doto izmantoÅ”anu. Ja esat pārāk slinks vai nācās to izdarÄ«t "vakar" termiņu dēļ, varat meklēt repozitorijus ar jau apkopotiem varoņdarbiem, piemēram. Tomēr jums vajadzētu saprast, ka Å”ajā gadÄ«jumā jÅ«s dabÅ«siet cÅ«ku kulā. No otras puses, ja programmētājs lÄ«dz baitam saprastu, kā darbojas dators un kāda programmatÅ«ra tajā tiek izmantota, viņŔ visas dzÄ«ves laikā nerakstÄ«tu nevienu koda rindiņu.

cat /proc/version
uname -a
searchsploit "Linux Kernel" 

Metasploit

Lai uztvertu un apstrādātu savienojumu, vienmēr labāk ir izmantot moduli exploit/multi/handler. Galvenais ir iestatÄ«t pareizo lietderÄ«go slodzi, piemēram, generic/shell/reverse_tcp vai generic/shell/bind_tcp. Metasploit ražoto apvalku var jaunināt uz Meterpreter, izmantojot moduli post/multi/manage/shell_to_meterpreter. Izmantojot Meterpreter, varat automatizēt pēcekspluatācijas procesu. Piemēram, modulis post/multi/recon/local_exploit_suggester pārbauda ekspluatācijai nepiecieÅ”amo platformu, arhitektÅ«ru un entÄ«tijas un iesaka Metasploit moduļus, lai palielinātu privilēģijas mērÄ·a sistēmā. Pateicoties Meterpreter, privilēģiju palielināŔana dažkārt izpaužas lÄ«dz vajadzÄ«gā moduļa palaiÅ”anai, taču uzlauÅ”ana, nesaprotot, kas notiek zem pārsega, nav ā€œpatiesaā€ (joprojām ir jāraksta ziņojums).

darbarīki

Vietējās informācijas vākÅ”anas automatizÄ“Å”anas rÄ«ki ietaupÄ«s jums daudz pūļu un laika, taču paÅ”i par sevi nespēj pilnÄ«bā noteikt ceļu uz privilēģiju eskalāciju, it Ä«paÅ”i kodola ievainojamÄ«bu izmantoÅ”anas gadÄ«jumā. Automatizācijas rÄ«ki izpildÄ«s visas nepiecieÅ”amās komandas, lai jÅ«s varētu savākt informāciju par sistēmu, taču svarÄ«gi ir arÄ« analizēt saņemtos datus. Es ceru, ka mans raksts jums bÅ«s noderÄ«gs Å”ajā sakarā. Protams, ir daudz vairāk rÄ«ku, nekā es uzskaitÄ«Å”u zemāk, taču tie visi dara aptuveni vienu un to paÅ”u - tas drÄ«zāk ir gaumes jautājums.

Linzirņi

Diezgan nesen Tula, pirmā apņemÅ”anās datēta ar 2019. gada janvāri. Mans Ŕī brīža mīļākais rÄ«ks. Lieta ir tāda, ka tas izceļ interesantākos privilēģiju eskalācijas vektorus. PiekrÄ«tu, ir ērtāk iegÅ«t eksperta novērtējumu Å”ajā lÄ«menÄ«, nevis analizēt monolÄ«tus neapstrādātus datus.

LinEnum

Mans otrs iecienītākais rīks, tas arī apkopo un kārto datus, kas iegūti vietējās uzskaites rezultātā.

Linux-exploit-suggester (1,2)

Å Ä« izmantoÅ”ana analizēs sistēmu piemērotiem ekspluatācijas apstākļiem. Faktiski tas veiks darbu identiski Metasploit modulim local_exploit_suggester, taču piedāvās saites uz exploit-db pirmkodiem, nevis Metasploit moduļiem.

Linuxprivchecker

Å is skripts apkopos un sadalÄ«s sadaļās lielu informācijas daudzumu, kas var bÅ«t noderÄ«gs, lai izveidotu vektoru privilēģiju palielināŔanai.

Citreiz iedziļināŔos sÄ«kāk privilēģiju paaugstināŔana operētājsistēmā Linux OS, izmantojot suid/sgid.

Avots: www.habr.com

Pievieno komentāru