Ja sam korijen. Razumijevanje eskalacije privilegija OS Linux

Prvo tromjesečje 2020. proveo sam pripremajući se za OSCP ispit. Traženje informacija na Googleu i mnoštvo pokušaja “na slijepo” oduzimalo mi je svo slobodno vrijeme. Pokazalo se da je posebno teško razumjeti mehanizme eskalacije privilegija. PWK tečaj posvećuje veliku pažnju ovoj temi, ali metodoloških materijala uvijek nema dovoljno. Na internetu postoji mnogo priručnika s korisnim naredbama, ali nisam pristalica slijepog praćenja preporuka bez razumijevanja kuda će to dovesti.

Želio bih s vama podijeliti što sam uspio naučiti tijekom priprema i uspješnog polaganja ispita (uključujući periodične napade na Hack The Box). Osjećao sam duboku zahvalnost za svaku informaciju koja mi je pomogla da svjesnije koračam putem Try Harder, sada je moje vrijeme da uzvratim zajednici.

Želim vam dati vodič za eskalaciju privilegija u OS Linux, koji uključuje analizu najčešćih vektora i povezanih značajki koje će vam svakako trebati. Često su sami mehanizmi eskalacije privilegija prilično jednostavni, poteškoće nastaju pri strukturiranju i analizi informacija. Stoga sam odlučio započeti s "razgledavanjem", a zatim razmotriti svaki vektor u zasebnom članku. Nadam se da ću vam uštedjeti vrijeme za proučavanje teme.

Ja sam korijen. Razumijevanje eskalacije privilegija OS Linux

Dakle, zašto je eskalacija privilegija uopće moguća 2020. ako su metode dobro poznate već jako dugo? Zapravo, ako korisnik ispravno rukuje sustavom, stvarno neće biti moguće povećati privilegije u njemu. Glavni globalni problem koji stvara takve mogućnosti je nesigurna konfiguracija. Prisutnost zastarjelih verzija softvera koje sadrže ranjivosti u sustavu također je poseban slučaj nesigurne konfiguracije.

Eskalacija privilegija kroz nesigurnu konfiguraciju

Prije svega, pozabavimo se nesigurnom konfiguracijom. Počnimo s IT stručnjaci često koriste priručnike i resurse kao što je stackoverflow, od kojih mnogi sadrže nesigurne naredbe i konfiguracije. Eklatantan primjer je vijest da je kod koji je najviše kopiran sa stackoverflowa sadržavao pogrešku. Iskusni administrator će vidjeti jamb, ali ovo je u idealnom svijetu. Čak i kompetentni profesionalci povećani obim posla sposobni pogriješiti. Zamislite da administrator priprema i odobrava dokumentaciju za sljedeći natječaj, istovremeno se upuštajući u novu tehnologiju koja će biti uvedena u sljedećem kvartalu, povremeno rješavajući zadatke korisničke podrške. A onda dobije zadatak da brzo podigne nekoliko virtualnih strojeva i na njima postavi usluge. Što mislite, koja je vjerojatnost da admin jednostavno ne primijeti jamb? Zatim se mijenjaju stručnjaci, ali štake ostaju, a tvrtke uvijek nastoje minimizirati troškove, pa tako i one za informatičare.

Pseudo shell i jailbreak

Ljuska sustava dobivena tijekom proizvodne faze često je ograničena, pogotovo ako ste je dobili hakiranjem korisnika web poslužitelja. Na primjer, ograničenja ljuske mogu vas spriječiti da koristite naredbu sudo s pogreškom:

sudo: no tty present and no askpass program specified

Nakon dobivanja ljuske, preporučujem stvaranje potpunog terminala, na primjer s Pythonom.

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

Pitate se: "Zašto mi treba tisuću naredbi, ako mogu koristiti jednu, na primjer, za prijenos datoteka?" Činjenica je da su sustavi drugačije konfigurirani, na sljedećem hostu možda neće biti instaliran Python, ali Perl je dostupan. Vještina je biti u stanju raditi poznate stvari u sustavu bez poznatih alata. Potpuni popis značajki može se pronaći ovdje.

Ljuska s niskim privilegijama može se dobiti pomoću timovi 1 и timovi 2 (iznenađujuće čak i GIMP).

