Laboratorio de respuesta a incidentes y forense: investiga un servidor comprometido

Este laboratorio da a cada alumno su propia máquina virtual Ubuntu con los registros y archivos de un servidor web atacado anoche: un registro SSH con una ráfaga de contraseñas probadas, un registro del servidor web lleno de escáneres, el archivo de cuentas, las crontabs y una lista de cuándo se cambió cada archivo. El alumno es el responsable de la respuesta al incidente y tiene que descubrir quién entró, con qué cuenta, cuándo y qué dejó para volver.

No hay malware ni código de explotación, y no hay nada que ejecutar: todo es texto, que se lee con las herramientas que tiene cualquier máquina Linux.

Qué aprenden los alumnos

Leer registros como pruebas: buscar en un registro SSH con grep y awk, contar y ordenar con sort y uniq, y distinguir un ataque del ruido de fondo. El caso tiene señuelos a propósito, así que una búsqueda perezosa no lo resuelve: la dirección con más inicios de sesión fallidos nunca entra, un administrador se equivoca de contraseña y luego acierta, y un usuario nuevo legítimo y una clave SSH antigua están junto a lo que dejó el intruso. Construyen una cronología y usan la hora de un cambio para distinguir el trabajo del intruso del del administrador.

La tarea

El alumno encuentra seis cosas y las escribe en answers.txt, una línea etiquetada cada una: la dirección de la que vino el ataque, la cuenta comprometida, la hora del primer inicio de sesión correcto, el tipo de persistencia que quedó, el archivo donde está y el programa que sigue ejecutando. El README que el laboratorio deja en la carpeta personal dice qué encontrar y no da ninguna respuesta.

Las pruebas son de solo lectura, así que las respuestas tienen que salir de leerlas. Todos los alumnos tienen el mismo caso.

Ejecútalo en tu navegador

Los laboratorios de máquina virtual se asignan como tarea de laboratorio en un módulo, y el ejemplo está en la página del laboratorio.

  1. Añadir el laboratorio. En un módulo que enseñes, 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.
  2. Empezar desde el ejemplo. La página ofrece laboratorios ya preparados para empezar. Elige Incident response and forensics. Usar un ejemplo sustituye el texto, y «Deshacer» recupera el tuyo.
  3. Publicar e iniciar tu propia copia. Publica y luego pulsa «Iniciar». El script de preparación del laboratorio crea el caso la primera vez que arranca la máquina, en unos segundos. No instala nada del archivo de Ubuntu, salvo que la imagen no tenga Python.
  4. Abrir el terminal. Abre su terminal y lee README.md en la carpeta personal: nombra las pruebas de la carpeta case y lo que hay que encontrar, y no da ninguna respuesta. Las respuestas van en answers.txt, una línea etiquetada cada una.

Una lección básica en este laboratorio

Incident Response Basics es una lección breve hecha en este laboratorio, que es una máquina virtual Ubuntu: cada paso está explicado y tiene un botón Ejecutar que escribe su comando en el terminal de la máquina y muestra lo que imprimió. El alumno lista las pruebas, cuenta las líneas de los dos registros, lee las primeras líneas del registro SSH y cuenta las contraseñas fallidas.

Miran alrededor y dejan la tarea propia del laboratorio, encontrar al atacante, al alumno, así que la lección no da respuestas. Una cuenta personal gratuita la recibe en el módulo Basics, que está en Inicio, cada centro puede copiarla de la carpeta Basics de la Biblioteca, y es deliberadamente breve: muestra a un docente lo que 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 califica

El laboratorio tiene una comprobación. Lee answers.txt, que puede escribirse con cualquier mayúscula y con cualquier espacio, y compara cada respuesta con el caso. Cuando una es incorrecta, nombra el primer campo incorrecto y nunca dice cuál es la respuesta. También rechaza un caso cuyas pruebas se cambiaron para ajustarlas a una respuesta.

Un alumno tiene sudo en su propia máquina virtual, así que uno que lea los archivos de root podría encontrar la clave. Eso se acepta: el laboratorio es práctica, y lo que se califica es la respuesta escrita.

  1. Repartirlo. Asigna el laboratorio como cualquier tarea, con fecha de entrega si quieres. Cada alumno recibe una máquina virtual propia, conservada entre sesiones, con el mismo caso.
  2. Ejecutar la comprobación. En la fila de un alumno en la lista de la clase, pulsa «Ejecutar la comprobación». Inicia una copia de su máquina guardada que no se guarda de vuelta, ejecuta como root el script de comprobación del laboratorio y muestra si se superó, qué imprimió y cuándo. Al alumno no se le comunica el resultado.
  3. Calificarlo. Lee lo que imprimió la comprobación: la primera línea nombra el primer campo incorrecto y nunca la respuesta. Devuelve el trabajo con un motivo si necesita más.

La definición en GitHub

El archivo es la definición completa del laboratorio, el mismo texto que ejecuta la plataforma: tamaño, script de preparación que crea el caso a partir de una semilla fija, README y comprobación. Cópialo y cambia el generador del script de preparación para hacer tu propio caso.

Preguntas frecuentes

¿Hay malware en el laboratorio?
No. El caso es texto: registros, un archivo de cuentas, crontabs, claves y una lista de horas. Nada se ejecuta, y las direcciones son de rangos reservados para documentación o de rangos privados.
¿Qué tamaño de máquina necesita cada alumno?
Una CPU, 1 GB de memoria y 10 GB de disco. El laboratorio solo instala Python, y solo si la imagen no lo tiene.
¿Puede un alumno buscar la respuesta?
Un alumno tiene sudo en su propia máquina virtual, así que uno decidido puede leer la clave de la comprobación en los archivos de root. El laboratorio es práctica, y lo que califica tu docente es la respuesta escrita.