Laboratorio de escalada de privilegios en Linux: un binario setuid, una regla sudo, cron
Cada alumno recibe una máquina virtual Ubuntu propia con una segunda cuenta de pocos privilegios, intern, cuyo nombre y contraseña se dan en el README. Root ha dejado tres errores corrientes de administrador: un programa auxiliar que lleva un bit que no debería tener, una regla sudo que nunca se acotó, y un script que ejecuta el propio cron de root y que cualquiera puede modificar. La tarea consiste en usar una de las tres para llegar a root y redactar lo que usaron.
La máquina virtual es solo del alumno, sin ruta a la máquina de ningún otro alumno ni a Internet salvo el archivo de paquetes de Ubuntu, PyPI, npm y GitHub, de modo que la única máquina que hay que atacar es la que dio el laboratorio. La regla se dice al principio del laboratorio, y es tanto de la ley como nuestra: ataca solo tu propia máquina virtual, nunca una que no sea tuya, conforme al Computer Misuse Act 1990.
Lo que aprenden los alumnos
Cómo un pequeño atajo administrativo corriente se convierte en un camino hacia root: un programa al que se dio más privilegio del que su trabajo necesita, una regla sudo escrita para una sola orden y nunca revisada, y una tarea programada que confía en un archivo que cualquiera puede cambiar. Encontrar cada una exige mirar una máquina como debería hacerlo un administrador antes de entregar una cuenta a otra persona, no ejecutar un escáner. Sirve para un primer curso de seguridad Linux, de endurecimiento de sistemas o de introducción a las pruebas de intrusión.
Las debilidades
Un programa auxiliar, copia de una herramienta corriente del sistema, con el bit setuid puesto para que siempre se ejecute como root. Una línea en la configuración de sudo que deja a la cuenta de pocos privilegios ejecutar un programa corriente como root sin contraseña. Un script que el cron de root ejecuta cada minuto, dejado modificable por cualquiera en la máquina. El README que deja el laboratorio en la carpeta personal nombra la segunda cuenta y no revela ninguna de las tres.
Ejecútalo en tu navegador
Los laboratorios de máquina virtual se configuran como una tarea de laboratorio en un módulo, y el ejemplo está en la página del laboratorio. La máquina es pequeña: una CPU, 1 GB de memoria y 6 GB de disco.
- Añade el laboratorio. En un módulo que impartes, añade una tarea y elige la tarjeta «Laboratorio de máquina virtual Ubuntu». La página muestra una breve descripción de la máquina en lugar de un archivo compose.
- Parte del ejemplo. La página ofrece laboratorios de ejemplo para empezar. Elige Linux privilege escalation. Usar un ejemplo sustituye el texto, y «Deshacer» recupera el tuyo.
- Publica e inicia tu propia copia. Publica y después pulsa «Iniciar». El script de preparación del laboratorio crea la segunda cuenta, escribe la bandera y siembra las tres debilidades desde el archivo de Ubuntu la primera vez que se inicia la máquina virtual, en unos diez segundos.
- Abre el terminal. Abre su terminal y lee README.md en la carpeta personal: dice el nombre y la contraseña de la segunda cuenta y no da ninguna respuesta.
Una lección básica sobre este laboratorio
Privilege Escalation Basics es una lección pequeña que se hace en este laboratorio, que es una máquina virtual Ubuntu: cada paso está explicado y tiene un botón Ejecutar que escribe su orden en el terminal de la máquina y muestra lo que imprimió. El alumno conoce la segunda cuenta, mira qué puede y qué no puede ejecutar, y lee los tres lugares donde root dejó algo, sin usarlos.
La lección se limita a mirar alrededor y deja al alumno la tarea propia del laboratorio, llegar a root, así que no da ninguna respuesta. Es deliberadamente pequeña: muestra a un profesor qué es una lección hecha en un laboratorio, y el laboratorio hace el resto. Cópiala en un módulo propio para cambiarla.
Cómo se entrega y se lee
Este laboratorio no tiene un script de calificación, a propósito. Un alumno en la máquina ya tiene sus propios derechos de administrador: cualquier archivo que un script pudiera leer como prueba, el alumno podría escribirlo en una línea sin usar las debilidades del laboratorio. Una nota fácil de falsear es peor que ninguna, así que el trabajo es un relato escrito que lees tú. La bandera es el objetivo del alumno y un apoyo para ese relato, no una prueba. Corregir las debilidades después no se pide aquí, y puedes ponerlo como trabajo posterior.
- Asígnalo. Asigna el laboratorio como cualquier tarea, con una fecha de entrega si quieres. Cada alumno recibe una máquina virtual propia, que se conserva de una sesión a otra. En los ajustes de entrega de la tarea elige Documentos, para que el alumno entregue un relato escrito.
- Lee el relato. El alumno entrega un relato breve: qué debilidad usó, los comandos que lo lograron y qué decía la bandera. Nada en la máquina lo califica, así que lo lees tú.
- Califícalo. Califícalo como cualquier entrega y devuelve el trabajo con un motivo si necesita más.
La definición en GitHub
El archivo es toda la definición del laboratorio, el mismo texto que ejecuta la plataforma: tamaño, script de preparación y README. Cópialo y cambia qué programa lleva el bit setuid, qué orden permite la regla sudo, o qué hace el script modificable, para hacer un laboratorio propio.
Preguntas frecuentes
- ¿Pueden los alumnos usar esto contra un servidor real?
- No, y el laboratorio lo dice antes que nada. La máquina virtual no tiene ruta a ninguna otra máquina, y tanto el README como esta página dicen la regla: ataca solo tu propia copia, lo que el Computer Misuse Act 1990 pone como condición para hacer esto siquiera.
- ¿Puede un alumno falsearlo sin llegar a root?
- Sí, y el laboratorio no lo disimula: un alumno en la máquina tiene derechos de administrador propios y podría leer la bandera en una línea. Por eso nada lo califica automáticamente. Lo que lees es el relato, con las palabras y los comandos del alumno.
- ¿Tienen los alumnos que corregir las debilidades después?
- No, en este laboratorio no. Corregirlas queda como un trabajo aparte, posterior, que puede poner un profesor.