euid, ruid, suid
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Zmienne identyfikacji użytkownika
ruid
: rzeczywisty identyfikator użytkownika oznacza użytkownika, który zainicjował proces.euid
: Znany jako efektywny identyfikator użytkownika, reprezentuje tożsamość użytkownika wykorzystywaną przez system do ustalenia uprawnień procesu. Zazwyczajeuid
odzwierciedlaruid
, z wyjątkiem przypadków takich jak wykonanie binarnego pliku SetUID, gdzieeuid
przyjmuje tożsamość właściciela pliku, co przyznaje określone uprawnienia operacyjne.suid
: Ten zapisany identyfikator użytkownika jest kluczowy, gdy proces o wysokich uprawnieniach (zwykle działający jako root) musi tymczasowo zrezygnować ze swoich uprawnień, aby wykonać określone zadania, a następnie odzyskać swoje pierwotne podwyższone status.
Ważna uwaga
Proces, który nie działa jako root, może zmienić swój euid
tylko na wartość odpowiadającą bieżącemu ruid
, euid
lub suid
.
Zrozumienie funkcji set*uid
setuid
: W przeciwieństwie do początkowych założeń,setuid
przede wszystkim modyfikujeeuid
, a nieruid
. W szczególności dla procesów z uprawnieniami, synchronizujeruid
,euid
isuid
z określonym użytkownikiem, często root, skutecznie utrwalając te identyfikatory z powodu dominującegosuid
. Szczegółowe informacje można znaleźć na stronie podręcznika setuid.setreuid
isetresuid
: Te funkcje pozwalają na subtelną regulacjęruid
,euid
isuid
. Jednak ich możliwości są uzależnione od poziomu uprawnień procesu. Dla procesów niebędących root, modyfikacje są ograniczone do bieżących wartościruid
,euid
isuid
. W przeciwieństwie do tego, procesy root lub te z uprawnieniemCAP_SETUID
mogą przypisywać dowolne wartości tym identyfikatorom. Więcej informacji można znaleźć na stronie podręcznika setresuid i stronie podręcznika setreuid.
Te funkcjonalności nie są zaprojektowane jako mechanizm zabezpieczający, ale mają na celu ułatwienie zamierzonego przepływu operacyjnego, na przykład gdy program przyjmuje tożsamość innego użytkownika, zmieniając swój efektywny identyfikator użytkownika.
Warto zauważyć, że chociaż setuid
może być powszechnie stosowany do podnoszenia uprawnień do roota (ponieważ synchronizuje wszystkie identyfikatory z root), rozróżnienie między tymi funkcjami jest kluczowe dla zrozumienia i manipulowania zachowaniami identyfikatorów użytkowników w różnych scenariuszach.
Mechanizmy wykonywania programów w systemie Linux
Wywołanie systemowe execve
execve
Funkcjonalność:
execve
inicjuje program, określony przez pierwszy argument. Przyjmuje dwa argumenty tablicowe,argv
dla argumentów ienvp
dla środowiska.Zachowanie: Zachowuje przestrzeń pamięci wywołującego, ale odświeża stos, stertę i segmenty danych. Kod programu jest zastępowany przez nowy program.
Zachowanie identyfikatora użytkownika:
ruid
,euid
i dodatkowe identyfikatory grupowe pozostają niezmienione.euid
może mieć subtelne zmiany, jeśli nowy program ma ustawiony bit SetUID.suid
jest aktualizowany zeuid
po wykonaniu.Dokumentacja: Szczegółowe informacje można znaleźć na stronie podręcznika
execve
.
Funkcja system
system
Funkcjonalność: W przeciwieństwie do
execve
,system
tworzy proces potomny za pomocąfork
i wykonuje polecenie w tym procesie potomnym za pomocąexecl
.Wykonanie polecenia: Wykonuje polecenie za pośrednictwem
sh
zexecl("/bin/sh", "sh", "-c", command, (char *) NULL);
.Zachowanie: Ponieważ
execl
jest formąexecve
, działa podobnie, ale w kontekście nowego procesu potomnego.Dokumentacja: Dalsze informacje można uzyskać z strony podręcznika
system
.
Zachowanie bash
i sh
z SUID
bash
i sh
z SUIDbash
:Ma opcję
-p
, która wpływa na to, jak traktowane sąeuid
iruid
.Bez
-p
,bash
ustawiaeuid
naruid
, jeśli początkowo się różnią.Z
-p
, początkowyeuid
jest zachowywany.Więcej szczegółów można znaleźć na stronie podręcznika
bash
.sh
:Nie ma mechanizmu podobnego do
-p
wbash
.Zachowanie dotyczące identyfikatorów użytkowników nie jest wyraźnie wspomniane, z wyjątkiem opcji
-i
, podkreślającej zachowanie równościeuid
iruid
.Dodatkowe informacje są dostępne na stronie podręcznika
sh
.
Te mechanizmy, różniące się w działaniu, oferują wszechstronny zakres opcji do wykonywania i przechodzenia między programami, z określonymi niuansami w zarządzaniu i zachowywaniu identyfikatorów użytkowników.
Testowanie zachowań identyfikatorów użytkowników w wykonaniach
Przykłady zaczerpnięte z https://0xdf.gitlab.io/2022/05/31/setuid-rabbithole.html#testing-on-jail, sprawdź to dla dalszych informacji
Przypadek 1: Użycie setuid
z system
setuid
z system
Cel: Zrozumienie wpływu setuid
w połączeniu z system
i bash
jako sh
.
Kod C:
Kompilacja i uprawnienia:
Analiza:
ruid
ieuid
zaczynają jako 99 (nikt) i 1000 (frank) odpowiednio.setuid
ustawia oba na 1000.system
wykonuje/bin/bash -c id
z powodu symlink z sh do bash.bash
, bez-p
, dostosowujeeuid
doruid
, co skutkuje tym, że oba są 99 (nikt).
Przypadek 2: Użycie setreuid z system
Kod C:
Kompilacja i uprawnienia:
Wykonanie i wynik:
Analiza:
setreuid
ustawia zarówno ruid, jak i euid na 1000.system
wywołuje bash, który utrzymuje identyfikatory użytkowników z powodu ich równości, skutecznie działając jako frank.
Przypadek 3: Użycie setuid z execve
Cel: Badanie interakcji między setuid a execve.
Wykonanie i wynik:
Analiza:
ruid
pozostaje 99, ale euid jest ustawiony na 1000, zgodnie z efektem setuid.
Przykład kodu C 2 (Wywołanie Bash):
Wykonanie i wynik:
Analiza:
Chociaż
euid
jest ustawione na 1000 przezsetuid
,bash
resetuje euid doruid
(99) z powodu braku-p
.
Przykład kodu C 3 (Używając bash -p):
Wykonanie i wynik:
References
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Last updated