Skip to Content

Protección contra Ataques

Auris incorpora múltiples capas de defensa que se activan en cada solicitud de autenticación. Estos sistemas operan de forma independiente pero están dispuestos en un pipeline específico — cada comprobación se ejecuta en secuencia, de modo que las verificaciones más costosas solo se alcanzan después de que pasen los filtros iniciales más económicos.


Limitación de Velocidad

Auris aplica limitación de velocidad con ventana deslizante a todos los endpoints de la API. Los límites se aplican en memoria por instancia y no se comparten entre instancias en un despliegue multi-nodo — si requieres limitación de velocidad distribuida, configura un almacén compartido respaldado por Redis.

Niveles

NivelAplica aLímites predeterminados
authEndpoints de inicio de sesión, registro y cierre de sesiónLímites estrictos para prevenir credential stuffing
sensitiveRestablecimiento de contraseña, registro 2FA, verificación 2FALímites estrictos, cubetas separadas por usuario y por IP
apiEndpoints de API autenticados en generalLímites moderados por usuario autenticado
publicEndpoints abiertos (páginas de estado, SCIM, checkout público)Límites liberales, solo basados en IP

Los valores exactos de los límites son configurables por nivel mediante variables de entorno o la Consola (Consola → Seguridad → Limitación de Velocidad).

Cabeceras de respuesta

Todas las respuestas de API de los endpoints con limitación de velocidad incluyen cabeceras estándar:

CabeceraSignificado
X-RateLimit-LimitMáximo de solicitudes permitidas en la ventana actual
X-RateLimit-RemainingSolicitudes restantes en la ventana actual
X-RateLimit-ResetTimestamp Unix cuando se reinicia la ventana actual
Retry-AfterSegundos hasta que el cliente puede reintentar (solo presente en respuestas 429)

Cuando se supera un límite de velocidad, Auris devuelve HTTP 429 Too Many Requests con la cabecera Retry-After. Los clientes deben respetar esta cabecera y retroceder en consecuencia.

HTTP/1.1 429 Too Many Requests X-RateLimit-Limit: 10 X-RateLimit-Remaining: 0 X-RateLimit-Reset: 1718016000 Retry-After: 47 Content-Type: application/json { "ok": false, "error": { "code": "RATE_LIMIT_EXCEEDED", "message": "Too many requests. Please try again in 47 seconds." } }

Protección contra Fuerza Bruta

Auris registra los intentos de inicio de sesión fallidos por cuenta de usuario y por dirección IP. Después de un número configurable de fallos consecutivos, la cuenta o la IP queda bloqueada durante un período de duración creciente.

Cómo funciona el bloqueo

  1. Cada intento de inicio de sesión fallido crea un registro LoginAttempt con marca de tiempo, IP y user agent.
  2. Cuando el recuento de fallos para una cuenta o IP supera el umbral configurado dentro de la ventana de observación, se crea un registro AccountLockout.
  3. Durante un bloqueo, todos los intentos de inicio de sesión para la cuenta afectada devuelven HTTP 423 Locked inmediatamente — no se intenta autenticación en Keycloak.
  4. La duración del bloqueo escala con bloqueos repetidos: primer bloqueo = 5 minutos, segundo = 30 minutos, tercero = 24 horas (configurable).

Configuración

Configura en Consola → Seguridad → Protección contra Fuerza Bruta:

ConfiguraciónPredeterminadoNotas
Intentos fallidos antes del bloqueo5El recuento se reinicia tras un inicio de sesión exitoso
Ventana de observación15 minutosSolo los intentos dentro de esta ventana cuentan hacia el umbral
Duración inicial del bloqueo5 minutos
Multiplicador de escalada6xCada bloqueo subsiguiente es 6× más largo
Duración máxima del bloqueo24 horas
Bloqueo basado en IPActivadoBloquear la IP tras fallos en múltiples cuentas

Desbloqueo manual

