SAML säkerhetsfuskark
En snabb referensguide till Security Assertion Markup Language (SAML) och dess säkerhetsfunktioner. Förstå nyckeltermer, implementeringstips och bästa praxis för att säkra SAML-baserad autentisering och auktorisering i företagsmiljöer.
Introduktion
Security Assertion Markup Language (SAML) är en öppen standard för utbyte av autentiserings- och auktoriseringsdata mellan parter, särskilt mellan en identitetsleverantör och en tjänsteleverantör. SAML är ett XML-baserat markeringsspråk för säkerhetsintyg som används för single sign-on (SSO) och identitetsfederation. Det används vanligtvis i företagsmiljöer för autentiserings- och auktoriseringsändamål.
Standard SAML-autentiseringsflöde
- Användaren begär åtkomst till en klientapplikation, som fungerar som en tjänsteleverantör (SP).
- SP skickar en SAML SSO-autentiseringsbegäran till identitetsleverantören (IdP) och omdirigerar användaren till IdP.
- IdP uppmanar användaren att ange inloggningsuppgifter om användaren inte redan är autentiserad.
- Användaren anger inloggningsuppgifterna och IdP autentiserar användaren.
- IdP skickar en SAML-svarsbekräftelse till SP, som inkluderar användarens autentiseringsstatus och attribut. IdP omdirigerar sedan användaren tillbaka till SP.
- SP tar emot SAML-svarsbekräftelsen, validerar den och beviljar användaren åtkomst.
Säkerhetsfaktorer i SAML
SP-entity ID
Tänk på SP-entity ID som det unika märket för en SP under SAML-autentiseringskontexten. Det är som ett fingeravtryck som hjälper IdP att känna igen SP under deras interaktioner. Denna ID är en nyckeldel av SP:s metadata, delad med IdP för att bygga förtroende och säkerställa säker kommunikation.
Användning av SP-entity ID:
- Metadatanregistrering:
EntityID
-attributet är en del av SP:s metadata, delad med IdP för att etablera ett förtroendeförhållande. Det fungerar som en unik identifierare för att lokalisera SP:s metadata och få de nödvändiga konfigurationsdetaljerna för SAML-interaktioner. - Autentiseringsbegäran: SP-entity ID ingår i SAML-autentiseringsbegäran som skickas till IdP, som tydligt identifierar den begärande SP:n. IdP använder denna information för att validera begäran och bestämma den lämpliga autentiseringskontexten.
- Bekräftelsepublik: Efter lyckad användarauktorisering ingår SP-entity ID i SAML-bekräftelsen som en publikbegränsning. Denna åtgärd säkerställer att bekräftelsen är avsedd enbart för den utpekade SP:n och inte kan missbrukas av andra SP:er.
IdP-entity ID
Å andra sidan, är IdP-entity ID den speciella etiketten för IdP. Det hjälper till att identifiera IdP i SAML-ekosystemet, vilket gör det enkelt för SP att hitta den. Denna ID ingår i IdP:s metadata och delas med SP, vilket främjar ett förtroendegivande förhållande och säkra anslutningar.
Användning av IdP-entity ID:
- Metadatanregistrering:
EntityID
-attributet ingår också i IdP:s metadata, delad med SP för att etablera ett förtroendeförhållande. Det fungerar som en unik identifierare för att lokalisera IdP:s metadata och få de nödvändiga konfigurationsdetaljerna för SP för att validera SAML-svar. - Bekräftelseutfärdare: När IdP genererar en SAML-bekräftelse, inkluderar den sin entity ID som utfärdare. Detta attribut indikerar den enhet som utfärdade bekräftelsen och hjälper SP att verifiera bekräftelsens äkthet och integritet.
Relay state
Relay state är en parameter som används i SAML-autentisering som underlättar överföringen av tillståndsinformation mellan SP och IdP. Det fungerar som en bro mellan SP-initierade och IdP-initierade SSO-flöden, bevarar användarens kontext och sessionstillstånd under autentiseringsprocessen.
Användning av relay state:
- Bevara användarkontext: Relay state tillåter SP att överföra ytterligare information till IdP under autentiseringsprocessen. Denna information kan inkludera användarens sessionstillstånd, applikationskontext eller annan relevant data som behöver bevaras över SAML-flödet. Såsom URL eller session ID för applikationen användaren åtkomstade före inloggning.
- Förhindra CSRF-attacker: Relay state är avgörande för att förhindra kryss-plats begäran förfalskning (CSRF) attacker under SAML-autentisering. Genom att inkludera ett unikt och oförutsägbart relay state värde i autentiseringsbegäran kan SP verifiera SAML-svarens integritet och säkerställa att det motsvarar den ursprungliga begäran.
Bekräftelsesignatur
Bekräftelsesignaturen är en kritisk säkerhetsfunktion i SAML som säkerställer integriteten, äktheten och icke-förnekningsbarheten av SAML-bekräftelser. Det involverar digital signering av SAML-bekräftelsen med hjälp av IdP:s privata nyckel, vilket gör det möjligt för SP att verifiera bekräftelsens ursprung och upptäcka eventuella manipuleringsförsök.
Hur bekräftelsesignaturen fungerar:
- Generering av nyckelpar: IdP genererar ett publik-privat nyckelpar, där den privata nyckeln används för att signera SAML-bekräftelsen, och den publika nyckeln delas med SP för verifiering. Detta asymmetriska krypteringsschema säkerställer att endast IdP kan signera bekräftelsen, medan SP kan validera den.
- Delat certifikat: IdP tillhandahåller SP med sitt publika nyckelcertifikat, som innehåller den publika nyckeln som används för att verifiera bekräftelsesignaturen. Normalt kommer detta certifikat att vara en del av IdP:s metadata, eller så kan SP erhålla det via en säker nedladdningsprocess.
- Bekräftelsesignering: Efter att ha autentiserat användaren signerar IdP digitalt SAML-bekräftelsen med sin privata nyckel. Denna signatur ingår i bekräftelsen, tillsammans med det publika nyckelcertifikatet, vilket gör det möjligt för SP att verifiera bekräftelsens äkthet.
- Bekräftelseverifiering: Vid mottagande av SAML-bekräftelsen använder SP IdP:s publika nyckel för att verifiera bekräftelsesignaturen. Om signaturen är giltig kan SP lita på bekräftelsen och bevilja användaren åtkomst.
Bekräftelsekryptering
Förutom signering stödjer SAML även bekräftelsekryptering för att skydda känsliga användarattribut och data som överförs mellan IdP och SP. Genom att kryptera bekräftelsen säkerställer IdP att endast den avsedda mottagaren (SP) kan dekryptera och få tillgång till bekräftelsens innehåll, vilket skyddar användarens integritet och konfidentialitet. Bekräftelsekryptering är en valfri säkerhetsfunktion i SAML som kan användas för att förbättra dataskyddet.
Användning av bekräftelsekryptering:
- Skydd av känsliga attribut: Bekräftelsekryptering är särskilt användbar för att skydda känsliga användarattribut, såsom personligt identifierbar information (PII), finansiella data eller medicinska journaler. Genom att kryptera dessa attribut inom bekräftelsen förhindrar IdP obehörig åtkomst och säkerställer datakonfidentialitet.
Hur bekräftelsekryptering fungerar:
- Nyckelutbyte: IdP och SP etablerar en säker nyckelutbytesmekanism för att dela krypteringsnycklar för att skydda SAML-bekräftelsen. Detta kan innebära användning av symmetriska krypteringsnycklar eller offentliga nyckelkrypteringsscheman, beroende på krypteringsalgoritmen och nyckelhanteringsstrategin.
- Attributkryptering: Efter att ha genererat SAML-bekräftelsen krypterar IdP de känsliga användarattributen med hjälp av den delade krypteringsnyckeln. De krypterade attributen är inbäddade inom bekräftelsen, vilket säkerställer att endast SP kan dekryptera och få tillgång till data.
- Bekräftelsedekryptering: Vid mottagande av den krypterade bekräftelsen dekrypterar SP de skyddade attributen med hjälp av den delade krypteringsnyckeln. Denna process möjliggör för SP att få tillgång till användarens känsliga data p å ett säkert sätt och behandla dem efter behov.
Bindningsmetoder
SAML-bindningsmetoder definierar hur SAML-meddelanden överförs mellan SP och IdP över olika kommunikationsprotokoll. De specificerar kodningen, transporten och säkerhetsmekanismerna som används för att utbyta SAML-bekräftelser och begäran, vilket säkerställer säker och tillförlitlig kommunikation mellan de involverade parterna.
Både SP och IdP kommer att specificera vilka bindningsmetoder de stödjer i sina metadatan, vilket gör det möjligt för dem att förhandla om lämplig metod för SAML-interaktioner. Valet av bindningsmetod beror på faktorer som meddelandestorlek, säkerhetskrav och kommunikationskanalens egenskaper.
SAML-bindningsmetoder:
- HTTP Redirect: SAML-meddelanden kodas som URL-parametrar och överförs via HTTP-omdirigering. Denna bindning är lämplig för scenarier där meddelandestorleken är begränsad och kommunikationskanalen inte är säker.
- HTTP POST: SAML-meddelanden kodas som formulärparametrar och överförs via HTTP POST-begäran. Denna bindning används när meddelandestorleken överskrider URL-längdbegränsningen eller när ytterligare säkerhetsåtgärder krävs.
- Artifact: SAML-meddelanden överförs med hjälp av kortlivade tokens kallade artefakter, som utbyts över en säker bakkanal mellan SP och IdP. Denna bindning är lämplig för scenarier där meddelandekonfidentialitet och integritet är kritiska, och kommunikationskanalen är säker.
De vanligaste bindningsmetoderna:
- Autentiseringsbegäran: Autentiseringsbegäran från SP till IdP överförs vanligtvis med HTTP Redirect på grund av dess enkelhet och effektivitet. SP kodar SAML-begäran som URL-parametrar och omdirigerar användarens webbläsare till IdP för autentisering. Detta kallas det SP-initierade SSO-flödet.
- Bekräftelsesvar: SAML-svarsbekräftelsen från IdP till SP överförs vanligtvis med HTTP POST-bindningsmetoden. IdP kodar SAML-bekräftelsen som formulärparametrar och postar den tillbaka till SP för validering. Detta säkerställer att bekräftelsen överförs säkert utan att exponera känsliga data i URL:en. Dessutom kan HTTP POST-bindning hantera större meddelandestorlekar jämfört med HTTP Redirect-bindningen.
Säkerhetselement och överväganden i SAML-bekräftelser
Utfärdare
Som nämnts tidigare är utfärdaren ett nyckelattribut i SAML-bekräftelser som identifierar den enhet som utfärdade bekräftelsen. Utfärdaren är vanligtvis IdP som autentiserade användaren och genererade bekräftelsen. Genom att inkludera utfärdarens attribut i bekräftelsen kan SP verifiera bekräftelsens ursprung och säkerställa att den kommer från en betrodd källa.
Signatur
Signatur-elementet i en SAML-bekräftelse innehåller den digitala signaturen som genererats av IdP för att säkerställa bekräftelsens integritet och äkthet. Signaturen skapas med IdP:s privata nyckel och inkluderas i bekräftelsen tillsammans med det publika nyckelcertifikatet för verifiering av SP. Genom att validera signaturen kan SP verifiera att bekräftelsen inte har manipulerats och kommer från den förväntade IdP:n.
Villkor
Villkor-elementet i en SAML-bekräftelse definierar de begränsningar och restriktioner som gäller bekräftelsens giltighet och användning. Det inkluderar villkor såsom bekräftelsens giltighetsperiod, publiksbegränsningar och andra kontextuella begränsningar som SP måste verkställa vid bearbetning av bekräftelsen.
Autentiseringsutlåtande
Autentiseringsutlåtandet (AuthnStatement) är en viktig komponent i SAML-bekräftelsen som ger information om användarens autentiseringsstatus och kontext. Det inkluderar detaljer såsom den använda autentiseringsmetoden, tidpunkten för autentisering och relevant autentiseringskontextinformation, vilket gör det möjligt för SP att fatta informerade beslut om åtkomstkontroll baserat på användarens autentiseringstillstånd.
Autentiseringsutlåtande attribut:
- AuthenticationContext: Beskriver metoden och kontexten för användarens autentisering, såsom användarnamn-lösenord, flerfaktorsautentisering eller single sign-on. Detta attribut hjälper SP att bedöma styrkan och tillförlitligheten hos autentiseringsprocessen och bestämma lämpliga åtkomstkontroller.
- AuthenticationInstant: Indikerar tiden då användaren autentiserades av IdP. Denna tidsstämpel är avgörande för att verifiera autentiseringen och förhindra uppspelningsattacker eller sessionskapningar.
- SessionNotOnOrAfter: Anger utgångstiden för användarens session, efter vilken användaren måste autentisera sig igen för att få åtkomst till tjänsten. Detta attribut hjälper till att genomdriva sessionhanteringspolicyer och minska risken för obehörig åtkomst.
Bästa praxis för SAML-säkerhet
- Använd säkra bindningsmetoder: Välj lämpliga SAML-bindningsmetoder baserat på dina säkerhetskrav och kommunikationskanalens egenskaper. Använd HTTP POST för att överföra känslig data och HTTP Redirect för enkla förfrågningar.
- Validera bekräftelsesignaturer: Verifiera de digitala signaturerna på SAML-bekräftelser för att säkerställa deras integritet och äkthet. Använd IdP:s publika nyckelcertifikat för att validera signaturen och upptäcka manipuleringsförsök.
- Genomför publiksbegränsningar: Inkludera publiksbegränsningar i SAML-bekräftelser för att begränsa bekräftelsens omfattning till den avsedda SP:n. Detta förhindrar bekräftelseuppspelningsattacker och obehörig åtkomst av andra tjänsteleverantörer.
- Skydda metadatautbyte: Skydda utbyte av SP- och IdP-metadata för att förhindra metadatatampering och spoofing-attacker. Använd säkra kanaler och mekanismer för att dela metadata säkert.
- Implementera säker hantering av relay state: Använd unika och oförutsägbara relay state-värden för att förhindra CSRF-attacker under SAML-autentisering. Validera relay state för att säkerställa dess integritet och äkthet.
- Genomför sessionshantering: Definiera sessionsutgångspolicyer och genomför sessionstidsgränser för att minska risken för sessionskapning och obehörig åtkomst. Använd sessionsrelaterade attribut i SAML-bekräftelser för att hantera användarsessioner säkert.
- Kryptera känsliga attribut: Om det behövs, kryptera känsliga användarattribut inom SAML-bekräftelser för att skydda användarens integritet och datakonfidentialitet. Använd säkra krypteringsalgoritmer och nyckelhanteringspraxis för att skydda känslig data.
Alternativ till SAML
Även om SAML fortfarande är en allmänt använd standard för SSO och identitetsfederation, och erbjuder en robust uppsättning funktioner och säkerhetsmekanismer, kan dess ålder innebära utmaningar för att tillgodose de föränderliga säkerhets- och användbarhetskraven i moderna applikationer. När man jämför med den mer moderna OAuth 2.0-baserade OpenID Connect (OIDC), tenderar SAML att vara mer komplex och saknar vissa av de förbättrade säkerhetsfunktionerna som OIDC erbjuder. Till exempel, OIDC:s flersäkerhetsbegäran auktorisationskod-grant flöde erbjuder en mer säker metod än det relativt enkla SAML-bekräftelseutbytesflödet. För organisationer som söker att anta en mer modern och flexibel identitetsfederationslösning kan OIDC vara ett möjligt alternativ till SAML.