Network Namespace
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Información Básica
Un namespace de red es una característica del kernel de Linux que proporciona aislamiento de la pila de red, permitiendo que cada namespace de red tenga su propia configuración de red independiente, interfaces, direcciones IP, tablas de enrutamiento y reglas de firewall. Este aislamiento es útil en varios escenarios, como la contenedorización, donde cada contenedor debe tener su propia configuración de red, independiente de otros contenedores y del sistema host.
Cómo funciona:
- Cuando se crea un nuevo namespace de red, comienza con una pila de red completamente aislada, sin interfaces de red excepto por la interfaz de loopback (lo). Esto significa que los procesos que se ejecutan en el nuevo namespace de red no pueden comunicarse con procesos en otros namespaces o con el sistema host por defecto.
- Interfaces de red virtuales, como pares veth, pueden ser creadas y movidas entre namespaces de red. Esto permite establecer conectividad de red entre namespaces o entre un namespace y el sistema host. Por ejemplo, un extremo de un par veth puede ser colocado en el namespace de red de un contenedor, y el otro extremo puede ser conectado a un puente u otra interfaz de red en el namespace del host, proporcionando conectividad de red al contenedor.
- Las interfaces de red dentro de un namespace pueden tener sus propias direcciones IP, tablas de enrutamiento y reglas de firewall, independientes de otros namespaces. Esto permite que los procesos en diferentes namespaces de red tengan diferentes configuraciones de red y operen como si estuvieran ejecutándose en sistemas de red separados.
- Los procesos pueden moverse entre namespaces utilizando la llamada al sistema
setns(), o crear nuevos namespaces utilizando las llamadas al sistemaunshare()oclone()con la banderaCLONE_NEWNET. Cuando un proceso se mueve a un nuevo namespace o crea uno, comenzará a utilizar la configuración de red y las interfaces asociadas con ese namespace.
Laboratorio:
Crear diferentes Namespaces
CLI
sudo unshare -n [--mount-proc] /bin/bash
# Run ifconfig or ip -a
Al montar una nueva instancia del sistema de archivos /proc si usas el parámetro --mount-proc, aseguras que el nuevo espacio de montaje tenga una vista precisa y aislada de la información del proceso específica de ese espacio de nombres.
Error: bash: fork: Cannot allocate memory
Cuando se ejecuta unshare sin la opción -f, se encuentra un error debido a la forma en que Linux maneja los nuevos espacios de nombres de PID (ID de Proceso). Los detalles clave y la solución se describen a continuación:
- Explicación del Problema:
- El núcleo de Linux permite a un proceso crear nuevos espacios de nombres utilizando la llamada al sistema
unshare. Sin embargo, el proceso que inicia la creación de un nuevo espacio de nombres de PID (denominado “proceso unshare”) no entra en el nuevo espacio de nombres; solo lo hacen sus procesos hijos. - Ejecutar
%unshare -p /bin/bash%inicia/bin/bashen el mismo proceso queunshare. En consecuencia,/bin/bashy sus procesos hijos están en el espacio de nombres de PID original. - El primer proceso hijo de
/bin/bashen el nuevo espacio de nombres se convierte en PID 1. Cuando este proceso sale, desencadena la limpieza del espacio de nombres si no hay otros procesos, ya que PID 1 tiene el papel especial de adoptar procesos huérfanos. El núcleo de Linux deshabilitará entonces la asignación de PID en ese espacio de nombres.
- Consecuencia:
- La salida de PID 1 en un nuevo espacio de nombres lleva a la limpieza de la bandera
PIDNS_HASH_ADDING. Esto resulta en que la funciónalloc_pidfalle al intentar asignar un nuevo PID al crear un nuevo proceso, produciendo el error “Cannot allocate memory”.
- Solución:
- El problema se puede resolver utilizando la opción
-fconunshare. Esta opción hace queunsharecree un nuevo proceso después de crear el nuevo espacio de nombres de PID. - Ejecutar
%unshare -fp /bin/bash%asegura que el comandounsharese convierta en PID 1 en el nuevo espacio de nombres./bin/bashy sus procesos hijos están entonces contenidos de manera segura dentro de este nuevo espacio de nombres, previniendo la salida prematura de PID 1 y permitiendo la asignación normal de PID.
Al asegurarte de que unshare se ejecute con la bandera -f, el nuevo espacio de nombres de PID se mantiene correctamente, permitiendo que /bin/bash y sus subprocesos operen sin encontrar el error de asignación de memoria.
Docker
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
# Run ifconfig or ip -a
Verifica en qué namespace está tu proceso
ls -l /proc/self/ns/net
lrwxrwxrwx 1 root root 0 Apr 4 20:30 /proc/self/ns/net -> 'net:[4026531840]'
Encontrar todos los espacios de nombres de red
sudo find /proc -maxdepth 3 -type l -name net -exec readlink {} \; 2>/dev/null | sort -u | grep "net:"
# Find the processes with an specific namespace
sudo find /proc -maxdepth 3 -type l -name net -exec ls -l {} \; 2>/dev/null | grep <ns-number>
Entrar dentro de un espacio de nombres de red
nsenter -n TARGET_PID --pid /bin/bash
También, solo puedes entrar en otro espacio de nombres de proceso si eres root. Y no puedes entrar en otro espacio de nombres sin un descriptor que apunte a él (como /proc/self/ns/net).
Referencias
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
HackTricks

