euid, ruid, suid
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Deepen your expertise in Mobile Security with 8kSec Academy. Master iOS and Android security through our self-paced courses and get certified:
ruid
: stvarni ID korisnika označava korisnika koji je pokrenuo proces.
euid
: Poznat kao efektivni ID korisnika, predstavlja identitet korisnika koji sistem koristi za utvrđivanje privilegija procesa. Generalno, euid
odražava ruid
, osim u slučajevima kao što je izvršavanje SetUID binarnog fajla, gde euid
preuzima identitet vlasnika fajla, čime se dodeljuju specifične operativne dozvole.
suid
: Ovaj sačuvani ID korisnika je ključan kada proces sa visokim privilegijama (obično pokrenut kao root) treba privremeno da se odrekne svojih privilegija da bi izvršio određene zadatke, samo da bi kasnije povratio svoj prvobitni povišeni status.
Proces koji ne radi pod root-om može samo da modifikuje svoj euid
da odgovara trenutnom ruid
, euid
ili suid
.
setuid
: Suprotno prvobitnim pretpostavkama, setuid
prvenstveno modifikuje euid
umesto ruid
. Konkretno, za privilegovane procese, usklađuje ruid
, euid
i suid
sa određenim korisnikom, često root, efektivno učvršćujući ove ID-ove zbog nadjačavajućeg suid
. Detaljne informacije mogu se naći na setuid man stranici.
setreuid
i setresuid
: Ove funkcije omogućavaju suptilno podešavanje ruid
, euid
i suid
. Međutim, njihove mogućnosti zavise od nivoa privilegija procesa. Za procese koji nisu root, modifikacije su ograničene na trenutne vrednosti ruid
, euid
i suid
. Nasuprot tome, root procesi ili oni sa CAP_SETUID
privilegijom mogu dodeliti proizvoljne vrednosti ovim ID-ovima. Više informacija može se dobiti sa setresuid man stranice i setreuid man stranice.
Ove funkcionalnosti nisu dizajnirane kao mehanizam bezbednosti, već da olakšaju predviđeni operativni tok, kao kada program preuzima identitet drugog korisnika menjajući svoj efektivni ID korisnika.
Važno je napomenuti da, iako setuid
može biti uobičajen izbor za podizanje privilegija na root (pošto usklađuje sve ID-ove sa root), razlikovanje između ovih funkcija je ključno za razumevanje i manipulaciju ponašanjem ID-ova korisnika u različitim scenarijima.
execve
System CallFunctionality: execve
pokreće program, određen prvim argumentom. Prihvaća dva niz argumenta, argv
za argumente i envp
za okruženje.
Behavior: Zadržava memorijski prostor pozivaoca, ali osvežava stek, heap i podatkovne segmente. Kod programa se zamenjuje novim programom.
User ID Preservation:
ruid
, euid
i dodatni grupni ID-ovi ostaju nepromenjeni.
euid
može imati suptilne promene ako novi program ima postavljen SetUID bit.
suid
se ažurira iz euid
nakon izvršenja.
Documentation: Detaljne informacije mogu se naći na execve
man stranici.
system
FunctionFunctionality: Za razliku od execve
, system
kreira podproces koristeći fork
i izvršava komandu unutar tog podprocesa koristeći execl
.
Command Execution: Izvršava komandu putem sh
sa execl("/bin/sh", "sh", "-c", command, (char *) NULL);
.
Behavior: Pošto je execl
oblik execve
, funkcioniše slično, ali u kontekstu novog podprocesa.
Documentation: Dalje uvide možete dobiti sa system
man stranice.
bash
and sh
with SUIDbash
:
Ima -p
opciju koja utiče na to kako se tretiraju euid
i ruid
.
Bez -p
, bash
postavlja euid
na ruid
ako se prvobitno razlikuju.
Sa -p
, prvobitni euid
se čuva.
Više detalja može se naći na bash
man stranici.
sh
:
Ne poseduje mehanizam sličan -p
u bash
.
Ponašanje u vezi sa ID-ovima korisnika nije eksplicitno pomenuto, osim pod -i
opcijom, naglašavajući očuvanje jednakosti euid
i ruid
.
Dodatne informacije su dostupne na sh
man stranici.
Ovi mehanizmi, različiti u svojoj operaciji, nude raznovrsne opcije za izvršavanje i prelazak između programa, sa specifičnim nijansama u načinu na koji se upravlja i čuva ID korisnika.
Examples taken from https://0xdf.gitlab.io/2022/05/31/setuid-rabbithole.html#testing-on-jail, check it for further information
setuid
with system
Objective: Razumevanje efekta setuid
u kombinaciji sa system
i bash
kao sh
.
C Code:
Kompilacija i Dozvole:
Analiza:
ruid
i euid
počinju kao 99 (nobody) i 1000 (frank) respektivno.
setuid
usklađuje oba na 1000.
system
izvršava /bin/bash -c id
zbog symlink-a sa sh na bash.
bash
, bez -p
, prilagođava euid
da odgovara ruid
, što rezultira time da su oba 99 (nobody).
C Kod:
Kompilacija i Dozvole:
Izvršenje i Rezultat:
Анализа:
setreuid
поставља и ruid и euid на 1000.
system
позива bash, који одржава корисничке ID-ове због њихове једнакости, ефективно функционишући као frank.
Циљ: Истраживање интеракције између setuid и execve.
Izvršenje i Rezultat:
Анализа:
ruid
остаје 99, али је euid постављен на 1000, у складу са ефектом setuid-а.
C Код Пример 2 (Позивање Bash):
Izvršenje i Rezultat:
Анализа:
Иако је euid
постављен на 1000 помоћу setuid
, bash
ресетује euid на ruid
(99) због одсуства -p
.
C Код Пример 3 (Користећи bash -p):
Izvršenje i Rezultat:
Produbite svoje znanje o Mobilnoj Bezbednosti sa 8kSec Akademijom. Savladajte iOS i Android bezbednost kroz naše kurseve koji se mogu pratiti sopstvenim tempom i dobijite sertifikat:
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)