Olen juur. Linuxi OS-i privileegide eskaleerimise mõistmine

2020. aasta esimese kvartali veetsin OSCP eksamiks valmistudes. Google’ist info otsimine ja paljud “pimedad” katsed võtsid kogu mu vaba aja. Eriti raske oli mõista privileegide suurendamise mehhanisme. PWK kursusel pööratakse sellele teemale palju tähelepanu, kuid õppematerjalidest ei piisa kunagi. Internetis on palju kasulike käskudega käsiraamatuid, kuid ma ei armasta soovitusi pimesi järgida, mõistmata, milleni see viib.

Tahaksin teiega jagada seda, mida õppisin eksami ettevalmistamisel ja edukal sooritamisel (sh perioodilised katsed Hack The Boxi). Tundsin tugevat tänutunnet iga teabekillukese eest, mis aitas mul Püüa raskemalt teed teadlikumalt kõndida. Nüüd on minu aeg kogukonnale tagasi anda.

Soovin teile anda juhendi OS Linuxi õiguste suurendamise kohta, mis sisaldab kõige levinumate vektorite ja seotud funktsioonide analüüsi, mis on teile kindlasti kasulikud. Sageli on privileegide suurendamise mehhanismid ise üsna lihtsad, raskused tekivad teabe struktureerimisel ja analüüsimisel. Seetõttu otsustasin alustada „ekskursiooniga” ja seejärel käsitleda iga vektorit eraldi artiklis. Loodan, et säästan aega teema uurimisel.

Olen juur. Linuxi OS-i privileegide eskaleerimise mõistmine

Miks on siis 2020. aastal üldse võimalik privileegide suurendamine, kui meetodid on olnud hästi teada juba väga pikka aega? Tegelikult, kui kasutaja käsitseb süsteemi õigesti, ei ole tõesti võimalik selle privileege suurendada. Peamine globaalne probleem, mis selliseid võimalusi tekitab, on ebaturvaline konfiguratsioon. Ebaturvalise konfiguratsiooni erijuhtum on ka vananenud tarkvaraversioonide olemasolu, mis sisaldavad haavatavusi süsteemis.

Privileegide eskaleerimine ebaturvalise konfiguratsiooni kaudu

Esiteks tegeleme ebaturvalise konfiguratsiooniga. Alustame sellest IT-spetsialistid kasutavad sageli käsiraamatuid ja ressursse, nagu stackoverflow, millest paljud sisaldavad ebaturvalisi käske ja konfiguratsioone. Ilmekas näide - uudised et stackoverflowst enim kopeeritud kood sisaldas viga. Kogenud administraator näeb lengi, kuid see on ideaalses maailmas. Isegi pädevad spetsialistid suurenenud töökoormus võimeline vigu tegema. Kujutage ette, et administraator valmistab ette ja kooskõlastab järgmise hanke dokumentatsiooni, süvenedes samal ajal järgmises kvartalis kasutusele võetavasse uude tehnoloogiasse, lahendades samal ajal perioodiliselt kasutajatoe probleeme. Ja siis antakse talle ülesanne kiiresti paar virtuaalmasinat seadistada ja neile teenuseid välja pakkuda. Kui suur on teie arvates tõenäosus, et administraator lihtsalt ei märka lengi? Siis vahetuvad spetsialistid, kuid kargud jäävad alles, samas kui ettevõtted püüavad alati kulusid minimeerida, sealhulgas IT-töötajatele.

Pseudo-shell ja jailbreak

Kasutamisetapis saadud süsteemi kest on sageli piiratud, eriti kui hankisite selle veebiserveri kasutaja häkkimise kaudu. Näiteks võivad shellipiirangud takistada teil sudo käsku käivitamast, põhjustades tõrke:

sudo: no tty present and no askpass program specified

Kui teil on shell, soovitan luua täisväärtusliku terminali, näiteks Pythoni abil.

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

Võite küsida: "Miks on mul vaja tuhat käsku, kui saan seda kasutada näiteks failide edastamiseks?" Tõsiasi on see, et süsteemid on konfigureeritud erinevalt; antud hostil ei pruugi olla installitud Python, kuid võib olla Perl. Oskus on osata teha süsteemis tuttavaid asju ilma tuttavate tööriistadeta. Funktsioonide täieliku loendi leiate siin.

Madala privilegeeritud kesta saab hankida kasutades meeskonnad 1 и meeskonnad 2 (üllatuslikult isegi GIMP).

