Dieses Dokuwiki verwendet ein von Anymorphic Webdesign erstelltes Thema.
Prijevodi ove stranice:

Eskalacija privilegija na Linux operacijskom sustavu

Sažetak

U ovom radu će biti obrađene teme eskalacije privilegija i kako od korisnika s malo ovlasti postati korisnik s puno više ovlasti. Tijekom cijelog rada će biti pretpostavljeno da je nulti korak - dobivanje pristupa serveru, već napravljen i nakon njega može započeti postupak eskalacije privilegija. Također, samo će se objasniti neki od najčešćih postupaka eskalacije privilegija na Linux operacijskim sustavima.

Keywords: linux; privilege escalation; linpeas; suid; cronjob

Uvod

Nakon uspješnog pronalska ranjivosti u nekoj od aplikacija koje su pokrenute na serveru i nakon dobivene RCE (remote command execution) ranjivosti koja nam omogućuje pokretanje bilo koje naredbe na serveru, često nemamo ovlasti koje ima root korisnik na Linux operacijskom sustavu jer je većina servisa pokrenuta s ovlastima nekog korisnika koji ima puno manje ovlasti od root korisnika. RCE ranjivost je samo jedan od primjera kako možemo dobiti pristup serveru i taj proces dobivanja pristupa serveru zahtjeva poseban rad. Tema ovog rada je što učiniti nakon inicijalnog pristupa serveru, kako od korisnika s relativno malo ovlasti postati korisnik s puno više ovlasti. Ali, najprije treba dati definiciju eskalacije privilegija.

Što je eskalacija privilegija

Eskalacija privilegija (privilege escalation) je proces u kojem se iskorištava pogreška (bug), mana u dizajnu (design flaw) ili pogreška u konfiguraciji operacijskog sustava ili neke aplikacije kako bi se dobila viša razina pristupa nekom resursu kojem inače trenutni korisnik ima ograničen pristup. Na skoro svakoj Linux distribuciji postoji /root direktorij i sadržaju tog direktorija samo root (korisnik s najviše prava na računalu, nešto poput super-admin korisnika) korisnik ima pristup. Primjer eskalacije privilegija bi bilo kada bi običan korisnik uspio pristupiti sadržaju tog /root tako što je iskoristio manu u nekom procesu (aplikaciji ili OS-u) koji je pokrenut s pravima root korisnika.

Postoje dvije vrste eskalacije privilegija:

  • vertikalna eskalacija privilegija - eskalacija u kojoj korisnik s manje privilegija uspijeva pristupiti korisniku s više privilegija unutar istog sustava (npr: korisnik uspijeva doći do administratorskog korisničkog računa).
  • horizontalna eskalacija privilegija - eskalacija u kojoj običan korisnik uspijeva pristupiti sadržaju koji je dostupan drugom običnom korisniku. (npr: prilikom korištenja internetskog bankarstva, korisnik A uspijeva pristupiti internetskom bankarstvu korisnika B)

Najčešći postupci eskalacije privilegija na Linux OS-u

Prvi korak prilikom postupka eskalacije privilegija je enumeracija. Enumeracija je postupak prikupljanja informacija o sustavu i može se provoditi ručno ili automatizirano. Današnji sustavi su toliko veliki i postoji toliko informacija u njima da je teško provoditi enumeraciju ručno pa se zato koriste automatizirane skripte za takve postupke. Najpoznatija skripta za enumeraciju Linux računala u postupku eskalacije privilegija je linPEAS. Sam ispis skripte je jako velik i zahtjeva posebnu knjigu kako bi se pokrili svi mogući načini iskorištavanja ranjivosti kako bi se odradila eskalacija privilegija, zato će u idućim poglavljima biti nabrojani samo neki načini.

SUID binarne datoteke

Na Linux operacijskom sustavu datoteke imaju posebne zastavice koje označavaju koje dozvole imaju pojedine datoteke. Također, u meta podacima postoje i oznake tko je vlasnik pojedine datoteke u sustavu. Najčešće je to korisnik koji je kreirao tu datoteku, ali se vlasnik može naknadno promijeniti. Jedna od tih zastavica koje se nalaze u meta podacima datoteke je i SUID zastavica. SUID ima značenje “set user ID up on execution” i ako datoteka ima ovu zastavicu postavljenu tada će ta datoteka (uglavnom se radi o binarnim datotekama) biti pokrenuta s pravima korisnika koji ju je kreirao, umjesto s pravima korisnika koji ju je pokrenuo.

Primjer datoteke s postavljenim SUID bitom prilikom korištenja naredbe ls, SUID zastavica ima oznaku s:

╭─user@racfor ~  
╰─$ ls /usr/bin/sudo -alh                  
-rwsr-xr-x 1 root root 138K 23 nov.  16:04 /usr/bin/sudo

Iskorištavanje ove ranjivosti počinje tako da se da se pronađu binarne datoteke koje imaju ovu zastavicu postavljenu i koje korisnik može pokrenuti, to se može učiniti naredbom:

find / -uid 0 -perm -4000 -type f 2>/dev/null

