Mina olen root. Uurime Linuxi OS-i privileegide tõstmist

2020. aasta esimeses kvartalis keskendusin OSCP eksamiks valmistumisele. Teabe otsimine Google'ist ja arvukad "pimedad" katsetused võtsid mul kogu vaba aja. Eriti keeruline oli mõista õiguste tõstmise mehhanisme. PWK kursus keskendub sellele teemale, kuid alati on õpetlikest materjalidest puudu. Internetis on palju juhendeid kasulike käskudega, kuid mina ei poolda juhiste pimekõndimist ilma arusaamiseta, kuhu see viib.

Soovin jagada teiega, mida olen õppinud ettevalmistuse ja eksami edukal sooritamisel (sh perioodilised külastused Hack The Boxi). Mul oli erakordne tänutunne iga teabeosa eest, mis aitas mul läbida Try Harder teekonna teadlikumalt; nüüd on minu aeg anda au kogukonnale.

Soovin anda teile juhendi Linuxi OS-i õiguste tõstmiseks, mis hõlmab enamiku sagedaste rünnakute ja seotud näpunäidete ülevaatamist, mis on teile kindlasti kasulikud. Sageli on õiguste tõstmise mehhanismid iseenesest suhteliselt lihtsad, raskused tekivad teabe struktureerimisel ja analüüsimisel. Seetõttu otsustasin alustada "ülevaatlikust ekskursioonist" ja arutada iga rünnakut eraldi artiklis. Loodan, et säästan teie aega teema uurimisel.

Mina olen root. Uurime Linuxi OS-i privileegide tõstmist

Nii et miks on õiguste tõstmine 2020. aastal üldse võimalik, kui meetodid on juba ammu teada? Tegelikult, kui kasutaja haldab süsteemi õigesti, ei ole õiguste tõstmine tõepoolest võimalik. Peamine globaalne probleem, mis selliseid võimalusi tekitab, on ebaturvaline konfigureerimine. Süsteemis vananenud tarkvara versioonide olemasolu, mis sisaldavad turvaund õigusi, on samuti ebaturvalise konfigureerimise erijuht.

Õiguste tõstmine ebaturvalise konfigureerimise kaudu

Esiteks laske meil arutada ebaturvalist konfigureerimist. Alustame sellega, et IT-spetsialistid kasutavad sageli juhendeid ja ressursse nagu stackoverflow, millest paljud sisaldavad ebatäiuslikke käske ja konfigureerimist. Hea näide on uudis see, et Stack Overflow'ist kopeerituim kood sisaldas viga. Kogenud administraator märkab probleemi, kuid see on ideaalsetes tingimustes. Ieven kasutatakse õigete spetsialistide poolt suure töökoormuse korral võivad teha vigu. Kujutage ette, et administraator tegeleb dokumentatsiooni ettevalmistamise ja kooskõlastamisega järgmise hankemenetluse jaoks, samal ajal süvenedes uude tehnoloogiasse, mida plaanitakse järgmises kvartalis rakendada, ja perioodiliselt lahendades kasutajatoe ülesandeid. Ja siis antakse talle kiiresti ülesanne tõsta üles paar virtuaalmasinat ja installida neile teenuseid. Kuidas arvate, kui tõenäoline on, et administraator lihtsalt ei märka viga? Siis spetsialistid vahetuvad, kuid ajutised lahendused jäävad, samas kui ettevõtted üritavad alati vähendada kulusid, sealhulgas IT-ala spetsialistide peale.

Pseudo-shell ja jailbreak

Süsteemi shell, mis on saadud töötamise käigus, on sageli piiratud, eriti kui olete selle hankinud veebiserveri kasutaja häkkimise teel. Näiteks võivad shelli piirangud takistada sudo käsku kasutada ja loobuda veast:

sudo: no tty present and no askpass program specified

Pärast shelli saamist soovitan luua täisfunktsionaalne terminal, näiteks Pythoniga.

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

Küsite: „Milleks mul on tuhandeid käske, kui ma saan kasutada ühte, näiteks failide edastamiseks?” Asi on selles, et süsteemid võivad olla erinevalt konfigureeritud, järgmine host võib mitte sisaldada Pythonit, kuid omada Perl'i. Meistriks on see, et saate teha süsteemis tuttavaid asju ilma tuttavate tööriistadeta. Täieliku võimaluste loendi leiate siit.

Madala privileegiga shelli saab hankida, kasutades käsklusi 1 ja käsklusi 2 (üllatav, et isegi GIMP).

