Skip to Content

Protezione dagli Attacchi

Auris include più livelli di difesa che si attivano su ogni richiesta di autenticazione. Questi sistemi operano indipendentemente ma sono stratificati in una pipeline specifica — ogni controllo viene eseguito in sequenza in modo che i controlli successivi, più costosi, vengano raggiunti solo dopo che i filtri iniziali più economici siano superati.


Rate Limiting

Auris applica rate limiting a finestra scorrevole a tutti gli endpoint API. I rate limit vengono applicati in memoria per istanza e non sono condivisi tra le istanze in un deployment multi-nodo — se hai bisogno di rate limiting distribuito, configura uno store condiviso supportato da Redis.

Livelli

LivelloSi applica aLimiti predefiniti
authEndpoint di login, signup e logoutLimiti severi per prevenire il credential stuffing
sensitiveReset password, enrollamento 2FA, verifica 2FALimiti severi, bucket separati per utente e per IP
apiEndpoint API autenticati generaliLimiti moderati per utente autenticato
publicEndpoint aperti (pagine di stato, SCIM, checkout pubblico)Limiti generosi, solo per IP

I valori esatti dei limiti sono configurabili per livello tramite variabili d’ambiente o la Console (Console → Sicurezza → Rate Limiting).

Header di risposta

Tutte le risposte API dagli endpoint con rate limiting includono header standard:

HeaderSignificato
X-RateLimit-LimitMassimo numero di richieste consentite nella finestra corrente
X-RateLimit-RemainingRichieste rimanenti nella finestra corrente
X-RateLimit-ResetTimestamp Unix quando la finestra corrente si resetta
Retry-AfterSecondi fino a quando il client può riprovare (presente solo nelle risposte 429)

Quando viene superato un rate limit, Auris restituisce HTTP 429 Too Many Requests con l’header Retry-After. I client dovrebbero rispettare questo header e fare backoff di conseguenza.

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": "Troppe richieste. Riprova tra 47 secondi." } }

Protezione Brute-Force

Auris traccia i tentativi di login falliti per account utente e per indirizzo IP. Dopo un numero configurabile di fallimenti consecutivi, l’account o l’IP viene bloccato per una durata crescente.

Come funziona il blocco

  1. Ogni tentativo di login fallito crea un record LoginAttempt con timestamp, IP e user agent.
  2. Quando il conteggio dei fallimenti per un account o IP supera la soglia configurata all’interno della finestra di osservazione, viene creato un record AccountLockout.
  3. Durante un blocco, tutti i tentativi di login per l’account interessato restituiscono HTTP 423 Locked immediatamente — non viene tentata l’autenticazione Keycloak.
  4. La durata del blocco si intensifica con i blocchi ripetuti: primo blocco = 5 minuti, secondo = 30 minuti, terzo = 24 ore (configurabile).

Configurazione

Configura tramite Console → Sicurezza → Protezione Brute-Force:

ImpostazioneDefaultNote
Tentativi falliti prima del blocco5Il conteggio si resetta dopo un login riuscito
Finestra di osservazione15 minutiSolo i tentativi in questa finestra contano verso la soglia
Durata iniziale del blocco5 minuti
Moltiplicatore di escalation6xOgni blocco successivo dura 6× di più
Durata massima del blocco24 ore
Blocco per IPAbilitatoBlocca l’IP dopo fallimenti su più account

Sblocco manuale

Gli amministratori possono sbloccare manualmente gli account tramite la Console (Dettaglio utente → Sicurezza → Sblocca Account) o API:

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

Cancella tutti i blocchi attivi per l’utente specificato e resetta il contatore dei tentativi falliti.

GET/api/admin/lockoutsRequires: manage:users

Elenca gli account attualmente bloccati con il motivo del blocco, l’ora di inizio e la scadenza.


Sicurezza delle Password

Integrazione HaveIBeenPwned

Quando un utente imposta o cambia una password, Auris la controlla rispetto al database Pwned Passwords di HaveIBeenPwned (HIBP) usando l’API k-Anonymity. Solo i primi 5 caratteri dell’hash SHA-1 vengono inviati a HIBP — la password in chiaro non lascia mai Auris.

Se la password compare nei dataset di violazioni note, Auris la rifiuta e chiede all’utente di sceglierne una diversa. Questo controllo si applica a:

  • Registrazione utente
  • Richieste di cambio password
  • Password create dall’amministratore tramite API

Il controllo HIBP è abilitato di default. Per disabilitarlo (non consigliato), imposta HIBP_CHECK_ENABLED=false nell’ambiente. Il controllo può aggiungere fino a 200ms di latenza sulle operazioni con password a causa della chiamata API esterna.

Requisiti di complessità

Configura i requisiti minimi per la password in Console → Sicurezza → Policy Password:

RequisitoDefault
Lunghezza minima8 caratteri
Richiedi lettera maiuscolaNo
Richiedi lettera minuscolaNo
Richiedi numeroNo
Richiedi carattere specialeNo
Rifiuta password comuni (HIBP)Sì

I requisiti vengono applicati alle password gestite da Auris. Gli utenti SSO si autenticano tramite il loro IdP aziendale e non sono soggetti alle policy password di Auris.


Rilevamento Login Sospetti

Auris analizza ogni login per anomalie comportamentali. Il rilevamento viene eseguito dopo l’autenticazione Keycloak riuscita — se le credenziali di login sono corrette ma il contesto è sospetto, Auris può notificare l’utente, bloccare il login o attivare uno step-up MFA.

Metodi di rilevamento

1. Nuovo dispositivo

Auris calcola un fingerprint hash da una combinazione di user agent del browser, risoluzione dello schermo e altri segnali stabili. Se il fingerprint non è mai stato visto per questo utente prima, il login viene segnalato come “nuovo dispositivo”. Il record del dispositivo viene memorizzato in DeviceFingerprint dopo il primo login riuscito da quel contesto.

2. Nuovo indirizzo IP

Auris traccia gli indirizzi IP da cui un utente ha precedentemente effettuato il login. Un login da un IP che non è mai stato visto per questo account viene segnalato.

3. Nuovo paese

La ricerca GeoIP determina il paese dell’IP di login. Se il paese differisce dalla cronologia dei login dell’utente, il login viene segnalato. Il rilevamento del paese usa ip-api.com (default) o un database locale MaxMind GeoLite2 (configurabile per deployment offline o sensibili alla privacy).

4. Viaggio impossibile

Auris calcola la distanza geografica (formula di Haversine) tra la posizione di login corrente e quella del login più recente, poi la divide per il tempo trascorso per ricavare una velocità di viaggio implicita. Se la velocità supera una soglia configurabile (default: 800 km/h — più veloce dell’aviazione commerciale), il login viene segnalato come viaggio impossibile.

5. Rilevamento VPN / proxy / datacenter

La ricerca GeoIP include metadati che indicano se l’IP appartiene a un provider VPN noto, proxy o datacenter cloud. I login da tali IP vengono segnalati di default ma possono essere consentiti se i tuoi utenti accedono comunemente al servizio tramite VPN.

Azioni configurate

Ogni metodo di rilevamento può attivare azioni indipendenti:

AzioneComportamento
logRegistra l’evento di login sospetto solo nei log di audit. Nessun impatto sull’utente.
notifyInvia un’email di notifica all’utente informandolo del login sospetto.
blockRifiuta completamente il login con un messaggio di errore.
require_mfaConsenti il login ma richiedi il completamento MFA anche se l’MFA non è normalmente richiesta.

Configurazione del provider GeoIP

ProviderImpostazioneNote
ip-api.comDefaultLivello gratuito, chiamata API esterna per login
MaxMind GeoLite2GEO_IP_PROVIDER=maxmind, MAXMIND_DB_PATH=/percorso/a/GeoLite2-City.mmdbLookup locale, nessuna chiamata esterna, richiede account MaxMind gratuito per scaricare il DB

Revisione degli eventi di login sospetti

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

Elenca gli eventi di login sospetti per tutti gli utenti, filtrabile per gravità, motivo, utente e intervallo di date.

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

Contrassegna un evento di login sospetto come revisionato da un amministratore.


Integrazione CAPTCHA

Auris supporta tre provider CAPTCHA nelle pagine di login, signup e reset password. Il CAPTCHA può essere impostato per attivarsi sempre, solo quando il rischio è elevato, o solo dopo un numero di tentativi falliti.

Provider supportati

ProviderTipoNote
Cloudflare TurnstileProof-of-work, preserva la privacyConsigliato. Nessuna sfida con immagini. Livello gratuito disponibile.
hCaptchaSfida basata su immaginiAlternativa orientata alla privacy a reCAPTCHA
reCAPTCHA v3Basato su punteggio, invisibileNessuna interazione utente, restituisce un punteggio di rischio

Modalità di attivazione

ModalitàComportamento
ALWAYSIl CAPTCHA appare su ogni tentativo di login/signup
ON_SUSPICIOUSIl CAPTCHA viene attivato quando il punteggio di rischio (dall’MFA adattiva) supera la soglia configurata
AFTER_FAILURESIl CAPTCHA appare dopo N tentativi di login consecutivi falliti dallo stesso IP

Configurazione

Configura tramite Console → Sicurezza → CAPTCHA:

  1. Seleziona il provider CAPTCHA.
  2. Inserisci la Site Key (usata nel browser) e la Secret Key (usata lato server per la verifica).
  3. Imposta la modalità di attivazione e (per AFTER_FAILURES) la soglia dei tentativi.
  4. Per reCAPTCHA v3, imposta la soglia minima del punteggio (0.0–1.0) al di sotto della quale un login viene bloccato.

La verifica CAPTCHA viene eseguita lato server sull’API Auris prima che le credenziali vengano controllate. Anche se un client bypassa l’interfaccia utente del CAPTCHA, il login fallirà senza un token di verifica valido.


Liste di IP Consentiti/Bloccati

Auris supporta regole IP basate su CIDR a livello di tenant e per applicazione. Le regole vengono valutate prima di qualsiasi tentativo di autenticazione.

Tipi di regola

TipoComportamento
ALLOWConsenti esplicitamente il traffico da questo IP o range
BLOCKRifiuta tutte le richieste da questo IP o range con HTTP 403 Forbidden

Precedenza: Le regole BLOCK hanno sempre la precedenza sulle regole ALLOW nello stesso scope.

Scope: Le regole possono essere scoped all’intero tenant (scope: TENANT) o a un’applicazione specifica (scope: APPLICATION, applicationId: ...).

Regole temporanee: Imposta isTemporary: true e fornisci expiresAt per creare regole che scadono automaticamente. Utile per ban temporanei dopo un attacco rilevato.

Gestione delle regole IP

GET/api/ip-rulesRequires: manage:users

Elenca tutte le regole IP per il tenant. Supporta il filtraggio per tipo (ALLOW/BLOCK), scope e stato.

POST/api/ip-rulesRequires: manage:users

Crea una nuova regola IP.

{ "cidr": "203.0.113.0/24", "type": "BLOCK", "scope": "TENANT", "label": "ASN sospetto", "note": "Bloccato a seguito di attacco credential stuffing il 01/06/2025", "isTemporary": true, "expiresAt": "2025-07-01T00:00:00Z" }
PATCH/api/ip-rules/[id]Requires: manage:users

Aggiorna una regola — estendi la scadenza, cambia l’etichetta o attiva/disattiva.

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

Elimina una regola IP.

Notazione CIDR

Auris supporta sia la notazione CIDR IPv4 che IPv6:

  • IP singolo: 203.0.113.42/32
  • Subnet: 203.0.113.0/24 (256 indirizzi)
  • Range completo: 10.0.0.0/8 (16,7 milioni di indirizzi)
  • IPv6 singolo: 2001:db8::1/128
  • Range IPv6: 2001:db8::/32

La Pipeline di Sicurezza del Login

Ogni richiesta di login passa attraverso i seguenti controlli in ordine. Ogni controllo può cortocircuitare la pipeline restituendo un errore:

Richiesta di login in arrivo | v 1. Controllo IP Allow/Block Regola BLOCK corrisposta? → HTTP 403, stop Regola ALLOW presente? → continua | v 2. Verifica CAPTCHA Modalità = ALWAYS? → richiedi token valido Modalità = ON_SUSPICIOUS? → valuta punteggio rischio, richiedi se alto Modalità = AFTER_FAILURES? → controlla conteggio fallimenti IP Token non valido/mancante? → HTTP 400, stop | v 3. Rate Limiting Limite per IP superato? → HTTP 429, stop Limite per utente superato? → HTTP 429, stop | v 4. Controllo Brute-Force / Blocco Account o IP attualmente bloccato? → HTTP 423, stop | v 5. Autenticazione Keycloak Credenziali non valide? → registra tentativo fallito, HTTP 401, stop Credenziali valide? → continua | v 6. Analisi Login Sospetti (non bloccante — eseguita in modo asincrono, registra eventi) Rilevamento ad alta gravità? → attiva azione configurata (notify/block/require MFA) | v 7. Calcolo Punteggio di Rischio MFA Adattiva Punteggio calcolato da 5 fattori Punteggio sopra soglia? → richiedi MFA step-up | v 8. Emissione Token Claim ACR e AMR impostati in base ai metodi di autenticazione completati Restituisce access token e refresh token

I passi 1–4 sono sincroni e bloccanti. I passi 6–7 possono aggiungere latenza se i lookup GeoIP sono abilitati. Per minimizzare l’impatto sulla latenza, usa il database locale MaxMind invece di ip-api.com per la risoluzione GeoIP.


Permessi Richiesti

OperazionePermesso
Visualizza / gestisci regole IPmanage:users
Visualizza eventi login sospettimanage:users
Revisiona eventi sospettimanage:users
Visualizza / gestisci blocchimanage:users
Configura impostazioni sicurezza (Console)Solo OWNER o ADMIN del tenant

Pagine Correlate