Μοιραστείτε τα κόλπα σας στο χάκινγκ υποβάλλοντας PRs σταHackTricks και HackTricks Cloud αποθετήρια του github.
Βασικές πληροφορίες
Ο χώρος ονομάτων χρόνου στο Linux επιτρέπει την ανάθεση ανεξάρτητων αποκλίσεων στους χρονομετρητές του συστήματος και του χρόνου εκκίνησης ανά ονοματοχώρο. Χρησιμοποιείται συχνά σε εφαρμογές Linux για να αλλάξει η ημερομηνία/ώρα μέσα σε έναν χώρο ονομάτων και να προσαρμόσει τους χρονομετρητές μετά από αποκατάσταση από ένα σημείο ελέγχου ή αντίγραφο ασφαλείας.
Εργαστήριο:
Δημιουργία διαφορετικών ονομάτων χώρου
Εντολική γραμμή
sudounshare-T [--mount-proc] /bin/bash
Με την προσάρτηση μιας νέας περίπτωσης του συστήματος αρχείων /proc χρησιμοποιώντας την παράμετρο --mount-proc, εξασφαλίζετε ότι ο νέος χώρος ονομάτων περιέχει μια ακριβή και απομονωμένη προβολή των πληροφοριών διεργασιών που είναι συγκεκριμένες για αυτόν τον χώρο ονομάτων.
Σφάλμα: bash: fork: Δεν είναι δυνατή η δέσμευση μνήμης
Όταν το unshare εκτελείται χωρίς την επιλογή -f, συναντάται ένα σφάλμα λόγω του τρόπου που ο πυρήνας Linux χειρίζεται τους νέους χώρους ονομάτων PID (Process ID). Τα κύρια στοιχεία και η λύση παρουσιάζονται παρακάτω:
Εξήγηση του προβλήματος:
Ο πυρήνας Linux επιτρέπει σε μια διεργασία να δημιουργεί νέους χώρους ονομάτων χρησιμοποιώντας την κλήση συστήματος unshare. Ωστόσο, η διεργασία που προκαλεί τη δημιουργία ενός νέου χώρου ονομάτων PID (που αναφέρεται ως "διαδικασία unshare") δεν εισέρχεται στον νέο χώρο ονομάτων, μόνο οι υποδιεργασίες της το κάνουν.
Η εκτέλεση της εντολής %unshare -p /bin/bash% ξεκινά το /bin/bash στην ίδια διεργασία με το unshare. Ως αποτέλεσμα, το /bin/bash και οι υποδιεργασίες του βρίσκονται στον αρχικό χώρο ονομάτων PID.
Η πρώτη υποδιεργασία του /bin/bash στον νέο χώρο ονομάτων γίνεται PID 1. Όταν αυτή η διεργασία τερματίζει, ενεργοποιείται η εκκαθάριση του χώρου ονομάτων αν δεν υπάρχουν άλλες διεργασίες, καθώς η PID 1 έχει τον ειδικό ρόλο της υιοθέτησης ορφανών διεργασιών. Ο πυρήνας Linux θα απενεργοποιήσει στη συνέχεια την εκχώρηση PID σε αυτόν τον χώρο ονομάτων.
Συνέπεια:
Η έξοδος της PID 1 σε έναν νέο χώρο ονομάτων οδηγεί στην απενεργοποίηση της σημαίας PIDNS_HASH_ADDING. Αυτό έχει ως αποτέλεσμα την αποτυχία της συνάρτησης alloc_pid να εκχωρήσει ένα νέο PID κατά τη δημιουργία μιας νέας διεργασίας, παράγοντας το σφάλμα "Cannot allocate memory".
Λύση:
Το πρόβλημα μπορεί να επιλυθεί χρησιμοποιώντας την επιλογή -f με το unshare. Αυτή η επιλογή κάνει το unshare να δημιουργήσει ένα νέο διεργασία μετά τη δημιουργία του νέου χώρου ονομάτων PID.
Εκτελώντας %unshare -fp /bin/bash% εξασφαλίζεται ότι η εντολή unshare ίδια γίνεται PID 1 στον νέο χώρο ονομάτων. Το /bin/bash και οι υποδιεργασίες του περιορίζονται στον νέο αυτόν χώρο ονομάτων, αποτρέποντας την πρόωρη έξοδο της PID 1 και επιτρέποντας την κανονική εκχώρηση PID.
Εξασφαλίζοντας ότι το unshare εκτελείται με τη σημαία -f, ο νέος χώρος ονομάτων PID διατηρείται σωστά, επιτρέποντας στο /bin/bash και στις υποδιεργασίες του να λειτουργούν χωρίς να αντιμετωπίζουν το σφάλμα δέσμευσης μνήμης.
sudofind/proc-maxdepth3-typel-nametime-execreadlink{} \; 2>/dev/null|sort-u# Find the processes with an specific namespacesudofind/proc-maxdepth3-typel-nametime-execls-l{} \; 2>/dev/null|grep<ns-number>
```bash nsenter -T TARGET_PID --pid /bin/bash ``` Επίσης, μπορείτε να **εισέλθετε σε ένα άλλο namespace διεργασίας μόνο αν είστε root**. Και **δεν μπορείτε** να **εισέλθετε** σε άλλο namespace **χωρίς έναν δείκτη** που να τον δείχνει (όπως `/proc/self/ns/net`).