Feature: Sistema de Análisis de Seguridad y Detección de Vulnerabilidades v1.6.0
Nuevas funcionalidades: - Sistema completo de análisis de seguridad con detección de amenazas - Detección de patrones: fuerza bruta, escalada de privilegios, eliminaciones masivas, cuentas comprometidas - Panel de vulnerabilidades con visualización detallada - Acciones de seguridad: bloqueo de IPs, notificaciones, reset de contraseñas - Análisis configurable (24h, 48h, 7 días) Backend (/audit/security/): - GET /analysis: Análisis completo de seguridad con amenazas detectadas - POST /action: Ejecutar acciones de seguridad (solo ADMIN/SUPPORT_MANAGER) - Schemas nuevos: SecurityAnalysisResponse, SecurityThreatPattern, SecurityActionRequest Frontend (/audit/security): - Panel completo de análisis con nivel de riesgo general - Visualización de amenazas con severidad (critical, high, medium, low) - Estadísticas: amenazas, intentos fallidos, IPs sospechosas, acciones críticas - Opciones de acción por amenaza: bloquear IP, resetear contraseña, notificar admin - Modal de ejecución de acciones de seguridad Mejoras: - Sidebar actualizado con enlace 'Seguridad' - Permisos: Solo ADMIN/SUPPORT_MANAGER/AUDITOR pueden ver análisis - Solo ADMIN/SUPPORT_MANAGER pueden ejecutar acciones - Audit log de todas las acciones de seguridad ejecutadas
This commit is contained in:
@@ -51,6 +51,55 @@ class AuditLogResponse(AuditLogBase):
|
||||
from_attributes = True
|
||||
|
||||
|
||||
# ===================================
|
||||
# SECURITY ANALYSIS SCHEMAS
|
||||
# ===================================
|
||||
|
||||
class SecurityThreatPattern(BaseModel):
|
||||
"""Patrón de amenaza detectado."""
|
||||
type: str = Field(description="Tipo de amenaza (brute_force, privilege_escalation, etc.)")
|
||||
severity: str = Field(description="Severidad: low, medium, high, critical")
|
||||
description: str = Field(description="Descripción de la amenaza")
|
||||
occurrences: int = Field(description="Número de ocurrencias")
|
||||
affected_ips: list[str] = Field(default=[], description="IPs involucradas")
|
||||
affected_users: list[str] = Field(default=[], description="Usuarios afectados")
|
||||
first_seen: datetime = Field(description="Primera ocurrencia")
|
||||
last_seen: datetime = Field(description="Última ocurrencia")
|
||||
recommendations: list[str] = Field(default=[], description="Recomendaciones de acción")
|
||||
|
||||
|
||||
class SecurityAnalysisResponse(BaseModel):
|
||||
"""Análisis completo de seguridad."""
|
||||
overall_risk_level: str = Field(description="Nivel de riesgo general: safe, low, medium, high, critical")
|
||||
total_threats_detected: int = Field(description="Total de amenazas detectadas")
|
||||
threats: list[SecurityThreatPattern] = Field(description="Lista de amenazas detectadas")
|
||||
analysis_period_hours: int = Field(description="Período de análisis en horas")
|
||||
generated_at: datetime = Field(description="Timestamp del análisis")
|
||||
|
||||
# Estadísticas de seguridad
|
||||
failed_login_attempts: int = Field(description="Intentos fallidos de login")
|
||||
suspicious_ips_count: int = Field(description="IPs sospechosas detectadas")
|
||||
critical_actions_count: int = Field(description="Acciones críticas realizadas")
|
||||
|
||||
# Opciones de acción
|
||||
recommended_actions: list[str] = Field(default=[], description="Acciones recomendadas")
|
||||
|
||||
|
||||
class SecurityActionRequest(BaseModel):
|
||||
"""Solicitud de acción de seguridad."""
|
||||
action_type: str = Field(description="Tipo de acción: block_ip, notify_admin, reset_password, etc.")
|
||||
target: str = Field(description="Objetivo de la acción (IP, email, etc.)")
|
||||
reason: str = Field(description="Razón de la acción")
|
||||
duration_minutes: Optional[int] = Field(None, description="Duración del bloqueo en minutos")
|
||||
|
||||
|
||||
class SecurityActionResponse(BaseModel):
|
||||
"""Respuesta de acción de seguridad."""
|
||||
success: bool = Field(description="Si la acción fue exitosa")
|
||||
message: str = Field(description="Mensaje descriptivo")
|
||||
action_id: Optional[UUID4] = Field(None, description="ID de la acción registrada")
|
||||
|
||||
|
||||
class AuditLogFilters(BaseModel):
|
||||
"""
|
||||
Filtros para consulta de audit logs.
|
||||
|
||||
Reference in New Issue
Block a user