Páginas

07 junio, 2020

Restablecer la password de root: Conseguir una shell de root con Grub y como evitarlo

Me he dado cuenta de que no tenía ninguna publicación al respecto sobre esto. Se trata de algo ya muy conocido y me apetecía traerlo al blog para dejarlo como un apunte más en el histórico de artículos.

Si tenemos acceso físico a la máquina o al hipervisor de una máquina virtual Linux, para poder restablecer la password de root, dejarla en blanco o cualquier otra acción privilegiada como acceder a los volúmenes del sistema para realizar un volcado o copia de los ficheros /etc/passwd y /etc/shadow con el fin de realizar un cracking de contraseñas por fuerza bruta a sus hashes, es aprovechar un pequeño hack -si se puede llamar así- usando el gestor de arranque múltiple GNU Grub (multiboot boot loader).

No se trata de ningún bug, explotación o vulnerabilidad (aunque pueda ser aprovechada de forma malintencionada). Simplemente es una funcionalidad estándar del kernel de Linux que permite a los administradores de sistemas entrar en un modo a una consola interactiva para poder recuperar un sistema de ficheros dañado o una contraseña olvidada. 

Más adelante veremos como se puede fortificar el acceso a la edición desde el menú del gestor de arranque Grub.

En sistemas Linux ya sea con interfaz gráfica como un entorno de terminal sin GUI, podemos invocar manualmente el menú de Grub presionando la tecla Shift en el momento del arranque del sistema.

Figura 1: Menú del gestor de arranque GNU Grub.

Presionando la tecla "e" podemos editar Grub. Localizamos un línea similar a "linux /boot/vmlinuz-VERSION-generic root=UUID=IDENTIFICADOR ro maybe-ubiquity" modificamos ro (solo lectura) por rw (lectura y escritura) y añadimos al final "init=/bin/bash", guardamos y salimos con "Ctrl-x". Esto reiniciará el sistema y nos levantará una shell privilegiada en un contexto de root.
linux /boot/vmlinuz-VERSION-generic root=UUID=IDENTIFICADOR ro maybe-ubiquity  quiet splash
linux /boot/vmlinuz-VERSION-generic root=UUID=IDENTIFICADOR rw maybe-ubiquity init=/bin/bash

quiet splash

  • quiet: Indica un modo detallado (más verbose), útil para ver todos los mensajes en el arranque del sistema, como los controladores y módulos, checks del sistema y errores.
  • splash: Simplemente muestra una imagen de carga (en movimiento) en el arranque del sistema.

init=/bin/bash: Indica al kernel de Linux que ejecute /bin/bash como init, en lugar de ejecutar init como sistema.

Figura 2: Modificación del Grub para iniciar un shell con privilegios de root.

Después de reiniciar se levantará una terminal en un contexto de root. Podremos restablecer la password y establecer una nueva con el comando passwd o realizar cualquier acción privilegiada.

Figura 3: Restablecer la password de root

Eliminar la password root dejando una contraseña en blanco. Para ello editamos el fichero /etc/shadow eliminando el asterisco (*) después de los primeros dos puntos (:) de forma que quede un espacio vacío, con esto eliminamos el uso de una contraseña para un usuario.
root::18305:0:99999:7:::
Figura 4: Password en blanco root editando /etc/shadow.

Como comenté al principio, podemos insertar una memoria USB externa, montarla y realizar una copia del fichero /etc/passwd y /etc/shadow con la finalidad de realizar ataques de fuerza bruta para la obtención de contraseñas de los usuarios del sistema. Debemos unir ambos ficheros en un único fichero con unshadow.
/usr/bin/unshadow <fichero-passwd> <fichero-shadow> > /tmp/crack.passwords

¿Cómo evitar y protegerse de esta técnica?

El hardening para evitar que cualquier persona que pueda tener acceso a la máquina de forma física o virtual desde el entorno del hipervisor y pueda realizar esta técnica.

1. Establecer password de arranque y BIOS/UEFI

Si se trata de un equipo físico. Establecer una password de arranque del sistema, algo que podemos configurar en la BIOS/UEFI. También establecer una password en el acceso al Setup de la BIOS/UEFI evitando así que no se pueda realizar un boot de otro sistema a través de Live CD/USB.

2. Cifrar el disco

Si existe la posibilidad es recomendable cifrar el volumen del sistema con LUKS.

3. Establecer una password de acceso a Grub

Establecer una password en el Grub es la opción más sencilla y segura. Creamos una password tipo PBKDF2 (Password-Based Key Derivation Function 2) que caracteriza por reducir ataques de fuerza bruta. Se nos genera un hash pbkdf2 el cual copiaremos.
grub-mkpasswd-pbkdf2
Figura 5: Establecer password al gestor de arranque Grub.

Editamos el siguiente fichero.
sudo nano /etc/grub.d/00_header
Al final del fichero pegamos lo siguiente.
cat << EOF
set superusers="admin"
password_pbkdf2 admin HASH
EOF
Donde "admin" será el nombre del usuario que queremos que valide para el acceso al menú del gestor de arranque Grub y HASH lo sustituimos por el generado anteriormente.

Actualizamos el Grub para aplicar los cambios.
sudo update-grub
Reiniciamos y pulsamos la tecla Shift para forzar que se muestre el menú de Grub. Se nos mostrará un login para su acceso donde introduciremos el usuario y contraseña establecidos anteriormente.

Figura 6: User y password para acceder al gestor de arranque Grub.

Saludos!

No hay comentarios

Publicar un comentario

Entradas Populares