Mina olen root. Uurime OS Linux privileegide tõstmist.

2020. aasta esimeses kvartalis veetsin aega OSCP eksamiks valmistumisel. Teabe otsimine Google'ist ja lugematud "pimedad" katsed võtsid kogu mu vaba aja. Eriti keeruline oli arusaamine privileegide tõstmisest. PWK kursus pöörab sellele teemale suurt tähelepanu, kuid metoodilisi materjale on alati puudus. Internetis on palju käsiraamatuid kasulike käskudega, kuid ma ei ole selle poolt, et järgida soovitusi ilma arusaamiseta, kuhu see viib.

Soovin jagada teiega, mida olen õppinud eksamiks valmistumise ja edukalt läbimise ajast (sealhulgas perioodilised rünnakud Hack The Boxis). Kogesin sügavat tänutunnet iga teabe murgikese eest, mis aitas mul mööda minna, püüdes raskemalt, ning nüüd on mul aeg anduda kommuunile.

Soovin teile esitada juhendi privileegide tõstmiseks Linuxi operatsioonisüsteemis, mis käsitleb kõige sagedasemaid ründevektoreid ja seotud nippe, mis teile kindlasti kasulikud on. Tihti on privileegide tõstmise mehhanismid suhteliselt lihtsad, raskused tekivad teabe struktureerimisel ja analüüsimisel. Seetõttu otsustasin alustada "ülevaatusest" ja seejärel käsitleda iga vektorit eraldi artiklis. Loodan, et säästan teile aega teema uurimisel.

Mina olen root. Uurime OS Linux privileegide tõstmist.

Nii et miks on privileegide tõstmine 2020. aastal üldse võimalik, kui meetodid on juba ammu tuntud? Tegelikult, kui kasutaja süsteemiga õigesti suhtleb, ei ole privileegide tõstmine tõeliselt võimalik. Peamine globaalne probleem, mis selliseid võimalusi tekitab, on ebaturvaline konfiguratsioon. Süsteemis olevate vananenud tarkvaraversioonide olemasolu, mis sisaldavad haavatavusi, on samuti spetsiifiline näide ebaturvalisest konfiguratsioonist.

Privileegide tõstmine läbi ebaturvalise konfiguratsiooni

Esiteks, käsitleme ebaturvalist konfiguratsiooni. Alustame sellest, et IT spetsialistid kasutavad sageli juhendeid ja ressursse nagu stackoverflow,, millest paljud sisaldavad ohtlikke käske ja konfiguratsioone. Hea näide on uudis selle kohta, et kõige kopeeritav kood stackoverflow's sisaldas viga. Kogenud admin näeb eksimust, kuid see on ideaalmaailmas. Isegi kvalifitseeritud spetsialistid, kui nende töökoormus on suurenenud, suudavad teha vigu. Kujutage ette, et admin töötab välja ja kooskõlastab dokumentatsiooni järgmiseks hankemenetluseks, süveneb samal ajal uude tehnoloogiasse, mida plaanitakse järgmises kvartalis rakendada, ja samal ajal lahendab aeg-ajalt kasutajatoe küsimusi. Ja siis antakse talle kiiresti ülesanne tõsta üles paar virtuaalset masinat ja paigaldada neile teenused. Kuidas arvate, kui tõenäoline on, et admin lihtsalt ei märka eksimust? Siis spetsialistid vahetuvad, kuid vead jäävad, samas kui ettevõtted püüavad alati kulusid, sealhulgas IT-spetsialistide, minimeerida. on võimalikud vead. Kujutage ette, et administraator tegeleb dokumendi ettevalmistamise ja kooskõlastamisega järgmise hankemenetluse jaoks, süvenedes samal ajal uude tehnoloogiasse, mille rakendamine on plaanis järgmiseks kvartaliks, olles pidevalt hõivatud ka kasutajatugi probleemide lahendamisega. Ja siis antakse talle kiiresti ülesanne üles seada paar virtuaalserverit ja nendel teenused tööle panna. Kuidas te arvate, kui suur on tõenäosus, et administraator lihtsalt ei pane mitte midagi tähele? Seejärel vahetuvad spetsialistid, kuid „kansetid” jäävad, samas kui ettevõtted püüavad alati kulusid, sealhulgas IT-ekspertide osas, minimeerida.

Pseudo-shelly ja jailbreak

Kasutusfaasis saadud süsteemne kest on sageli piiratud, eriti kui olete selle hankinud veebiserveri kasutaja häkkimise kaudu. Näiteks võivad kesta piirangud takistada sudo käivitamist, andes vea:

