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.
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
- Comprender la función de los logs dentro de un sistema de monitoreo de seguridad.
- Identificar la estructura básica de un evento Syslog y un evento CEF.
- Generar eventos simulados de autenticación exitosa y fallida.
- Crear archivos de prueba con 100, 10,000 y 1,000,000 eventos.
- Preparar un archivo base para las prácticas acumulativas del Mini SIEM.
4. Conocimientos previos requeridos
- Uso básico de MATLAB Online.
- Creación y ejecución de archivos .m.
- Conceptos básicos de variables, funciones, ciclos y cadenas de texto.
- Conocimiento general sobre autenticación de usuarios.
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
- src: dirección IP origen.
- suser: usuario que realiza el intento de autenticación.
- outcome: resultado del evento, success o failure.
- msg: mensaje descriptivo del evento.
- app: aplicación donde ocurrió el evento.
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:
- logs_auth_100.cef
- logs_auth_10000.cef
- logs_auth_1000000.cef
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:
- Que el programa se ejecuta sin errores.
- Que los archivos fueron creados en la carpeta data.
- Que los eventos contienen estructura Syslog + CEF.
- Que existen eventos con resultado success y failure.
- Que se incluyen diferentes usuarios, direcciones IP y aplicaciones.
10. Preguntas de reflexión
- ¿Por qué es importante que los eventos tengan un formato estructurado como CEF?
- ¿Qué diferencia existe entre un evento de autenticación exitoso y uno fallido desde el punto de vista de seguridad?
- ¿Qué patrones podrían indicar un intento de ataque de fuerza bruta?
- ¿Qué utilidad tiene simular múltiples aplicaciones dentro del mismo conjunto de logs?
- ¿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:
- Portada con nombre completo, grupo, materia y fecha.
- Captura de pantalla de la carpeta mini_siem_matlab.
- Captura de pantalla de la ejecución del programa en MATLAB Online.
- Captura donde se observe al menos uno de los archivos generados.
- Copia de 5 eventos generados en formato Syslog + CEF.
- Respuesta breve a las 5 preguntas de reflexión.
- 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.