SAML-veiligheidssamenvatting
Een snelle referentiegids voor de Security Assertion Markup Language (SAML) en de beveiligingsfuncties ervan. Begrijp belangrijke termen, implementatietips en beste praktijken voor het beveiligen van SAML-gebaseerde authenticatie en autorisatie in bedrijfsomgevingen.
Inleiding
De Security Assertion Markup Language (SAML) is een open standaard voor het uitwisselen van authenticatie- en autorisatiegegevens tussen partijen, met name tussen een identiteitsprovider en een serviceprovider. SAML is een op XML gebaseerde opmaaktaal voor beveiligingsbeweringen die wordt gebruikt voor single sign-on (SSO) en identiteitsfederatie. Het wordt veel gebruikt in bedrijfsomgevingen voor authenticatie- en autorisatiedoeleinden.
Standaard SAML-authenticatiestroom
- Gebruiker vraagt toegang tot een clientapplicatie aan, die fungeert als een serviceprovider (SP).
- SP stuurt een SAML SSO-authenticatieaanvraag naar de identiteitsprovider (IdP) en leidt de gebruiker om naar de IdP.
- IdP vraagt de gebruiker om referenties als de gebruiker nog niet geauthenticeerd is.
- Gebruiker voert referenties in en IdP authenticeert de gebruiker.
- IdP stuurt een SAML-responsbewering naar de SP, inclusief de authenticatiestatus en attributen van de gebruiker. IdP leidt de gebruiker vervolgens terug naar de SP.
- SP ontvangt de SAML-responsbewering, valideert deze en verleent toegang aan de gebruiker.
Beveiligingsfactoren in SAML
SP-entiteits-ID
Beschouw het SP-entiteits-ID als de unieke badge voor een SP in de SAML-authenticatiecontext. Het is als een vingerafdruk die de IdP helpt de SP te herkennen tijdens hun interacties. Deze ID is een belangrijk onderdeel van de metadata van de SP, gedeeld met de IdP om vertrouwen op te bouwen en veilige communicatie te verzekeren.
Gebruik van SP-entiteits-ID:
- Metadata-registratie: Het attribuut
EntityID
maakt deel uit van de metadata van de SP, gedeeld met de IdP om een vertrouwensrelatie op te bouwen. Het dient als een unieke identificator om de metadata van de SP te lokaliseren en de vereiste configuratiedetails voor SAML-interacties te verkrijgen. - Authenticatieaanvraag: De SP-entiteits-ID is opgenomen in de SAML-authenticatieaanvraag die naar de IdP wordt verzonden en identificeert de aanvragende SP duidelijk. De IdP gebruikt deze informatie om de aanvraag te valideren en de juiste authenticatiecontext te bepalen.
- Bewering publieksdoel: Na succesvolle gebruikersauthenticatie wordt de SP-entiteits-ID opgenomen in de SAML-bewering als een publieksbeperking. Deze maatregel zorgt ervoor dat de bewering uitsluitend bedoeld is voor de aangewezen SP en niet kan worden misbruikt door andere SP's.
IdP-entiteits-ID
Aan de andere kant is de IdP-entiteits-ID het speciale label voor de IdP. Het helpt de IdP te identificeren binnen het SAML-ecosysteem, waardoor het voor de SP gemakkelijk is om het te vinden. Deze ID is opgenomen in de metadata van de IdP en wordt gedeeld met de SP, waardoor een vertrouwensrelatie en veilige verbindingen worden bevorderd.
Gebruik van IdP-entiteits-ID:
- Metadata-registratie: Het attribuut
EntityID
is ook opgenomen in de metadata van de IdP, gedeeld met de SP om een vertrouwensrelatie op te bouwen. Het dient als een unieke identificator om de metadata van de IdP te lokaliseren en de nodige configuratiedetails te verkrijgen voor de SP om SAML-responsen te valideren. - Bewering uitgever: Wanneer de IdP een SAML-bewering genereert, bevat het zijn entiteits-ID als de uitgever. Dit attribuut geeft de entiteit aan die de bewering heeft uitgegeven en helpt de SP de authenticiteit en integriteit van de bewering te verifiëren.
Relay state
Relay state is een parameter die wordt gebruikt in SAML-authenticatie en die de overdracht van statusinformatie tussen de SP en de IdP vergemakkelijkt. Het fungeert als een brug tussen de door SP geïnitieerde en door IdP geïnitieerde SSO-stromen, waarbij de context van de gebruiker en de status van de sessie tijdens het authenticatieproces behouden blijven.
Gebruik van relay state:
- Gebruikerscontext behouden: Relay state stelt de SP in staat om tijdens het authenticatieproces aanvullende informatie aan de IdP door te geven. Deze informatie kan de sessiestatus van de gebruiker, de toepassingscontext of andere relevante gegevens bevatten die gedurende de SAML-stroom moeten worden bewaard. Zoals de URL of sessie-ID van de applicatie waartoe de gebruiker toegang had voordat hij werd geauthenticeerd.
- Voorkomen van CSRF-aanvallen: Relay state is cruciaal voor het voorkomen van cross-site request forgery (CSRF)-aanvallen tijdens SAML-authenticatie. Door een unieke en onvoorspelbare relay state-waarde in de authenticatieaanvraag op te nemen, kan de SP de integriteit van de SAML-respons verifiëren en ervoor zorgen dat deze overeenkomt met de oorspronkelijke aanvraag.
Bewering handtekening
De bewering handtekening is een kritieke beveiligingsfunctie in SAML die de integriteit, authenticiteit en onweerlegbaarheid van SAML-bewerkingen waarborgt. Het omvat het digitaal ondertekenen van de SAML-bewering met behulp van de privésleutel van de IdP, waardoor de SP de oorsprong van de bewering kan verifiëren en pogingen tot manipulatie kan detecteren.
Hoe bewering handtekening werkt:
- Sleutelpaar generatie: De IdP genereert een openbaar-privaatsleutelpaar, waarbij de privésleutel wordt gebruikt om de SAML-bewering te ondertekenen, en de openbare sleutel wordt gedeeld met de SP voor verificatie. Dit asymmetrische coderingsschema zorgt ervoor dat alleen de IdP de bewering kan ondertekenen, terwijl de SP deze kan valideren.
- Gedeeld certificaat: De IdP verstrekt de SP haar publieke sleutelcertificaat, dat de publieke sleutel bevat die wordt gebruikt voor het verifiëren van de beweringshandtekening. Normaal gesproken maakt dit certificaat deel uit van de metadata van de IdP, of de SP kan het verkrijgen via een veilig downloadproces.
- Bewering ondertekenen: Na het authentiseren van de gebruiker ondertekent de IdP de SAML-bewering digitaal met haar privésleutel. Deze handtekening is opgenomen in de bewering, samen met het public key-certificaat, waardoor de SP de authenticiteit van de bewering kan verifiëren.
- Bewering verificatie: Bij ontvangst van de SAML-bewering gebruikt de SP de publieke sleutel van de IdP om de handtekening van de bewering te verifiëren. Als de handtekening geldig is, kan de SP de bewering vertrouwen en de gebruiker toegang verlenen.
Bewering versleuteling
Naast het ondertekenen ondersteunt SAML ook beweringsversleuteling om gevoelige gebruikersattributen en gegevens die tussen de IdP en SP worden verzonden te beschermen. Door de bewering te versleutelen, zorgt de IdP ervoor dat alleen de bedoelde ontvanger (SP) de versleutelde inhoud van de bewering kan ontsleutelen en openen, waardoor de privacy en vertrouwelijkheid van de gebruiker worden beschermd. Bewering versleuteling is een optionele beveiligingsfunctie in SAML die kan worden gebruikt om gegevensbescherming te verbeteren.
Gebruik van beweringsversleuteling:
- Gevoelige attributen bescherming: Bewering versleuteling is bijzonder nuttig voor het beschermen van gevoelige gebruikersattributen, zoals Persoonlijk Identificeerbare Informatie (PII), financiële gegevens of medische dossiers. Door deze attributen binnen de bewering te versleutelen, voorkomt de IdP ongeautoriseerde toegang en waarborgt het de vertrouwelijkheid van gegevens.
Hoe beweringsversleuteling werkt:
- Sleuteluitwisseling: De IdP en SP stellen een veilige sleuteldelingmechanisme in om encryptiesleutels te delen voor de bescherming van de SAML-bewering. Dit kan het gebruik van symmetrische coderingssleutels of openbare-sleutelcoderingsmethoden omvatten, afhankelijk van het coderingsalgoritme en de sleutelbeheersstrategie.
- Attribuut versleuteling: Na het genereren van de SAML-bewering versleutelt de IdP de gevoelige gebruiker attributen met de gedeelde coderingssleutel. De versleutelde attributen zijn ingebed in de bewering, zodat alleen de SP de gegevens kan ontsleutelen en openen.
- Bewering ontsleuteling: Bij ontvangst van de versleutelde bewering ontsleutelt de SP de beschermde attributen met behulp van de gedeelde coderingssleutel. Dit proces stelt de SP in staat om veilig toegang te verkrijgen tot de gevoelige gegevens van de gebruiker en deze indien nodig te verwerken.
Binding methoden
SAML-binding methoden definiëren hoe SAML-berichten tussen de SP en IdP worden verzonden via verschillende communicatieprotocollen. Ze specificeren de codering, transport en beveiligingsmechanismen die worden gebruikt om SAML-bewerkingen en -verzoeken uit te wisselen, waardoor veilige en betrouwbare communicatie tussen de betrokken partijen mogelijk wordt gemaakt.
Zowel de SP als de IdP zullen specificeren welke binding methoden zij ondersteunen in hun metadata, zodat ze kunnen onderhandelen over de juiste methode voor SAML-interacties. De keuze van de binding methode hangt af van factoren zoals de grootte van het bericht, beveiligingseisen en de kenmerken van het communicatiekanaal.
SAML-binding methoden:
- HTTP Redirect: SAML-berichten worden gecodeerd als URL-parameters en verzonden via HTTP-redirect. Deze binding is geschikt voor scenario's waarin de grootte van het bericht beperkt is en het communicatiekanaal niet veilig is.
- HTTP POST: SAML-berichten worden gecodeerd als formulierparameters en verzonden via HTTP POST-verzoeken. Deze binding wordt gebruikt wanneer de berichtgrootte de URL-limiet overschrijdt of wanneer extra beveiligingsmaatregelen nodig zijn.
- Artifact: SAML-berichten worden verzonden met behulp van kortstondige tokens, artefacten genoemd, die via een veilige back-channel tussen de SP en IdP worden uitgewisseld. Deze binding is geschikt voor scenario's waarin de vertrouwelijkheid en integriteit van het bericht cruciaal zijn en het communicatiekanaal veilig is.
De meest voorkomende binding methoden:
- Authenticatieaanvraag: Het authenticatieverzoek van de SP naar de IdP wordt meestal verzonden met behulp van de HTTP Redirect vanwege de eenvoud en efficiëntie. De SP encodeert het SAML-verzoek als URL-parameters en leidt de browser van de gebruiker om naar de IdP voor authenticatie. Dit staat bekend als de SP-geïnitieerde SSO-stroom.
- Bewering respons: De SAML-responsbewering van de IdP naar de SP wordt meestal verzonden met behulp van de HTTP POST-bindingmethode. De IdP codeert de SAML-bewering als formulierparameters en post deze terug naar de SP voor validatie. Dit zorgt ervoor dat de bewering veilig wordt verzonden zonder gevoelige gegevens in de URL bloot te stellen. Bovendien kan de HTTP POST-binding grotere berichten verwerken in vergelijking met de HTTP Redirect-binding.
Beveiligingselementen en overwegingen in SAML-bewerkingen
Uitgever
Zoals eerder vermeld is de uitgever een belangrijk attribuut in SAML-bewerkingen dat de entiteit identificeert die de bewerking heeft uitgegeven. De uitgever is doorgaans de IdP die de gebruiker heeft geauthenticeerd en de bewerking heeft gegenereerd. Door het uitgeversattribuut in de bewerking op te nemen, kan de SP de oorsprong van de bewerking verifiëren en ervoor zorgen dat het afkomstig is van een vertrouwde bron.
Handtekening
Het element handtekening in een SAML-bewering bevat de digitale handtekening die door de IdP is gegenereerd om de integriteit en authenticiteit van de bewering te waarborgen. De handtekening is gemaakt met behulp van de privésleutel van de IdP en opgenomen in de bewering, samen met het publieke sleutelcertificaat voor verificatie door de SP. Door de handtekening te valideren, kan de SP verifiëren dat de bewering niet is veranderd en afkomstig is van de verwachte IdP.
Voorwaarden
Het voorwaardenelement in een SAML-bewering definieert de beperkingen en restricties die van toepassing zijn op de geldigheid en het gebruik van de bewering. Het omvat voorwaarden zoals de geldigheidsperiode van de bewering, publieksbeperkingen en andere contextuele beperkingen die de SP moet afdwingen bij het verwerken van de bewering.
Authenticatieverklaring
De authenticatieverklaring (AuthnStatement) is een belangrijk onderdeel van de SAML-bewering die informatie biedt over de authenticatiestatus en -context van de gebruiker. Het bevat details zoals de gebruikte authenticatiemethode, de authenticatietijd en relevante authenticatiecontextinformatie, waardoor de SP weloverwogen beslissingen kan nemen op basis van de authenticatiestatus van de gebruiker.
Authenticatieverklaring attributen:
- AuthenticationContext: Beschrijft de methode en context van gebruikersauthenticatie, zoals gebruikersnaam-wachtwoord, multi-factor authenticatie of single sign-on. Dit attribuut helpt de SP de sterkte en betrouwbaarheid van het authenticatieproces te beoordelen en de juiste toegangscontrole te bepalen.
- AuthenticationInstant: Geeft het tijdstip aan waarop de gebruiker door de IdP werd geauthenticeerd. Deze tijdstempel is cruciaal om de versheid van de authenticatie te verifiëren en replay-aanvallen of sessiekaping te voorkomen.
- SessionNotOnOrAfter: Geeft het verliestijdstip van de sessie van de gebruiker aan, waarna de gebruiker zich opnieuw moet authenticeren om toegang tot de service te krijgen. Dit attribuut helpt sessiebeheermaatregelen af te dwingen en ongeoorloofde toegang te beperken.
Beste praktijken voor SAML-beveiliging
- Gebruik veilige binding methoden: Kies passende SAML-bindingmethoden op basis van je beveiligingseisen en communicatiekanaalkenmerken. Gebruik HTTP POST voor het verzenden van gevoelige gegevens en HTTP Redirect voor eenvoudige verzoeken.
- Valideer bewering handtekeningen: Verifieer de digitale handtekeningen van SAML-bewerkingen om hun integriteit en authenticiteit te waarborgen. Gebruik het publieke sleutelcertificaat van de IdP om de handtekening te valideren en pogingen tot manipulatie te detecteren.
- Handhaaf publieksbeperkingen: Neem publieksbeperkingen op in SAML-bewerkingen om de reikwijdte van de bewring te beperken tot de bedoelde SP. Dit voorkomt bewering herhalingsaanvallen en ongeautoriseerde toegang door andere serviceproviders.
- Veilig metadatagebruik: Bescherm de uitwisseling van SP- en IdP-metadata om metadata-aanpassing en spoofingaanvallen te voorkomen. Gebruik veilige kanalen en mechanismen om metadata veilig te delen.
- Implementeer veilige relay state afhandeling: Gebruik unieke en onvoorspelbare relay state waarden om CSRF-aanvallen tijdens SAML-authenticatie te voorkomen. Valideer de relay state om de integriteit en authenticiteit ervan te waarborgen.
- Dwing sessiebeheer af: Definieer sessieverloopbeleid en dwing sessie time-outs af om het risico van sessiekaping en ongeautoriseerde toegang te beperken. Gebruik sessiegerelateerde attributen in SAML-bewerkingen om gebruikerssessies veilig te beheren.
- Versleutel gevoelige attributen: Versleutel indien nodig gevoelige gebruikersattributen binnen SAML-bewerkingen om de privacy van gebruikers en de vertrouwelijkheid van gegevens te beschermen. Gebruik veilige coderingsalgoritmen en sleutelbeheerspraktijken om gevoelige gegevens te beschermen.
Alternatieven voor SAML
Hoewel SAML een breed geaccepteerde standaard blijft voor SSO en identiteitsfederatie, met een robuuste set features en beveiligingsmechanismen, kan de ouderdom ervan uitdagingen opleveren om te voldoen aan de veranderende beveiligings- en bruikbaarheidseisen van moderne toepassingen. Vergeleken met de meer eigentijdse OAuth 2.0-gebaseerde OpenID Connect (OIDC) heeft SAML de neiging om complexer te zijn en mist het enkele van de verbeterde beveiligingsfuncties die OIDC biedt. Bijvoorbeeld, de multi-beveiligingsverzoek autorisatie code uitwisselingsstroom van OIDC biedt een veiligere benadering dan de relatief eenvoudige SAML-beweringuitwisselingsstroom. Voor organisaties die een meer moderne en flexibele identiteitsfederatieoplossing willen adopteren, kan OIDC een levensvatbaar alternatief zijn voor SAML.