Guida veloce alla sicurezza SAML
Una guida di riferimento rapido per il Security Assertion Markup Language (SAML) e le sue caratteristiche di sicurezza. Comprendi i termini chiave, i suggerimenti per l'implementazione e le migliori pratiche per proteggere l'autenticazione e l'autorizzazione basate su SAML negli ambienti aziendali.
Introduzione
Il Security Assertion Markup Language (SAML) è uno standard aperto per lo scambio di dati di autenticazione e autorizzazione tra le parti, in particolare tra un provider di identità e un provider di servizi. SAML è un linguaggio di markup basato su XML per asserzioni di sicurezza utilizzato per il single sign-on (SSO) e la federazione delle identità. È comunemente usato negli ambienti aziendali per scopi di autenticazione e autorizzazione.
Flusso standard di autenticazione SAML
- L'utente richiede l'accesso a un'applicazione client, che funge da provider di servizi (SP).
- SP invia una richiesta di autenticazione SAML SSO al provider di identità (IdP) e reindirizza l'utente all'IdP.
- IdP chiede all'utente le credenziali se l'utente non è già autenticato.
- L'utente inserisce le credenziali e IdP autentica l'utente.
- IdP invia un'asserzione di risposta SAML a SP, che include lo stato di autenticazione e gli attributi dell'utente. Successivamente, IdP reindirizza l'utente a SP.
- SP riceve l'asserzione di risposta SAML, la convalida e concede l'accesso all'utente.
Fattori di sicurezza in SAML
ID entità SP
Pensa all'ID entità SP come al distintivo unico per un SP nel contesto dell'autenticazione SAML. È come un'impronta digitale che aiuta l'IdP a riconoscere il SP durante le loro interazioni. Questo ID è una parte chiave dei metadati del SP, condivisa con l'IdP per costruire fiducia e garantire una comunicazione sicura.
Uso dell'ID entità SP:
- Registrazione dei metadati: L'attributo
EntityID
fa parte dei metadati del SP, condivisa con l'IdP per stabilire un rapporto di fiducia. Serve come identificatore unico per individuare i metadati del SP e ottenere i dettagli di configurazione richiesti per le interazioni SAML. - Richiesta di autenticazione: L'ID entità SP è incluso nella richiesta di autenticazione SAML inviata all'IdP, identificando chiaramente il SP richiedente. L'IdP utilizza queste informazioni per convalidare la richiesta e determinare il contesto di autenticazione appropriato.
- Audience dell'asserzione: Dopo l'autenticazione dell'utente, l'ID entità SP è incluso nell'asserzione SAML come restrizione dell'audience. Questa misura assicura che l'asserzione sia destinata esclusivamente al SP designato e non possa essere utilizzata in modo improprio da altri SP.
ID entità IdP
D'altra parte, l'ID entità IdP è l'etichetta speciale per l'IdP. Aiuta a identificare l'IdP all'interno dell'ecosistema SAML, rendendo facile per il SP trovarlo. Questo ID è incluso nei metadati dell'IdP ed è condiviso con SP, promuovendo una relazione di fiducia e connessioni sicure.
Uso dell'ID entità IdP:
- Registrazione dei metadati: L'attributo
EntityID
è anche incluso nei metadati dell'IdP, condivisa con SP per stabilire un rapporto di fiducia. Serve come identificatore unico per individuare i metadati dell'IdP e ottenere i dettagli di configurazione necessari per SP per convalidare le risposte SAML. - Emettente dell'asserzione: Quando l'IdP genera un'asserzione SAML, include il suo ID entità come emettente. Questo attributo indica l'entità che ha emesso l'asserzione e aiuta SP a verificare l'autenticità e l'integrità dell'asserzione.
Stato di trasmissione
Il relay state è un parametro utilizzato nell'autenticazione SAML che facilita il trasferimento delle informazioni sullo stato tra il SP e l'IdP. Funziona come un ponte tra i flussi SSO avviati da SP e IdP, preservando il contesto e lo stato della sessione dell'utente durante il processo di autenticazione.
Uso dello stato di trasmissione:
- Mantenere il contesto dell'utente: Il relay state consente al SP di passare informazioni aggiuntive all'IdP durante il processo di autenticazione. Queste informazioni possono includere lo stato della sessione dell'utente, il contesto dell'applicazione o qualsiasi altro dato pertinente che deve essere preservato nel flusso SAML. Ad esempio, l'URL o l'ID della sessione dell'applicazione che l'utente stava accedendo prima dell'autenticazione.
- Prevenire gli attacchi CSRF: Il relay state è cruciale per prevenire gli attacchi di cross-site request forgery (CSRF) durante l'autenticazione SAML. Includendo un valore unico e imprevedibile di relay state nella richiesta di autenticazione, il SP può verificare l'integrità della risposta SAML e garantire che corrisponda alla richiesta originale.
Firma dell'asserzione
La firma dell'asserzione è una funzionalità di sicurezza critica in SAML che garantisce l'integrità, l'autenticità e la non ripudio delle asserzioni SAML. Prevede la firma digitale dell'asserzione SAML utilizzando la chiave privata dell'IdP, consentendo al SP di verificare l'origine dell'asserzione e rilevare eventuali tentativi di manomissione.
Come funziona la firma dell'asserzione:
- Generazione della coppia di chiavi: L'IdP genera una coppia di chiavi pubblica-privata, dove la chiave privata viene utilizzata per firmare l'asserzione SAML e la chiave pubblica viene condivisa con il SP per la verifica. Questo schema di crittografia asimmetrica garantisce che solo l'IdP possa firmare l'asserzione, mentre il SP può convalidarla.
- Certificato condiviso: L'IdP fornisce al SP il suo certificato di chiave pubblica, che contiene la chiave pubblica utilizzata per verificare la firma dell'asserzione. Normalmente, questo certificato sarà parte dei metadati dell'IdP, oppure il SP può ottenerlo tramite un processo di download sicuro.
- Firma dell'asserzione: Dopo aver autenticato l'utente, l'IdP firma digitalmente l'asserzione SAML utilizzando la sua chiave privata. Questa firma è inclusa nell'asserzione, insieme al certificato della chiave pubblica, permettendo al SP di verificare l'autenticità dell'asserzione.
- Verifica dell'asserzione: Dopo aver ricevuto l'asserzione SAML, il SP utilizza la chiave pubblica dell'IdP per verificare la firma dell'asserzione. Se la firma è valida, il SP può fidarsi dell'asserzione e concedere l'accesso all'utente.
Crittografia dell'asserzione
Oltre alla firma, SAML supporta anche la crittografia dell'asserzione per proteggere gli attributi utente sensibili e i dati trasmessi tra l'IdP e il SP. Criptando l'asserzione, l'IdP garantisce che solo il destinatario previsto (SP) possa decrittare e accedere ai contenuti dell'asserzione, proteggendo la privacy e la riservatezza dell'utente. La crittografia dell'asserzione è una funzione di sicurezza opzionale in SAML che può essere utilizzata per migliorare la protezione dei dati.
Uso della crittografia delle asserzioni:
- Protezione degli attributi sensibili: La crittografia dell'asserzione è particolarmente utile per proteggere gli attributi utente sensibili, come le Informazioni di Identificazione Personale (PII), i dati finanziari o le cartelle cliniche. Criptando questi attributi all'interno dell'asserzione, l'IdP impedisce l'accesso non autorizzato e garantisce la riservatezza dei dati.
Come funziona la crittografia dell'asserzione:
- Scambio di chiavi: L'IdP e il SP stabiliscono un meccanismo di scambio di chiavi sicuro per condividere le chiavi di crittografia per proteggere l'asserzione SAML. Questo può coinvolgere l'uso di chiavi di crittografia simmetriche o schemi di crittografia a chiave pubblica, a seconda dell'algoritmo di crittografia e della strategia di gestione delle chiavi.
- Crittografia degli attributi: Dopo aver generato l'asserzione SAML, l'IdP cifra gli attributi utente sensibili utilizzando la chiave di crittografia condivisa. Gli attributi criptati sono incorporati nell'asserzione, garantendo che solo il SP possa decrittare e accedere ai dati.
- Decrittazione dell'asserzione: Dopo aver ricevuto l'asserzione crittografata, il SP decrittografa gli attributi protetti utilizzando la chiave di crittografia condivisa. Questo processo consente al SP di accedere in modo sicuro ai dati sensibili dell'utente e di elaborarli secondo necessità.
Metodi di binding
I metodi di binding SAML definiscono come i messaggi SAML vengono trasmessi tra SP e IdP su diversi protocolli di comunicazione. Specificano la codifica, il trasporto e i meccanismi di sicurezza utilizzati per scambiare asserzioni e richieste SAML, garantendo comunicazioni sicure e affidabili tra le parti coinvolte.
Sia SP che IdP specificheranno quali metodi di binding supportano nei loro metadati, permettendo loro di negoziare il metodo appropriato per le interazioni SAML. La scelta del metodo di binding dipende da fattori come la dimensione del messaggio, i requisiti di sicurezza e le caratteristiche del canale di comunicazione.
Metodi di binding SAML:
- Redirect HTTP: I messaggi SAML sono codificati come parametri URL e trasmessi tramite redirect HTTP. Questo binding è adatto per scenari in cui la dimensione del messaggio è limitata e il canale di comunicazione non è sicuro.
- POST HTTP: I messaggi SAML sono codificati come parametri di modulo e trasmessi tramite richieste POST HTTP. Questo binding è utilizzato quando la dimensione del messaggio supera il limite della lunghezza URL o quando sono richieste misure di sicurezza aggiuntive.
- Artifact: I messaggi SAML sono trasmessi utilizzando token a breve termine chiamati artifact, che vengono scambiati su un canale back-channel sicuro tra SP e IdP. Questo binding è adatto per scenari in cui la riservatezza e l'integrità del messaggio sono cruciali e il canale di comunicazione è sicuro.
Metodi di binding più comuni:
- Richiesta di autenticazione: La richiesta di autenticazione da SP a IdP è tipicamente trasmessa utilizzando il Redirect HTTP per la sua semplicità ed efficienza. SP codifica la richiesta SAML come parametri URL e reindirizza il browser dell'utente a IdP per l'autenticazione. Questo è noto come il flusso SSO avviato da SP.
- Risposta di asserzione: L'asserzione di risposta SAML da IdP a SP è solitamente trasmessa utilizzando il metodo di binding POST HTTP. IdP codifica l'asserzione SAML come parametri di modulo e la invia di nuovo a SP per la validazione. Questo garantisce che l'asserzione sia trasmessa in modo sicuro senza esporre dati sensibili nell'URL. Inoltre, il binding POST HTTP può gestire dimensioni di messaggi più grandi rispetto al binding Redirect HTTP.
Elementi di sicurezza e considerazioni nelle asserzioni SAML
Emettitente
Come accennato in precedenza, l'emittente è un attributo chiave nelle asserzioni SAML che identifica l'entità che ha emesso l'asserzione. L'emittente è tipicamente l'IdP che ha autenticato l'utente e generato l'asserzione. Includendo l'attributo emittente nell'asserzione, SP può verificare l'origine dell'asserzione e assicurarsi che provenga da una fonte attendibile.
Firma
L'elemento firma in un'asserzione SAML contiene la firma digitale generata dall'IdP per garantire l'integrità e l'autenticità dell'asserzione. La firma è creata utilizzando la chiave privata dell'IdP ed è inclusa nell'asserzione insieme al certificato della chiave pubblica per la verifica da parte di SP. Convalidando la firma, SP può verificare che l'asserzione non sia stata manomessa e provenga dall'IdP previsto.
Condizioni
L'elemento condizioni in un'asserzione SAML definisce i vincoli e le restrizioni che si applicano alla validità e all'uso dell'asserzione. Include condizioni come il periodo di validità dell'asserzione, le restrizioni d'audience e altri vincoli contestuali che SP deve rispettare quando elabora l'asserzione.
Dichiarazione di autenticazione
La dichiarazione di autenticazione (AuthnStatement) è un componente chiave dell'asserzione SAML che fornisce informazioni sullo stato di autenticazione dell'utente e sul contesto. Include dettagli come il metodo di autenticazione utilizzato, il tempo di autenticazione e qualsiasi informazione contestuale rilevante sull'autenticazione, permettendo a SP di prendere decisioni informate sul controllo dell'accesso basate sullo stato di autenticazione dell'utente.
Attributi della dichiarazione di autenticazione:
- AuthenticationContext: Descrive il metodo e il contesto di autenticazione dell'utente, come username-password, autenticazione a più fattori o single sign-on. Questo attributo aiuta SP a valutare la forza e l'affidabilità del processo di autenticazione e determinare i controlli di accesso appropriati.
- AuthenticationInstant: Indica il momento in cui l'utente è stato autenticato dall'IdP. Questo timestamp è cruciale per verificare la freschezza dell'autenticazione e prevenire attacchi di replay o di hijacking della sessione.
- SessionNotOnOrAfter: Specifica il tempo di scadenza della sessione dell'utente, dopo di che l'utente deve ri-autenticarsi per accedere al servizio. Questo attributo aiuta a far rispettare le politiche di gestione delle sessioni e ridurre il rischio di accessi non autorizzati.
Migliori pratiche per la sicurezza SAML
- Utilizza metodi di binding sicuri: Scegli metodi di binding SAML appropriati in base ai tuoi requisiti di sicurezza e alle caratteristiche del canale di comunicazione. Usa POST HTTP per trasmettere dati sensibili e Redirect HTTP per richieste semplici.
- Convalida le firme delle asserzioni: Verifica le firme digitali delle asserzioni SAML per garantire la loro integrità e autenticità. Usa il certificato della chiave pubblica dell'IdP per convalidare la firma e rilevare i tentativi di manomissione.
- Applica restrizioni di audience: Includi restrizioni di audience nelle asserzioni SAML per limitare l'ambito dell'asserzione al SP destinatario. Questo previene attacchi di replay dell'asserzione e accesso non autorizzato da parte di altri provider di servizi.
- Proteggi lo scambio di metadati: Proteggi lo scambio di metadati tra SP e IdP per prevenire attacchi di manomissione e spoofing dei metadati. Usa canali e meccanismi sicuri per condividere i metadati in modo sicuro.
- Implementa una gestione sicura dello stato di trasmissione: Usa valori di stato di trasmissione unici e imprevedibili per prevenire attacchi CSRF durante l'autenticazione SAML. Valida lo stato di trasmissione per garantirne l'integrità e l'autenticità.
- Rafforza la gestione della sessione: Definisci politiche di scadenza delle sessioni e applica timeout delle sessioni per ridurre il rischio di hijacking della sessione e accessi non autorizzati. Usa attributi relativi alla sessione nelle asserzioni SAML per gestire in modo sicuro le sessioni degli utenti.
- Cripta gli attributi sensibili: Se necessario, cripta gli attributi utente sensibili all'interno delle asserzioni SAML per proteggere la privacy e la riservatezza dei dati degli utenti. Usa algoritmi di crittografia sicuri e pratiche di gestione delle chiavi per proteggere i dati sensibili.
Alternative a SAML
Sebbene il SAML rimanga uno standard ampiamente adottato per il SSO e la federazione delle identità, offrendo un robusto set di funzionalità e meccanismi di sicurezza, la sua età può rappresentare una sfida nel soddisfare le crescenti esigenze di sicurezza e usabilità delle applicazioni moderne. Rispetto al più recente OpenID Connect (OIDC) basato su OAuth 2.0, il SAML tende ad essere più complesso e manca di alcune delle funzionalità di sicurezza avanzate che OIDC offre. Ad esempio, il flusso di autorizzazione multi-richiedente in OIDC offre un approccio più sicuro rispetto al flusso di scambio di asserzioni SAML relativamente semplice. Per le organizzazioni che desiderano adottare una soluzione di federazione delle identità più moderna e flessibile, OIDC può essere un'alternativa valida al SAML.