Kuva käskude ajalugu

Linux kogub faili kõigi käivitatud käskude ajalugu ~ / .bash_history. Kui serverit kasutatakse aktiivselt ja selle ajalugu ei tühjendata, on sellest failist mandaatide leidmise tõenäosus suur. Ajaloo kustutamine on lihtsalt ebamugav. Kui administraator on sunnitud valima kümnekorruselisi käske läbi , on tal muidugi mugavam seda käsku ajaloost välja kutsuda kui uuesti sisestada. Lisaks ei tea paljud inimesed sellest "häkkimisest". Kui süsteemis on alternatiivseid kestasid, nagu Zsh või Fish, on neil oma ajalugu. Mis tahes kestas olevate käskude ajaloo kuvamiseks tippige lihtsalt käskude ajalugu.

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

Seal on jagatud hostimine, mille puhul serverit kasutatakse mitme veebisaidi majutamiseks. Tavaliselt on selle konfiguratsiooni korral igal ressursil oma kasutaja, kellel on eraldi kodukataloog ja virtuaalne host. Seega, kui see on valesti seadistatud, leiate faili .bash_history veebiressursi juurkataloogist.

Paroolide otsimine failisüsteemist ja rünnakud kõrvalsüsteemidele

Teie praegune kasutaja võib lugeda erinevate teenuste konfiguratsioonifaile. Nendest leiate puhta tekstina mandaadid - paroolid andmebaasile või seotud teenustele juurdepääsuks. Sama parooli saab kasutada nii andmebaasi sisenemiseks kui ka juurkasutaja autoriseerimiseks (mandaadi personali määramine).
Juhtub, et leitud mandaadid kuuluvad teiste hostide teenustele. Infrastruktuuri ründamine ohustatud hosti kaudu pole halvem kui teiste hostide ärakasutamine. Külgnevaid süsteeme saab leida ka failisüsteemist IP-aadresse otsides.

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

Kui ohustatud hostil on Internetist juurdepääsetav veebirakendus, on parem selle logid IP-aadresside otsingust välja jätta. Internetist pärit ressursikasutajate aadressid meile tõenäoliselt kasulikud ei ole, küll aga sisevõrgu aadressid (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) ja kuhu nad lähevad, logide järgi otsustades , võib huvi pakkuda.

Sudo

Sudo käsk annab kasutajale võimaluse käivitada käsk juurkontekstis, kasutades oma parooli või parooli üldse kasutamata. Paljud toimingud Linuxis nõuavad administraatoriõigusi, kuid administraatorina töötamist peetakse väga halvaks tavaks. Selle asemel on parem juurkontekstis käskude täitmiseks rakendada valikulisi õigusi. Kuid paljusid Linuxi tööriistu, sealhulgas standardseid, nagu vi, saab kasutada õiguste seaduslikul viisil suurendamiseks. Sobiva meetodi leidmiseks soovitan otsida siin.

Esimene asi, mida peate süsteemile juurdepääsu saamiseks tegema, on käivitada käsk sudo -l. See kuvab loa kasutada sudo käsku. Kui hangitakse ilma paroolita kasutaja (nt apache või www-andmed), on õiguste eskalatsioonivektor sudo kaudu ebatõenäoline. Sudo kasutamisel küsib süsteem parooli. Samuti ei saa te parooli määrata käsu passwd abil, see küsib kasutaja praegust parooli. Kuid kui sudo on endiselt saadaval, peate sisuliselt otsima:

  • kõik tõlgid, kesta võivad luua kõik (PHP, Python, Perl);
  • mis tahes tekstiredaktorid (vim, vi, nano);
  • kõik vaatajad (vähem, rohkem);
  • mis tahes võime töötada failisüsteemiga (cp, mv);
  • Tööriistad, millel on väljund bashis, interaktiivne või käivitatava käsuna (awk, find, nmap, tcpdump, man, vi, vim, ansible).

Suid/Sgid

Internetis on palju käsiraamatuid, mis soovitavad koguda kõik suid/sgid käsklused, kuid harvaesinevas artiklis kirjeldatakse, mida nende programmidega teha. Leiate õiguste suurendamise võimalusi, mis ei võta arvesse ärakasutamist siin. Samuti on paljudel käivitatavatel failidel OS-i versiooni jaoks spetsiifilised haavatavused, näiteks.

