Análisis de registros
Parsea 5.000 eventos de seguridad sintéticos y los resume en un informe de incidentes con cuatro tablas.
Seguridad · Python · Demo navegable
El problema
Cualquier servidor escribe miles de líneas al día y un ataque se esconde justo ahí, en el ruido. El primer trabajo de un centro de operaciones de seguridad no es responder: es separar la señal, contar los intentos fallidos y ordenar las direcciones por insistencia.
Qué hace
- Genera un registro sintético con semilla fija, mezclando tráfico normal y malicioso, para que el informe publicado corresponda siempre al registro publicado.
- Lee cada línea con expresiones regulares y clasifica el tipo de suceso.
- Ordena las cinco direcciones con más accesos fallidos y cuenta los sucesos de cada tipo, incluidas las líneas que no supo leer.
- Escribe un informe de amenazas en Markdown, sin una sola dependencia externa.
Lo que se decidió al construirlo
- Contar y maquetar son dos cosas distintas
- Las cifras se calculan en una función y el informe se compone en otra. Cuando vivían juntas, la única manera de llegar a un número era volver a leerlo del texto ya maquetado, así que el panel y el informe recontaban el fichero cada uno por su lado y se separaban en cuanto cambiaba una regla.
- Una línea ilegible es un hallazgo, no un hueco
- Las líneas que el analizador no entiende se cuentan y se publican. Descartarlas en silencio es lo que convierte «no supe leer la mitad del registro» en «no hay amenazas», y esas dos frases se parecen mucho en un informe y nada en la realidad.
- Reloj y semilla fijos, para que el informe corresponda al registro
- La ventana temporal partía de la hora actual, así que cada ejecución producía un fichero distinto y el informe publicado dejaba de corresponder al registro publicado. Ahora la fecha de inicio y la semilla están fijadas: el mismo código produce el mismo registro y el mismo informe.
- Sin una sola dependencia
- Todo el análisis corre con la biblioteca estándar: expresiones regulares y contadores. Un analizador de registros que hay que instalar es un analizador que no se ejecuta en la máquina donde está el problema, que suele ser precisamente donde hace falta.
Hasta dónde llega
- Los cinco mil eventos son sintéticos y los genera el propio repositorio con una semilla fija. No hay ni una línea de una red real, y las direcciones son de rango privado inventadas.
- Los eventos de fuerza bruta vienen ya etiquetados por el generador: el análisis los cuenta, no los descubre. Lo que sí se calcula a partir de los datos es el ranking de las direcciones con más accesos fallidos.
- Entiende su propio formato de registro y nada más. Un registro de sistema real, un journal de Linux o un visor de sucesos de Windows caerían enteros en el contador de líneas ilegibles.
- No hay alertas, ni umbrales configurables, ni conexión con un cortafuegos o un gestor de eventos. La salida es un informe y unos ficheros de datos.
Construido con
- Python
De dónde salen los datos
Datos sintéticos generados por el propio repositorio: no hay información de ningún cliente.