Jednom kada su izlistane sve binarne datoteke, potrebno je pronaći onu koja se može iskoristiti za eskalaciju privilegija, jer nije svaka datoteka koja ima SUID zastavicu postavljenu prikladna za eskalaciju privilegija. Opširan popis mogućih ranjivih binarnih datoteka se može pronaći na GTFOBins stranici zajedno s postupkom kako iskoristiti tu ranjivost. Jedan od primjera je kako se može pristupiti bilo kojoj datoteci ako base64 binarna datoteka ima postavljenu SUID zastavicu:

LFILE=file_to_read
base64 "$LFILE" | base64 --decode

Ovdje se prvo koristi naredba base64 kako bi se datoteka kojoj obični korisnik nema pristup kodirala u base64 kodiranju te se odmah ta datoteka dekodira i ispisuje se njen sadržaj.

Cron poslovi (jobs)

cron je program na Linux operacijskom sustavu koji služi za postavljanje periodičkih poslova. Pomoću njega je moguće zakazati određene poslove da se periodički izvršavaju u točno određeno vrijeme. Jedan od primjera njegovog korištenja bi bilo izvršavanje skripte za back-up podataka svaki dan u isto vrijeme (npr. u 12:00). Za ovu iskorištavanje moguće ranjivosti ovdje je ideja slična kao i kod SUID ranjivosti, prvi korak je pronaći sve cron poslove koji se izvršavaju pod root korisnikom, a kada se pronađu, potrebno je provjeriti svaku skriptu koja se izvršava i vidjeti može li možda neku od tih skripti korisnik uređivati. Ukoliko se pokaže da običan korisnik može urediti neku od skripti koja se izvršava kao cron job root korisnika, tada je samo pitanje trenutka kada će se naša modificirana skripta izvršiti i omogućiti nam eskalaciju privilegija. Sve cron poslove je moguće izlistati pomoću bilo koje od idućih naredbi:

crontab -l
ls -al /etc/cron* /etc/at*
cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/null | grep -v "^#"

Ako nije moguće uređivati skripte koje pokreće root korisnik, još uvijek je možda moguće iskoristiti ranjivost ukoliko skripta koja se pokreće koristi neke resurse kojima imamo pristup. Primjer toga bi bilo da skripta pokrece neku binarnu datoteku kojoj imamo potpuni pristup; tada možemo jednostavno zamijeniti tu binarnu datoteku sa proizvoljnom datotekom koja će nam omogućiti eskalaciju privilegija.

Ovo nisu jedini načini eskalacija privilegija, već samo najčešći i najjednostavniji oblici koji se mogu iskoristiti.

Sudo ranjivost (CVE-2021-3156)

Jedna od najvećih ranjivosti u 2021. godini (da se nije pojavio Log4shell, bila bi zasigurno najveća ranjivost) bila je ranjivost u sudo naredbi stara više od 10 godina, no otkrivena je tek početkom 2021. godine. Sve verzije sudo naredbe još od 2011. godine su bile ranjive na heap overflow napad i na jednostavan način je moguće iskoristiti tu ranjivost, sve što je potrebno je pokrenuti Python skriptu na sustavu koji napadamo i ukoliko postoji verzija sudo naredbe koja je ranjiva, dobit ćemo root shell na tom računalu i možemo izvršavati bilo koju naredbu kao root korisnik. Većina sustava je odmah instalirala hitne zakrpe, no postoje još uvijek neki sustavi koji nisu ažurirali instalirane aplikacije.

DirtyCow (CVE-2016-5195)

Dirty Cow (Dirty copy-on-write) ranjivost je možda i najpoznatija ranjivost kojom se može izvesti eskalacija privilegija. Ranjivost cilja na grešku u kodu Linux kernela koja u sustavu za upravljanje memorijom ima pogrešku u implementaciji copy-on-write mehanizma. Ranjivost je uvedena u Linux kernel još davne 2007. godine i postojala je sve do 2016. godine u svim verzijama Linux kernela, čak i u onima koje su se nalazile na Android telefonima. Za ovu ranjivost postoje već brojne gotove skripte koje za nas odrađuju “prljavi posao” i omogućuju nam ostvarivanje root prava i izvršavanje naredbi kao root korisnik. Antivirusni programi možda mogu detektirati eskalaciju ovlasti trenutnog korisnika, ali ne mogu nikako spriječiti napad i jedina obrana od ovog napada je ažuriranje kernela na novije verzije.

Zaključak

Svakodnevno se otkrivaju novi načini eskalacije privilegija na Linux računalima te iako su najpoznatije ranjivosti one kojima je uzrok bug u nekom od osnovnih Linux komponenti (Sudo ranjivost ili DirtyCoW), najčešći uzrok ranjivostima je pogreška prilikom konfiguracije nekog relativno sigurnog programa. Kako bi se držao sustav što sigurnijim, najvažnije je pratiti upute i pravila kako ispravno napraviti konfiguraciju aplikacija koje koristimo i redovito ažurirati sustav. Najlakši posao koji napadač može imati je kada pokušava izvršiti eskalaciju privilegija na sustavu koji nije redovito ažuriran i pun je neispravnih konfiguracija.

Literatura

racfor_wiki/razno/eskalacija_privilegija_na_linux_operacijskom_sustavu.txt · Zadnja izmjena: 2023/06/19 18:17 (vanjsko uređivanje)
Dieses Dokuwiki verwendet ein von Anymorphic Webdesign erstelltes Thema.
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0