1. Contexto
En la práctica anterior se generaron eventos en formato Syslog + CEF. Sin embargo, estos eventos aún no pueden ser analizados de manera eficiente debido a que están en formato texto plano.
En sistemas reales como SIEM, antes de poder realizar búsquedas, correlaciones o alertas, es necesario transformar los logs en una estructura organizada. Este proceso se denomina normalización.
2. Objetivo
Desarrollar un proceso en MATLAB que permita leer los logs generados en la práctica anterior, interpretar su estructura CEF y convertirlos en datos estructurados utilizables para análisis.
---3. Precondiciones
- Haber completado la Práctica 1.
- Contar con al menos un archivo generado:
- logs_auth_100.cef o logs_auth_10000.cef
- Tener acceso a MATLAB Online.
- Tener la estructura de carpetas:
mini_siem_matlab/ ├── data/ ├── scripts/---
4. Conceptos clave
- Parsing: proceso de interpretar texto y extraer información.
- Normalización: convertir datos en formato estándar.
- Campos estructurados: datos organizados en columnas.
5. Ejemplo de evento
<15>Apr 27 13:44:22 siem-lab auth-web: CEF:0|MiniSIEM|AuthSystem|1.0|100|User Authentication|3| src=192.168.1.89 suser=user45 outcome=success msg=Login successful app=auth-web---
6. Desarrollo paso a paso
Paso 1: Crear script de normalización
Crear archivo:
scripts/normalizar_logs.m---
Paso 2: Leer archivo de logs
fid = fopen('../data/logs_auth_100.cef','r');
if fid == -1
error('No se pudo abrir el archivo');
end
linea = fgetl(fid);
---
Paso 3: Recorrer todos los eventos
eventos = {};
while ischar(linea)
eventos{end+1} = linea;
linea = fgetl(fid);
end
fclose(fid);
---
Paso 4: Extraer campos CEF
datos = [];
for i = 1:length(eventos)
linea = eventos{i};
% Extraer IP
ip = extractBetween(linea, 'src=', ' suser');
% Usuario
user = extractBetween(linea, 'suser=', ' outcome');
% Resultado
outcome = extractBetween(linea, 'outcome=', ' msg');
% Aplicacion
app = extractAfter(linea, 'app=');
datos = [datos; {char(ip), char(user), char(outcome), char(app)}];
end
---
Paso 5: Crear estructura tipo tabla
tabla = cell2table(datos, ...
'VariableNames', {'IP','Usuario','Resultado','Aplicacion'});
disp(tabla(1:10,:));
---
Paso 6: Guardar resultado
save('../data/logs_normalizados.mat','tabla');
---
7. Resultado esperado
El resultado debe ser una tabla estructurada donde cada fila representa un evento y cada columna un atributo.
---8. Validación
- El script debe ejecutarse sin errores.
- Debe generarse una tabla con datos.
- Los campos deben corresponder correctamente a los eventos.
9. Preguntas de reflexión
- ¿Por qué es necesario transformar los logs en una estructura de datos?
- ¿Qué problemas existirían si se analizan logs sin normalizar?
- ¿Qué campo consideras más importante para detectar ataques?
- ¿Qué limitaciones tiene este parser?
- ¿Cómo mejorarías la extracción de datos?
10. Tarea (Teams)
Subir un PDF con:
- Captura del script funcionando.
- Tabla generada (mínimo 10 registros).
- Ejemplo de 3 eventos parseados.
- Respuestas a las preguntas.
- Conclusión sobre la importancia de la normalización.
11. Cierre
En esta práctica se ha construido el proceso fundamental que permite a un SIEM interpretar eventos. En la siguiente práctica se trabajará sobre estos datos para realizar consultas y análisis.