Impara l'hacking di AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata in HackTricks o scaricare HackTricks in PDF Controlla i PACCHETTI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di esclusive NFT
- Unisciti al 💬 gruppo Discord o al gruppo Telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud github repos.
Uno spazio dei nomi IPC (Inter-Process Communication) è una funzionalità del kernel Linux che fornisce isolamento degli oggetti IPC di System V, come code di messaggi, segmenti di memoria condivisa e semafori. Questo isolamento garantisce che i processi in diversi spazi dei nomi IPC non possano accedere direttamente o modificare gli oggetti IPC degli altri, fornendo uno strato aggiuntivo di sicurezza e privacy tra i gruppi di processi.
- Quando viene creato un nuovo spazio dei nomi IPC, inizia con un insieme completamente isolato di oggetti IPC di System V. Ciò significa che i processi in esecuzione nel nuovo spazio dei nomi IPC non possono accedere o interferire con gli oggetti IPC in altri spazi dei nomi o nel sistema host per impostazione predefinita.
- Gli oggetti IPC creati all'interno di uno spazio dei nomi sono visibili e accessibili solo ai processi all'interno di quel namespace. Ogni oggetto IPC è identificato da una chiave univoca all'interno del suo spazio dei nomi. Sebbene la chiave possa essere identica in diversi spazi dei nomi, gli oggetti stessi sono isolati e non possono essere accessibili tra spazi dei nomi.
- I processi possono spostarsi tra gli spazi dei nomi utilizzando la chiamata di sistema
setns()
o creare nuovi spazi dei nomi utilizzando le chiamate di sistemaunshare()
oclone()
con il flagCLONE_NEWIPC
. Quando un processo si sposta in un nuovo spazio dei nomi o ne crea uno, inizierà a utilizzare gli oggetti IPC associati a quel namespace.
sudo unshare -i [--mount-proc] /bin/bash
Montando una nuova istanza del filesystem /proc
utilizzando il parametro --mount-proc
, si garantisce che il nuovo namespace di montaggio abbia una visione accurata e isolata delle informazioni specifiche dei processi in quel namespace.
Errore: bash: fork: Impossibile allocare memoria
Quando unshare
viene eseguito senza l'opzione -f
, si verifica un errore a causa del modo in cui Linux gestisce i nuovi namespace PID (Process ID). Di seguito sono riportati i dettagli chiave e la soluzione:
- Spiegazione del problema:
- Il kernel Linux consente a un processo di creare nuovi namespace utilizzando la chiamata di sistema
unshare
. Tuttavia, il processo che avvia la creazione di un nuovo namespace PID (chiamato "unshare" process) non entra nel nuovo namespace; solo i suoi processi figlio lo fanno. - L'esecuzione di
%unshare -p /bin/bash%
avvia/bin/bash
nello stesso processo diunshare
. Di conseguenza,/bin/bash
e i suoi processi figlio si trovano nel namespace PID originale. - Il primo processo figlio di
/bin/bash
nel nuovo namespace diventa PID 1. Quando questo processo termina, viene avviata la pulizia del namespace se non ci sono altri processi, poiché il PID 1 ha il ruolo speciale di adottare i processi orfani. Il kernel Linux disabiliterà quindi l'allocazione di PID in quel namespace.
- Conseguenza:
- L'uscita del PID 1 in un nuovo namespace porta alla pulizia del flag
PIDNS_HASH_ADDING
. Ciò comporta il fallimento della funzionealloc_pid
nell'allocazione di un nuovo PID durante la creazione di un nuovo processo, producendo l'errore "Impossibile allocare memoria".
- Soluzione:
- Il problema può essere risolto utilizzando l'opzione
-f
conunshare
. Questa opzione fa sì cheunshare
crei un nuovo processo dopo aver creato il nuovo namespace PID. - Eseguendo
%unshare -fp /bin/bash%
si garantisce che il comandounshare
stesso diventi PID 1 nel nuovo namespace./bin/bash
e i suoi processi figlio sono quindi contenuti in modo sicuro all'interno di questo nuovo namespace, evitando l'uscita prematura del PID 1 e consentendo un'allocazione normale dei PID.
Assicurandosi che unshare
venga eseguito con l'opzione -f
, il nuovo namespace PID viene mantenuto correttamente, consentendo a /bin/bash
e ai suoi sottoprocessi di funzionare senza incontrare l'errore di allocazione della memoria.
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
To check which namespace your process is in, you can use the following command:
Per verificare in quale namespace si trova il tuo processo, puoi utilizzare il seguente comando:
$ ls -l /proc/<PID>/ns/ipc
Replace <PID>
with the process ID of your target process. This command will display the inode number of the IPC namespace associated with the process.
Sostituisci <PID>
con l'ID del processo di destinazione. Questo comando visualizzerà il numero di inode dello spazio dei nomi IPC associato al processo.
ls -l /proc/self/ns/ipc
lrwxrwxrwx 1 root root 0 Apr 4 20:37 /proc/self/ns/ipc -> 'ipc:[4026531839]'
{% code overflow="wrap" %}
sudo find /proc -maxdepth 3 -type l -name ipc -exec readlink {} \; 2>/dev/null | sort -u
# Find the processes with an specific namespace
sudo find /proc -maxdepth 3 -type l -name ipc -exec ls -l {} \; 2>/dev/null | grep <ns-number>
{% code %}
{% endcode %}
nsenter -i TARGET_PID --pid /bin/bash
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/net
).
# Container
sudo unshare -i /bin/bash
ipcmk -M 100
Shared memory id: 0
ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x2fba9021 0 root 644 100 0
# From the host
ipcs -m # Nothing is seen
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata in HackTricks o scaricare HackTricks in PDF Controlla i PIANI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di esclusive NFT
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repository di github.