Käskude ajaloo vaatamine

Linux kogub kõigi täidetud käskude ajaloo faili ~/.bash_history. Kui serverit kasutatakse aktiivselt ja selle ajalugu ei puhastata, on suur tõenäosus leida selle faili kaudu mandaate. Ajalugu puhastamine on lihtsalt ebamugav. Kui administraator peab valima kümneid käsklusi, on tal loomulikult mugavam kutsuda see käsk ajaloost, kui seda uuesti sisestada. Pluss paljud ei tea sellest „hackist”. Kui süsteemis on alternatiivsed shellid nagu Zsh või Fish, siis peavad need oma ajalugu. Käskude ajaloo kuvamiseks igas shellis piisab, kui sisestada käsk history.

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

On olemas jagatud hosting, kus serverit kasutatakse mitme saiti hostimiseks. Tavaliselt loob sellise konfigureerimise korral iga ressurssi jaoks oma kasutaja koos eraldi kodudirektori ja virtuaalse hostiga. Vale seadistuse korral võib veebiresursi juurkataloogis avastada faili .bash_history.

Paroolide otsimine failisüsteemist ja ründed külgsüsteemidele

Erinevate teenuste konfiguratsioonifailid võivad olla teie praeguse kasutaja jaoks lugemiseks kättesaadavad. Nendes võivad olla avatud tekstiga mandaadid — andmebaasi või külgsüsteemide juurdepääsuks vajalikud paroolid. Ühte ja sama parooli võib kasutada nii andmebaasi juurdepääsuks kui ka root-kasutaja autoriseerimiseks (credential staffing).
Võib olla, et leitud mandaadid kuuluvad teenustele teistes hostides. Ründe arendamine infrastruktuuri kaudu kompromiteeritud hosti kaudu pole halvem kui teiste hostide ärakasutamine. Külgsüsteeme saab samuti leida IP-aadresside otsimise teel failisüsteemist.

grep -lRi "password" /home /var/www /var/log 2>/dev/null | sort | uniq #Leia string password (ilma cs) nende kataloogide seest
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 logides

Kui kompromiteeritud hostis on veebirakendus, mis on internetis kättesaadav, on parem välistada selle logid IP-aadresside otsimisel. Internetist ressursi kasutajate aadressid ei pruugi meile kasulikud olla, kuid sisemise võrgu aadressid (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) ning see, kuhu nad logide põhjal sisenevad, võivad olla huvitavad.

Sudo

Sudo käsk annab kasutajale võimaluse käivitada käsk root-kontekstis oma parooli abil või isegi ilma selle kasutamiseta. Paljud toimingud Linuxis nõuavad root-privileege, kuid töötamine root-kontekstis loetakse väga halvaks praktikaks. Selle asemel on parem rakendada valikulist luba käskude täitmiseks root-kontekstis. Kuid paljusid Linuxi tööriistu, sealhulgas standardseid nagu vi, saab kasutada privileegide tõstmiseks täiesti legitiimsetel viisidel. Sobiva meetodi leidmiseks soovitan vaadata. siin.

Esimene asi, mida teha juurdepääsu saamisel süsteemi, on käivitada käsk sudo -l. See kuvab sudo kasutamise õigused. Kui saadud kasutaja on ilma paroolita (nt apache või www-data), on privileegide tõstmise vektor sudo kaudu ebatõenäoline. Sudo kasutamisel küsib süsteem parooli. Käsku passwd kasutades parooli määramine ei õnnestu, see küsib kasutaja praegust parooli. Kuid kui sudo on siiski saadaval, siis tuleb põhjalikult otsida:

  • kõik tõlgendajad, igaühel on võimalik luua shell (PHP, Python, Perl);
  • kõik tekstiredaktorid (vim, vi, nano);
  • kõik vaaturid (less, more);
  • kõik failisüsteemiga töötamise võimalused (cp, mv);
  • tööriistad, mis omavad pääsu bash'i, interaktiivses või käitatava käskluse vormis (awk, find, nmap, tcpdump, man, vi, vim, ansible).

Suid/Sgid

Internetis on palju käsiraamatuid, mis soovitavad koguda kõik suid/sgid käsud, kuid harva on artiklis antud konkreetseid soovitusi nende programmide kasutamiseks. Privileegide tõstmise variandid, mis ei hõlma eksploitide rakendamist, on leitavad siit. Samuti on mitmetel käitatavatel failidel spetsiifilised haavatavused OS-i versiooni järgi, näiteks.

