euid, ruid, suid
Last updated
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Vertiefe dein Fachwissen in Mobiler Sicherheit mit der 8kSec Akademie. Meistere die Sicherheit von iOS und Android durch unsere selbstgesteuerten Kurse und erhalte ein Zertifikat:
ruid
: Die echte Benutzer-ID bezeichnet den Benutzer, der den Prozess initiiert hat.
euid
: Bekannt als die effektive Benutzer-ID, repräsentiert sie die Benutzeridentität, die vom System verwendet wird, um die Prozessprivilegien zu bestimmen. Im Allgemeinen spiegelt euid
ruid
wider, mit Ausnahme von Fällen wie der Ausführung einer SetUID-Binärdatei, bei der euid
die Identität des Dateieigentümers annimmt und somit spezifische Betriebsberechtigungen gewährt.
suid
: Diese gespeicherte Benutzer-ID ist entscheidend, wenn ein hochprivilegierter Prozess (typischerweise als root ausgeführt) vorübergehend seine Privilegien abgeben muss, um bestimmte Aufgaben auszuführen, um später seinen ursprünglichen erhöhten Status wiederzuerlangen.
Ein Prozess, der nicht unter root läuft, kann seine euid
nur so ändern, dass sie mit dem aktuellen ruid
, euid
oder suid
übereinstimmt.
setuid
: Entgegen anfänglicher Annahmen ändert setuid
hauptsächlich euid
und nicht ruid
. Insbesondere für privilegierte Prozesse richtet es ruid
, euid
und suid
auf den angegebenen Benutzer, oft root, aus und festigt diese IDs aufgrund des übergeordneten suid
. Detaillierte Informationen sind in der setuid-Man-Seite zu finden.
setreuid
und setresuid
: Diese Funktionen ermöglichen die nuancierte Anpassung von ruid
, euid
und suid
. Ihre Fähigkeiten hängen jedoch vom Privilegienniveau des Prozesses ab. Für Nicht-Root-Prozesse sind Änderungen auf die aktuellen Werte von ruid
, euid
und suid
beschränkt. Im Gegensatz dazu können Root-Prozesse oder solche mit der CAP_SETUID
-Berechtigung beliebige Werte für diese IDs zuweisen. Weitere Informationen sind in der setresuid-Man-Seite und der setreuid-Man-Seite zu finden.
Diese Funktionen sind nicht als Sicherheitsmechanismus konzipiert, sondern um den beabsichtigten Betriebsablauf zu erleichtern, wie wenn ein Programm die Identität eines anderen Benutzers annimmt, indem es seine effektive Benutzer-ID ändert.
Es ist bemerkenswert, dass setuid
zwar ein gängiger Ansatz zur Erhöhung der Privilegien auf root sein kann (da es alle IDs auf root ausrichtet), es jedoch entscheidend ist, zwischen diesen Funktionen zu unterscheiden, um das Verhalten der Benutzer-IDs in unterschiedlichen Szenarien zu verstehen und zu manipulieren.
execve
SystemaufrufFunktionalität: execve
startet ein Programm, das durch das erste Argument bestimmt wird. Es nimmt zwei Array-Argumente, argv
für Argumente und envp
für die Umgebung.
Verhalten: Es behält den Speicherbereich des Aufrufers bei, aktualisiert jedoch den Stack, Heap und die Datensegmente. Der Programmcode wird durch das neue Programm ersetzt.
Benutzer-ID-Erhaltung:
ruid
, euid
und zusätzliche Gruppen-IDs bleiben unverändert.
euid
kann nuancierte Änderungen aufweisen, wenn das neue Programm das SetUID-Bit gesetzt hat.
suid
wird nach der Ausführung von euid
aktualisiert.
Dokumentation: Detaillierte Informationen sind in der execve
-Man-Seite zu finden.
system
FunktionFunktionalität: Im Gegensatz zu execve
erstellt system
einen Kindprozess mit fork
und führt einen Befehl innerhalb dieses Kindprozesses mit execl
aus.
Befehlsausführung: Führt den Befehl über sh
mit execl("/bin/sh", "sh", "-c", command, (char *) NULL);
aus.
Verhalten: Da execl
eine Form von execve
ist, funktioniert es ähnlich, jedoch im Kontext eines neuen Kindprozesses.
Dokumentation: Weitere Einblicke sind in der system
-Man-Seite zu erhalten.
bash
und sh
mit SUIDbash
:
Hat eine -p
-Option, die beeinflusst, wie euid
und ruid
behandelt werden.
Ohne -p
setzt bash
euid
auf ruid
, wenn sie anfangs unterschiedlich sind.
Mit -p
wird das ursprüngliche euid
beibehalten.
Weitere Details sind in der bash
-Man-Seite zu finden.
sh
:
Besitzt keinen Mechanismus ähnlich der -p
-Option in bash
.
Das Verhalten bezüglich der Benutzer-IDs wird nicht ausdrücklich erwähnt, außer unter der -i
-Option, die die Erhaltung der Gleichheit von euid
und ruid
betont.
Zusätzliche Informationen sind in der sh
-Man-Seite verfügbar.
Diese Mechanismen, die sich in ihrer Funktionsweise unterscheiden, bieten eine vielseitige Palette von Optionen zur Ausführung und zum Übergang zwischen Programmen, mit spezifischen Nuancen in der Verwaltung und Erhaltung von Benutzer-IDs.
Beispiele entnommen von https://0xdf.gitlab.io/2022/05/31/setuid-rabbithole.html#testing-on-jail, überprüfe es für weitere Informationen
setuid
mit system
Ziel: Verständnis der Auswirkungen von setuid
in Kombination mit system
und bash
als sh
.
C-Code:
Kompilierung und Berechtigungen:
Analyse:
ruid
und euid
beginnen als 99 (nobody) und 1000 (frank) respektive.
setuid
richtet beide auf 1000 aus.
system
führt /bin/bash -c id
aus aufgrund des Symlinks von sh zu bash.
bash
, ohne -p
, passt euid
an, um mit ruid
übereinzustimmen, was dazu führt, dass beide 99 (nobody) sind.
C Code:
Kompilierung und Berechtigungen:
Ausführung und Ergebnis:
Analyse:
setreuid
setzt sowohl ruid als auch euid auf 1000.
system
ruft bash auf, die die Benutzer-IDs aufgrund ihrer Gleichheit beibehält und effektiv als frank arbeitet.
Ziel: Untersuchung der Interaktion zwischen setuid und execve.
Ausführung und Ergebnis:
Analyse:
ruid
bleibt 99, aber euid wird auf 1000 gesetzt, entsprechend der Wirkung von setuid.
C-Codebeispiel 2 (Aufruf von Bash):
Ausführung und Ergebnis:
Analyse:
Obwohl euid
durch setuid
auf 1000 gesetzt wird, setzt bash
euid
aufgrund der Abwesenheit von -p
auf ruid
(99) zurück.
C Code Beispiel 3 (Verwendung von bash -p):
Ausführung und Ergebnis:
Vertiefen Sie Ihr Fachwissen in Mobile Security mit der 8kSec Academy. Meistern Sie die Sicherheit von iOS und Android durch unsere selbstgesteuerten Kurse und erhalten Sie ein Zertifikat:
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)