Ideaalses maailmas käivitaksite kõik installitud paketid vähemalt läbi searchsploiti. Praktikas tuleks seda teha kõige populaarsemate programmidega nagu sudo. Alati on ka võimalus kasutada ja toetada automatiseeritud tööriistade arendamist, mis tõstavad esile huvitavad privileegide eskalatsiooni seisukohalt käivitatavad failid, mille suid/sgid bitid on seatud. Esitan selliste tööriistade loendi artikli vastavas jaotises.

Kirjutatavad skriptid, mida juhivad juure kontekstis Cron või Init

Croni töid saab käivitada erinevates kasutajakontekstides, sealhulgas root. Kui cron-ülesanne on seadistatud käivitatava faili lingiga ja see on teile kirjutamiseks saadaval, saab selle hõlpsalt pahatahtlikuga asendada ja õiguste eskaleerimist. Vaikimisi on cron-ülesannetega failid aga loetavad igale kasutajale.

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

Sarnane on olukord ka initiga. Erinevus seisneb selles, et cron-i ülesandeid täidetakse perioodiliselt ja init-is - süsteemi käivitamisel. Tööks on vaja süsteemi taaskäivitamist ja mõned teenused ei pruugi käivituda (kui neid ei registreeritud käivitamisel).

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

Samuti saate otsida faile, mida saab kirjutada iga kasutaja.

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

Meetod on üsna tuntud; kogenud süsteemiadministraatorid kasutavad hoolikalt käsku chmod. Internetis kirjeldatakse aga valdavas enamuses juhendites maksimaalsete õiguste määramist. Kogenematute süsteemiadministraatorite “lihtsalt tee see toimima” lähenemine loob põhimõtteliselt võimalused privileegide eskaleerimiseks. Võimalusel on parem otsida käskude ajaloost chmodi ebaturvalist kasutamist.

chmod +w /path 
chmod 777 /path

Shelli juurdepääsu saamine teistele kasutajatele

Vaatame kasutajate loendit failis /etc/passwd. Pöörame tähelepanu neile, kellel on kest. Saate neid kasutajaid jõhkralt kahjustada - on võimalik, et tulemuseks oleva kasutaja kaudu on lõpuks võimalik privileege suurendada.

Turvalisuse parandamiseks soovitan alati järgida vähima privileegide põhimõtet. Samuti on mõttekas kulutada aega ebaturvaliste konfiguratsioonide kontrollimisele, mis võivad pärast tõrkeotsingut alles jääda - see on süsteemiadministraatori "tehniline kohustus".

Ise kirjutatud kood

Tähelepanelikult tasub vaadata kasutaja ja veebiserveri kodukataloogis olevaid käivitatavaid faile (/var/www/, kui pole teisiti märgitud). Need failid võivad osutuda täiesti ebaturvaliseks lahenduseks ja sisaldada uskumatuid karkusid. Muidugi, kui teil on veebiserveri kataloogis mingi raamistik, pole mõtet sealt pentesti raames otsida nullpäeva, küll aga on soovitatav leida ja uurida kohandatud modifikatsioone, pluginaid ja komponente.

Turvalisuse suurendamiseks on parem võimalusel vältida volikirjade kasutamist enda kirjutatud skriptides, samuti potentsiaalselt ohtlikke funktsioone, nagu näiteks /etc/shadow lugemine või id_rsa manipuleerimine.

Privileegide tõstmine turvaaukude ärakasutamise kaudu

Enne kui proovite privileege ekspluateerimise kaudu suurendada, on oluline mõista failide edastamine sihthostile. Lisaks tavalistele tööriistadele nagu ssh, ftp, http (wget, curl) on olemas tervik võimaluste "loomaaed"..

Süsteemi turvalisuse parandamiseks värskendage seda regulaarselt uusima versioonini stabiilne versioonid ja proovige kasutada ka ettevõtte jaoks mõeldud distributsioone. Vastasel juhul on see haruldane, kuid on olukordi, kus apt upgrade muudab süsteemi töövõimetuks.

Juurkasutaja kontekstis töötavate teenuste kasutamine

Mõned Linuxi teenused töötavad administraatorina. Neid saab leida käsuga ps aux | grep juur. Sel juhul ei pruugita teenust Internetis reklaamida ja see on kohapeal saadaval. Kui sellel on avalikke ärakasutusi, saab neid turvaliselt kasutada: teenuse krahh rikke korral on palju vähem kriitiline kui OS-i krahh.