Ideaalmaailmas tuleks kõik installitud paketid vähemalt läbi searchsploit'iga lasta. Praktiliselt tasub seda teha kõige populaarsemate programmidega nagu sudo. Samuti on alati olemas variant kasutada ja arendada automatiseeritud tööriistu, mis toovad esile huvitavad, privileegide tõstmise seisukohalt, käitatavad failid, millel on seadistatud suid/sgid bitid. Selliste tööriistade nimekirja esitan vastavas artikli osas.

Kirjutamiseks saadaval skriptid, mida käivitab Cron või Init, Root'i kontekstis

Croni ülesandeid saab käivitada erinevate kasutajate, sealhulgas root'i kontekstis. Kui cronis on ülesanne, mis osutab käideldavale failile, ja see on teile kirjutamiseks saadaval, on seda lihtne muuta pahatahtlikuks ja privileegide tõstmiseks käivitada. Samal ajal on vaikimisi cron'i ülesannete failid lugemiseks kõigile kasutajatele saadaval.

ls -la /etc/cron.d  # kuvab cron'i ülesanded 

Sarnased on asjad init'iga. Erinevus seisneb selles, et cron'i ülesandeid käivitatakse perioodiliselt, samas kui init'is - süsteemi käivitamisel. Kasutamiseks on vajalik süsteemi taaskäivitamine, samal ajal võib osa teenuseid mitte tõusta (kui need pole olnud autolaadimisele kirja pandud).

ls -la /etc/init.d/  # näita initskripte 

Samuti võib otsida failide, mis on kirjutamiseks kergesti kättesaadavad igale kasutajale.

find / -perm -2 -type f 2>/dev/null # leia maailmale kirjutatavad failid

Meetod on üsna tuntud, kogenud süsteemiadministraatorid kasutavad chmod käsku ettevaatlikult. Kuid internetis on enamikus käsiraamatutes kirjas maksimaalsete õiguste seadmine. Algaja süsteemiadministraatorite lähenemine "vaid et tööle hakkaks" loob võimalusi privileegide tõstmiseks. Kui on võimalus, on parem otsida chmodi mitteohutut kasutamist käsu ajaloos.

chmod +w /path 
chmod 777 /path

Ligipääs teiste kasutajate terminalidele

Vaadake kasutajate loetelu /etc/passwd. Pöörake tähelepanu kasutajatele, kellel on shell. Neid kasutajaid võib proovida bruteforce'ida — on tõenäoline, et nende kasutajate kaudu on võimalik lõpuks privileege tõsta.

Turvalisuse tõstmiseks soovitan alati järgida minimaalsete privilegiumide poolt. Samuti on mõistlik veidi aega kulutada mitteohutute konfiguratsioonide kontrollimisele, mis võisid jääda pärast tõrkeotsingut — see on süsteemiadministraatori "tehniline võlg".

Kohandatud kood

Väga tähtis on vaadata kasutaja ja veebiserveri kodukataloogis ( /var/www/, kui ei ole määratud teisiti) täitmiseks mõeldud faile. Need failid võivad osutuda väga ohtlikuks lahenduseks ja sisaldada uskumatuid

Turvalisuse tõstmiseks on parem loobuda võimalikult palju kohandatud skriptees olevatest autentimisandmetest ning potentsiaalselt ohtlikest funktsioonidest, näiteks /etc/shadow lugemisest või id_rsa manipuleerimisest.

Privileegide tõstmine haavatavuste ära kasutamise kaudu

Enne kui proovite privileege tõsta haavatavuste ärakasutamise kaudu, on oluline aru saada failide edastamisest sihthostsse. Lisaks tuttavatele vahenditele, nagu ssh, ftp, http (wget, curl), on olemas terve "loomaaed" võimalusi.

Süsteemi turvalisuse tõstmiseks uuendage regulaarselt selle versiooni ajakohaseks stabiilseks versioonide ning püüdke kasutada ettevõtetele mõeldud distributsi. Vastasel juhul esinevad harva, kuid siiski olukorrad, kus apt upgrade muudab süsteemi kasutuskõlbmatuks.

Teenuste käitamine, mis on käivitatud kasutaja root kontekstis

Mõned Linuxi teenused töötavad privileegitud kasutaja root all. Neid saab leida käsuga ps aux | grep root. Sel hetkel ei pruugi teenus olla Internetis nähtav ja olla kergesti kohaliku juurdepääsetav. Kui tal on avalikud haavatavused, võib neid julgelt kasutada: teenuse kokkuvarisemine ebaõnnestumise korral on oluliselt vähem kriitiline kui operatsioonisüsteemi kokkuvarisemine.

