mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['src/linux-hardening/privilege-escalation/euid-ruid-suid.md'
This commit is contained in:
		
							parent
							
								
									3301c0131e
								
							
						
					
					
						commit
						b24c0c01f6
					
				@ -6,7 +6,7 @@
 | 
			
		||||
### Μεταβλητές Ταυτοποίησης Χρήστη
 | 
			
		||||
 | 
			
		||||
- **`ruid`**: Ο **πραγματικός αναγνωριστικός αριθμός χρήστη** δηλώνει τον χρήστη που ξεκίνησε τη διαδικασία.
 | 
			
		||||
- **`euid`**: Γνωστός ως ο **επιδραστικός αναγνωριστικός αριθμός χρήστη**, αντιπροσωπεύει την ταυτότητα χρήστη που χρησιμοποιείται από το σύστημα για να προσδιορίσει τα δικαιώματα της διαδικασίας. Γενικά, το `euid` αντικατοπτρίζει το `ruid`, εκτός από περιπτώσεις όπως η εκτέλεση ενός SetUID δυαδικού αρχείου, όπου το `euid` αναλαμβάνει την ταυτότητα του ιδιοκτήτη του αρχείου, παρέχοντας έτσι συγκεκριμένα δικαιώματα λειτουργίας.
 | 
			
		||||
- **`euid`**: Γνωστός ως ο **επιχειρησιακός αναγνωριστικός αριθμός χρήστη**, αντιπροσωπεύει την ταυτότητα χρήστη που χρησιμοποιείται από το σύστημα για να προσδιορίσει τα δικαιώματα της διαδικασίας. Γενικά, το `euid` αντικατοπτρίζει το `ruid`, εκτός από περιπτώσεις όπως η εκτέλεση ενός εκτελέσιμου αρχείου SetUID, όπου το `euid` αναλαμβάνει την ταυτότητα του ιδιοκτήτη του αρχείου, παρέχοντας έτσι συγκεκριμένα δικαιώματα λειτουργίας.
 | 
			
		||||
- **`suid`**: Αυτός ο **αποθηκευμένος αναγνωριστικός αριθμός χρήστη** είναι κρίσιμος όταν μια διαδικασία υψηλών δικαιωμάτων (συνήθως εκτελείται ως root) χρειάζεται προσωρινά να παραιτηθεί από τα δικαιώματά της για να εκτελέσει ορισμένα καθήκοντα, μόνο για να ανακτήσει αργότερα την αρχική της ανυψωμένη κατάσταση.
 | 
			
		||||
 | 
			
		||||
#### Σημαντική Σημείωση
 | 
			
		||||
@ -15,12 +15,12 @@
 | 
			
		||||
 | 
			
		||||
### Κατανόηση των Λειτουργιών set\*uid
 | 
			
		||||
 | 
			
		||||
- **`setuid`**: Αντίθετα με τις αρχικές υποθέσεις, το `setuid` τροποποιεί κυρίως το `euid` παρά το `ruid`. Συγκεκριμένα, για τις προνομιακές διαδικασίες, ευθυγραμμίζει το `ruid`, `euid` και `suid` με τον καθορισμένο χρήστη, συχνά τον root, εδραιώνοντας αποτελεσματικά αυτούς τους αναγνωριστικούς αριθμούς λόγω του υπερκαλύπτοντος `suid`. Λεπτομερείς πληροφορίες μπορούν να βρεθούν στη [σελίδα man του setuid](https://man7.org/linux/man-pages/man2/setuid.2.html).
 | 
			
		||||
- **`setuid`**: Αντίθετα με τις αρχικές υποθέσεις, το `setuid` τροποποιεί κυρίως το `euid` παρά το `ruid`. Συγκεκριμένα, για τις προνομιούχες διαδικασίες, ευθυγραμμίζει το `ruid`, `euid` και `suid` με τον καθορισμένο χρήστη, συχνά τον root, εδραιώνοντας αποτελεσματικά αυτούς τους αναγνωριστικούς αριθμούς λόγω του υπερκαλύπτοντος `suid`. Λεπτομερείς πληροφορίες μπορούν να βρεθούν στη [σελίδα man του setuid](https://man7.org/linux/man-pages/man2/setuid.2.html).
 | 
			
		||||
- **`setreuid`** και **`setresuid`**: Αυτές οι λειτουργίες επιτρέπουν την λεπτομερή προσαρμογή των `ruid`, `euid` και `suid`. Ωστόσο, οι δυνατότητές τους εξαρτώνται από το επίπεδο προνομίων της διαδικασίας. Για διαδικασίες που δεν είναι root, οι τροποποιήσεις περιορίζονται στις τρέχουσες τιμές των `ruid`, `euid` και `suid`. Αντίθετα, οι διαδικασίες root ή αυτές με την ικανότητα `CAP_SETUID` μπορούν να αναθέσουν αυθαίρετες τιμές σε αυτούς τους αναγνωριστικούς αριθμούς. Περισσότερες πληροφορίες μπορούν να αντληθούν από τη [σελίδα man του setresuid](https://man7.org/linux/man-pages/man2/setresuid.2.html) και τη [σελίδα man του setreuid](https://man7.org/linux/man-pages/man2/setreuid.2.html).
 | 
			
		||||
 | 
			
		||||
Αυτές οι λειτουργίες σχεδιάστηκαν όχι ως μηχανισμός ασφαλείας αλλά για να διευκολύνουν τη σχεδιασμένη ροή λειτουργίας, όπως όταν ένα πρόγραμμα υιοθετεί την ταυτότητα ενός άλλου χρήστη αλλάζοντας τον επιδραστικό αναγνωριστικό αριθμό χρήστη του.
 | 
			
		||||
Αυτές οι λειτουργίες σχεδιάστηκαν όχι ως μηχανισμός ασφαλείας αλλά για να διευκολύνουν τη σχεδιασμένη ροή λειτουργίας, όπως όταν ένα πρόγραμμα υιοθετεί την ταυτότητα ενός άλλου χρήστη αλλάζοντας τον επιχειρησιακό του αναγνωριστικό αριθμό.
 | 
			
		||||
 | 
			
		||||
Είναι σημαντικό να σημειωθεί ότι ενώ το `setuid` μπορεί να είναι μια κοινή επιλογή για την ανύψωση προνομίων σε root (καθώς ευθυγραμμίζει όλους τους αναγνωριστικούς αριθμούς με τον root), η διάκριση μεταξύ αυτών των λειτουργιών είναι κρίσιμη για την κατανόηση και την χειραγώγηση των συμπεριφορών των αναγνωριστικών χρηστών σε διάφορα σενάρια.
 | 
			
		||||
Είναι σημαντικό να σημειωθεί ότι ενώ το `setuid` μπορεί να είναι μια κοινή επιλογή για την ανύψωση προνομίων σε root (καθώς ευθυγραμμίζει όλους τους αναγνωριστικούς αριθμούς με τον root), η διάκριση μεταξύ αυτών των λειτουργιών είναι κρίσιμη για την κατανόηση και την παρακολούθηση των συμπεριφορών των αναγνωριστικών χρηστών σε διάφορα σενάρια.
 | 
			
		||||
 | 
			
		||||
### Μηχανισμοί Εκτέλεσης Προγραμμάτων στο Linux
 | 
			
		||||
 | 
			
		||||
@ -30,13 +30,13 @@
 | 
			
		||||
- **Συμπεριφορά**: Διατηρεί τον χώρο μνήμης του καλούντος αλλά ανανεώνει τη στοίβα, το σωρό και τα τμήματα δεδομένων. Ο κώδικας του προγράμματος αντικαθίσταται από το νέο πρόγραμμα.
 | 
			
		||||
- **Διατήρηση Αναγνωριστικού Χρήστη**:
 | 
			
		||||
- `ruid`, `euid` και πρόσθετοι αναγνωριστικοί αριθμοί ομάδας παραμένουν αμετάβλητοι.
 | 
			
		||||
- Το `euid` μπορεί να έχει λεπτές αλλαγές αν το νέο πρόγραμμα έχει οριστεί το SetUID bit.
 | 
			
		||||
- Το `euid` μπορεί να έχει λεπτές αλλαγές αν το νέο πρόγραμμα έχει οριστεί το bit SetUID.
 | 
			
		||||
- Το `suid` ενημερώνεται από το `euid` μετά την εκτέλεση.
 | 
			
		||||
- **Τεκμηρίωση**: Λεπτομερείς πληροφορίες μπορούν να βρεθούν στη [σελίδα man του `execve`](https://man7.org/linux/man-pages/man2/execve.2.html).
 | 
			
		||||
 | 
			
		||||
#### **`system` Λειτουργία**
 | 
			
		||||
 | 
			
		||||
- **Λειτουργικότητα**: Σε αντίθεση με το `execve`, το `system` δημιουργεί μια παιδική διαδικασία χρησιμοποιώντας το `fork` και εκτελεί μια εντολή μέσα σε αυτή την παιδική διαδικασία χρησιμοποιώντας το `execl`.
 | 
			
		||||
- **Λειτουργικότητα**: Σε αντίθεση με το `execve`, το `system` δημιουργεί μια παιδική διαδικασία χρησιμοποιώντας το `fork` και εκτελεί μια εντολή μέσα σε αυτήν την παιδική διαδικασία χρησιμοποιώντας το `execl`.
 | 
			
		||||
- **Εκτέλεση Εντολής**: Εκτελεί την εντολή μέσω του `sh` με `execl("/bin/sh", "sh", "-c", command, (char *) NULL);`.
 | 
			
		||||
- **Συμπεριφορά**: Καθώς το `execl` είναι μια μορφή του `execve`, λειτουργεί παρόμοια αλλά στο πλαίσιο μιας νέας παιδικής διαδικασίας.
 | 
			
		||||
- **Τεκμηρίωση**: Περισσότερες πληροφορίες μπορούν να αποκτηθούν από τη [σελίδα man του `system`](https://man7.org/linux/man-pages/man3/system.3.html).
 | 
			
		||||
@ -45,19 +45,19 @@
 | 
			
		||||
 | 
			
		||||
- **`bash`**:
 | 
			
		||||
- Έχει μια επιλογή `-p` που επηρεάζει το πώς αντιμετωπίζονται το `euid` και το `ruid`.
 | 
			
		||||
- Χωρίς `-p`, το `bash` ορίζει το `euid` στο `ruid` αν αρχικά διαφέρουν.
 | 
			
		||||
- Χωρίς `-p`, το `bash` ορίζει το `euid` στο `ruid` αν διαφέρουν αρχικά.
 | 
			
		||||
- Με `-p`, διατηρείται το αρχικό `euid`.
 | 
			
		||||
- Περισσότερες λεπτομέρειες μπορούν να βρεθούν στη [σελίδα man του `bash`](https://linux.die.net/man/1/bash).
 | 
			
		||||
- **`sh`**:
 | 
			
		||||
- Δεν διαθέτει μηχανισμό παρόμοιο με το `-p` στο `bash`.
 | 
			
		||||
- Η συμπεριφορά σχετικά με τους αναγνωριστικούς χρήστες δεν αναφέρεται ρητά, εκτός από την επιλογή `-i`, που τονίζει τη διατήρηση της ισότητας του `euid` και του `ruid`.
 | 
			
		||||
- Η συμπεριφορά σχετικά με τους αναγνωριστικούς αριθμούς χρηστών δεν αναφέρεται ρητά, εκτός από την επιλογή `-i`, που τονίζει τη διατήρηση της ισότητας του `euid` και του `ruid`.
 | 
			
		||||
- Πρόσθετες πληροφορίες είναι διαθέσιμες στη [σελίδα man του `sh`](https://man7.org/linux/man-pages/man1/sh.1p.html).
 | 
			
		||||
 | 
			
		||||
Αυτοί οι μηχανισμοί, διακριτοί στη λειτουργία τους, προσφέρουν μια ευέλικτη γκάμα επιλογών για την εκτέλεση και τη μετάβαση μεταξύ προγραμμάτων, με συγκεκριμένες λεπτομέρειες σχετικά με το πώς διαχειρίζονται και διατηρούνται οι αναγνωριστικοί αριθμοί χρηστών.
 | 
			
		||||
 | 
			
		||||
### Δοκιμή Συμπεριφορών Αναγνωριστικού Χρήστη σε Εκτελέσεις
 | 
			
		||||
 | 
			
		||||
Παραδείγματα που ελήφθησαν από https://0xdf.gitlab.io/2022/05/31/setuid-rabbithole.html#testing-on-jail, ελέγξτε το για περαιτέρω πληροφορίες
 | 
			
		||||
Παραδείγματα από https://0xdf.gitlab.io/2022/05/31/setuid-rabbithole.html#testing-on-jail, ελέγξτε το για περισσότερες πληροφορίες
 | 
			
		||||
 | 
			
		||||
#### Περίπτωση 1: Χρήση του `setuid` με `system`
 | 
			
		||||
 | 
			
		||||
@ -92,7 +92,7 @@ uid=99(nobody) gid=99(nobody) groups=99(nobody) context=system_u:system_r:unconf
 | 
			
		||||
- `system` εκτελεί `/bin/bash -c id` λόγω του symlink από sh σε bash.
 | 
			
		||||
- `bash`, χωρίς `-p`, προσαρμόζει το `euid` ώστε να ταιριάζει με το `ruid`, με αποτέλεσμα και οι δύο να είναι 99 (κανένας).
 | 
			
		||||
 | 
			
		||||
#### Περίπτωση 2: Χρήση του setreuid με το system
 | 
			
		||||
#### Περίπτωση 2: Χρησιμοποιώντας setreuid με system
 | 
			
		||||
 | 
			
		||||
**C Κώδικας**:
 | 
			
		||||
```c
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user