¿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

Reglas de detección sobre registros

Después de esta lección: Puedo escribir una regla que encuentra un ataque en un registro.

Lección de 60 min4 comandosLaboratorio de respuesta a incidentes y forense: investiga un servidor comprometido

Cuarenta intentos en dos minutos

Una regla de detección es una condición que se aplica a un registro y avisa cuando se cumple. Con tres piezas, coincidir, contar y fijar una ventana de tiempo, detectas ataques que a simple vista se pierden entre miles de líneas.

Alguien prueba contraseñas en la cuenta de un profesor del aula virtual: cuarenta intentos en dos minutos. Un solo intento fallido es normal. Cuarenta seguidos no lo son.

Al final de esta lección

Nota

Puedo escribir una regla que encuentra un ataque en un registro.

Palabras clave

PalabraQué significaEjemplo
Regla de detecciónuna condición que se aplica a los registros y avisa si se cumple
Coincidenciauna línea que encaja con lo que buscascontraseña incorrecta
Umbralel número de sucesos a partir del cual la regla avisa
Ventana de tiempoel periodo en que cuentas los sucesos, por ejemplo 60 segundos
Fuerza brutaprobar muchas contraseñas hasta acertar una
Dirección de origenla dirección de red desde la que llega una petición

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

Las tres piezas de una regla

Coincidir: qué líneas te interesan, por ejemplo las que dicen contraseña incorrecta.

Contar: cuántas veces ocurre, casi siempre por dirección o por cuenta.

Ventana: en cuánto tiempo. Cinco fallos en un minuto son raros. Cinco fallos en un año no lo son.

El número a partir del cual avisas es el umbral.

Ejemplo: tres reglas y sus piezas

ReglaCoincide conCuentaVentana
Un fallo de contraseñaLíneas de falloNadaNinguna
Cinco fallos desde una direcciónLíneas de falloPor dirección60 segundos
Tres páginas prohibidas seguidasEstado 403 del servidor webPor dirección120 segundos

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

Cómo se cuenta dentro de una ventana

Para cada suceso, abre una ventana que empieza en él y dura, por ejemplo, 60 segundos. Cuenta cuántos sucesos caen dentro.

Si llegas al umbral, avisa. El final de la ventana no cuenta: en la ventana de 100 a 160 entra el segundo 159, pero no el 160.

Ejemplo: umbral 3 y ventana de 60 segundos

Empieza enVentanaSucesos dentroAvisa
100100 a 159100, 110 y 130: son 3Sí
110110 a 169110 y 130: son 2No
130130 a 189Solo 130: es 1No
400400 a 459400 y 410: son 2No
410410 a 469Solo 410: es 1No

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

Probar una regla desde la terminal

Con printf puedes fabricar un registro pequeño y probar una regla antes de usarla de verdad. El primer comando coincide y cuenta: filtra las líneas de fallo y cuenta las repetidas. El segundo mira una ventana: deja los sucesos entre 100 y 159 y los cuenta.

Coincidir y contar en un registro pequeño

Comando
printf 'fallo 10.0.0.5\nfallo 10.0.0.5\nok 10.0.0.9\nfallo 10.0.0.5\n' | grep fallo | 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.

Contar los sucesos de una ventana

Comando
printf '100\n110\n130\n400\n410\n' | awk '$1 >= 100 && $1 < 160' | wc -l

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

Dos reglas de solo coincidencia en el laboratorio

En el laboratorio, una regla que solo coincide ya da un número. Los dos comandos cuentan las líneas que dicen Invalid user, usuario inexistente, en el registro de autenticación. Y las peticiones con estado 404 en el servidor web.

No dicen quién ni cuándo, porque aún no cuentan por dirección ni usan ventana.

Cuántas líneas dicen usuario inexistente

Comando
grep -c "Invalid user" case/var/log/auth.log

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

Cuántas peticiones recibieron un 404

Comando
grep -c '" 404 ' case/var/log/nginx/access.log

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

La regla de la ventana en Python

El programa recorre los sucesos. Para cada uno cuenta cuántos caen en su ventana. Si alguno llega al umbral, hay alarma.

Ejecuta el ejemplo con los números de la tabla. Cambia el umbral a 4 y piensa qué imprimirá antes de ejecutarlo.

Una regla con umbral y ventana

Código: python
times = [100, 110, 130, 400, 410]
limit = 3    # el umbral: cuántos sucesos hacen saltar la regla
window = 60  # la ventana, en segundos
alert = False
for start in times:
    count = 0
    for moment in times:
        if moment >= start and moment < start + window:
            count = count + 1
    if count >= limit:
        alert = True
print(alert)

Un error frecuente

Advertencia

Mucha gente cuenta los fallos de todo el día sin ventana. Un error a las nueve y otro a las cinco suman y la regla salta sin ataque. Sin ventana, un día largo siempre acaba superando el umbral.

Para ir más lejos

Una regla puede combinar dos sucesos: varios fallos seguidos de un acceso correcto desde la misma dirección. Escribe en palabras qué líneas coinciden, qué cuentas y qué ventana usas. Después piensa en qué caso normal saltaría sin ataque.

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.