Práctica 1: Generación de eventos de autenticación en formato Syslog + CEF

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

Materia: Taller de MATLAB | Proyecto acumulativo: Mini SIEM en MATLAB Online

Nivel universitario MATLAB Online Ciberseguridad

1. Contexto de la práctica

En los sistemas de seguridad modernos, herramientas como Microsoft Sentinel, IBM QRadar u otros SIEM reciben miles o millones de eventos generados por servidores, aplicaciones, firewalls, VPN, servicios de autenticación y plataformas empresariales.

Estos eventos no siempre llegan en formatos simples. En muchos entornos se utilizan formatos estandarizados como Syslog y CEF para facilitar su interpretación, normalización y correlación. En esta práctica, el alumno construirá en MATLAB Online un generador básico de eventos de autenticación en formato Syslog + CEF, simulando la primera etapa de un sistema de monitoreo: la generación e ingesta de logs.

Idea central: MATLAB no solo se utilizará como una calculadora o herramienta matemática, sino como una plataforma para simular, analizar y correlacionar eventos de seguridad.

2. Objetivo general

Desarrollar un programa en MATLAB Online que genere eventos de autenticación simulados en formato Syslog + CEF, con el propósito de crear un dataset inicial que será utilizado en las siguientes prácticas para análisis, normalización, búsqueda, correlación y generación de alertas.

3. Objetivos específicos

4. Conocimientos previos requeridos

5. Conceptos clave

Concepto Descripción
Syslog Formato utilizado para enviar mensajes de eventos desde sistemas, servidores o aplicaciones.
CEF Common Event Format. Formato estructurado usado para representar eventos de seguridad.
Evento de autenticación Registro que indica si un usuario intentó iniciar sesión correctamente o falló.
SIEM Sistema que recolecta, analiza y correlaciona eventos de seguridad.
Dataset Conjunto de datos que será utilizado para análisis posteriores.

6. Estructura del evento esperado

El evento generado deberá tener una estructura similar a la siguiente:

<13>Apr 27 11:02:14 siem-lab vpn: CEF:0|MiniSIEM|AuthSystem|1.0|100|User Authentication|8|src=192.168.1.45 suser=user12 outcome=failure msg=Login failed app=vpn

Campos principales

7. Desarrollo paso a paso

Paso 1: Crear carpeta de trabajo

En MATLAB Online, crea una carpeta llamada:

mini_siem_matlab

Dentro de esta carpeta crea otra carpeta llamada:

data

Paso 2: Crear el archivo del programa

Crea un archivo nuevo llamado:

generador_siem_avanzado.m

Paso 3: Copiar el siguiente código

function generador_siem_avanzado()

    tamanos = [100, 10000, 1000000];

    for k = 1:length(tamanos)

        nEventos = tamanos(k);
        archivo = sprintf('data/logs_auth_%d.cef', nEventos);

        fprintf('Generando %d eventos...\n', nEventos);
        generar_eventos_avanzados(nEventos, archivo);
        fprintf('Archivo generado: %s\n', archivo);

    end

end


function generar_eventos_avanzados(nEventos, archivo)

    nUsuarios = max(10, round(nEventos * 0.10));
    usuarios = generar_usuarios(nUsuarios);

    apps = {'auth-web','vpn','ssh','cloud-app'};
    baseIP = '192.168.1.';

    fid = fopen(archivo, 'w');

    if fid == -1
        error('No se pudo crear el archivo de salida.');
    end

    i = 1;

    while i <= nEventos

        r = rand;

        if r < 0.10

            user = usuarios{randi(nUsuarios)};
            ip = [baseIP num2str(randi([1 254]))];
            app = apps{randi(length(apps))};

            nIntentos = randi([5 15]);

            for j = 1:nIntentos
                escribir_evento(fid, ip, user, 'failure', app);
                i = i + 1;
                if i > nEventos
                    break;
                end
            end

        elseif r < 0.20

            ip = [baseIP num2str(randi([1 254]))];
            app = apps{randi(length(apps))};

            nIntentos = randi([10 30]);

            for j = 1:nIntentos
                user = usuarios{randi(nUsuarios)};
                escribir_evento(fid, ip, user, 'failure', app);
                i = i + 1;
                if i > nEventos
                    break;
                end
            end

        elseif r < 0.30

            burst = randi([20 100]);

            for j = 1:burst

                user = usuarios{randi(nUsuarios)};
                ip = [baseIP num2str(randi([1 254]))];
                app = apps{randi(length(apps))};
                outcome = seleccionar_outcome();

                escribir_evento(fid, ip, user, outcome, app);

                i = i + 1;
                if i > nEventos
                    break;
                end
            end

        else

            user = usuarios{randi(nUsuarios)};
            ip = [baseIP num2str(randi([1 254]))];
            app = apps{randi(length(apps))};
            outcome = seleccionar_outcome();

            escribir_evento(fid, ip, user, outcome, app);

            i = i + 1;

        end

        if mod(i,10000) == 0
            fprintf('Generados %d eventos...\n', i);
        end

    end

    fclose(fid);