Pregledajte povijest naredbi

Linux prikuplja povijest svih izvršenih naredbi u datoteci ~ / .bash_history. Ako je poslužitelj u aktivnoj upotrebi i njegova povijest nije izbrisana, postoji velika vjerojatnost da se vjerodajnice nalaze u ovoj datoteci. Brisanje povijesti je banalno nezgodno. Ako je administrator prisiljen birati naredbe od deset razina putem, naravno, bit će mu zgodnije pozvati ovu naredbu iz povijesti nego je unositi ponovno. Osim toga, mnogi ne znaju za ovaj "hack". Ako u sustavu postoje alternativne ljuske poput Zsh ili Fish, one imaju vlastitu povijest. Za prikaz povijesti naredbi u bilo kojoj ljusci, samo upišite povijest naredbi.

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

Postoji zajednički hosting, u kojem se poslužitelj koristi za hostiranje nekoliko stranica. Tipično, s ovom konfiguracijom, svaki resurs ima vlastitog korisnika s zasebnim matičnim direktorijem i virtualnim hostom. Dakle, ako je neispravno konfigurirana, možete pronaći datoteku .bash_history u korijenskom direktoriju web izvora.

Pronalaženje lozinki u datotečnom sustavu i napadi na susjedne sustave

Vaš trenutni korisnik može čitati konfiguracijske datoteke za razne usluge. U njima možete pronaći vjerodajnice u čistom tekstu - lozinke za pristup bazi podataka ili povezanim uslugama. Ista lozinka može se koristiti i za pristup bazi podataka i za autorizaciju root korisnika (credential staffing).
Dešava se da pronađene vjerodajnice pripadaju servisima na drugim hostovima. Razvoj napada na infrastrukturu putem kompromitiranog hosta nije ništa gori od iskorištavanja drugih hostova. Susjedni sustavi također se mogu pronaći traženjem IP adresa u datotečnom sustavu.

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

Ako kompromitirani host ima web aplikaciju dostupnu s Interneta, bolje je isključiti njezine zapisnike iz pretraživanja IP adresa. Malo je vjerojatno da će nam adrese korisnika resursa s Interneta biti korisne, ali adrese interne mreže (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) i gdje idu, sudeći po dnevnici, mogu biti od interesa.

sudo

Naredba sudo omogućuje korisniku da izvrši naredbu u kontekstu roota s vlastitom lozinkom ili bez njezine upotrebe. Mnoge operacije u Linuxu zahtijevaju root povlastice, ali pokretanje kao root smatra se vrlo lošom praksom. Umjesto toga, bolje je primijeniti selektivnu dozvolu za izvršavanje naredbi u korijenskom kontekstu. Međutim, mnogi Linux alati, uključujući one standardne kao što je vi, mogu se koristiti za eskalaciju privilegija na legitimne načine. Da biste pronašli pravi put, preporučujem da pogledate здесь.

Prva stvar koju trebate učiniti nakon što dobijete pristup sustavu je pokrenuti naredbu sudo -l. Prikazat će dopuštenje za korištenje naredbe sudo. Ako se dobije korisnik bez lozinke (kao što je apache ili www-data), vektor eskalacije privilegija sudo nije vjerojatan. Kada koristite sudo, sustav će tražiti lozinku. Korištenje naredbe passwd za postavljanje lozinke također neće raditi, tražit će trenutnu korisničku lozinku. Ali ako je sudo još uvijek dostupan, onda zapravo trebate potražiti:

  • bilo koji tumači, svatko može stvoriti ljusku (PHP, Python, Perl);
  • bilo koji uređivač teksta (vim, vi, nano);
  • bilo gledatelja (manje, više);
  • sve mogućnosti rada s datotečnim sustavom (cp, mv);
  • alati koji imaju izlaz u bashu, bilo interaktivno ili kao izvršna naredba (awk, find, nmap, tcpdump, man, vi, vim, ansible).

Suid/Sgid

Postoji mnogo priručnika na Internetu koji savjetuju izgradnju svih suid/sgid naredbi, ali rijedak članak daje detalje o tome što učiniti s tim programima. Mogu se pronaći opcije eskalacije privilegija koje ne uzimaju u obzir korištenje exploita ovdje. Također, brojne izvršne datoteke imaju specifične ranjivosti za verziju OS-a, na primjer.

