1. Contexto
Una vez que los eventos han sido recolectados, normalizados y analizados, el siguiente paso en un sistema SIEM es la correlación. La correlación permite identificar patrones complejos que no son visibles en eventos individuales.
En esta práctica se implementarán reglas de correlación para detectar comportamientos sospechosos como ataques de fuerza bruta y credential stuffing.
2. Objetivo
Implementar reglas de correlación en MATLAB que permitan detectar patrones de ataque basados en múltiples eventos relacionados.
---3. Precondiciones
- Haber completado las prácticas 1, 2 y 3.
- Contar con la tabla normalizada tabla.
- La tabla debe contener al menos los campos:
- IP
- Usuario
- Resultado
- Aplicacion
4. Conceptos clave
- Correlación: relación entre múltiples eventos.
- Regla de detección: condición lógica para identificar un patrón.
- Falso positivo: evento detectado incorrectamente como amenaza.
- Patrón de ataque: comportamiento repetitivo o anómalo.
5. Escenarios a detectar
Brute Force
Un mismo usuario desde una misma IP genera múltiples intentos fallidos.
Credential Stuffing
Una misma IP intenta autenticarse con múltiples usuarios diferentes.
6. Desarrollo paso a paso
Paso 1: Filtrar eventos fallidos
fallidos = tabla(strcmp(tabla.Resultado, 'failure'), :);---
Paso 2: Detectar brute force
grupo_brute = groupcounts(fallidos, {'IP','Usuario'});
% Umbral de detección
umbral = 5;
brute_force = grupo_brute(grupo_brute.GroupCount >= umbral, :);
disp('Posibles ataques de brute force:');
disp(brute_force);
---
Paso 3: Detectar credential stuffing
grupo_ip = groupcounts(fallidos, 'IP');
umbral_ips = 10;
ips_sospechosas = grupo_ip(grupo_ip.GroupCount >= umbral_ips, :);
disp('IPs sospechosas de credential stuffing:');
disp(ips_sospechosas);
---
Paso 4: Refinar credential stuffing
resultado = [];
for i = 1:height(ips_sospechosas)
ip_actual = ips_sospechosas.IP(i);
subset = fallidos(strcmp(fallidos.IP, ip_actual), :);
usuarios_unicos = unique(subset.Usuario);
if length(usuarios_unicos) > 5
resultado = [resultado; {ip_actual, length(usuarios_unicos)}];
end
end
resultado = cell2table(resultado, 'VariableNames', {'IP','UsuariosDistintos'});
disp('Credential stuffing detectado:');
disp(resultado);
---
Paso 5: Generar alertas
alertas = [];
for i = 1:height(brute_force)
alertas = [alertas; { ...
brute_force.IP(i), ...
brute_force.Usuario(i), ...
'Brute Force'}];
end
for i = 1:height(resultado)
alertas = [alertas; { ...
resultado.IP(i), ...
'Multiple Users', ...
'Credential Stuffing'}];
end
alertas = cell2table(alertas, ...
'VariableNames', {'IP','Usuario','TipoAlerta'});
disp('Alertas generadas:');
disp(alertas);
---
7. Resultado esperado
- Detección de patrones de brute force.
- Detección de credential stuffing.
- Generación de tabla de alertas.
8. Validación
- El script debe ejecutarse sin errores.
- Se deben detectar eventos sospechosos.
- Las alertas deben corresponder con patrones reales.
9. Preguntas de reflexión
- ¿Por qué un solo evento no es suficiente para detectar un ataque?
- ¿Qué diferencia hay entre brute force y credential stuffing?
- ¿Qué pasaría si el umbral es muy bajo?
- ¿Qué pasaría si el umbral es muy alto?
- ¿Cómo reducir falsos positivos?
10. Tarea (Teams)
Subir un PDF con:
- Captura de ejecución del script.
- Resultados de detección.
- Tabla de alertas generadas.
- Identificación de al menos:
- 1 brute force
- 1 credential stuffing
- Respuestas a preguntas de reflexión.
- Conclusión: impacto de la correlación en seguridad.
11. Cierre
En esta práctica se ha implementado un motor básico de correlación, equivalente a las reglas utilizadas en sistemas SIEM reales.
En la siguiente práctica se desarrollará la visualización de eventos y alertas para representar la información de forma gráfica.