sudo: tty ei ole olemas ja küsija programmi ei ole määratud

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

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

Te küsite: „Miks mul on vaja tuhandeid käske, kui ma võin kasutada ühte, näiteks failide edastamiseks?” Asjaolu on see, et süsteemid võivad olla erinevalt konfigureeritud, järgmises hostis ei pruugi Python olla installitud, kuid võib olla Perl. Meistriks olemine tähendab, et oskate süsteemis tuttavaid asju teha ilma tuttavate tööriistadeta. Täieliku võimaluste loetelu leiate siin.

Madala privileegiga kest saadakse, kasutades käsk 1 ja käsk 2 (üllatav, et isegi GIMP).

Käskude ajaloo vaatamine

Linux kogub kõigi käivitatud käskude ajalugu faili ~/.bash_history. Kui serverit aktiivselt kasutatakse ja selle ajalugu ei kustutata, on suur tõenäosus leida selles failis kasutajatunnused. Ajaloo kustutamine on lihtsalt ebamugav. Kui administraator peab valima kümne korruse käsklusi, on tal kindlasti mugavam kutsuda seda käsku ajaloo kaudu, kui seda uuesti sisestada. Lisaks ei tea paljud sellest "hack'ist". Kui süsteemis on alternatiivsete shellide, näiteks Zsh või Fish, nad juhivad oma ajalugu. Käskluste ajaloo väljavõtmiseks 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 saidi majutamiseks. Tavaliselt sellise konfiguratsiooni puhul luuakse iga ressursi jaoks oma kasutaja eraldi kodudirektooriumiga ja virtuaalne host. Vale seadistuse korral võib veebiresursi juurkataloogis avastada faili .bash_history.

Paroolide otsimine failisüsteemist ja rünnakud külgnevatele süsteemidele

Erinevate teenuste konfiguraatsioonifailid võivad olla teie praegusele kasutajale lugemiseks saadaval. Nendes võite kohata lahtisi mandaate — andmebaasi või seotud teenuste pääsukoodide näol. Ühise parooli võib kasutada nii andmebaasi juurdepääsuks kui ka root-kasutaja autentimiseks (credential staffing).
Aeg-ajalt võivad leitud mandaadid kuuluda teenustele teistel hostidel. Rünnaku edasiviimine infrastruktuuri kaudu kompromiteeritud hosti kaudu ei ole halvem kui teiste hostide ärakasutamine. Seotud süsteeme saab samuti leida IP-aadresside otsimisega failisüsteemis.

grep -lRi "password" /home /var/www /var/log 2>/dev/null | sort | uniq #Otsi sõna password (ilma kaalutluse ja tõlkes arvestamata) nendes kataloogides
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 #IP-d logides

Kui kompromiteeritud hostil on veebirakendus, mis on Internetis saadaval, on parem välistada selle logid IP-aadresside otsimisest. Interneti-ressursi kasutajate aadressid ei saa meile tõenäoliselt kasu tuua, kuid sisevõrgu (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) aadressid ning see, kuhu nad logide kohaselt pääsevad, võivad olla huvitavad.

Sudo

Sudo käsk annab kasutajale õiguse käivitada käsk root kontekstis, kas oma parooli kasutades või isegi ilma selleta. Paljusid Linuxi operatsioone nõutakse root õigusi, kuid töö ainult rootina peetakse väga kehaks praktikaks. Selle asemel on parem rakendada valikuline luba käskude täitmiseks root kontekstis. Siiski saab paljusid Linuxi tööriistu, sealhulgas standardseid nagu vi, kasutada õiguste tõstmiseks täiesti legitiimselt. Sobiva viisi leidmiseks soovitan vaadata siit.

Esimene asi, mida süsteemis ligipääsu saades teha, on käivitada käsk sudo -l. See näitab, millised õigused on sudo käsu kasutamiseks. Kui on saadud kasutaja, kellel puudub parool (näiteks apache või www-data), on sudo kaudu õiguste tõstmine ebatõenäoline. Sudo kasutamisel küsib süsteem parooli. Käsk passwd parooli seadmiseks samuti ei toimi, kuna see küsib praegust kasutaja parooli. Kuid kui sudo on ikkagi saadaval, tuleb põhimõtteliselt otsida:

  • kõik tõlgendid, igaühel on võimalik spawnida shell (PHP, Python, Perl);
  • kõik tekstiredaktorid (vim, vi, nano);
  • kõik vaatajad (less, more);
  • iga süsteemifailide töövõimalused (cp, mv);
  • tööriistad, millel on pääs bash'ile, interaktiivne või käitatava käsuna (awk, find, nmap, tcpdump, man, vi, vim, ansible).

