Práctica 2: Normalización y parsing de eventos Syslog + CEF

Centro Universitario UAEM Nezahualcóyotl - Ingeniería en Sistemas Inteligentes

Proyecto: Mini SIEM en MATLAB

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.

Idea clave: Un SIEM no trabaja con texto libre, trabaja con datos estructurados.
---

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

mini_siem_matlab/
 ├── data/
 ├── scripts/
---

4. Conceptos clave

---

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

---

9. Preguntas de reflexión

  1. ¿Por qué es necesario transformar los logs en una estructura de datos?
  2. ¿Qué problemas existirían si se analizan logs sin normalizar?
  3. ¿Qué campo consideras más importante para detectar ataques?
  4. ¿Qué limitaciones tiene este parser?
  5. ¿Cómo mejorarías la extracción de datos?
---

10. Tarea (Teams)

Subir un PDF con:

---

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.