end


function outcome = seleccionar_outcome()

    if rand < 0.7
        outcome = 'success';
    else
        outcome = 'failure';
    end

end


function escribir_evento(fid, ip, user, outcome, app)

    t = datetime('now') - seconds(randi(86400));
    timestamp = datestr(t, 'mmm dd HH:MM:SS');

    pri = randi([10 20]);
    hostname = 'siem-lab';

    if strcmp(outcome,'success')
        severity = '3';
        msg = 'Login successful';
    else
        severity = '8';
        msg = 'Login failed';
    end

    syslogHeader = sprintf('<%d>%s %s %s:', pri, timestamp, hostname, app);

    cef = sprintf(['CEF:0|MiniSIEM|AuthSystem|1.0|100|User Authentication|%s|' ...
        'src=%s suser=%s outcome=%s msg=%s app=%s'], ...
        severity, ip, user, outcome, msg, app);

    linea = [syslogHeader ' ' cef];

    fprintf(fid, '%s\n', linea);

end


function usuarios = generar_usuarios(nUsuarios)

    usuarios = cell(nUsuarios,1);

    for i = 1:nUsuarios
        usuarios{i} = ['user' num2str(i)];
    end

end

Paso 4: Ejecutar el programa

En la consola de MATLAB Online ejecuta:

generador_siem_avanzado

Paso 5: Verificar los archivos generados

Al finalizar, dentro de la carpeta data deberán existir los siguientes archivos:

Nota: Si MATLAB Online tarda demasiado con el archivo de 1,000,000 eventos, el alumno podrá comentar temporalmente ese tamaño y trabajar primero con 100 y 10,000 eventos.

8. Resultado esperado

El alumno deberá contar con archivos de logs generados en formato Syslog + CEF. Estos archivos serán la base de trabajo para las siguientes prácticas del Mini SIEM.

Ejemplo esperado:

<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

9. Validación de la práctica

El alumno deberá comprobar:

10. Preguntas de reflexión

  1. ¿Por qué es importante que los eventos tengan un formato estructurado como CEF?
  2. ¿Qué diferencia existe entre un evento de autenticación exitoso y uno fallido desde el punto de vista de seguridad?
  3. ¿Qué patrones podrían indicar un intento de ataque de fuerza bruta?
  4. ¿Qué utilidad tiene simular múltiples aplicaciones dentro del mismo conjunto de logs?
  5. ¿Por qué un SIEM necesita normalizar los eventos antes de correlacionarlos?

11. Tarea para entregar en Microsoft Teams

Entrega: Evidencia de generación de logs CEF

El alumno deberá subir a Teams un archivo PDF con la siguiente evidencia:

  1. Portada con nombre completo, grupo, materia y fecha.
  2. Captura de pantalla de la carpeta mini_siem_matlab.
  3. Captura de pantalla de la ejecución del programa en MATLAB Online.
  4. Captura donde se observe al menos uno de los archivos generados.
  5. Copia de 5 eventos generados en formato Syslog + CEF.
  6. Respuesta breve a las 5 preguntas de reflexión.
  7. Conclusión personal: ¿cómo se relaciona esta práctica con un SIEM real?

12. Criterios de evaluación

Criterio Valor
Programa funcional en MATLAB Online 30%
Archivos de logs generados correctamente 25%
Comprensión del formato Syslog + CEF 20%
Respuestas de reflexión 15%
Presentación y orden de la evidencia 10%

13. Cierre de la práctica

Esta práctica representa el punto de partida del Mini SIEM en MATLAB. A partir de este dataset, las siguientes prácticas trabajarán la lectura, parsing, normalización, análisis estadístico, detección de patrones, correlación de eventos y generación de alertas.