Los administradores pueden desbloquear manualmente cuentas a través de la Consola (Detalle de usuario → Seguridad → Desbloquear cuenta) o la API:

DELETE/api/admin/lockouts/[userId]Requires: manage:users

Elimina todos los bloqueos activos para el usuario especificado y reinicia el contador de intentos fallidos.

GET/api/admin/lockoutsRequires: manage:users

Lista las cuentas bloqueadas actualmente con motivo del bloqueo, hora de inicio y vencimiento.


Seguridad de Contraseñas

Integración con HaveIBeenPwned

Cuando un usuario establece o cambia una contraseña, Auris la comprueba contra la base de datos de Contraseñas Comprometidas de HaveIBeenPwned (HIBP) usando la API de k-Anonimidad. Solo los primeros 5 caracteres del hash SHA-1 se envían a HIBP — la contraseña en texto plano nunca sale de Auris.

Si la contraseña aparece en conjuntos de datos de brechas conocidas, Auris la rechaza y pide al usuario que elija una contraseña diferente. Esta comprobación aplica a:

  • Registro de usuario
  • Solicitudes de cambio de contraseña
  • Contraseñas creadas por administradores a través de la API

La comprobación HIBP está habilitada por defecto. Para deshabilitarla (no recomendado), establece HIBP_CHECK_ENABLED=false en el entorno. La comprobación puede añadir hasta 200ms de latencia en operaciones de contraseña debido a la llamada a la API externa.

Requisitos de complejidad

Configura los requisitos mínimos de contraseña en Consola → Seguridad → Política de Contraseñas:

RequisitoPredeterminado
Longitud mínima8 caracteres
Requerir letra mayúsculaNo
Requerir letra minúsculaNo
Requerir númeroNo
Requerir carácter especialNo
Rechazar contraseñas comunes (HIBP)Sí

Los requisitos se aplican a las contraseñas gestionadas por Auris. Los usuarios de SSO se autentican a través de su IdP corporativo y no están sujetos a las políticas de contraseñas de Auris.


Detección de Inicio de Sesión Sospechoso

Auris analiza cada inicio de sesión en busca de anomalías de comportamiento. La detección se ejecuta después de una autenticación exitosa en Keycloak — si las credenciales de inicio de sesión son correctas pero el contexto es sospechoso, Auris puede notificar al usuario, bloquear el inicio de sesión o activar un step-up MFA.

Métodos de detección

1. Dispositivo nuevo

Auris calcula un hash de huella digital a partir de una combinación de user agent del navegador, resolución de pantalla y otras señales estables. Si la huella digital no se ha visto antes para este usuario, el inicio de sesión se marca como “dispositivo nuevo”. El registro del dispositivo se almacena en DeviceFingerprint tras el primer inicio de sesión exitoso desde ese contexto.

2. Nueva dirección IP

Auris registra desde qué direcciones IP ha iniciado sesión previamente un usuario. Un inicio de sesión desde una IP que nunca se ha visto para esta cuenta queda marcado.

3. Nuevo país

La búsqueda GeoIP determina el país de la IP de inicio de sesión. Si el país difiere del historial de inicios de sesión del usuario, el inicio de sesión queda marcado. La detección de país usa ip-api.com (por defecto) o una base de datos local MaxMind GeoLite2 (configurable para despliegues sin conexión o sensibles a la privacidad).

4. Viaje imposible

Auris calcula la distancia geográfica (fórmula de Haversine) entre la ubicación de inicio de sesión actual y la ubicación del inicio de sesión más reciente, luego divide por el tiempo transcurrido para obtener una velocidad de viaje implícita. Si la velocidad supera un umbral configurable (por defecto: 800 km/h — más rápido que la aviación comercial), el inicio de sesión queda marcado como viaje imposible.

5. Detección de VPN / proxy / centro de datos

