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
| Palabra | Qué significa |
|---|---|
| Registro | un archivo donde un sistema anota lo que pasó, una línea cada vez |
| Fuerza bruta | probar muchas contraseñas hasta que una funciona |
| Dirección de origen | la dirección de red desde la que llegó una conexión |
| Contención | frenar el daño antes de que se extienda, antes de arreglar la causa |
| Ruido | líneas de registro que asustan y no significan nada |
| Pivote | el ú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
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 3Se 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?
awk '$6 == "Accepted" {print $9, $11}' case/var/log/auth.log | sort | uniq -cSe 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
awk '$6 == "Accepted" {print $11}' case/var/log/auth.log | sort -u > aceptadas.txtSe 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ó?
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.txtSe 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
grep Accepted case/var/log/auth.log | grep -F -f sospechosa.txt | head -n 1Se 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
| Paso | Qué haces | Por qué |
|---|---|---|
| Detectar | Contar los fallos por dirección y ver quién entró | Encuentra el pivote |
| Contener | Bloquear la cuenta y rechazar la dirección | El intruso no puede volver a usarla |
| Arreglar la causa | Solo claves SSH, una regla para el puerto, sin contraseña | El mismo intento ya no puede funcionar |
| Comprobar | Buscar lo que dejó: claves, tareas, cuentas nuevas | Cierra 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
sudo useradd -m -s /bin/bash demo7Se 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
sudo passwd -l demo7Se 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
sudo passwd -S demo7Se 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
sudo userdel -r demo7Se 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
rm aceptadas.txt sospechosa.txtSe 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?