U idealnom svijetu, trebali biste pokrenuti sve instalirane pakete barem kroz searchsploit. U praksi bi to trebalo učiniti s najpopularnijim programima poput sudoa. Također je uvijek opcija koristiti i podržati razvoj automatiziranih alata koji će istaknuti zanimljive, s gledišta eskalacije privilegija, izvršne datoteke s postavljenim suid/sgid bitovima. Dat ću popis takvih alata u odgovarajućem odjeljku članka.

Skripte za pisanje koje pokreću Cron ili Init u Root kontekstu

Cron poslovi mogu se izvoditi u kontekstu različitih korisnika, uključujući root. Ako u cron-u postoji zadatak s vezom na izvršnu datoteku, a dostupan vam je za pisanje, možete ga jednostavno zamijeniti zlonamjernim i izvršiti eskalaciju privilegija. Istodobno, prema zadanim postavkama, datoteke s cron zadacima dostupne su za čitanje bilo kojem korisniku.

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

Sličan je slučaj s init. Razlika je u tome što se zadaci u cron-u izvršavaju periodički, au init-u - pri pokretanju sustava. Za rad ćete morati ponovno pokrenuti sustav, dok se neke od usluga možda neće podići (ako nisu registrirane u automatskom učitavanju).

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

Također možete tražiti datoteke u koje može pisati bilo koji korisnik.

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

Metoda je prilično poznata, iskusni administratori sustava pažljivo koriste naredbu chmod. Međutim, na webu velika većina priručnika opisuje postavljanje maksimalnih prava. Pristup neiskusnih administratora sustava "samo neka radi" stvara mogućnosti za eskalaciju privilegija u načelu. Ako je moguće, najbolje je u povijesti naredbi potražiti nesigurne upotrebe chmod-a.

chmod +w /path 
chmod 777 /path

Dobivanje pristupa ljusci za druge korisnike

Gledamo popis korisnika u /etc/passwd. Obraćamo pozornost na one koji imaju školjku. Možete brutati te korisnike - moguće je da ćete preko rezultirajućeg korisnika na kraju moći povećati privilegije.

Za poboljšanje sigurnosti preporučujem da se uvijek pridržavate načela najmanje privilegije. Također ima smisla odvojiti vrijeme za provjeru nesigurnih konfiguracija koje bi mogle ostati nakon rješavanja problema - to je "tehnička dužnost" administratora sustava.

Samostalno napisani kod

Vrijedno je pažljivo pogledati izvršne datoteke u početnom direktoriju korisnika i web poslužitelja (/var/www/ osim ako nije drugačije navedeno). Ove datoteke mogu se pokazati kao potpuno nesigurno rješenje i sadržavati nevjerojatne štake. Naravno, ako imate neki framework u direktoriju vašeg web poslužitelja, nema smisla tražiti zero-day u njemu kao dio pentesta, ali preporučljivo je pronaći i proučiti prilagođene modifikacije, dodatke i komponente.

Da biste povećali sigurnost, bolje je izbjegavati korištenje vjerodajnica u skriptama koje ste sami napisali, kao i potencijalno opasne funkcije, kao što je čitanje /etc/shadow ili manipuliranje id_rsa, ako je moguće.

Povećanje privilegija kroz iskorištavanje ranjivosti

Prije pokušaja podizanja privilegija kroz iskorištavanje, važno je razumjeti prijenos datoteka na ciljno računalo. Uz uobičajene alate poput ssh, ftp, http (wget, curl), postoji cjelina "zoološki vrt" mogućnosti.

Kako biste poboljšali sigurnost svog sustava, redovito ga ažurirajte na najnovije verzije stabilan verzije, a također pokušajte koristiti distribucije dizajnirane za Enterprise. Inače, rijetko, ali postoje situacije kada apt upgrade čini sustav neupotrebljivim.

Iskorištavanje usluga koje se izvode u kontekstu root korisnika

Neki Linux servisi rade kao povlašteni korisnik root. Mogu se pronaći pomoću ps aux | grep root. U tom slučaju usluga možda neće biti objavljena na webu i biti dostupna lokalno. Ako ima javne eksploatacije, oni se mogu sigurno koristiti: rušenje usluge u slučaju kvara mnogo je manje kritično od rušenja OS-a.

