User Namespace
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)
Un namespace utente è una funzionalità del kernel Linux che fornisce isolamento delle mappature degli ID utente e di gruppo, consentendo a ciascun namespace utente di avere il proprio insieme di ID utente e di gruppo. Questo isolamento consente ai processi in esecuzione in diversi namespace utente di avere privilegi e proprietà diversi, anche se condividono gli stessi ID utente e di gruppo numericamente.
I namespace utente sono particolarmente utili nella containerizzazione, dove ogni container dovrebbe avere il proprio insieme indipendente di ID utente e di gruppo, consentendo una migliore sicurezza e isolamento tra i container e il sistema host.
Quando viene creato un nuovo namespace utente, inizia con un insieme vuoto di mappature degli ID utente e di gruppo. Ciò significa che qualsiasi processo in esecuzione nel nuovo namespace utente avrà inizialmente nessun privilegio al di fuori del namespace.
Le mappature degli ID possono essere stabilite tra gli ID utente e di gruppo nel nuovo namespace e quelli nel namespace genitore (o host). Questo consente ai processi nel nuovo namespace di avere privilegi e proprietà corrispondenti agli ID utente e di gruppo nel namespace genitore. Tuttavia, le mappature degli ID possono essere limitate a intervalli e sottoinsiemi specifici di ID, consentendo un controllo dettagliato sui privilegi concessi ai processi nel nuovo namespace.
All'interno di un namespace utente, i processi possono avere pieni privilegi di root (UID 0) per operazioni all'interno del namespace, pur avendo privilegi limitati al di fuori del namespace. Questo consente ai container di funzionare con capacità simili a root all'interno del proprio namespace senza avere pieni privilegi di root sul sistema host.
I processi possono spostarsi tra i namespace utilizzando la chiamata di sistema setns()
o creare nuovi namespace utilizzando le chiamate di sistema unshare()
o clone()
con il flag CLONE_NEWUSER
. Quando un processo si sposta in un nuovo namespace o ne crea uno, inizierà a utilizzare le mappature degli ID utente e di gruppo associate a quel namespace.
Montando una nuova istanza del filesystem /proc
se utilizzi il parametro --mount-proc
, garantisci che il nuovo namespace di mount abbia una visione accurata e isolata delle informazioni sui processi specifiche per quel namespace.
Per utilizzare il namespace utente, il demone Docker deve essere avviato con --userns-remap=default
(In ubuntu 14.04, questo può essere fatto modificando /etc/default/docker
e poi eseguendo sudo service docker restart
)
È possibile controllare la mappa degli utenti dal container docker con:
O dal host con:
Inoltre, puoi entrare in un altro namespace di processo solo se sei root. E non puoi entrare in un altro namespace senza un descrittore che punti ad esso (come /proc/self/ns/user
).
Nel caso degli user namespaces, quando viene creato un nuovo user namespace, il processo che entra nello namespace riceve un insieme completo di capacità all'interno di quello namespace. Queste capacità consentono al processo di eseguire operazioni privilegiate come montare filesystem, creare dispositivi o cambiare la proprietà dei file, ma solo nel contesto del proprio user namespace.
Ad esempio, quando hai la capacità CAP_SYS_ADMIN
all'interno di un user namespace, puoi eseguire operazioni che normalmente richiedono questa capacità, come montare filesystem, ma solo nel contesto del tuo user namespace. Qualsiasi operazione che esegui con questa capacità non influenzerà il sistema host o altri namespaces.
Pertanto, anche se ottenere un nuovo processo all'interno di un nuovo User namespace ti restituirà tutte le capacità (CapEff: 000001ffffffffff), in realtà puoi utilizzare solo quelle relative allo namespace (montare ad esempio) ma non tutte. Quindi, questo da solo non è sufficiente per sfuggire a un container Docker.
hacking tricks by submitting PRs to the** HackTricks and HackTricks Cloud github repos.
Impara e pratica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)