La búsqueda GeoIP incluye metadatos que indican si la IP pertenece a un proveedor de VPN conocido, proxy o centro de datos en la nube. Los inicios de sesión desde dichas IPs se marcan por defecto, pero pueden permitirse si tus usuarios habitualmente acceden al servicio a través de VPN.

Acciones configuradas

Cada método de detección puede activar acciones independientes:

AcciónComportamiento
logRegistrar el evento de inicio de sesión sospechoso solo en los registros de auditoría. Sin impacto en el usuario.
notifyEnviar un email de notificación al usuario informándole del inicio de sesión sospechoso.
blockRechazar el inicio de sesión por completo con un mensaje de error.
require_mfaPermitir el inicio de sesión pero requerir la completación de MFA aunque normalmente no sea requerida.

Configuración del proveedor GeoIP

ProveedorConfiguraciónNotas
ip-api.comPor defectoNivel gratuito, llamada API externa por inicio de sesión
MaxMind GeoLite2GEO_IP_PROVIDER=maxmind, MAXMIND_DB_PATH=/path/to/GeoLite2-City.mmdbBúsqueda local, sin llamada externa, requiere cuenta MaxMind gratuita para descargar la BD

Revisar eventos de inicio de sesión sospechoso

GET/api/admin/suspicious-loginsRequires: manage:users

Lista eventos de inicio de sesión sospechoso de todos los usuarios, filtrable por severidad, motivo, usuario y rango de fechas.

PATCH/api/admin/suspicious-logins/[id]/reviewRequires: manage:users

Marca un evento de inicio de sesión sospechoso como revisado por un administrador.


Integración de CAPTCHA

Auris soporta tres proveedores de CAPTCHA en las páginas de inicio de sesión, registro y restablecimiento de contraseña. El CAPTCHA puede configurarse para activarse siempre, solo cuando el riesgo es elevado, o solo después de un número de intentos fallidos.

Proveedores soportados

ProveedorTipoNotas
Cloudflare TurnstilePrueba de trabajo, preserva la privacidadRecomendado. Sin desafíos de imagen. Nivel gratuito disponible.
hCaptchaDesafío basado en imágenesAlternativa centrada en la privacidad a reCAPTCHA
reCAPTCHA v3Basado en puntuación, invisibleSin interacción del usuario, devuelve una puntuación de riesgo

Modos de activación

ModoComportamiento
ALWAYSEl CAPTCHA aparece en cada intento de inicio de sesión/registro
ON_SUSPICIOUSEl CAPTCHA se activa cuando la puntuación de riesgo (de MFA adaptativa) supera el umbral configurado
AFTER_FAILURESEl CAPTCHA aparece después de N intentos de inicio de sesión fallidos consecutivos desde la misma IP

Configuración

Configura en Consola → Seguridad → CAPTCHA:

  1. Selecciona el proveedor de CAPTCHA.
  2. Introduce la Site Key (usada en el navegador) y la Secret Key (usada en el servidor para verificación).
  3. Establece el modo de activación y (para AFTER_FAILURES) el umbral de intentos.
  4. Para reCAPTCHA v3, establece el umbral mínimo de puntuación (0.0–1.0) por debajo del cual se bloquea un inicio de sesión.

La verificación de CAPTCHA se realiza en el servidor en la API de Auris antes de que se comprueben las credenciales. Incluso si un cliente elude la interfaz de CAPTCHA, el inicio de sesión fallará sin un token de verificación válido.


Listas de Permisión/Bloqueo de IPs

Auris soporta reglas de IP basadas en CIDR a nivel de tenant y por aplicación. Las reglas se evalúan antes de cualquier intento de autenticación.

Tipos de reglas

TipoComportamiento
ALLOWPermitir explícitamente el tráfico desde esta IP o rango
BLOCKRechazar todas las solicitudes desde esta IP o rango con HTTP 403 Forbidden

Precedencia: Las reglas BLOCK siempre tienen prioridad sobre las reglas ALLOW dentro del mismo ámbito.

Ámbito: Las reglas pueden aplicarse a todo el tenant (scope: TENANT) o a una aplicación específica (scope: APPLICATION, applicationId: ...).

Reglas temporales: Establece isTemporary: true y proporciona expiresAt para crear reglas que caducan automáticamente. Útil para baneos temporales tras un ataque detectado.

Gestión de reglas de IP

GET/api/ip-rulesRequires: manage:users

Lista todas las reglas de IP para el tenant. Soporta filtrado por tipo (ALLOW/BLOCK), ámbito y estado.

POST/api/ip-rulesRequires: manage:users

Crea una nueva regla de IP.

{ "cidr": "203.0.113.0/24", "type": "BLOCK", "scope": "TENANT", "label": "ASN sospechoso", "note": "Bloquear tras ataque de credential stuffing del 2025-06-01", "isTemporary": true, "expiresAt": "2025-07-01T00:00:00Z" }
PATCH/api/ip-rules/[id]Requires: manage:users

Actualiza una regla — extiende su vencimiento, cambia la etiqueta o alterna el estado activo.

DELETE/api/ip-rules/[id]Requires: manage:users

Elimina una regla de IP.

Notación CIDR

Auris soporta notación CIDR tanto IPv4 como IPv6:

  • IP única: 203.0.113.42/32
  • Subred: 203.0.113.0/24 (256 direcciones)
  • Rango completo: 10.0.0.0/8 (16,7 millones de direcciones)
  • IPv6 única: 2001:db8::1/128
  • Rango IPv6: 2001:db8::/32

El Pipeline de Seguridad de Inicio de Sesión

Cada solicitud de inicio de sesión pasa por las siguientes comprobaciones en orden. Cada comprobación puede cortocircuitar el pipeline devolviendo un error:

Solicitud de inicio de sesión entrante | v 1. Comprobación de lista de permisión/bloqueo de IP ¿Regla BLOCK coincide? → HTTP 403, detener ¿Regla ALLOW presente? → continuar | v 2. Verificación de CAPTCHA ¿Modo = ALWAYS? → requerir token válido ¿Modo = ON_SUSPICIOUS? → evaluar puntuación de riesgo, requerir si es alta ¿Modo = AFTER_FAILURES? → comprobar recuento de fallos de IP ¿Token inválido/faltante? → HTTP 400, detener | v 3. Limitación de velocidad ¿Límite por IP superado? → HTTP 429, detener ¿Límite por usuario superado? → HTTP 429, detener | v 4. Comprobación de fuerza bruta / bloqueo ¿Cuenta o IP actualmente bloqueada? → HTTP 423, detener | v 5. Autenticación Keycloak ¿Credenciales inválidas? → registrar intento fallido, HTTP 401, detener ¿Credenciales válidas? → continuar | v 6. Análisis de inicio de sesión sospechoso (no bloqueante — se ejecuta de forma asíncrona, registra eventos) ¿Detección de alta severidad? → activar acción configurada (notificar/bloquear/requerir MFA) | v 7. Puntuación de riesgo MFA adaptativa Puntuación de riesgo calculada a partir de 5 factores ¿Puntuación por encima del umbral? → requerir step-up MFA | v 8. Emisión de tokens Claims ACR y AMR establecidos según los métodos de autenticación completados Access token y refresh token devueltos

Los pasos 1–4 son síncronos y bloqueantes. Los pasos 6–7 pueden añadir latencia si las búsquedas GeoIP están habilitadas. Para minimizar el impacto en la latencia, usa la base de datos local MaxMind en lugar de ip-api.com para la resolución GeoIP.


Permisos Requeridos

OperaciónPermiso
Ver / gestionar reglas de IPmanage:users
Ver eventos de inicio de sesión sospechosomanage:users
Revisar eventos sospechososmanage:users
Ver / gestionar bloqueosmanage:users
Configurar ajustes de seguridad (Consola)Solo OWNER o ADMIN del tenant

Páginas Relacionadas