ps -aux | grep root # Linux

Najuspješniji slučaj može se smatrati radom hakirane usluge u kontekstu root korisnika. Upravljanje SMB uslugom daje SUSTAVU privilegirani pristup na Windows sustavima (npr. putem ms17-010). Međutim, to nije uobičajeno na Linux sustavima, tako da možete potrošiti puno vremena na eskalaciju privilegija.

Iskorištavanje ranjivosti jezgre Linuxa

Ovo je posljednji put kojim treba krenuti. Neuspješna operacija može dovesti do pada sustava, au slučaju ponovnog pokretanja, neke usluge (uključujući one putem kojih je bilo moguće dobiti izvornu ljusku) možda neće ustati. Događa se da je administrator jednostavno zaboravio koristiti naredbu systemctl enable. Osim toga, izazvat će mnogo nezadovoljstva vašim radom ako eksploatacija nije dogovorena.
Ako se odlučite koristiti izvore iz exploitdb-a, svakako pročitajte komentare na početku skripte. Između ostalog, obično piše kako pravilno kompajlirati ovaj exploit. Ako ste bili previše lijeni ili vam je trebalo "jučer" zbog rokova, možete potražiti repozitorije s već kompajliranim exploitima, na primjer. Međutim, treba shvatiti da ćete u ovom slučaju dobiti prase u vreći. S druge strane, da je programer u bajt razumio kako računalo radi i softver koji koristi, ne bi napisao niti jedan redak koda u cijelom svom životu.

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

metasploit

Kako biste uhvatili i obradili vezu, uvijek je bolje koristiti modul exploit/multi/handler. Glavna stvar je postaviti ispravan korisni teret, na primjer, generic/shell/reverce_tcp ili generic/shell/bind_tcp. Ljuska dobivena u Metasploitu može se nadograditi na Meterpreter pomoću modula post/multi/manage/shell_to_meterpreter. S Meterpreterom možete automatizirati proces nakon eksploatacije. Na primjer, post/multi/recon/local_exploit_suggester modul provjerava platformu, arhitekturu i entitete koji se mogu iskoristiti i predlaže Metasploit module za eskalaciju privilegija na ciljnom sustavu. Zahvaljujući Meterpreteru, eskalacija privilegija ponekad se svodi na pokretanje pravog modula, ali hakiranje bez razumijevanja što se događa ispod haube nije istina (još uvijek morate napisati izvješće).

alat

Alati za automatiziranje lokalnog prikupljanja informacija uštedjet će vam mnogo truda i vremena, ali sami po sebi ne mogu u potpunosti identificirati put eskalacije privilegija, posebno u slučaju iskorištavanja ranjivosti kernela. Alati za automatizaciju izvršit će sve potrebne naredbe kako biste prikupili podatke o sustavu, no također je važno moći analizirati primljenih podataka. Nadam se da će vam moj članak biti koristan u ovome. Naravno, postoji mnogo više alata nego što ću ih navesti u nastavku, ali svi rade otprilike isto - to je više stvar ukusa.

Linpeas

Prilično svjež alat, prvi commit datira iz siječnja 2019. Trenutno moj omiljeni instrument. Zaključak je da naglašava najzanimljivije vektore eskalacije privilegija. Slažem se, prikladnije je dobiti stručnu procjenu na ovoj razini nego analizirati monolitne neobrađene podatke.

LinEnum

Moj drugi omiljeni alat, on također prikuplja i organizira podatke primljene kao rezultat lokalnog popisivanja.

linux-exploit-suggester(1,2)

Ovaj exploit će analizirati sustav za odgovarajuće uvjete za exploite. Zapravo, obavljat će posao identičan Metasploit local_exploit_suggester modulu, ali će nuditi poveznice na exploit-db izvorne kodove umjesto Metasploit modula.

Linuxprivchecker

Ova skripta će prikupiti i organizirati po odjeljcima veliku količinu informacija koje mogu biti korisne za formiranje vektora eskalacije privilegija.

Drugi put ću elaborirati Linux eskalacija privilegija putem suid/sgid.

Izvor: www.habr.com

Dodajte komentar