ps -aux | grep root # Linux

Parim juhtum on, kui häkitud teenus töötab kasutaja root kontekstis. SMB teenuse kasutamine annab süsteemidele Windows privileegitud juurdepääsu (näiteks läbi ms17-010). Kuid Linuxi süsteemides esineb see harva, seega võib privileegide tõstmiseks kuluda palju aega.

Linuxi tuuma haavatavuste ekspluateerimine

See on tee, mida tuleks järgida viimasena. Ebaõnnestunud ekspluateerimine võib viia süsteemi kokkuvarisemiseni ja pärast taaskäivitust võivad mõned teenused (sealhulgas need, mille kaudu sai esmakordne shell) mitte käivituda. Juhtub, et administraator unustab lihtsalt käsu systemctl enable rakendada. Lisaks toob see kaasa palju rahulolematust teie tööde osas, kui ekspluateerimine polnud kooskõlastatud.
Kui otsustate kasutada exploitdb-st allalaaditud lähtekoodide, lugege kindlasti skripti alguses kommentaare. Lisaks sellele on seal tavaliselt kirjas, kuidas antud eksploit õigesti kompileerida. Kui endal pole aega või tuleb „eile“ valmis saada, võib otsida juba kompileeritud eksploitidega hooneid. näiteks. Ent tuleb mõista, et sel juhul saab te kassi kotis. Teisest küljest, kui programmeerija mõistaks, kuidas arvuti ja kasutatav tarkvara byte-by-byte töötab, ei oleks ta terve elu jooksul kirjutanud isegi ühte koodirida.

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

Metasploit

Selleks, et püüda ja töödelda ühendust, on alati parem kasutada moodulit exploit/multi/handler. Peamine on seada õige payload, näiteks generic/shell/reverse_tcp või generic/shell/bind_tcp. Metasploitis saadud shelli saab täiustada Meterpreteriks, kasutades moodulit post/multi/manage/shell_to_meterpreter. Meterpreteriga on sul võimalik automatiseerida post-exploitatsiooni protsessi. Näiteks moodul post/multi/recon/local_exploit_suggester kontrollib platvormi, arhitektuuri ja vajalikke ekspluateeritavaid elemente ning soovitab Metasploiti mooduleid õiguste tõstmiseks sihtsüsteemis. Tänu Meterpreterile võib õiguste tõstmine mõnikord seisneda lihtsalt õige mooduli käivitamises, kuid häkkimine ilma arusaamiseta, mis toimub kapoti all, ei ole "tõeline" (sul tuleb ikkagi aruanne kirjutada).

Tööriistad

Kohalikku teabe kogumise automatiseerimise tööriistad säästavad sind palju vaeva ja aega, kuid nad ei suuda ise täielikult tuvastada õiguste tõstmise teed, eriti juhul, kui on tegemist tuumavigade ekspluateerimisega. Automatiseerimise tööriistad täidavad kõik vajalikud käsud süsteemi teabe kogumiseks, kuid on oluline ka osata analüüsida saadud andmeid. Loodan, et minu artikkel on sulle selles abiks. Loomulikult on olemas palju rohkem tööriistu, kui ma allpool tõin, kuid nad kõik teevad enam-vähem sama — siin on pigem maitse asi.

Linpeas

Suhteliselt uus tööriist, esimene commit on dateeritud 2019. aasta jaanuariga. Praegu on see minu lemmik tööriist. Sisuks on see, et see toob esile kõige huvitavamad õiguste tõstmise vektorid. Olgem ausad, on mugavam saada ekspertarvamus sellisel tasemel, kui analüüsida monoliitseid tooreid andmeid.

LinEnum

Teine minu lemmik tööriist, see kogub ja süstematiseerib andmeid, mis on saadud kohalikust loendusest.

Linux-exploit-suggester (1,2)

See exploiter analüüsib süsteemi, et leida sobivaid tingimusi ekspluateerimise jaoks. Sisuliselt teeb see sama asja, mis Metasploiti moodul local_exploit_suggester, kuid pakub mitte Metasploiti mooduleid, vaid lingid exploit-db allika koodidele.

Linuxprivchecker

See skript kogub ja süstematiseerib jaotistena suures koguses teavet, mis võib olla kasulik õiguste tõstmise vektori määramiseks.

Teisel korral analüüsin ma üksikasjalikult õiguste tõstmist Linuxi OS-is läbi suid/sgid.

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster