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
| Nivel | Aplica a | Límites predeterminados |
|---|---|---|
| auth | Endpoints de inicio de sesión, registro y cierre de sesión | Límites estrictos para prevenir credential stuffing |
| sensitive | Restablecimiento de contraseña, registro 2FA, verificación 2FA | Límites estrictos, cubetas separadas por usuario y por IP |
| api | Endpoints de API autenticados en general | Límites moderados por usuario autenticado |
| public | Endpoints 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:
| Cabecera | Significado |
|---|---|
X-RateLimit-Limit | Máximo de solicitudes permitidas en la ventana actual |
X-RateLimit-Remaining | Solicitudes restantes en la ventana actual |
X-RateLimit-Reset | Timestamp Unix cuando se reinicia la ventana actual |
Retry-After | Segundos 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
- Cada intento de inicio de sesión fallido crea un registro
LoginAttemptcon marca de tiempo, IP y user agent. - 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. - Durante un bloqueo, todos los intentos de inicio de sesión para la cuenta afectada devuelven
HTTP 423 Lockedinmediatamente — no se intenta autenticación en Keycloak. - 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ón | Predeterminado | Notas |
|---|---|---|
| Intentos fallidos antes del bloqueo | 5 | El recuento se reinicia tras un inicio de sesión exitoso |
| Ventana de observación | 15 minutos | Solo los intentos dentro de esta ventana cuentan hacia el umbral |
| Duración inicial del bloqueo | 5 minutos | |
| Multiplicador de escalada | 6x | Cada bloqueo subsiguiente es 6× más largo |
| Duración máxima del bloqueo | 24 horas | |
| Bloqueo basado en IP | Activado | Bloquear 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:
/api/admin/lockouts/[userId]Requires: manage:usersElimina todos los bloqueos activos para el usuario especificado y reinicia el contador de intentos fallidos.
/api/admin/lockoutsRequires: manage:usersLista 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:
| Requisito | Predeterminado |
|---|---|
| Longitud mínima | 8 caracteres |
| Requerir letra mayúscula | No |
| Requerir letra minúscula | No |
| Requerir número | No |
| Requerir carácter especial | No |
| 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ón | Comportamiento |
|---|---|
log | Registrar el evento de inicio de sesión sospechoso solo en los registros de auditoría. Sin impacto en el usuario. |
notify | Enviar un email de notificación al usuario informándole del inicio de sesión sospechoso. |
block | Rechazar el inicio de sesión por completo con un mensaje de error. |
require_mfa | Permitir el inicio de sesión pero requerir la completación de MFA aunque normalmente no sea requerida. |
Configuración del proveedor GeoIP
| Proveedor | Configuración | Notas |
|---|---|---|
| ip-api.com | Por defecto | Nivel gratuito, llamada API externa por inicio de sesión |
| MaxMind GeoLite2 | GEO_IP_PROVIDER=maxmind, MAXMIND_DB_PATH=/path/to/GeoLite2-City.mmdb | Búsqueda local, sin llamada externa, requiere cuenta MaxMind gratuita para descargar la BD |
Revisar eventos de inicio de sesión sospechoso
/api/admin/suspicious-loginsRequires: manage:usersLista eventos de inicio de sesión sospechoso de todos los usuarios, filtrable por severidad, motivo, usuario y rango de fechas.
/api/admin/suspicious-logins/[id]/reviewRequires: manage:usersMarca 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
| Proveedor | Tipo | Notas |
|---|---|---|
| Cloudflare Turnstile | Prueba de trabajo, preserva la privacidad | Recomendado. Sin desafíos de imagen. Nivel gratuito disponible. |
| hCaptcha | Desafío basado en imágenes | Alternativa centrada en la privacidad a reCAPTCHA |
| reCAPTCHA v3 | Basado en puntuación, invisible | Sin interacción del usuario, devuelve una puntuación de riesgo |
Modos de activación
| Modo | Comportamiento |
|---|---|
ALWAYS | El CAPTCHA aparece en cada intento de inicio de sesión/registro |
ON_SUSPICIOUS | El CAPTCHA se activa cuando la puntuación de riesgo (de MFA adaptativa) supera el umbral configurado |
AFTER_FAILURES | El 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:
- Selecciona el proveedor de CAPTCHA.
- Introduce la Site Key (usada en el navegador) y la Secret Key (usada en el servidor para verificación).
- Establece el modo de activación y (para
AFTER_FAILURES) el umbral de intentos. - 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
| Tipo | Comportamiento |
|---|---|
ALLOW | Permitir explícitamente el tráfico desde esta IP o rango |
BLOCK | Rechazar 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
/api/ip-rulesRequires: manage:usersLista todas las reglas de IP para el tenant. Soporta filtrado por tipo (ALLOW/BLOCK), ámbito y estado.
/api/ip-rulesRequires: manage:usersCrea 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"
}/api/ip-rules/[id]Requires: manage:usersActualiza una regla — extiende su vencimiento, cambia la etiqueta o alterna el estado activo.
/api/ip-rules/[id]Requires: manage:usersElimina 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 devueltosLos 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ón | Permiso |
|---|---|
| Ver / gestionar reglas de IP | manage:users |
| Ver eventos de inicio de sesión sospechoso | manage:users |
| Revisar eventos sospechosos | manage:users |
| Ver / gestionar bloqueos | manage:users |
| Configurar ajustes de seguridad (Consola) | Solo OWNER o ADMIN del tenant |
Páginas Relacionadas
- Autenticación Multifactor — TOTP, SMS OTP, WebAuthn y MFA adaptativa
- Consola: Configuración de Seguridad — Guía completa de la Consola para todas las funciones de seguridad
- Conceptos: Flujo de Inicio de Sesión — Desglose detallado del pipeline de autenticación
- Referencia de API: Seguridad — Documentación completa de endpoints para reglas de IP, bloqueos e inicios de sesión sospechosos