SAML und Preauthentication
Auch wenn viele Dienste in der Cloud betrieben werden, gibt es weiterhin lokal gehostete Dienste, die von Anwendern in Internet aber auch von Diensten aus der Cloud angesprochen werden. Diese Seite betrachtet die Möglichkeiten von SAML-Tokens zu Preauthentication.
SAML und Kerberos statt Form, Basic, NTLM
Wer heute Webdienste aus dem Internet erreichbar macht, muss sich zwangsläufig Gedanken über Multifaktor-Authentifizierung, DoS-Attacken und Credential Phishing machen. Das ganze System muss zudem skalierbar, verteilbar und verfügbar sein. Auf der anderen Seite möchte man die Anwender nicht über Gebühr mit Anmeldedialogen und Rückfragen belasten. All diese und viele weitere Aspekte können Sie mit den Anmeldeverfahren der Vergangenheit nicht wirklich mehr erreichen.
Wenn Anwender ihre Anmeldedaten in einem Webformular (Form Based) oder im Browser (Basic/NTLM) eingeben müssen, dann ist dies nicht nur unbequem, sondern auch gefährlich. Es reicht wenn ein Anwender nur einmal bei der Eingabe nicht genau aufpasst, welche Webseite nun seine Anmeldedaten abfordert, damit ein Angreifer sich vielleicht schon mal als DomainUser in ihrem Netzwerk bewegen kann. Wenn der Client im internen Netzwerk oder per VPN eine Verbindung zum Domain Controller aufbauen kann, dann hilft der Einsatz von Kerberos, und notfalls NTLM schon dabei, dass Anwender sich nur genau einmal auf dem Client anmelden müssen. Beide Verfahren funktionieren aber nur eingeschränkt "im Internet" und schon gar nicht auf Systemen, die nicht mit dem Domain Controller kommunizieren.
Die Lösung sind hier "Tokens", auch unter dem Namen SAML, OAUTH, OAUTH2 etc., welche von einer vertrauenswürdigen Stelle ausgestellt, digital signiert und von dem angesprochene Dienst geprüft werden. Das Verfahren hat gleich mehrere Vorteile:
- Alle Anmeldungen und Token Anforderungen
laufen über den Token-Server
Das ist ein zentraler Ort für die Kennwortabfrage, MFA/2FA-Lösungen, Protokollierung und damit auch DoS/Phishing-Schutz. - Sichere Tokens für den Service
Die vom Token-Server ausgestellten Tickets enthalten neben der Identität auch zusätzliche Informationen zu Berechtigungen und sind digital signiert und ggfls. verschlüsselt - Service kann Token unabhängig und
schnell prüfen
Der vom Client angesprochene Dienst nimmt das Token, decodiert es (BASE64) und prüft die Signatur. Eine Rückfrage an den ausstellenden Server entfällt.
Das geht alles sehr viel schneller als NTLM-Prüfungen und hilft gegen Angreifer - Kein Kennwort am Service
Die Dienste müssen nie ein Kennwort abfragen, erhalten oder prüfen und sind damit besser geschützt.
Die gleichen Argumente können Sie natürlich auch als Nachteil aufführen. Zwei Punkte sind auf jeden Fall zu nennen.
- Sie benötigen natürlich einen
Authentifizierungsdienst
Den können Sie in Form eines Windows ADFS Server oder Shibboleth selbst betreiben oder Sie nutzen z.B. die Entra ID-Dienste, die jeder Microsoft 365 Kunde schon hat. Firmen, die eher Privatpersonen als Zielgruppe haben, können z.B. Google-ID, Microsoft Konto, Facebook-Konto als Authentifizierungsprovider nutzen. - Als zweites muss die Zielanwendung
natürlich mit SAML-Tokens umgehen können.
Wobei hier einige Web Application Firewalls helfen können, indem diese von extern die Tokens anfordern und dann per Impersonation wieder klassisch den internen Dienst ansprechen.
Das Verfahren von SAML-Tokens ist aber nicht neu und im Grunde nutzen das Cloud-Dienste wie Google, Facebook u.a. schon sehr lange, um eben die eigentliche Authentifizierung von den Content-Servern z zu trennen.
SAML mit Exchange und Teams
Wenn Sie nun als Exchange OnPremises-Admin denken, dass SAML noch weit weg ist, dann irren Sie. Die Konfiguration von Exchange Hybrid aktiviert auf ihrem Exchange Server die OAUTH-Anmeldung. Sobald Exchange Online im Namen eines Benutzers aus Microsoft 365 auf Informationen in einem lokalen Postfach zugreifen möchte, muss sich Exchange Online authentifizieren. Da Exchange Online weder das Kennwort des Anwenders selbst hat und es auch kein "Dienstkonto" gibt, welches in ihrem lokalen AD mit Kennwort angelegt und in Microsoft 365 hinterlegt wurde, bleiben ja nur entweder "verborgene Geheimnisse" oder Tokens. Nur bei der Migration von Postfächer können Sie ein Dienstkonto angeben. Für Frei/Belegt-Zeiten, Mailtips u.a. kommen SAML-Tokens zum Einsatz. Dazu müssen Sie ihren Exchange OnPremises Server natürlich irgendwie "erreichbar" machen.
Der direkte Zugriff eines Anwenders mit Outlook auf den lokalen Exchange Server erfolgt in der Regel nicht per Tokens. Sie können dies natürlich auch aktivieren (Siehe Hybrid Modern Authentication (HMA) aber das nutzen eher wenig Firmen, so dass Anwender hier einfach die klassische Anmeldung per BasicAuth, NTLM oder Kerberos nutzen. Dies ist aber mit Exchange Online und Teams nicht möglich
- Teams Client zu Teams Backend
Der Teams Client (1) verbindet sich nicht direkt mit ihrem Exchange OnPremises Postfach, sondern kommuniziert mit dem Teams Service (2). - Teams Backend zu Exchange Online
Wenn ein Anwender über die "Kontakt Karte" in Microsoft Teams den Status einer anderen Person ermittelt, dann liefert das Teams Backend den Verfügbarkeitsstatus und fragt parallel bei Exchange Online nach, welche Frei/Belegt-Zeiten im Kalender der anderen Person stehen. - Exchange Online (3) zu Exchange
OnPremises
Exchange Online ermittelt den Standort des Postfachs und besorgt sich die Daten entweder aus dem Exchange Online Postfach oder aus dem lokalen Exchange Server. - Firewall/WAF
Zwischen der Microsoft 365 Cloud, dem Internet und dem internen Exchange Server steht natürlich eine Firewall-Lösung, die z.B. anhand der Quell-IP den Zugriff auf Microsoft 365 beschränken könnte. Ein Loadbalancer oder eine Web Application Firewall (WAF) kann aber auch die HTTPS-Verbindung aufbrechen und die Payload inspizieren.
Um genau diese Inspektionsmöglichkeiten geht es in den nächsten Abschnitten.
SAML Interaktiv oder Passiv
Wenn ein Client aus dem Internet einen Service erreichen möchte, der ein SAML-Token erwartet, dann müssen wir zwei prinzipielle Zugriffe unterscheiden:
- Interaktiv Zugriff durch Mensch mit Browser
In dem Fall kann der Service dem Client eine HTTP-Umleitung zum Authentifizierungsservice mit Rücksprungadresse senden. Nach erfolgreicher Anmeldung wird er vom OAUTH-Server mit dem Token wirder zum Service zurück gesendet. - Automatisierter Zugriffbr> Der zweite Fall sind nichtüberwachte Zugriffe von Diensten auf andere Dienste ohne aktive Mithilfe des Benutzers. Meist sind es "App-Permission" ohne MFA
In beiden Fällen spricht der Client aber zuerst einmal den Service "anonym" per HTTPS an und der Service muss nun eine Entscheidung treffen, wie er dem Client mitteilt, dass er ein SAML-Token erwartet. Die meisten Server nutzen dabei den "UserAgent" im Request. Wenn dort z.B. "Mozilla" auftaucht, dann geht der Server von einem "Browser" aus. Bei Zugrif per "Application" sollte der Client ein "Authorization: BEARER" mitsenden, damit der Service direkt weiß, dass der Dienst dies kann.
Client | Anmeldung | Rückantwort |
---|---|---|
Browser interaktiv |
GET HTTPS://outlook.office.com/OWA Authorization: <leer> |
302 FOUND Location: https://login.microsoftonline.com/... |
PowerShellApp |
GET HTTPS://outlook.office.com/EWS/Exchange.asmx Authorization: bearer |
403 AuthenitcationRequired Authorization: bearer weitere Parameter |
Im Browser Debugger können Sie dies anhand von Outlook Web App die 302 Antwort samt der "Location" sehr einfach sehen:
Für den Zugriff per Automation oder Applikation können Sie z.B. per PowerShell mit mein Script Test-Bearer einen Zugriff simulieren. Es sendet einfach eine anonyme Anfrage die URL mit der Angabe "Authorization: Bearer" und zeigt die Antwort an. Hier sehen Sie dann bei WWW-Authenticate die Rückantwort mit dem Verweis auf den Token-Service:
Es ist dann natürlich an der Client-Anwendung, diesen Wink zu interpretieren, sich ein Token zu besorgen und dann den Zugriff auf den Service mit dem Token als Authorization zu wiederholen. Wenn Sie z.B. auf einem Exchange 2019 Server mit Hybrid Bereitstellung und IIS Failed Request Tracing aktiv haben, dann sehen Sie ebenfalls die anonymen Zugriffe.
Etwas später kommt dann aber der komplette Request samt Bearer-Token:
Hier wird es dann aber interessant, wenn die Anfragen aus dem Internet auf einer Web Application Firewall landen, die per SSL-Inspection sich die Payload anschauen kann.
WAF und SAML Inspektion
In den seltensten Fällen werden Sie aber einen Service mit einem Bein direkt ins Internet stellen, sondern immer eine irgendwie geartete Firewall davor stellen, die gängige Angriffsmuster erkennt und unterbindet. Wenn Sie ihre WAF so konfigurieren, dass Sie die TLS-Verbindung terminiert, dann können Sie per TLS-Inspection nicht nur die Payload der Aufruf prüfen, sondern auch die Header. Ich habe dazu als regulärer Benutzer in Teams einen Termin geplant und parallel dazu auf dem lokalen Exchange Server eine Hybrid-Bereitstellung die eingehenden Requests mitgeschnitten. Natürlich habe ich hier auch einen Bearer-Token bekomme, der wie folgt aussah:
Auszug IIS Trace. Token unkenntlich gemacht.
Auch wenn das Token nur 8 Stunden gültig ist und daher eine Klartextversion kein Risiko darstellen sollte, möchte ich einfach sie nicht verleiten, dass Sie eigene Tokens irgendwo im Klartext veröffentlichen. Ich kann das Token aber decodieren (Siehe auch Bearer Decoding) und sie sehen, dann, dass es für mich als Person ausgestellt ist.
Sie sehen hier schon Nummern wie "00000002-0000-0ff1-ce00-000000000000" und mit "de21-*" die GUID des hier verwendeten Tenants. Wer noch genauer hinschaut, erkennt aber auch noch das Feld "actortoken", welches ich auf die gleiche Weise decodieren kann.
Auch hier erscheint wieder 00000002-0000-0ff1-ce00-000000000000 und wer nach der Nummer sucht, findet sehr schnell, dass es sich um die Identität von Exchange Online handelt.
- Hybrid Free/Busy Details
- EWS und OAUTH2
- Bearer Decoding
- Überprüfen von
Microsoft-Erstanbieteranwendungen in
Anmeldeberichten
https://learn.microsoft.com/de-de/troubleshoot/azure/entra/entra-id/governance/verify-first-party-apps-sign-in
All diese Informationen sind als öffentlich und einfach zu decodieren. Eine entsprechend konfigurierte WAF könnte als unabhängig von den IP-Adressen eines Clients im Internet einfach generell die SAML-Tokens prüfen, die ein Client aus dem Internet an die WAF sendet, um über den Reverse Proxy dann den Service im Backend zu erreichen.
Ich bin aktuell (Jun 2024) noch erstaunt, dass so wenige WAF-Installationen diesen Weg nutzen und stattdessen weiter auf IP-Adressen setzen.
- Office 365 Netzwerk Empfehlungen
- Microsoft Network Connectivity
- Office 365 Firewalls
- MGN - Microsoft Global Network
SAML Authentication auf Web Application Firewall
Der nächste Schritt wäre dann, dass die WAF nicht nur die eingelieferten SAML-Tokens prüft, sondern direkt selbst die Authentifizierung erzwingt und dann ihrerseits die Anfragen zum Backend Service weiterreicht. Schon früher haben Firmen ihre Webdienste hinter einer Web Application Firewall (WAF) veröffentlicht, die eine "Preauthentication" übernommen hat. Der Anwender aus dem Internet landete auf eine Portalseite, welche dann erst einmal Benutzername und Kennwort und vielleicht noch eine zweite Information (Token etc.) abgefragt hat, ehe sie dann die Zugriffe zum eigentlichen Service erlaubt hat. Das kann sie heute auch noch aber sie muss sich nicht mehr selbst um die Authentifizierung kümmern, sondern könnte ganz einfach selbst diese Anmeldung an einen Token-Server delegieren.
Mittlerweile dürften wohl die meisten halbwegs aktuellen Web Application Firewalls diesen Weg kennen Ich liefere ihnen hier exemplarisch zwei Bilder eines KEMP Loadbalancers:
Zuerst muss ich für den veröffentlichten Service die Authentifizierung definieren. Hier sehen Sie z.B., dass ein späterer Zugriff ohne Bearer-Token zu Microsoft umgeleitet wird
Natürlich muss ich dazu auch in Entra ID eine entsprechende App registrieren, damit Entra ID auch weiß, welche Tokens es ausstellen muss. Zusätzlich muss ich in den ESP Optionen ebenfalls noch ein paar Einstellungen zu SAML machen.
Es sind noch ein paar weitere Einstellungen erforderlich aber letztlich soll das Beispiel nur zeigen, dass eine Web Application Firewall bei einem Zugriff von Extern einfach die Existenz eines Bearer-Tokens erzwingen und den Client zum passenden Token-Server leiten kann.
- Configure OIDC OAUTH ESP
Authentication
https://docs.progress.com/bundle/loadmaster-feature-description-oidc-oauth-esp-authentication-ga/page/Configure-OIDC-OAUTH-ESP-Authentication.html
SAML und Delegation
Wenn der Client dann schon einmal an der WAF authentifiziert ist, dann können Sie wieder weitere Möglichkeiten einer Delegierung nutzen, damit sich der Benutzer am nachgelagerten Backend nicht erneut anmelden muss. Wobei nicht alle Verfahren möglich ist. Ich versucht mich mal an einer Liste:
Anmeldeverfahren im Backend |
Nutzbar |
Beschreibung |
---|---|---|
Basic |
Wenn der nachgelagerte Webservice wirklich nur eine Anmeldung per Benutzername und Kennwort erlaubt, dann ist kein Single Sign On möglich. Die WAF hat ja nur ein Token, indem der Benutzer Name etc. Hier wird der Anwender sicher erneut eine Anmeldung durchführen müssen. |
|
NTLM |
Auch eine Anmeldung per NTLM wird knifflig, da sich die WAF ohne Kennwort nicht am DC anmelden kann. |
|
Kerberos |
Delegierter Zugriffe ist die Paradedisziplin von Kerberos. Über die Funktion "Kerberos - Constraint Delegation" können Sie als Administrator einem Konto das Recht einräumen sich ein internes Kerberos-Ticket für den Zugriff auf einen Dienst zu geben. Sie können damit dem Dienstkonto des WAF erlauben, sich nach Authentifizierung des Anwender am WAF per Bearer oder anderer Verfahren ein Kerberos-Ticket nach intern ausstellen zu lassen. |
|
FormBased |
Die Anmeldung an einem Formular ist genauso eingeschränkt die Basic-Auth. Die WAF hat keine Daten zum eingeben. Ein Sonderfall wäre natürlich, wenn die WAF das extrahierte SAML-Token quasi als "FORM POST" an die nachgelagerte App senden könnte und diese das Token auswertet. Das könnte z.B. bei SharePoint OnPremises möglich sein. |
|
SAML |
Wenn der nachgelagerte Service auch die gleichen SAML-Tokens versteht, dann spricht nichts dagegen, dass die WAF den Request einfach mit dem "Authorization: Bearer xxx"-Header durchreicht. Das ist natürlich die ideale Lösung |
|
Header/Payload/Cookie |
Es gibt interne Webdienste, die gar keine eigene Authentifizierung durchführen, sondern einfach die Identität des Clients als zusätzlichen Header erwarten. Das ist gar nicht mal so selten und eine entsprechende WAF könnte aus dem SAML-Token einfach das Feld UPN oder SMTP als HTTP-Header in den Request an das nachfolgende System addieren. Es versteht sich von selbst das das nachfolgende System nie von Client direkt erreicht werden darf, welche mit dem Wissen auch entsprechende Header setzen könnten. |
Wenn ihre Clients sicher per SAML an einem Reverse Proxy authentifizieren, dann können Sie den Anwender nur nur mittels Kerberos - Constraint Delegation direkt zu einem Backend Server authentifizieren, sondern auch SAML nutzen.
SAML und Session-Cookies
Ganz allein auf die Überprüfung von SAML-Token in einem Request können Sie sich natürlich nicht verlassen. Dam einem erfolgten Verbindungsaufbau und der Authentifizierung schalten viele Produkte auf eigene Absicherungen um. Ein SAML-Token ist meist nicht nur einige Stunden gültig sondern schon aus Sicherheitsüberlegungen möchte man nicht, dass in jedem Request das SAML-Token übertragen wird, selbst wenn die Verbindung per TLS abgesichert ist.
Daher senden viele Services nach erfolgter Anmeldung z.B. ein Cookie, welcher vom Client immer wieder mit gesendet und vom Server regelmäßig erneuert wird. Der Server erspart sich so die andauernde Prüfung von SAML-Tokens. Das Session-Cookie kann noch weitere Informationen zum Client erhalten und vor allem eine von Server vorgegebene Gültigkeit besitzen. Zudem erspart sich der Service dem Client nach Ablauf des SAML-Token so die Aktualisierung durch eine Reauthenticate am OAUTH Server.
Für eine WAF bedeutet dies aber, dass Sie "Session Aware" sein muss, d.h. durchaus die SAML-Tokens in einem Request auf ihre Gültigkeit prüfen sollte aber dann die Sitzung als legitim ansieht, auch wenn in nachfolgenden Transaktionen dann kein SAML-Token mehr enthalten ist. Einige WAAF-Produkte lösen dies z.B. indem Sie eigene Header oder Cookies mit einfügen, die vom Client wieder zurückgesendet werden. Insofern ist auch diese Herausforderung schon lange gelöst.
Zwischenstand
Den ersten Abschnitt hatte ich schon mit "SAML und Kerberos statt Form, Basic, NTLM" überschrieben und spätestens jetzt sollten Sie verstanden haben, dass SAML-Token eine sehr leistungsfähige Authentifizierung sind. Web Application Firewalls können sehr schnell die SAML-Tokens prüfen und DoS-Attacken einfach vom Service abhalten. Zudem konzentriert sich die eigentliche Anmeldung auf den OAUTH-Server, der alle Anmeldungen konzentriert seht und damit viel einfacher die Konten bei Angriffen auf das Password schützen kann. Der Service selbst muss, anders als bei BTLM, BasicAuth o.ä. auch nicht mehr mit dem Authentication Service sprechen. Im Prinzip sind SAML-Tokens die Weiterentwicklung von bislang intern genutzten Kerberos-Tickets.
Je mehr internen Dienste aber auch SAML-Token verstehen oder über eine WAF mit Delegation mit SAML-Tokens genutzt werden können, desto interessanter ist der Einsatz eines OAUTH-Service wie z.B. Entra ID, da damit erweiterte Schutzfunktionen möglich werden.
Wann stellen Sie auf SAML um oder sagen ihrer WAF, dass Sie eingehende SAML-Token, z.B.: von Exchange Online Hybrid oder Teams prüft?
Weitere Links
- OAUTH2 / Modern Authentication
- EXO Hybrid mit Preauth
- Bearer Decoding
- HTTP Authentication
- NTLM-Anmeldung
- Authentifizierung im Wandel der Zeit
- Warum Kerberos besser ist
- NTLM Deaktivierung
- Session Cookie Security
- Test-Bearer
- ADFS und Shibboleth
- Azure Conditional Access
- Hybrid Modern Authentication (HMA)
- Azure AD Application Proxy
- Office 365 Netzwerk Empfehlungen
- Microsoft Network Connectivity
- Office 365 Firewalls
- MMGN - Microsoft Global Network
- Hybrid Modern Authentication (HMA)
-
PoPToken
MSGraph erlaubt neben Bearer auch PoPTokens. Was steckt dahinter? -
Configure Integration and OAuth between
Skype for Business Online and Exchange
Server
https://learn.microsoft.com/en-s/skypeforbusiness/deploy/integrate-with-exchange-server/oauth-with-online-and-on-premises#configure-integration-between-exchange-server-and-o365 -
How to Troubleshoot ESP SAML Authentication
issues using the SSOMGR Debug traces
https://support.kemptechnologies.com/hc/en-us/articles/360003564071-How-to-Troubleshoot-ESP-SAML-Authentication-issues-using-the-SSOMGR-Debug-traces -
Redirect URI ogic
https://docs.progress.com/bundle/loadmaster-feature-description-oidc-oauth-esp-authentication-ga/page/Redirect-URI-Logic.html -
LoadMaster - Authentication and SSO with
SAML
https://kemptechnologies.com/solutions/saml