Suid/Sgid

Interneti-s on palju juhendeid, mis soovitavad koguda kõik suid/sgid käsud, kuid harva annab artikkel konkreetse suunise, mida nende programmidega teha. Privilege escalation'i variandid, mis ei hõlma eksploitide kasutamist, on leitavad siin. Samuti on mitmed käivitatavad failid, millel on spetsiifilised haavatavused operatsioonisüsteemi versiooni järgi, näiteks.

Ideaalmaailmas tuleks kõik installitud paketid vähemalt läbi searchsploit lasta. Praktikas on seda mõistlik teha kõige populaarsemate programmide, nagu sudo, puhul. Samuti on alati võimalus kasutada ja arendada automatiseeritud tööriistu, mis toovad esile huvitavad, privileegide tõstmise vaatenurgast, käivitatavad failid, millel on määratud suid/sgid bitid. Selliste tööriistade loetelu toodan vastavas artiklite osas.

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

Croniülesandeid saab täita erinevate kasutajate kontekstis, sealhulgas root. Kui cronis on seadistatud ülesanne, mis viitab käivitatavale failile ja see on teie jaoks kirjutamiseks saadaval, on lihtne see pahatahtlikuks muuta ja saavutada õiguste suurenemine. Samas on cronülesannete failid vaikimisi kõigile kasutajatele lugemiseks saadaval.

ls -la /etc/cron.d  # näita cron-i ülesandeid 

Sarnased asjad kehtivad ka init-i kohta. Erinevus on selles, et cron-i ülesanded täidetakse regulaarselt, samas kui init-i ülesanded käivitatakse süsteemi käivitamisel. Kasutamiseks on vajalik süsteemi taaskäivitamine ning osa teenuseid ei pruugi tõusta (kui need ei ole määratletud automaatses tõusus).

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

Samuti võib otsida faile, mis on kõigile kasutajatele kirjutamiseks saadaval.

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

Meetod on üsna tuntud, kogenud süsteemiadministraatorid kasutavad korralikult chmod käsku. Siiski, enamikul juhtudel, mis on Internetis saadaval, kirjeldatakse maksimaalse õiguse määramist. Algajate süsteemiadministraatorite lähenemine, kus peamine on vaid see, et see töötab, loob võimalusi õiguste tõstmiseks. Kui võimalik, on parem otsida ajaloost ebaturvalist chmod'i kasutamist.

chmod +w /path
chmod 777 /path

Teiste kasutajate shelli juurdepääsu saamine

Vaadake kasutajate loetelu /etc/passwd failis. Pöörake tähelepanu neile, kellel on shell. Saate neid kasutajaid bruteforce'ida — ei ole välistatud, et lõpuks saab läbi saadud kasutaja õigusi tõsta.

Turvalisuse suurendamiseks soovitan alati järgida minimaalsete õiguste põhimõtet. Samuti on mõistlik kulutada aega ebaturvaliste seadistuste kontrollimisele, mis võivad jääda pärast tõrkeotsingut — see on süsteemiadministraatori "tehniline võlg".

Isiklik kood

Kasuliku kolme pöördel on tähelepanu pööramine kasutaja ja veebiserveri kodukataloogis olevatele käivitatavatele failidele (/var/www/, kui muud pole määratud). Need failid võivad olla täiesti ebaturvalised lahendused ja sisaldada uskumatuid lahendusi. Loomulikult, kui teil on veebiserveri kataloogis mõni raamistik, ei ole mõttekas otsida sellest zero-day haavatavusi, kuid soovitatav on leida ja uurida kohandatud täiustusi, pluginaid ja komponente.

Küpsiste turvalisuse tõhustamiseks on parem vältida isetehtud skriptides kasutatavate mandaadikasutuste ja potentsiaalselt ohtlike funktsioonide, näiteks /etc/shadow lugemise või id_rsa manipuleerimise kasutamist.

Privilegiumide tõstmine haavatavuste ekspluateerimise kaudu

Enne kui proovite privileege tõsta haavatavuste ekspluateerimise kaudu, on oluline mõista failide edastamist sihtserverisse. Peale tavapäraste vahendite nagu ssh, ftp, http (wget, curl) on olemas terve loomaaed võimalusi.

