¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Encontrar un ataque en los registros

Después de esta lección: Puedo encontrar una intrusión en un registro, contenerla y nombrar el arreglo.

Lección de 55 min10 comandosLaboratorio de respuesta a incidentes y forense: investiga un servidor comprometido

Un ataque escondido entre cientos de fallos

Encontrar un ataque en un registro es leer lo que un servidor anotó de sus entradas y señalar la dirección que logró entrar. Importa porque un solo ataque se esconde entre cientos de fallos sin peligro, y hay que frenarlo antes de que se extienda.

La mayoría de los fallos son robots que nunca entran. Algunos son el dueño que se equivoca de contraseña. Una dirección es distinta: falla una y otra vez, y luego acierta.

Al final de esta lección

Nota

Puedo encontrar una intrusión en un registro, contenerla y nombrar el arreglo.

Palabras clave

PalabraQué significa
Registroun archivo donde un sistema anota lo que pasó, una línea cada vez
Fuerza brutaprobar muchas contraseñas hasta que una funciona
Dirección de origenla dirección de red desde la que llegó una conexión
Contenciónfrenar el daño antes de que se extienda, antes de arreglar la causa
Ruidolíneas de registro que asustan y no significan nada
Pivoteel único dato que separa un ataque del ruido

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Primero cuenta, luego pregunta quién entró

El caso es una copia del registro SSH de un servidor, en la carpeta case. Es de solo lectura, para que la prueba quede tal cual.

Un número grande no es un ataque por sí solo. Primero cuenta los fallos de cada dirección. Luego pregunta qué direcciones llegaron a entrar.

Cuenta los accesos fallidos por dirección

Comando
grep "Failed password" case/var/log/auth.log | awk '{for (i = 1; i <= NF; i++) if ($i == "from") print $(i + 1)}' | sort | uniq -c | sort -rn | head -n 3

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Las tres primeras

El Run escribió tres líneas, cada una con un número y una dirección. En la máquina de prueba los números fueron 260, 70 y 3. Las direcciones son las mismas para todos los estudiantes de este laboratorio.

La dirección con 260 fallos es la más ruidosa. Ruidosa no significa peligrosa, así que no te detengas aquí.

¿Quién entró y desde dónde?

Comando
awk '$6 == "Accepted" {print $9, $11}' case/var/log/auth.log | sort | uniq -c

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Guarda las direcciones que entraron

Comando
awk '$6 == "Accepted" {print $11}' case/var/log/auth.log | sort -u > aceptadas.txt

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

¿Qué dirección ruidosa también entró?

Comando
awk '$6 == "Failed" {for (i = 1; i <= NF; i++) if ($i == "from") print $(i + 1)}' case/var/log/auth.log | sort | uniq -c | awk '$1 >= 20 {print $2}' | sort | comm -12 - aceptadas.txt | tee sospechosa.txt

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Muestra su primer acceso correcto

Comando
grep Accepted case/var/log/auth.log | grep -F -f sospechosa.txt | head -n 1

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Qué encontraron los cuatro Run

El primero escribió tres grupos. El administrador entró desde la dirección de la oficina, y una vez desde la dirección donde se equivocó al teclear. Una tercera cuenta entró dos veces desde la dirección sospechosa.

El Run del pivote escribió una dirección. Falló al menos veinte veces y luego acertó. El último Run mostró la línea de su primer acierto, con la hora y la cuenta.

Primero contener, luego arreglar la causa

Cuando lo sepas, haz los pasos en este orden. Contener es rápido y se puede deshacer. Arreglar lleva más tiempo y debe estar bien hecho.

No borres nada todavía. La prueba sirve para saber qué más se tocó.

Ejemplo: de la línea al arreglo

PasoQué hacesPor qué
DetectarContar los fallos por dirección y ver quién entróEncuentra el pivote
ContenerBloquear la cuenta y rechazar la direcciónEl intruso no puede volver a usarla
Arreglar la causaSolo claves SSH, una regla para el puerto, sin contraseñaEl mismo intento ya no puede funcionar
ComprobarBuscar lo que dejó: claves, tareas, cuentas nuevasCierra una segunda vía de vuelta

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Practica la contención en una cuenta tuya

No tocas ninguna cuenta del caso. Crea una cuenta desechable llamada demo7, bloquéala, lee su estado y bórrala.

Una cuenta bloqueada no puede entrar con contraseña, y no se borra nada. Por eso es el primer paso.

Crea la cuenta desechable

Comando
sudo useradd -m -s /bin/bash demo7

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Bloquea su contraseña

Comando
sudo passwd -l demo7

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Lee su estado

Comando
sudo passwd -S demo7

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Borra la cuenta y su carpeta

Comando
sudo userdel -r demo7

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Qué escribieron los Run de la cuenta

El Run de bloqueo escribió passwd: password changed.. El Run de estado escribió una línea que empieza por demo7 L. La letra L significa bloqueada. Una cuenta que puede entrar muestra P.

El Run de borrado puede escribir un aviso sobre un buzón de correo. No importa: la cuenta nunca tuvo correo.

Borra los dos archivos que creaste

Comando
rm aceptadas.txt sospechosa.txt

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error frecuente

Advertencia

Mucha gente bloquea la dirección con más fallos y da el incidente por cerrado. Esa dirección nunca entró. La que sí entró es más discreta, y sigue dentro. Pregunta siempre quién acertó, y revisa qué cambió.

Para ir más lejos: qué más hizo

Mira el registro del servidor web, case/var/log/nginx/access.log. Repite los dos Run que guardan para rehacer sospechosa.txt, y cuenta las peticiones de esa dirección con grep -c -F -f sospechosa.txt. Borra después los dos archivos.

Escribe una frase: ¿qué pedía una hora antes de empezar a adivinar contraseñas?

Sobre este laboratorio y su código: Laboratorio de respuesta a incidentes y forense: investiga un servidor comprometido

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.