SAML-Sicherheits-Spickzettel
Ein Leitfaden für die Sicherheits-Assertion-Markup-Sprache (SAML) und ihre Sicherheitsfunktionen. Verstehen Sie wichtige Begriffe, Implementierungstipps und bewährte Praktiken zur Sicherung der SAML-basierten Authentifizierung und Autorisierung in Unternehmensumgebungen.
Einleitung
Die Security Assertion Markup Language (SAML) ist ein offener Standard für den Austausch von Authentifizierungs- und Autorisierungsdaten zwischen Parteien, insbesondere zwischen einem Identitätsanbieter und einem Dienstanbieter. SAML ist eine XML-basierte Markup-Sprache für Sicherheits-Assertions, die für Single Sign-On (SSO) und Identitätsföderation verwendet wird. Es wird häufig in Unternehmensumgebungen für Authentifizierungs- und Autorisierungszwecke verwendet.
Standard-SAML-Authentifizierungsablauf
- Der Benutzer fordert Zugriff auf eine Client-Anwendung an, die als Dienstanbieter (SP) fungiert.
- SP sendet eine SAML-SSO-Authentifizierungsanfrage an den Identitätsanbieter (IdP) und leitet den Benutzer zum IdP weiter.
- IdP fordert den Benutzer zur Eingabe von Anmeldeinformationen auf, wenn der Benutzer noch nicht authentifiziert ist.
- Der Benutzer gibt Anmeldeinformationen ein und IdP authentifiziert den Benutzer.
- IdP sendet eine SAML-Antwort-Assertion an den SP, die den Authentifizierungsstatus und die Attribute des Benutzers enthält. IdP leitet den Benutzer anschließend zurück zum SP.
- SP erhält die SAML-Antwort-Assertion, validiert sie und gewährt dem Benutzer Zugriff.
Sicherheitsfaktoren in SAML
SP-Entitäts-ID
Stellen Sie sich die SP-Entitäts-ID als das eindeutige Abzeichen für einen SP im SAML-Authentifizierungskontext vor. Es ist wie ein Fingerabdruck, der dem IdP hilft, den SP während ihrer Interaktionen zu erkennen. Diese ID ist ein wesentlicher Bestandteil der Metadaten des SPs, die mit dem IdP geteilt werden, um Vertrauen aufzubauen und eine sichere Kommunikation zu gewährleisten.
Verwendung der SP-Entitäts-ID:
- Metadatenregistrierung: Das
EntityID
-Attribut ist Teil der Metadaten des SPs, die mit dem IdP geteilt werden, um eine Vertrauensbeziehung aufzubauen. Es dient als eindeutiger Identifikator, um die Metadaten des SPs zu lokalisieren und die erforderlichen Konfigurationsdetails für SAML-Interaktionen zu erhalten. - Authentifizierungsanforderung: Die SP-Entitäts-ID ist in der SAML-Authentifizierungsanfrage enthalten, die an den IdP gesendet wird und den anfordernden SP klar identifiziert. Der IdP verwendet diese Informationen, um die Anfrage zu validieren und den geeigneten Authentifizierungskontext zu bestimmen.
- Assertion Audience: Nach erfolgreicher Benutzerauthentifizierung wird die SP-Entitäts-ID als Publikumseinschränkung in die SAML-Assertion aufgenommen. Diese Maßnahme stellt sicher, dass die Assertion ausschließlich für den vorgesehenen SP bestimmt ist und nicht von anderen SPs missbraucht werden kann.
IdP-Entitäts-ID
Auf der anderen Seite ist die IdP-Entitäts-ID das spezielle Label für den IdP. Sie hilft, den IdP innerhalb des SAML-Ökosystems zu identifizieren, was es dem SP erleichtert, ihn zu finden. Diese ID ist in den Metadaten des IdP enthalten und wird mit dem SP geteilt, wodurch eine vertrauensvolle Beziehung und sichere Verbindungen gefördert werden.
Verwendung der IdP-Entitäts-ID:
- Metadatenregistrierung: Das
EntityID
-Attribut ist ebenfalls in den Metadaten des IdP enthalten und wird mit dem SP geteilt, um eine Vertrauensbeziehung aufzubauen. Es dient als eindeutiger Identifikator, um die Metadaten des IdP zu lokalisieren und die notwendigen Konfigurationsdetails zu erhalten, damit der SP SAML-Antworten validieren kann. - Assertions-Aussteller: Wenn der IdP eine SAML-Assertion erzeugt, enthält er seine Entitäts-ID als Aussteller. Dieses Attribut gibt die Einheit an, die die Assertion ausgestellt hat, und hilft dem SP, die Authentizität und Integrität der Assertion zu überprüfen.
Relay State
Relay State ist ein Parameter, der in der SAML-Authentifizierung verwendet wird und den Übergang von Statusinformationen zwischen SP und IdP erleichtert. Er fungiert als Brücke zwischen SP-initiierten und IdP-initiierten SSO-Flows und bewahrt den Kontext und den Sitzungsstatus des Benutzers während des Authentifizierungsprozesses.
Verwendung von Relay State:
- Benutzerkontext beibehalten: Relay State ermöglicht es dem SP, während des Authentifizierungsprozesses zusätzliche Informationen an den IdP zu übermitteln. Diese Informationen können den Sitzungsstatus des Benutzers, den Anwendungskontext oder andere relevante Daten umfassen, die über den SAML-Flow hinweg beibehalten werden müssen. Wie z. B. die URL oder die Sitzungs-ID der Anwendung, auf die der Benutzer vor der Authentifizierung zugegriffen hat.
- CSRF-Angriffe verhindern: Relay State ist entscheidend für die Verhinderung von Cross-Site-Request-Forgery (CSRF)-Angriffen während der SAML-Authentifizierung. Indem der SP einen eindeutigen und unvorhersehbaren Relay State-Wert in die Authentifizierungsanfrage einfügt, kann er die Integrität der SAML-Antwort überprüfen und sicherstellen, dass sie der ursprünglichen Anfrage entspricht.
Assertions-Signatur
Die Assertions-Signatur ist eine wichtige Sicherheitsfunktion in SAML, die die Integrität, Authentizität und Nichtabstreitbarkeit von SAML-Assertions gewährleistet. Sie beinhaltet das digitale Signieren der SAML-Assertion mit dem privaten Schlüssel des IdP, wodurch der SP die Herkunft der Assertion verifizieren und Manipulationsversuche erkennen kann.
Wie Assertions-Signatur funktioniert:
- Schlüsselpaar-Generation: Der IdP generiert ein öffentliches-privates Schlüsselpaar, bei dem der private Schlüssel zur Signatur der SAML-Assertion genutzt wird und der öffentliche Schlüssel mit dem SP zur Verifikation geteilt wird. Diese asymmetrische Verschlüsselung stellt sicher, dass nur der IdP die Assertion signieren kann, während der SP sie validieren kann.
- Geteiltes Zertifikat: Der IdP stellt dem SP sein öffentliches Schlüsselzertifikat zur Verfügung, das den öffentlichen Schlüssel enthält, der zur Verifizierung der Assertions-Signatur erforderlich ist. Normalerweise wird dieses Zertifikat Teil der Metadaten des IdP sein oder der SP kann es über einen sicheren Downloadprozess erhalten.
- Assertion signieren: Nach der Benutzerauthentifizierung signiert der IdP die SAML-Assertion digital mit seinem privaten Schlüssel. Diese Signatur ist in der Assertion enthalten, zusammen mit dem öffentlichen Schlüsselzertifikat, das es dem SP ermöglicht, die Authentizität der Assertion zu überprüfen.
- Assertions-Überprüfung: Nach Empfang der SAML-Assertion verwendet der SP den öffentlichen Schlüssel des IdP, um die Signatur der Assertion zu verifizieren. Bei gültiger Signatur kann der SP der Assertion vertrauen und dem Benutzer Zugriff gewähren.
Assertion-Verschlüsselung
Zusätzlich zum Signieren unterstützt SAML auch die Verschlüsselung von Assertions, um sensible Benutzerattribute und Daten zu schützen, die zwischen IdP und SP übertragen werden. Durch das Verschlüsseln der Assertion stellt der IdP sicher, dass nur der vorgesehene Empfänger (SP) die Assertion entschlüsseln und auf die Inhalte zugreifen kann, wodurch die Privatsphäre und Vertraulichkeit der Benutzer gewahrt bleibt. Die Assertion-Verschlüsselung ist eine optionale Sicherheitsfunktion in SAML, die zum Schutz von Daten genutzt werden kann.
Verwendung der Assertion-Verschlüsselung:
- Schutz sensibler Attribute: Die Assertion-Verschlüsselung ist besonders nützlich zum Schutz sensibler Benutzerattribute wie persönlich identifizierbarer Informationen (PII), Finanzdaten oder Gesundheitsakten. Durch die Verschlüsselung dieser Attribute innerhalb der Assertion verhindert der IdP unerlaubten Zugriff und stellt die Vertraulichkeit der Daten sicher.
Wie Assertion-Verschlüsselung funktioniert:
- Schlüsselaustausch: Der IdP und SP etablieren einen sicheren Mechanismus zum Austausch von Verschlüsselungsschlüsseln zum Schutz der SAML-Assertion. Dies kann die Verwendung symmetrischer Verschlüsselungsschlüssel oder öffentlicher Verschlüsselungsschemata beinhalten, abhängig vom Verschlüsselungsalgorithmus und der Schlüsselmanagementstrategie.
- Attributverschlüsselung: Nach der Erzeugung der SAML-Assertion verschlüsselt der IdP die sensiblen Benutzerattribute mit dem geteilten Verschlüsselungsschlüssel. Die verschlüsselten Attribute werden innerhalb der Assertion eingebettet, wodurch nur der SP die Daten entschlüsseln und darauf zugreifen kann.
- Assertions-Entschlüsselung: Nach Empfang der verschlüsselten Assertion entschlüsselt der SP die geschützten Attribute mit dem geteilten Verschlüsselungsschlüssel. Dieser Prozess erlaubt es dem SP, sicher auf die sensiblen Daten des Benutzers zuzugreifen und sie nach Bedarf zu verarbeiten.
Binding-Methoden
SAML-Binding-Methoden definieren, wie SAML-Nachrichten zwischen SP und IdP über verschiedene Kommunikationsprotokolle übertragen werden. Sie spezifizieren die Kodierung, den Transport und die Sicherheitsmechanismen, die verwendet werden, um SAML-Assertions und Anfragen auszutauschen, und gewährleisten eine sichere und zuverlässige Kommunikation zwischen den beteiligten Parteien.
Sowohl der SP als auch der IdP spezifizieren in ihren Metadaten, welche Binding-Methoden sie unterstützen, sodass sie die geeignete Methode für SAML-Interaktionen aushandeln können. Die Wahl der Binding-Methode hängt von Faktoren wie der Nachrichtengröße, den Sicherheitsanforderungen und den Charakteristika des Kommunikationskanals ab.
SAML-Binding-Methoden:
- HTTP Redirect: SAML-Nachrichten werden als URL-Parameter kodiert und über HTTP-Redirect übertragen. Dieses Binding ist für Szenarien geeignet, in denen die Nachrichtengröße begrenzt ist und der Kommunikationskanal nicht sicher ist.
- HTTP POST: SAML-Nachrichten werden als Formularparameter kodiert und über HTTP-POST-Anfragen übertragen. Dieses Binding wird verwendet, wenn die Nachrichtengröße das URL-Längenlimit überschreitet oder wenn zusätzliche Sicherheitsmaßnahmen erforderlich sind.
- Artifact: SAML-Nachrichten werden mithilfe von kurzlebigen Token, sogenannten Artefakten, übertragen, die über einen sicheren Rückkanal zwischen SP und IdP ausgetauscht werden. Dieses Binding ist für Szenarien geeignet, in denen Nachrichtenvertraulichkeit und -integrität entscheidend sind und der Kommunikationskanal sicher ist.
Häufigste Binding-Methoden:
- Authentifizierungsanfrage: Die Authentifizierungsanfrage vom SP an den IdP wird normalerweise unter Verwendung des HTTP Redirect aufgrund ihrer Einfachheit und Effizienz übertragen. Der SP kodiert die SAML-Anforderung als URL-Parameter und leitet den Browser des Benutzers zum IdP zur Authentifizierung weiter. Dies ist als SP-initiierten SSO-Flow bekannt.
- Assertions-Antwort: Die SAML-Antwort-Assertion vom IdP an den SP wird in der Regel über die HTTP POST-Binding-Methode übertragen. Der IdP kodiert die SAML-Assertion als Formularparameter und sendet sie zurück an den SP zur Validierung. Dies stellt sicher, dass die Assertion sicher übermittelt wird, ohne dass sensible Daten in der URL offengelegt werden. Außerdem kann das HTTP POST-Binding im Vergleich zum HTTP Redirect-Binding größere Nachrichtengrößen verarbeiten.
Sicherheitselemente und Überlegungen in SAML-Assertions
Aussteller
Wie zuvor erwähnt, ist der Aussteller ein Schlüsselattribut in SAML-Assertions, das die Einheit identifiziert, die die Assertion ausstellte. Der Aussteller ist in der Regel der IdP, der den Benutzer authentifiziert und die Assertion generiert hat. Durch das Einfügen des Aussteller-Attributs in die Assertion kann der SP die Herkunft der Assertion überprüfen und sicherstellen, dass sie von einer vertrauenswürdigen Quelle stammt.
Signatur
Das Signatur-Element in einer SAML-Assertion enthält die digitale Signatur, die vom IdP generiert wurde, um die Integrität und Authentizität der Assertion sicherzustellen. Die Signatur wird mithilfe des privaten Schlüssels des IdP erstellt und in der Assertion zusammen mit dem öffentlichen Schlüsselzertifikat zur Überprüfung durch den SP eingefügt. Durch die Validierung der Signatur kann der SP überprüfen, dass die Assertion nicht manipuliert wurde und vom erwarteten IdP stammt.
Bedingungen
Das Bedingungen-Element in einer SAML-Assertion definiert die Bedingungen und Einschränkungen, die für die Gültigkeit und Verwendung der Assertion gelten. Dazu gehören Bedingungen wie der Gültigkeitszeitraum der Assertion, Publikumseinschränkungen und andere kontextbezogene Einschränkungen, die der SP beim Verarbeiten der Assertion durchsetzen muss.
Authentifizierungsanweisung
Die Authentifizierungsanweisung (AuthnStatement) ist ein Schlüsselbestandteil der SAML-Assertion, der Informationen über den Authentifizierungsstatus und -kontext des Benutzers bereitstellt. Sie enthält Details wie die verwendete Authentifizierungsmethode, den Zeitpunkt der Authentifizierung und alle relevanten Informationen zum Authentifizierungskontext, die dem SP helfen, fundierte Zugriffsentscheidungen basierend auf dem Authentifizierungsstatus des Benutzers zu treffen.
Attribute der Authentifizierungsanweisung:
- AuthenticationContext: Beschreibt die Methode und den Kontext der Benutzerauthentifizierung, wie z.B. Benutzername-Passwort, Multi-Faktor-Authentifizierung oder Single Sign-On. Dieses Attribut hilft dem SP, die Stärke und Zuverlässigkeit des Authentifizierungsprozesses zu bewerten und die entsprechenden Zugriffskontrollen zu bestimmen.
- AuthenticationInstant: Gibt die Zeit an, zu der der Benutzer vom IdP authentifiziert wurde. Dieser Zeitstempel ist entscheidend für die Überprüfung der Aktualität der Authentifizierung und zur Verhinderung von Replay-Angriffen oder Sitzungsübernahmen.
- SessionNotOnOrAfter: Gibt das Ablaufdatum der Benutzersitzung an, nach dem der Benutzer sich neu authentifizieren muss, um auf den Dienst zuzugreifen. Dieses Attribut hilft, Sitzungsverwaltungspolicies durchzusetzen und das Risiko von unbefugtem Zugriff zu mindern.
Bewährte Praktiken für SAML-Sicherheit
- Verwenden Sie sichere Binding-Methoden: Wählen Sie geeignete SAML-Binding-Methoden basierend auf Ihren Sicherheitsanforderungen und den Eigenschaften des Kommunikationskanals. Verwenden Sie HTTP POST, um sensible Daten zu übertragen, und HTTP Redirect für einfache Anfragen.
- Validierung von Assertions-Signaturen: Überprüfen Sie die digitalen Signaturen von SAML-Assertions, um deren Integrität und Authentizität sicherzustellen. Verwenden Sie das öffentliche Schlüsselzertifikat des IdP, um die Signatur zu validieren und Manipulationsversuche zu erkennen.
- Durchsetzen von Publikumseinschränkungen: Fügen Sie Publikumseinschränkungen in SAML-Assertions ein, um den Geltungsbereich der Assertion auf den vorgesehenen SP zu beschränken. Dies verhindert Replay-Attacken von Assertions und unbefugten Zugriff durch andere Dienstanbieter.
- Sicherer Metadatenaustausch: Schützen Sie den Austausch von SP- und IdP-Metadaten, um Metadatenmanipulationen und Spoofing-Angriffe zu verhindern. Verwenden Sie sichere Kanäle und Mechanismen, um Metadaten sicher zu übertragen.
- Implementierung einer sicheren Relay State-Verarbeitung: Verwenden Sie eindeutige und unvorhersehbare Relay State-Werte, um CSRF-Angriffe während der SAML-Authentifizierung zu verhindern. Validieren Sie den Relay State, um seine Integrität und Authentizität zu gewährleisten.
- Durchsetzen von Sitzungsmanagement: Definieren Sie Richtlinien zur Sitzungsablaufzeit und erzwingen Sie Sitzungstimeouts, um das Risiko von Sitzungsübernahmen und unbefugtem Zugriff zu mindern. Verwenden Sie sitzungsbezogene Attribute in SAML-Assertions, um Benutzersitzungen sicher zu verwalten.
- Verschlüsselung sensibler Attribute: Wenn nötig, verschlüsseln Sie sensible Benutzerattribute innerhalb von SAML-Assertions, um die Privatsphäre und Vertraulichkeit der Benutzerdaten zu schützen. Verwenden Sie sichere Verschlüsselungsalgorithmen und Schlüsselmanagementpraktiken, um sensible Daten zu sch ützen.
Alternativen zu SAML
Während SAML nach wie vor ein weit verbreiteter Standard für SSO und Identitätsföderation ist und eine robuste Reihe von Funktionen und Sicherheitsmechanismen bietet, kann sein Alter Herausforderungen darstellen, um den sich entwickelnden Sicherheits- und Benutzerfreundlichkeitsanforderungen moderner Anwendungen gerecht zu werden. Im Vergleich zum moderneren, auf OAuth 2.0 basierenden OpenID Connect (OIDC) ist SAML oft komplexer und bietet nicht einige der erweiterten Sicherheitsmerkmale, die OIDC bereitstellt. Beispielsweise bietet der Multi-Sicherheitsanfrage-Autorisierungscode-Grant-Flow von OIDC einen sichereren Ansatz als der relativ einfache SAML-Assertion-Austausch-Flow. Für Organisationen, die eine modernere und flexiblere Lösung für die Identitätsföderation suchen, könnte OIDC eine geeignete Alternative zu SAML sein.