Aš esu šaknis. „Linux“ OS privilegijų eskalavimo supratimas

Pirmąjį 2020 metų ketvirtį praleidau ruošdamasis OSCP egzaminui. Informacijos paieška Google ir daugybė "aklų" bandymų atimdavo visą mano laisvalaikį. Ypač sunku buvo suprasti privilegijų didinimo mechanizmus. PWK kurse šiai temai skiriama daug dėmesio, tačiau mokymo medžiagos niekada neužtenka. Internete yra daug vadovų su naudingomis komandomis, bet aš nesu mėgėjas aklai laikytis rekomendacijų, nesuprasdamas, prie ko tai prives.

Norėčiau pasidalinti su jumis tuo, ką sužinojau ruošdamasis ir sėkmingai išlaikydamas egzaminą (įskaitant periodinius bandymus į Hack The Box). Jaučiau stiprų dėkingumą už kiekvieną informacijos dalelę, kuri padėjo man sąmoningiau eiti „Try Harder“ keliu. Dabar atėjo laikas grąžinti bendruomenei.

Noriu duoti jums vadovą, kaip padidinti privilegijas OS Linux, kuriame yra dažniausiai pasitaikančių vektorių ir susijusių funkcijų, kurios jums tikrai bus naudingos, analizė. Dažnai patys privilegijų didinimo mechanizmai yra gana paprasti, sunkumų iškyla struktūrizuojant ir analizuojant informaciją. Todėl nusprendžiau pradėti nuo „pažintinės kelionės“, o vėliau kiekvieną vektorių panagrinėsiu atskirame straipsnyje. Tikiuosi sutaupysiu laiko tyrinėjant temą.

Aš esu šaknis. „Linux“ OS privilegijų eskalavimo supratimas

Taigi kodėl privilegijų eskalavimas netgi įmanomas 2020 m., jei metodai buvo gerai žinomi labai ilgą laiką? Tiesą sakant, jei vartotojas teisingai elgsis su sistema, privilegijų joje padidinti tikrai nebus galima. Pagrindinė pasaulinė problema, dėl kurios atsiranda tokių galimybių, yra nesaugi konfigūracija. Pasenusių programinės įrangos versijų, kuriose yra pažeidžiamumų sistemoje, buvimas taip pat yra ypatingas nesaugios konfigūracijos atvejis.

Privilegijų eskalavimas dėl nesaugios konfigūracijos

Pirma, susitvarkykime su nesaugia konfigūracija. Pradėkime nuo IT specialistai dažnai naudoja vadovus ir išteklius, pvz., stackoverflow, daugelyje kurių yra nesaugių komandų ir konfigūracijų. Ryškus pavyzdys - naujienos kad dažniausiai iš stackoverflow nukopijuotame kode buvo klaida. Patyręs administratorius pamatys staktą, bet tai idealiame pasaulyje. Net kompetentingi specialistai padidėjęs darbo krūvis galintis padaryti klaidų. Įsivaizduokite, kad administratorius ruošia ir derina dokumentaciją kitam konkursui, tuo pačiu gilinasi į naują technologiją, kuri turi būti diegiama kitą ketvirtį, periodiškai spręsdama vartotojų palaikymo problemas. Tada jam duota užduotis greitai nustatyti keletą virtualių mašinų ir įdiegti jose paslaugas. Kaip manote, kokia tikimybė, kad administratorius tiesiog nepastebės staktos? Tada keičiasi specialistai, bet ramentai išlieka, o įmonės visada stengiasi sumažinti išlaidas, taip pat ir IT darbuotojams.

Pseudo apvalkalas ir jailbreak

Išnaudojimo etape gautas sistemos apvalkalas dažnai yra ribotas, ypač jei jį gavote įsilaužę į žiniatinklio serverio vartotoją. Pavyzdžiui, apvalkalo apribojimai gali neleisti paleisti sudo komandos ir sukelti klaidą:

sudo: no tty present and no askpass program specified

Kai turėsite apvalkalą, rekomenduoju sukurti visavertį terminalą, pavyzdžiui, naudojant Python.

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

Galite paklausti: „Kam man reikia tūkstančio komandų, jei vieną galiu naudoti, pavyzdžiui, failams perkelti? Faktas yra tas, kad sistemos sukonfigūruotos skirtingai; tam tikrame pagrindiniame kompiuteryje gali būti neįdiegtas „Python“, bet gali būti „Perl“. Įgūdis yra mokėti atlikti žinomus dalykus sistemoje be žinomų įrankių. Galima rasti visą funkcijų sąrašą čia.

Mažų privilegijų apvalkalą galima gauti naudojant komandos 1 и komandos 2 (keista, net GIMP).

Peržiūrėkite komandų istoriją

Linux renka visų vykdytų komandų istoriją faile ~ / .bash_history. Jei serveris yra aktyviai naudojamas ir jo istorija nėra išvalyta, yra didelė tikimybė, kad šiame faile bus rasti kredencialai. Istorijos valymas yra tiesiog nepatogus. Jei administratorius bus priverstas pasirinkti dešimties aukštų komandas per , žinoma, jam bus patogiau šią komandą iškviesti iš istorijos, nei įvesti dar kartą. Be to, daugelis žmonių nežino apie šį „įsilaužimą“. Jei sistemoje yra alternatyvių apvalkalų, tokių kaip Zsh arba Fish, jie turi savo istoriją. Norėdami rodyti komandų istoriją bet kuriame apvalkale, tiesiog įveskite komandų istoriją.

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

Yra bendras priegloba, kai serveris naudojamas kelioms svetainėms talpinti. Paprastai naudojant šią konfigūraciją kiekvienas išteklius turi savo vartotoją, turintį atskirą namų katalogą ir virtualų pagrindinį kompiuterį. Taigi, jei sukonfigūruotas neteisingai, .bash_history failą galite rasti pagrindiniame žiniatinklio šaltinio kataloge.

Slaptažodžių paieška failų sistemoje ir gretimų sistemų atakos

Įvairių paslaugų konfigūracijos failus gali skaityti dabartinis vartotojas. Juose galite rasti kredencialus aiškiu tekstu – slaptažodžius prieigai prie duomenų bazės ar susijusių paslaugų. Tas pats slaptažodis gali būti naudojamas tiek prieiti prie duomenų bazės, tiek autorizuojant pagrindinį vartotoją (kredencialų personalas).
Taip atsitinka, kad rasti kredencialai priklauso paslaugoms kituose prieglobosiuose. Sukurti ataką prieš infrastruktūrą per pažeistą pagrindinį kompiuterį nėra blogiau nei kitų kompiuterių išnaudojimas. Gretimas sistemas taip pat galima rasti ieškant IP adresų failų sistemoje.

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

Jei pažeistas pagrindinis kompiuteris turi žiniatinklio programą, pasiekiamą iš interneto, geriau neįtraukti jos žurnalų į IP adresų paiešką. Išteklių vartotojų adresai iš interneto vargu ar mums bus naudingi, tačiau, sprendžiant iš žurnalų, vidinio tinklo adresai (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) ir kur jie eina , gali sudominti.

Sudo

Sudo komanda suteikia vartotojui galimybę vykdyti komandą šakniniame kontekste naudojant savo slaptažodį arba visai nenaudojant slaptažodžio. Daugeliui operacijų Linux sistemoje reikalingos root teisės, tačiau paleidimas kaip root yra laikomas labai bloga praktika. Vietoj to, geriau taikyti atrankinį leidimą komandoms vykdyti šakniniame kontekste. Tačiau daugelis „Linux“ įrankių, įskaitant standartinius, tokius kaip vi, gali būti naudojami privilegijoms teisėtais būdais padidinti. Norint rasti tinkamą metodą, rekomenduoju ieškoti čia.

Pirmas dalykas, kurį turite padaryti, kai gaunate prieigą prie sistemos, yra paleisti komandą sudo -l. Bus rodomas leidimas naudoti sudo komandą. Jei gaunamas vartotojas be slaptažodžio (pvz., Apache arba www-data), privilegijų padidinimo vektorius per sudo mažai tikėtinas. Kai naudojate sudo, sistema paprašys slaptažodžio. Taip pat negalėsite nustatyti slaptažodžio naudodami komandą passwd; ji paprašys dabartinio vartotojo slaptažodžio. Bet jei sudo vis dar yra, iš esmės reikia ieškoti:

  • bet kokie interpretatoriai, bet kas gali sukurti apvalkalą (PHP, Python, Perl);
  • bet kokie teksto redaktoriai (vim, vi, nano);
  • bet kokie žiūrovai (mažiau, daugiau);
  • bet koks gebėjimas dirbti su failų sistema (cp, mv);
  • Įrankiai, kurių išvestis yra bash, interaktyvi arba kaip vykdomoji komanda (awk, find, nmap, tcpdump, man, vi, vim, ansible).

Suid/Sgid

Internete yra daug vadovų, kuriuose patariama rinkti visas suid/sgid komandas, tačiau retas straipsnis nurodo, ką daryti su šiomis programomis. Galima rasti privilegijų didinimo parinkčių, kurios neatsižvelgia į išnaudojimų naudojimą čia. Be to, kai kurie vykdomieji failai turi specifinių OS versijos spragų, pavyzdžiui.

Idealiame pasaulyje visus įdiegtus paketus paleistumėte bent jau per Searchsploit. Praktiškai tai turėtų būti daroma naudojant populiariausias programas, tokias kaip sudo. Taip pat visada yra galimybė naudoti ir palaikyti automatizuotų įrankių kūrimą, kurie privilegijų didinimo požiūriu išryškins įdomius vykdomuosius failus su nustatytais suid/sgid bitais. Tokių įrankių sąrašą pateiksiu atitinkamoje straipsnio dalyje.

Rašomi scenarijai, kuriuos paleidžia Cron arba Init Root kontekste

Cron užduotys gali būti vykdomos įvairiuose vartotojo kontekstuose, įskaitant root. Jei cron užduotis nustatyta su nuoroda į vykdomąjį failą ir galite ją rašyti, ją galima lengvai pakeisti kenkėjiška užduotimi ir privilegijų eskalavimu. Tačiau pagal numatytuosius nustatymus failus su cron užduotimis gali skaityti bet kuris vartotojas.

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

Su init situacija panaši. Skirtumas tas, kad užduotys cron yra vykdomos periodiškai, o init - sistemos paleidimo metu. Norint veikti, reikės iš naujo paleisti sistemą, o kai kurios paslaugos gali nepasileisti (jei jos nebuvo užregistruotos paleidžiant).

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

Taip pat galite ieškoti failų, kuriuos gali įrašyti bet kuris vartotojas.

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

Metodas yra gana gerai žinomas; patyrę sistemos administratoriai atsargiai naudoja komandą chmod. Tačiau internete daugumoje vadovų aprašomas maksimalių teisių nustatymas. Nepatyrusių sistemų administratorių požiūris „tiesiog padaryk tai“ sukuria galimybes privilegijų eskalavimui iš esmės. Jei įmanoma, komandų istorijoje geriau ieškoti nesaugaus chmod naudojimo.

chmod +w /path 
chmod 777 /path

Prieiga prie apvalkalo kitiems vartotojams

Mes žiūrime į vartotojų sąrašą /etc/passwd. Atkreipiame dėmesį į tuos, kurie turi apvalkalą. Galite apgauti šiuos vartotojus – gali būti, kad per gautą vartotoją galiausiai bus galima padidinti privilegijas.

Siekiant pagerinti saugumą, rekomenduoju visada laikytis mažiausios privilegijos principo. Taip pat prasminga praleisti laiką tikrinant nesaugias konfigūracijas, kurios gali likti po trikčių šalinimo - tai yra sistemos administratoriaus „techninė pareiga“.

Savarankiškai parašytas kodas

Verta atidžiai apžiūrėti vykdomuosius failus vartotojo namų kataloge ir žiniatinklio serveryje (/var/www/, jei nenurodyta kitaip). Šie failai gali pasirodyti visiškai nesaugus sprendimas ir juose gali būti neįtikėtinų ramentų. Žinoma, jei žiniatinklio serverio kataloge turite tam tikrą karkasą, nėra prasmės joje ieškoti nulinės dienos kaip pentesto dalies, tačiau rekomenduojama rasti ir ištirti pasirinktines modifikacijas, papildinius ir komponentus.

Siekiant padidinti saugumą, geriau, jei įmanoma, nenaudoti kredencialų savarankiškai parašytuose scenarijuose, taip pat potencialiai pavojingų funkcijų, tokių kaip /etc/shadow skaitymas arba manipuliavimas id_rsa.

Privilegijų padidinimas išnaudojant pažeidžiamumą

Prieš bandant išplėsti privilegijas per išnaudojimą, svarbu suprasti failų perkėlimas į tikslinį pagrindinį kompiuterį. Be įprastų įrankių, tokių kaip ssh, ftp, http (wget, curl), yra ir visuma galimybių „zoologijos sodas“..

Norėdami pagerinti sistemos saugumą, reguliariai atnaujinkite ją į naujausią stabilus versijas, taip pat pabandykite naudoti „Enterprise“ skirtus paskirstymus. Kitu atveju tai yra reta, tačiau yra situacijų, kai apt atnaujinimas padaro sistemą neveikiančią.

Paslaugų, veikiančių pagrindinio vartotojo kontekste, naudojimas

Kai kurios Linux paslaugos veikia kaip root. Juos galima rasti naudojant komandą ps aux | grep šaknis. Tokiu atveju paslauga negali būti reklamuojama internete ir gali būti pasiekiama vietoje. Jei jame yra viešųjų išnaudojimų, jais galima saugiai naudotis: paslaugos gedimas gedimo atveju yra daug mažiau kritiškas nei OS gedimas.

ps -aux | grep root # Linux

Sėkmingiausiu atveju galima laikyti nulaužtos paslaugos veikimą pagrindinio vartotojo kontekste. Naudojant SMB paslaugą, Windows sistemose suteikiama privilegijuota SISTEMOS prieiga (pavyzdžiui, per ms17-010). Tačiau tai nėra įprasta Linux sistemose, todėl galite praleisti daug laiko didindami privilegijas.

„Linux“ branduolio pažeidžiamumų išnaudojimas

Tai kelias, kurį turėtumėte eiti paskutinis. Nesėkmingas veikimas gali sukelti sistemos gedimą, o perkrovimo atveju kai kurios paslaugos (įskaitant tas, per kurias buvo gautas pradinis apvalkalas) gali nepasileisti. Taip atsitinka, kad administratorius tiesiog pamiršo panaudoti komandą systemctl enable. Be to, tai sukels daug nepasitenkinimo jūsų darbu, jei dėl operacijos nebuvo susitarta.
Jei nuspręsite naudoti exploitdb šaltinio kodus, būtinai perskaitykite komentarus scenarijaus pradžioje. Be kita ko, paprastai nurodoma, kaip teisingai sudaryti tam tikrą išnaudojimą. Jei esate per daug tingus arba turėjote tai padaryti „vakar“ dėl terminų, galite ieškoti saugyklų su jau sukompiliuotais išnaudojimais, pavyzdžiui. Tačiau turėtumėte suprasti, kad tokiu atveju gausite kiaulę kišenėje. Kita vertus, jei programuotojas iki baitų suprastų, kaip veikia kompiuteris ir kokia programinė įranga jame naudojama, jis per visą savo gyvenimą neparašytų nė vienos kodo eilutės.

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

Metasploitas

Norint pagauti ir valdyti ryšį, visada geriau naudoti exploit/multi/handler modulį. Svarbiausia yra nustatyti tinkamą naudingą apkrovą, pavyzdžiui, generic/shell/reverse_tcp arba generic/shell/bind_tcp. Metasploit pagamintą apvalkalą galima atnaujinti į Meterpreter naudojant post/multi/manage/shell_to_meterpreter modulį. Naudodami „Meterpreter“ galite automatizuoti po naudojimo procesą. Pavyzdžiui, modulis post/multi/recon/local_exploit_suggester patikrina platformą, architektūrą ir objektus, reikalingus išnaudojimui, ir siūlo Metasploit modulius, kad padidintų privilegijas tikslinėje sistemoje. „Meterpreter“ dėka privilegijų eskalavimas kartais nulemia reikiamo modulio paleidimą, tačiau įsilaužimas nesuvokiant, kas vyksta po gaubtu, nėra „tiesa“ (vis tiek turite parašyti ataskaitą).

Ištekliai

Vietinės informacijos rinkimo automatizavimo įrankiai sutaupys daug pastangų ir laiko, tačiau patys savaime negali visiškai nustatyti privilegijų eskalavimo kelio, ypač branduolio pažeidžiamumų išnaudojimo atveju. Automatizavimo įrankiai atliks visas reikalingas komandas, kad galėtumėte rinkti informaciją apie sistemą, tačiau taip pat svarbu turėti galimybę analizuoti gautus duomenis. Tikiuosi, kad mano straipsnis bus jums naudingas šiuo klausimu. Žinoma, yra daug daugiau priemonių, nei išvardinsiu žemiau, tačiau visos jos daro maždaug tą patį – čia veikiau skonio reikalas.

Linžirniai

Gana neseniai Tula, pirmasis įsipareigojimas datuojamas 2019 m. sausio mėn. Šiuo metu mano mėgstamiausia priemonė. Esmė ta, kad ji išryškina įdomiausius privilegijų eskalavimo vektorius. Sutikite, patogiau gauti ekspertų vertinimą tokiu lygiu, nei analizuoti monolitinius neapdorotus duomenis.

LinEnum

Mano antrasis mėgstamiausias įrankis, jis taip pat renka ir tvarko duomenis, gautus atlikus vietinį surašymą.

Linux-exploit-suggester (1,2)

Šis išnaudojimas analizuos sistemą ir nustatys tinkamas eksploatavimo sąlygas. Tiesą sakant, jis atliks tą patį darbą kaip ir Metasploit modulis local_exploit_suggester, bet pasiūlys nuorodas į exploit-db šaltinio kodus, o ne į Metasploit modulius.

„Linuxprivchecker“.

Šis scenarijus surinks ir suskirstys į skyrius daug informacijos, kuri gali būti naudinga formuojant vektorių, skirtą padidinti privilegijas.

Kitą kartą papasakosiu apie smulkmenas privilegijų padidinimas Linux OS per suid/sgid.

Šaltinis: www.habr.com

Добавить комментарий