PoC: Ataque y Defensa de mi buen amigo Grub.

Hola buenas a tod@s.

En esta práctica, os traigo la ejecución de ataque y su correspondiente fortificación del sistema gestor de arranque GRUB.

 

 

 

 

 

INTRODUCCIÓN

 

  • GRUB es un gestor de arranque múltiple desarrollado por GNU.
  • Se utiliza principalmente en sistemas operativos GNU/Linux
  • Permite disponer de uno o varios sistemas operativos y arrancarlos de manera sencilla

¿Qué problemas puede haber o fallos de seguridad en un gestor de arranque GRUB?

  • Mediante la modificación del arranque se puede inicializar el sistema con derechos privilegiados, de la siguiente forma:

Init=/bin/bash

  • Montar la partición en modo escritura:

Mount -o remount,rw /dev/[h|s]dax

  • El ataque offline permite modificar o accede al fichero Shadow

 

 

 

 

Pasos del ataque:

Arrancamos una máquina GNU/Linux que contenta el gestor de arranque:

 

 

Tenemos las siguientes opciones a realizar dentro del GRUB:

  • Pulsar tecla “Intro” para acceder al SO seleccionado.
  • Pulsar tecla “e” para editar las órdenes de arranque.
  • Pulsar la tecla “c” para una línea de órdenes.

 

Para conseguir “atacar” un sistema GRUB, pulsaremos la tecla “e” y navegaremos para encontrar la siguiente entrada, que suele tener siempre un aspecto parecido, la cual, es la que nos interesa:

 

 

Una vez localizada, iremos hasta el final de dicha entrada, y eliminaremos el siguiente contenido:

 

 

Como puede observarse, solo borraremos todo lo que se encontraba detrás de la letra “r”.

 

Ahora introduciremos el siguiente contenido a partir de lo que hemos borrado anteriormente

rw init=/bin/bash

Quedando de la siguiente forma:

 

 

Como puede observarse en el recuadro de abajo, de las opciones indicadas seleccionaremos para este caso la tecla “F10” o “Control+x”. Dando lugar a que el sistema vuelva a cargar, pero de la siguiente manera:

 

 

Ahora mismo tenemos acceso total a la máquina, pudiendo hacer entre otras muchas cosas, la visualización del fichero Shadow:

 

 

Pero no es lo único que podemos realizar. Podemos añadir un usuario en el fichero passwd, con uid=0. ¿Qué significa? Que este usuario que creemos, el sistema lo interpretará como si fuese un usuario root.

 

 

Una vez creado, abriremos el fichero passwd, y le pondremos a cero su uid y gid:

 

 

Guardamos la modificación, y reiniciamos la máquina. Una vez reiniciada, meteremos las credenciales del usuario que hemos creado anteriormente.

 

Curiosamente, en la máquina en la que estamos realizando esta prueba, Kali, una vez iniciada la sesión, podemos ver que, en la consola, nos recibe como el usuario root, y volviendo a realizar una comprobación, intentamos cambiar al usuario “hurd4n0” con el comando “su”. Nos devuelve de nuevo con nombre de usuario root. Pero podemos ver que no somos el usuario root como tal, ya que tenemos un home creado con el nombre del usuario creado. Para verlo gráficamente:

 

 

Hasta aquí, tiene lugar el proceso del ataque al GRUB.

 

 

 

 

 

 

Protección de GRUB:

  • Flexibilidad para la creación de usuarios y passwords.
  • En /etc/grub.d se encuentran disponibles los scripts que generan las entradas dinámicamente.
  • En /etc/grub.d/40_custom es el fichero donde se crean los usuarios y passwords. (También pueden crearse en el fichero /etc/grub.d/oo_header).
  • Permite el uso de set superusers=”<user>”. (permite crear un usuario para acceder a cualquier sistema que contenga el gestor de arranque, y además puede editar el GRUB).
  • En grub-mkpasswd-pbkdf2 crea pass y devuelve hash (pide una contraseña en plano y nos devuelve un hash).
  • Update-grub.

 

Con esta introducción, procedemos a la realización del proceso de fortificación del gestor de arranque GRUB.

 

 

 

Editaremos el fichero /etc/grub.d/40_custom para crear al superuser para que no se pueda editar el GRUB en el arranque:

 

 

Guardamos la modificación, y vamos a comprobar que, en efecto, solo este usuario tiene permiso para editar el GRUB. No podemos olvidarnos de realizar el update del GRUB para que estos cambios tengan efecto. No vale solo con editar los archivos.

 

 

Reiniciamos y una vez el equipo nos muestre el GRUB, presionamos la tecla “e” y comprobamos que pasa:

 

 

Si metemos las credenciales que hemos introducido dentro del fichero /etc/grub.d/40_custom, podremos observar que nos deja editar el contenido del GRUB.

 

 

 

Protegeremos el GRUB para que solo pueda arrancar el sistema el superusuario, pero al ser superusuario del GRUB, ya tiene la capacidad para hacerlo.

En este caso, para no generar dudas respecto a estos usuarios, voy a utilizar otro usuario que voy a incorporar al fichero /etc/grub.d/40_custom. Con lo que estarán dos, el usuario fijado en set superuser, que se corresponde al superusuario del GRUB, el cual solo él puede editarlo, aparte de otras opciones, como la de poder iniciar el sistema. Y el que se añadirá ahora para que también tenga el privilegio de arrancar el sistema.

 

Tenemos que tener claro, que los usuarios que están en GRUB no tienen nada que ver con los usuarios del sistema, son cosas diferentes y no tienen nada que ver los unos con los otros.

 

Añadimos al nuevo usuario:

 

 

Para que este usuario tenga validez a la hora de poder iniciar el sistema, vamos a modificar unas entradas en el fichero /etc/grub.d/10_linux donde se encuentra instalado el GRUB:

 

 

Dentro de este fichero vamos a buscar unas entradas con el nombre: “menuentry” para añadir el parámetro –users, seguido del nombre del nuevo usuario añadido anteriormente.

 

 

Con este parámetro se le está diciendo que usuario puede arrancar esta entrada del sistema operativo del GRUB, en este caso Kali Linux. Este sistema ahora mismo debería arrancarlo los usuarios “pepe” y aparte, el superusuario del GRUB, “hurdano”.

Guardamos y no nos olvidemos del respectivo update del GRUB.

Al reiniciar la máquina, vemos que nos solicita meter unas credenciales de acceso para poder entrar al sistema.

 

 

 

Podemos comprobar que el sistema ha sido iniciado. No hace falta exponer con otras capturas que el superusuario del GRUB “hurdano” también puede hacerlo.

Vamos a aprovechar, para añadir al usuario “pepe” para que también él pueda editar el GRUB, aparte del superusuario.

 

 

Guardamos y hacemos el update para comprobar los cambios:

 

 

Ahora el usuario “pepe” también puede editar el GRUB. Pero… ¿Qué es lo que de verdad el usuario “pepe” puede hacer? Ahora puede hacer de todo, ya que “pepe” es también superusuario del GRUB, ya que el/los superusuarios son los únicos capaces de poder editar el GRUB.

 

Como hemos podido observar, son medidas bastante efectivas para poder proteger nuestros sistemas que cuenten con el gestor de arranque GRUB.

Aun así, no es suficiente, debemos tener en cuenta con que permisos cuenta el fichero de los usuarios del GRUB, ya que cualquiera podría ver las credenciales. Vamos a verlo paso a paso.

 

 

Podemos observar, que tiene permisos 755, lo que equivale a que el propietario puede leer, editar y ejecutar el fichero. Y el grupo y otros pueden abrirlo y leerlo. Obviamente el problema es que pueden ver las credenciales en texto plano cualquiera, con lo que nuestra protección del GRUB no serviría para nada.

Hemos creado un usuario, llamado “pepa” para comprobar que en efecto puede ver ese fichero:

 

 

 

Tenemos un problema en este punto, debemos corregirlo en la medida de lo posible para que estas credenciales queden “seguras” y nadie pueda hacer uso de estos usuarios.

Para empezar, vamos a hashear las passwords de los usuarios que contiene el fichero /etc/grub.d/40_custom. Para ello usaremos grub-mkpasswd-pbkdf2.

Editamos el fichero /etc/grub.d/40_custom, borramos las passwords en plano que teníamos antes, y ponemos el siguiente contenido:

 

 

Ahora hacemos el hash de las passwords:

 

 

La password que hemos introducido es “1234” que es la que tenían antes ambos usuarios. (No obstante, hay que aclarar que es una prueba y que no se debe de poner nunca contraseñas de este tipo).

 

Volvemos hacer lo mismo para el usuario “pepe”, ya que, aunque pongamos la misma contraseña en plano, nos devolverá un hash diferente:

 

 

Copiamos ambos hashes y los colocamos en el fichero /etc/grub.d/40_custom, seguido del nombre de los usuarios:

 

 

Guardamos los cambios, actualizamos el GRUB, y hacemos las respectivas comprobaciones de que tenemos más seguridad y que todo funciona correctamente.

Accedemos con el usuario “pepa” para ver que ya no están en texto plano las passwords:

 

 

A continuación, vamos a cambiarle los permisos al fichero, y comprobamos después que un usuario como “pepa” ya no puede visualizar de ningún modo el contenido del fichero /etc/grub.d/40_custom:

 

 

Volvemos a realizar el update, y reiniciamos la máquina, para comprobar que después de hashear las passwords, podemos acceder al sistema sin ningún problema, y dándonos como resultado un alto grado de seguridad en nuestro sistema gestor de arranque GRUB.

 

 

 

Esto ha sido todo en esta PoC. ¿Cómo se os ha quedado el cuerpo? Espero que la hayáis disfrutado y si tenéis algún equipo con varios S.O que cuenten con el gestor de arranque GRUB, ya sabéis como protegerlo un poquitín.

 

Sin más, me despido de vosotr@s y hasta la próxima!! Sed buen@s!!!

 

 

By Hurd4n0.

2 comentarios en «PoC: Ataque y Defensa de mi buen amigo Grub.»

  1. Si en lugar de GRUB utilizáis systemd-boot, se puede deshabilitar la edición del arranque añadiendo «editor 0» en /boot/loader/loader.conf.

Los comentarios están cerrados.