ps -aux | grep root # Linux

Kõige edukamaks juhtumiks võib pidada häkitud teenuse toimimist juurkasutaja kontekstis. SMB-teenuse kasutamine annab Windowsi süsteemides privilegeeritud juurdepääsu SÜSTEEMILE (näiteks ms17-010 kaudu). Kuid see pole Linuxi süsteemides tavaline, nii et saate kulutada palju aega õiguste suurendamisele.

Linuxi tuuma haavatavuste ärakasutamine

See on tee, mille peaksite võtma viimasena. Ebaõnnestunud toimimine võib põhjustada süsteemi krahhi ja taaskäivitamise korral ei pruugi mõned teenused (sh need, mille kaudu esialgne kest hangiti) käivituda. Juhtub, et administraator unustas lihtsalt käsu systemctl enable kasutada. Lisaks tekitab see teie tööga palju rahulolematust, kui operatsioonis kokku ei lepitud.
Kui otsustate kasutada exploitdb lähtekoode, lugege kindlasti skripti alguses olevaid kommentaare. Muu hulgas on seal tavaliselt kirjas, kuidas antud exploiti õigesti kompileerida. Kui olete liiga laisk või pidite seda tähtaegade tõttu "eile" tegema, võite otsida hoidlaid, kus on juba koostatud exploit'id, näiteks. Siiski peaksite mõistma, et sel juhul saate põrsast kotis. Teisest küljest, kui programmeerija mõistaks baitideni, kuidas arvuti töötab ja mis tarkvara see kasutab, ei kirjutaks ta terve elu jooksul ühtegi koodirida.

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

Metasploit

Ühenduse tabamiseks ja käsitlemiseks on alati parem kasutada exploit/multi/handler moodulit. Peaasi on määrata õige kasulik koormus, näiteks generic/shell/reverse_tcp või generic/shell/bind_tcp. Metasploiti toodetud kesta saab uuendada Meterpreteriks, kasutades moodulit post/multi/manage/shell_to_meterpreter. Meterpreteri abil saate kasutusjärgset protsessi automatiseerida. Näiteks moodul post/multi/recon/local_exploit_suggester kontrollib ekspluateerimiseks vajalikku platvormi, arhitektuuri ja üksusi ning soovitab Metasploiti mooduleid sihtsüsteemi õiguste suurendamiseks. Tänu Meterpreterile taandub privileegide eskaleerumine mõnikord vajaliku mooduli käivitamisele, kuid häkkimine ilma kapoti all toimuvast aru saamata pole “tõsi” (peab ikkagi aruande kirjutama).

TÖÖRIISTAD

Kohaliku teabe kogumise automatiseerimiseks mõeldud tööriistad säästavad palju vaeva ja aega, kuid iseenesest ei suuda nad täielikult tuvastada õiguste eskaleerumise teed, eriti tuuma haavatavuste ärakasutamise korral. Automatiseerimistööriistad täidavad kõik vajalikud käsud, et saaksite süsteemi kohta teavet koguda, kuid oluline on ka analüüsida saadud andmeid. Loodan, et minu artikkel on teile selles osas kasulik. Loomulikult on tööriistu palju rohkem, kui ma allpool loetlen, kuid need kõik teevad umbes sama asja - see on pigem maitse küsimus.

Linherned

Üsna hiljutine Tula, esimene kohustus pärineb 2019. aasta jaanuarist. Minu hetkel lemmik tööriist. Asi on selles, et see tõstab esile kõige huvitavamad privileegide eskalatsiooni vektorid. Nõus, sellel tasemel on mugavam saada eksperthinnang kui monoliitsete algandmete sõelumine.

LinEnum

Minu teine ​​lemmiktööriist, see kogub ja korrastab ka kohaliku loenduse tulemusel saadud andmeid.

Linux-exploit-suggester (1,2)

See ärakasutamine analüüsib süsteemi sobivate kasutustingimuste osas. Tegelikult teeb see tööd identselt Metasploiti mooduliga local_exploit_suggester, kuid pakub linke exploit-db lähtekoodidele, mitte Metasploiti moodulitele.

Linuxi privchecker

See skript kogub ja jaotab osadeks suure hulga teavet, mis võib olla kasulik privileegide suurendamise vektori moodustamiseks.

Teinekord lähen detailidesse õiguste tõstmine Linux OS-is suid/sgid kaudu.

Allikas: www.habr.com

Lisa kommentaar