Süsteemi turvalisuse tõhustamiseks värskendage seda regulaarselt ajakohastele stabiilsetele versioone, ning püüdke kasutada ettevõtte tasemele mõeldud distributsioone. Vastasel juhul võib mõnikord, kuigi harva, juhtuda, et 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. Need on leitavad käsuga ps aux | grep root. Sel juhul ei pruugi teenus olla avalikult kuulutatud ja olla vaid lokaalselt kättesaadav. Kui teenusel on avalikud eksploidid, võib neid julgelt rakendada: teenuse ebaõnnestumine ei ole nii kriitiline kui operatsioonisüsteemi langemine.

ps -aux | grep root # Linux

Parimaks juhtumiks võib pidada häkitud teenuse töötamist kasutaja root kontekstis. SMB teenuse kasutamine annab privileegide süsteemi juurdepääsu Windowsi süsteemides (näiteks läbi ms17-010). Kuid Linuxi süsteemides esineb seda harva, seega võib kuluda palju aega privileegide tõstmiseks.

Linuxi tuuma haavatavuste ärakasutamine

See on tee, mida tuleks järgida viimasena. Ebaõnnestunud käitamine võib viia süsteemi kokkuvarisemiseni, ja taaskäivitamise korral ei pruugi mõned teenused (sealhulgas need, mille kaudu algse shelli saadi) käivituda. Juhtub, et administreerija unustab lihtsalt käivitada käsu systemctl enable. Lisaks toob see kaasa palju rahulolematust teie tööde suhtes, kui eksponeerimine ei olnud kooskõlastatud.
Kui otsustasite kasutada exploitdb algkoode, lugege kindlasti skripti alguses olevad kommentaarid. Muuhulgas on seal tavaliselt kirjas, kuidas õigesti seda ekspoitit kompileerida. Kui endal on laisk või tähtaeg oli 'eelmine päev', võib otsida repositooriume juba kompileeritud ekspoitidega. näiteks. Siiski tuleb aru saada, et sellisel juhul saate kassi kotis. Teisalt, kui programmeerija haarab välja, kuidas arvuti ja kasutatav tarkvara byte tasandil töötab, ei oleks ta kogu elu jooksul kirjutanud ühtegi rida koodi.

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

Metasploit

Kuna ühendust püüda ja töödelda, 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. Metasploit'is saadud kest võib kasutada Meterpreter'iks tõstmiseks moodulit post/multi/manage/shell_to_meterpreter. Meterpreter'iga saad automatiseerida pärast ära kasutamise protsessi. Näiteks moodul post/multi/recon/local_exploit_suggester kontrollib platvormi, arhitektuuri ja vajalikke väljavõtmiseks elemente ning pakub Metasploit'i mooduleid sihtsüsteemi õiguste tõstmiseks. Meterpreter'i abil võib õiguste tõstmine mõnikord piirduda õige mooduli käivitamisega, kuid häkkimine ilma põhjaliku arusaamiseta sellest, mis toimub, ei ole 'tõeline' (sa pead ikkagi aru kirjutama).

Tööriistad

Kohalikku teabe kogumise automatiseerimise tööriistad säästavad teile palju aega ja vaeva, kuid üksi ei suuda need täielikult tuvastada õiguste tõstmise teed, eriti juhul, kui kasutusele on võetud tuumavigu. Automatiseerimistööriistad täidavad teie eest kõik vajalikud käsud süsteemi teabe kogumiseks, kuid oluline on ka osata analüüsida saadud andmed. Loodan, et minu artikkel on selles teile kasulik. Loomulikult on tööriistu palju rohkem, kui ma allpool nimetan, kuid nad kõik teevad tegelikult enam-vähem ühte ja sama — siin on pigem maitse asi.

Linpeas

Suhteliselt uus tööriist, esimese commit'i kuupäev on jaanuar 2019. Hetkel minu lemmik tööriist. Selle eesmärk on esile tuua kõige huvitavamad privileegide tõstmise vektorid. Olge nõus, et on mugavam saada ekspertiisi sellisel tasemel kui analüüsida monoliitset tooredata.

LinEnum

Teine minu lemmik tööriist, see kogub ja süsteemib andmeid, mis on saadud kohaliku loetlemise käigus.

Linux-exploit-suggester (1,2)

See exploit analüüsib süsteemi sobivate tingimuste leidmiseks exploit'ide jaoks. Essentsiaalselt teeb see sama töö nagu Metasploit local_exploit_suggester moodul, kuid pakub mitte Metasploit mooduleid, vaid linke exploit-db lähtekoodide juurde.

Linuxprivchecker

See skript kogub ja süsteemib jaotatud teemasid suures koguses teavet, mis võib olla kasulik privileegide tõstmise vektori loomisel.

Teisel korral käsitlen seda põhjalikumalt Linuxi OS-i privileegide tõstmine läbi suid/sgid.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster