SSO - Single Sign-On
Single Sign-On (SSO) ermöglicht Benutzern sich einmalig zu authentifizieren und danach ohne erneute Anmeldung auf mehrere Anwendungen und Services zuzugreifen. SSO basiert auf Protokollen wie SAML 2.0, OIDC/OAuth 2.0 und Kerberos. Aus Security-Sicht ist SSO zweischneidig: reduziert Passwort-Schwachstellen, aber ein kompromittierter SSO-Provider gibt Zugang zu allen verbundenen Services. Identity Provider (IdP): Azure AD/Entra ID, Okta, Ping Identity, Google Workspace.
Single Sign-On ist der Standard in modernen Unternehmensumgebungen - und ein privilegiertes Angriffsziel. Wer den Identity Provider kompromittiert, hat potenziell Zugang zu allen verbundenen Anwendungen ohne je ein einzelnes Passwort zu kennen. SSO-Sicherheit ist deshalb nicht nur eine Komfortfrage, sondern eine der wichtigsten Sicherheitsentscheidungen im IAM-Portfolio.
SSO Technologien
SAML 2.0 (Security Assertion Markup Language)
- Einsatz: Enterprise Web-SSO (Legacy + Modern)
- Format: XML-basierte Assertions
- Flow: SP-initiated oder IdP-initiated
- Stärken: Weit verbreitet, alle Enterprise-Apps unterstützen es
- Schwächen: Komplex, XML-Security-Probleme (XXE, XSW-Angriffe!)
OIDC (OpenID Connect) / OAuth 2.0
- Einsatz: Moderne Apps, APIs, Mobile, Cloud-native
- Format: JWT-basierte ID-Tokens
- Flow: Authorization Code + PKCE
- Stärken: Einfacher, JSON-basiert, Cloud-native
- Schwächen: Komplexe Token-Validierung, viele Implementierungsfehler
Kerberos
- Einsatz: Windows Active Directory (on-premise)
- Format: Ticket-basiert (TGT + Service Tickets)
- Stärken: Tiefe Windows-Integration, transparent für User
- Schwächen: AD-only, komplex, viele Angriffsvektoren (Golden Ticket!)
LDAP-SSO
- Einsatz: Interne Linux-Dienste (mit OpenLDAP, AD LDAP)
- Format: Directory-Protokoll
- Verwendung: Apache Webserver, Confluence, Jira (LDAP-Auth)
RADIUS
- Einsatz: VPN-Authentifizierung, WLAN-Enterprise (802.1X)
- Format: UDP-basiertes Authentifizierungsprotokoll
Passwortloser SSO (modern)
- FIDO2/WebAuthn: Hardware-Keys (YubiKey) als SSO
- Passkeys: Device-bound Private Keys (kein Phishing möglich!)
- Kombination: Passkey → OIDC-Token → App-SSO
Identity Provider Vergleich
Microsoft Entra ID (ehemals Azure AD)
- Marktanteil: ~50% Enterprise (durch M365-Dominanz)
- Stärken:
- M365-native Integration (Teams, SharePoint, Exchange)
- Conditional Access: granulare Zugriffsregeln
- Privileged Identity Management (PIM): Just-in-Time Admin
- Microsoft Authenticator: phishing-resistente MFA
- SSPR (Self Service Password Reset) mit Multi-Method-Auth
- Kosten:
- Azure AD Free: Basis-SSO (inkl. M365)
- Entra ID P1: €6/User/Monat (Conditional Access, SSO für alle Apps)
- Entra ID P2: €9/User/Monat (PIM, Identity Protection)
Okta
- Marktanteil: Führend außerhalb Microsoft-Ökosystem
- Stärken:
- Universal Directory: beliebige Benutzerquellen konsolidieren
- App-Integration: 7.000+ vorkonfigurierte App-Verbindungen
- Adaptive MFA: Risiko-basierte Auth-Entscheidungen
- Workflows: No-Code Identity-Automation
- Lifecycle Management (IGA-Funktionalität)
- Kosten: Workforce Identity: ab $2/User/Monat (SSO) bis $15+ (Advanced)
- Bekanntes Problem: Okta selbst wurde 2022/2023 kompromittiert!
Google Workspace (Cloud Identity)
- Stärken:
- Nahtlose Google-App-Integration
- Context-Aware Access: Device-Trust + Location
- FIDO2-Keys: Hardware-Key-Unterstützung by default
- Geeignet: Google-Workspace-Unternehmen
Ping Identity
- Stärken: Hybride Umgebungen (on-premise + cloud)
- Besonders: PingFederate (on-premise SAML/OIDC IdP)
- Geeignet: Regulierte Branchen, On-Premise-Anforderungen
Keycloak (Open Source)
- Kosten: Kostenlos (Red Hat SSO = Enterprise-Variante)
- Deployment: Self-hosted (Docker/Kubernetes)
- Stärken: FOSS, vollständig, SAML+OIDC, Social Login
- Stärke für KRITIS/Gesundheit: Daten bleiben on-premise
- Einsatz bei AWARE7: Docmanager-Plattform, reveal-editor
SSO-Sicherheitsrisiken
1. Single Point of Failure / Blast Radius
- IdP kompromittiert = alle Apps kompromittiert!
- Sicherheitsstrategie: IdP ist das wichtigste zu schützende System
Risikominderung:
- IdP selbst mit starker MFA (FIDO2!) schützen
- Privilegierte IdP-Admins: eigene Admin-Workstations
- PIM für IdP-Admin-Rollen (Just-in-Time, zeitbegrenzt)
2. Session-Token-Hijacking
- SSO-Token in Cookie oder URL kann gestohlen werden
- AiTM-Phishing (Adversary-in-the-Middle):
- Evilginx, Modlishka: Transparent Proxy zwischen User + IdP
- Phishing-Seite routet durch - stiehlt Session-Cookie!
- MFA-Klick schützt NICHT (Session nach MFA gestohlen!)
Schutz gegen AiTM:
- FIDO2/Passkeys: Token ist domain-gebunden (kann nicht gestohlen werden!)
- Conditional Access: Session-Lifetime begrenzen (1-8h)
- Token-Binding: Session an TLS-Verbindung binden (Entra ID)
- Continuous Access Evaluation (CAE): Echtzeit-Risikobewertung
3. SAML-Angriffe
XML Signature Wrapping (XSW):
- Angreifer kopiert legitime Assertion + fügt eigene Assertion ein
- Parser verarbeitet falsche Assertion wenn Implementierung fehlerhaft
IdP-initiated SSO Missbrauch:
- IdP sendet unaufgefordert SAML-Assertion
- Keine Nonce/RequestID-Verifikation = Replay möglich
4. OAuth 2.0 / OIDC Schwachstellen
State Parameter CSRF:
- Fehlender/ungültiger state-Parameter
- CSRF-Angriff: Benutzer loggt sich mit Angreifer-Account ein!
Redirect URI Manipulation:
- Loose Matching: redirect_uri=https://evil.com/cb
- Token wird an Angreifer-Server geschickt!
JWT-Schwächen:
- alg=none: Signatur wird nicht geprüft
- RS256→HS256: Key-Confusion-Angriff
5. SSO-Provisioning-Risiken
- JIT-Provisioning: Neuer User wird automatisch angelegt
- Problem: Fehlerhafte Attribut-Mapping → falsche Rollen!
- Beispiel: email-domain-Matching gibt falschen Users Admin-Rechte
SSO-Implementierungs-Best-Practices
Conditional Access (Entra ID)
Policy-Beispiel - Alle Admin-Logins → MFA + Compliant Device erforderlich:
- Nutzerzuweisung: Alle Benutzer
- Cloud-Apps: Alle Cloud-Apps
- Bedingungen: Locations: Alle außer trusted IPs; Device Platforms: Alle
- Zugriffssteuerung: Grant: MFA erforderlich UND Compliant Device
- Session: Sign-in Frequency: 1 Tag; Persistent browser session: Nein
Hochprivilegierte Accounts:
- Nutzerzuweisung: Alle Global Admins
- Zugriffssteuerung: FIDO2-only (kein SMS/TOTP!)
- Session: 4-stündige Session-Limits
Token-Lifetime-Policies
# Entra ID PowerShell:
New-AzureADPolicy -Type TokenLifetimePolicy -Definition @('
{
"TokenLifetimePolicy": {
"Version": 1,
"AccessTokenLifetime": "01:00:00",
"MaxInactiveTime": "30.00:00:00"
}
}
') -DisplayName "ShortTokenLifetime" -IsOrganizationDefault $true
App-Registration Hygiene
# Audit: welche Apps haben SSO-Zugriff?
Get-AzureADServicePrincipal -All $true |
Where-Object {$_.Tags -contains "WindowsAzureActiveDirectoryIntegratedApp"} |
Select-Object DisplayName, AppId, ReplyUrls
# Review: unused Apps, overprivileged Scopes
# Graph API Consent: "User.ReadAll" - sollte kein normaler User haben!
SCIM-Provisioning (automatische User-Anlage)
- SCIM 2.0: Standard für User-Provisioning zwischen IdP und App
- Entra ID → Salesforce/GitHub/Slack via SCIM
- Vorteil: Offboarding automatisch (User-Deaktivierung sofort!)
- Konfiguration: Attribute Mapping sorgfältig prüfen!
Keycloak Härtung
# keycloak.conf Sicherheitseinstellungen:
https-protocols=TLSv1.3
https-cipher-suites=TLS_AES_256_GCM_SHA384,TLS_CHACHA20_POLY1305_SHA256
http-enabled=false # Kein HTTP!
Brute-Force Protection (realm settings → Security Defenses):
- Max Login Failures: 5
- Wait Increment: 30s
- Max Wait: 900s (15 Minuten)
- Failure Reset Time: 720 (12 Stunden)
Monitoring
// Entra ID Sign-in Logs → Sentinel:
SigninLogs
| where ResultType != 0 // Fehlgeschlagene Logins
| where UserPrincipalName !endswith "@serviceprincipal"
| summarize FailedLogins = count() by UserPrincipalName, IPAddress, bin(TimeGenerated, 1h)
| where FailedLogins > 10 // Brute Force!
| order by FailedLogins desc