Kerberos - Constraint Delegation und Double Hop
Für den Einsatz von Kerberos Delegation müssen alle
Domains im Windows 2003 Mode sein und die verbundenen Dienste sich in
der gleichen Domain befinden:
Siehe auch Summary (Kerberos Protocol Transition and Constrained
Delegation)
http://technet.microsoft.com/en-us/library/cc772683(WS.10).aspx
Single Domain Only
Nach meinen eigenen Tests scheint eine Delegierung nur innerhalb einer
Domain zu funktionieren, d.h. Domain1/Server1 kann nicht berechtigt
werden, auf Domain2/Server2 im Auftrag eines Anwenders zuzugreifen. Das
kann ich mir so erklären, weil der Server 1 nur den Domain1/KDC
ansprechen kann und der zu wenig Informationen über Domain2/Server2 hat
oder Domain2/Server2 den Tickets eines KDC aus eine anderen Domäne nicht
vertraut.
Auch über Trusts ist keine Delegation möglich !
Warum "Delegation"?
Interessant und bekannt wurde Kerberos als Lösung eines Problems, welches durch die Verteilung von Diensten immer mehr offenbar wurde. Solange der Zugriff auf einen Server ausgereicht hat, war die Anmeldung auch per NTLM problemlos. NTLM aber zeichnet sich gerade dadurch aus, dass der Server selbst keine Anmeldedaten des Benutzers hat, sondern nur selbst prüfen kann, dass es sich um den Benutzer handelt. Läuft nun auf dem Server aber eine Anwendung, die ihrerseits auf einen anderen nachgelagerten Server zugreifen will, dann konnte Sie das bislang nicht mit den Daten des Benutzers tun, sondern musste entweder ein Dienstkonto nutzen (Sicherheitsrisiken und das nachgelagerte System kann keine Zugriffsrechtesteuerung durchführen) oder ein "unsichereres" Verfahren anbieten um das Kennwort selbst zu erhalten. Die Übertragung von Kennworten von Client zum Server ist aber ein Risiko und oft hat der Client nicht mal das Kennwort selbst bzw. sendet es nicht automatisch an andere Systeme. Mit Kerberos und "Constraint Delegation" geht das viel einfacher.
Der Client greift wie gewohnt nun per Kerberos auf den Server "web1" zu. Dieser Server ist nun im Active Directory dazu berechtigt worden, im Auftrag des Benutzers vom KDC ein Ticket für eine bestimmte Zielanwendung (hier db1) anzufordern. Der Server db1 bekommt also vom web1 ein Ticket im Auftrag des pc1 vorgelegt. Dazu muss natürlich nun db1 auch Kerberos unterstützen. Im Active Directory finden Sie die Einstellungen sowohl beim Benutzer als auch beim Computerobjekt.
Auf dem Computerobjekt muss man die Erlaubnis zur Delegierung einschalten. Seit Windows 2003 kann man hier sogar sehr genau dieses Recht nur für bestimmte Server und deren Dienste zulassen. Technisch landen die Werte im Hintergrund im Feld msDS-AllowedToDelegateTo einfach als String.
msDS-AllowedToDelegateTo: www/srv01.msxfaq.local/msxfaq.local msDS-AllowedToDelegateTo: www/srv01.msxfaq.local msDS-AllowedToDelegateTo: www/SRV01 msDS-AllowedToDelegateTo: www/srv01.msxfaq.local/MSXFAQW
Damit nun dieses privilegierte Computerkonto nun sich nicht als wirklich "jedermann" ausgeben kann, gibt es pro Benutzer noch mal einen Schutz, den Sie auf sensiblen Konten wieder aktivieren können:
Die hier gemachten Einstellungen werden durch den KDC ausgewertet, d.h. weder der Client-PC noch der vermittelnde Server noch das Zielsystem kann diese Einstellungen beeinflussen.
Delegation und Sicherheit
Wenn ein Dienstkonto oder ein Computerkonto das Recht hat, ein Ticket im Auftrag eines Benutzers anzufordern, dann sollten Sie diese "Impersonation" möglichst kompakt halten. Im Active Directory können Sie bei der Delegierung drei Optionen auswählen:
- Do not trust this computer for
delegation
Dies ist die Standardeinstellung und verhindert, dass der Computer oder das Dienstkonto sich ein Ticket für einen Benutzer ausstellen lassen kann. - Trust this user for delegation for any
Service (kerberos only)
Auch wenn so Tickets nur für Kerberos ausgestellt werden können, ist das eine sehr unsichere Einstellung. Der Computer oder das Dienstkonto kann sich für jeden Benutzer und jedes Ziel ein Ticket ausstellen lassen, wenn der Anwender dieses System anspricht. Das machen Sie eigentlich nur, wenn es sehr viele oder veränderliche nachgeschaltete Systeme gibt. Ich würde den Computer dann aber per Netzwerk abschotten, damit er nicht andere Services erreicht. So ein Computer ist natürlich auch eine Steilvorlage für Angriffe.
Allerdings funktioniert dies natürlich nur, wenn der Client sich per Kerberos anmeldet. Wenn der Client sich anders authentifiziert, dann bekommt der Application Server ein KERB_ERR_BADOPTION als Antwort vom KDC. - Trust this user for delegation to
specified services only
Besser ist es mit dieser Option nur die Ziele freizuschalten, auf die der Computer oder das Dienstkonto sich im Auftrag des Anwenders verbinden muss. Als "Geschenk" können Sie dann zwischen "User Kerberos Only" und "Use any authentication protocol" wählen. Die Delegation funktioniert im zweiten Fall auch bei einer Anmeldung des Clients per NTLM , Basic, Forms o.a.
Unabhängig davon ist natürlich "Delegation" immer genau zu bewerten, dass die eingesetzte Software oder der Computer nur vertrauenswürdigen Code einstellen.
Kerberos über mehrere Domains
Nach meinen eigenen Tests scheint eine Delegierung nur innerhalb einer Domain zu funktionieren, d.h. Domain1/Server1 kann nicht berechtigt werden, auf Domain2/Server2 im Auftrag eines Anwenders zuzugreifen. Das kann ich mir so erklären, weil der Server 1 nur den Domain1/KDC ansprechen kann und der zu wenig Informationen über Domain2/Server2 hat oder Domain2/Server2 den Tickets eines KDC aus eine anderen Domäne nicht vertraut.
Voraussetzung ist bislang immer dass folgende Konten in der gleichen Domäne sind:
- Benutzer
- Dienstkonto
- Zielserver
Update:
Seit Windows 2012 kann Kerberos Delegation auch
über Forest und Domaingrenzen hinweg genutzt
werden.
Siehe auch
http://blog.kloud.com.au/2013/07/11/kerberos-constrained-delegation/
Das ist in einer Exchange Umgebung natürlich ungeschickt, wenn ein Exchange 2003 Frontend Server per Kerberos auf einen Exchange 2003 Backend Server in einer anderen (Sub-)Domain zugreifen will. Einen solchen Fall hatte ich bei einem Kunden, welcher mobile Clients auf dem ISA-Server schon mit Zertifikaten authentifiziert hat und der ISA dann auf den Frontend per Kerberos gibt, der seinerseits per Kerberos auf Backends gehen muss.
WinMobile--Zertifikat-> ISA --Kerberos--> E2003 Frontend -->Kerberos----> Exchange 2003 Backend Zertifikat (authentifiziert (authentifiziert (authentifiziert) Holt sich KRB-Ticket Holt sich KRB-Ticket liefert Daten
Das mag auch ein Grund gewesen sein, warum Exchange 2007 dieses Verfahren anders löst, Hier meldet sich der Client nur noch am ersten CAS-Server an und für die Kommunikation der CAS-Server untereinander (CAS Intern/Extern und CASProxy 2010) und zu den Mailbox-Servern wird die Serverauthentifizierung genutzt. Alle Exchange Server untereinander "vertrauen" sich demnach.
You can enable ADFS to
accept Kerberos authentication applicable only
which Kerberos constrained delegation front end
and back end servers are in same domain.
http://blogs.technet.com/b/ad/archive/2007/10/24/kerberos-constrained-delegation-fe-and-be-servers-must-be-in-same-domain.aspx
Kerberos Constrained
Delegation (KCD) is limited to having your
front-end and back-end in the same domain
http://blogs.technet.com/b/ad/archive/2007/10/24/kerberos-constrained-delegation-fe-and-be-servers-must-be-in-same-domain.aspx
- http://social.technet.microsoft.com/Forums/sharepoint/en-US/c43260a9-6791-4572-a7f2-1547467d89bb/kerberos-constrained-delegation-for-cross-a-forest-boundary
- http://blogs.technet.com/b/askds/archive/2008/11/25/fun-with-the-kerberos-delegation-web-site.aspx
- http://www.adopenstatic.com/cs/blogs/ken/archive/2008/06/28/17805.aspx
- What's New in Kerberos
Authentication
http://technet.microsoft.com/en-us/library/hh831747.aspx
IIS Impersonation, Kerberos und SPN
Das sicher am häufigsten untersuchte System bei einem "Double Hop" Zugriff ist der Webserver IIS. Um einen Zugriff auf entfernte Dienste zu erreichen (zweiter Hop) muss man daher entweder die Anmeldedaten an die Anwendung übergeben (Basic Authentication) oder Kerberos einsetzen. Als Tabelle sieht das dann wie folgt aus:
Verfahren | Browser | Sicherheit | Automatische Anmeldung | Impersonation |
---|---|---|---|---|
Basic |
Alle |
Klartext ! SSL als Verschlüsselung ratsam |
Nein. Maximal durch Kenwortmanager oder speichern |
Ja, unbeschränkt |
Formbased |
Alle |
Klartext ! SSL als Verschlüsselung ratsam |
Nein. Maximal durch Kenwortmanager oder speichern |
Ja, unbeschränkt |
NTLM |
IE/Firefox |
Hash |
Ja |
Nur Localhost |
Kerberos |
IE ? |
PKI |
Ja |
Ja, Steuerbar |
Um dem "Double Hop"-Problem zu entgehen, muss man also die Anmeldung am Webserver also entweder über die "Basic Authentication" oder über ein Formular durchführen, so dass die Webanwendung die Anmeldedaten (Username/Kennwort) bekommt, wobei Sie unbedingt SSL verwenden sollten. Allerdings ist damit keine automatische "integrierte" Anmeldung möglich. Erst durch die Anmeldung mit Kerberos funktioniert auch die automatische integrierte Anmeldung und die Impersonation auf einen anderen Server.
Interessant wird das natürlich wenn man nun eine Webserverfarm (z.B.: Exchange Frontend Server oder Provisioning Server) betreibt, die mittels "Network Load Balancing" zusammen schaltet.
- DelegConfig
(Kerberos/Delegation
Configuration Reporting Tool)
http://blogs.iis.net/brian-murphy-booth/archive/2007/03/09/delegconfig-delegation-configuration-reporting-tool.aspx - DelegConfig - A Tool To help
resolve Kerberos authentication
and delegation issues
https://blogs.iis.net/bretb/How-to-Use-DelegConfig - The biggest mistake:
ServicePrincipalName’s
http://blogs.iis.net/brian-murphy-booth/archive/2007/03/09/the-biggest-mistake-serviceprincipalname-s.aspx. - Understanding Kerberos
Double Hop
http://blogs.technet.com/b/askds/archive/2008/06/13/understanding-kerberos-double-hop.aspx - IIS, Windows Authentication
and the Double Hop issue
http://weblogs.asp.net/owscott/archive/2008/08/22/iis-windows-authentication-and-the-double-hop-issue.aspx - IIS (Internet Information Services) and Kerberos FAQ
IIS and Kerberos Part 1 - What is Kerberos and how does it work?
IIS and Kerberos Part 2 - Service Principal Names (SPNs)
IIS and Kerberos Part 3 - A simple scenario
IIS and Kerberos Part 4 - A simple delegation scenario
IIS and Kerberos Part 5 - Protocol Transition, Constrained Delegation, S4u2S and S4u2P
IIS and Kerberos Part 6 - What's new in IIS 7
IIS and Kerberos Part 7 - A simple cross Forest scenario
IIS and Kerberos Part 8 - A simple cross Forest/Domain scenario delegation scenarioIIS and Kerberos Part 9 - Cross Forest
Delegation scenario with UPN suffix routing - Ask the Directory Services
Team - Fun with the Kerberos
Delegation Web Site
https://blogs.technet.microsoft.com/askds/2008/11/25/fun-with-the-kerberos-delegation-web-site/
IIS 7.5 und Kernel Authentication
Eine neue Hürde gibt es mit dem Einsatz von Contraint Delegation mit dem IIS 7.5. Damit die Authentifizierung "schneller" erfolgt, hat Microsoft diese in den Kernel verlagert. Damit kann der Server per Default aber erst mal nicht mehr das Dienstkonto verwenden und damit das Ticket decodieren.
Der IIS 7.5 weist bei der Konfiguration sogar darauf hin, dass bei der Aktivierung von "Negotiate:Kerberos" die Kernel Mode Authentication nicht möglich ist.
Die saubere Lösung ist daher, in diesem Fall die Kernel Mode Authentication abzuschalten, damit das Dienstkonto des Applicationpools genutzt werden kann. Es gibt aber auch hinweise, dass Sie über einen Eintrag in der Datei C:\Windows\inetsrv\config\application.config mit der Kernel Mode Authentifizierung arbeiten können. Der Eintrag "useAppPoolCredentials="true"" soll das bewirken.
<location path="Default Web Site/Test"> <system.webServer> <security> <authentication> <windowsAuthentication enabled="false" useKernelMode="true" useAppPoolCredentials="true" /> </security> </system.webServer> </location>
Die XML-Dateien können Sie seit IIS 7.5 auch über den "Configuration Editor" in der GuI anpassen.
Beachten Sie, dass in den DropDown-Feldern linke "system.webServer/Security/authentication/WindowsAuthentication" stehen muss und rechts dann zwischen der globalen Application.config, der web.config der Webseite und der web.config des virtuellen Verzeichnisses gewechselt werden kann und einige Einstellungen "vererbt" werden und gelockt sind.
Letztlich führen Beschreibungen in der OCS 2007 R2 und AD RMS-Dokumentation weiter. In der offiziellen IIS-Dokumentation habe ich noch nichts dazu gefunden.
- Installing a AD RMS Cluster. Enable support für Kerberos authentication
http://technet.microsoft.com/en-us/library/dd759186.aspx - Microsoft Office Communications Server 2007 R2
Internet Information Services (IIS) 7.0 Kernel Mode
Authentication Settings
http://technet.microsoft.com/en-us/library/dd573004(office.13).aspx - UseAppPoolCredentials = True with Kerberos
Delegation on 2008
http://blogs.technet.com/b/proclarity/archive/2011/03/08/useapppoolcredentials-true-with-kerberos-delegation-on-2008.aspx - New in IIS 7 - Kernel Mode Authentication
http://www.adopenstatic.com/cs/blogs/ken/archive/2008/02/12/16189.aspx - Service Principal Name (SPN) checklist für Kerberos
authentication with IIS 7.0/7.5
http://blogs.msdn.com/b/webtopics/archive/2009/01/19/service-principal-name-spn-checklist-for-kerberos-authentication-with-iis-7-0.aspx - IISDebugging
Delegation mit SharePoint
- Configuring Kerberos Authentication für Microsoft SharePoint 2010 Products
http://www.microsoft.com/download/en/details.aspx?id=23176
Delegation mit TMG
- Forefront TMG - About delegation of credentials
http://technet.microsoft.com/en-us/library/cc995215.aspx - Forefront TMG About Kerberos constrained delegation
http://technet.microsoft.com/en-us/library/cc995228.aspx
Debugging
Für die Fehlersuche hat sich natürlich das IISLog bewährt, wobei hier natürlich bei Anmeldefehlern keine Benutzernamen zu finden Sind. Diese kann man dann im Security Eventlog finden, wenn die Anmeldeüberwachung aktiviert ist. Ansonsten gibt es auch eine ASPX-Testseite, die hilfreich sein kann.
- Kerberos Debugging
- DelegConfig V1
Download: http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1434
Beschreibung: http://blogs.iis.net/brian-murphy-booth/archive/2007/03/09/delegconfig-delegation-configuration-reporting-tool.aspx - 287537 using Basic authentication to generate Kerberos tokens
- 229694 How to install and use the IIS Security "What If" tool
- How to configure Kerberos Constrained Delegation for Web Enrollment proxy pages
https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/configure-kerberos-constrained-delegation - Deep Dive: Kerberos, Protocol Transition und
Constrained Delegation
http://www.microsoft.com/germany/msdn/launch2008/library.aspx?id=T04_DO_1715 - Hyper-V Constrained Delegation of Authority - Remote
Mounting of ISO with Management Console
http://virtuallyaware.spaces.live.com/blog/cns!549C424F228D6040!175.entry - Publizieren eines Terminal Server Gateways mit
Reverse Proxy Prä-Authentifizierung und Kerberos
Protokoll Transition und Contrained Delegation
http://blogs.itacs.de/Consulting/Lists/Beitraege/Post.aspx?List=00e8906b-aaa3-4a6b-82f4-a3fadb53f21d&ID=39 - Summary (Kerberos Protocol Transition and
Constrained Delegation)
http://technet.microsoft.com/en-us/library/cc772683(WS.10).aspx - How To: use Protocol Transition and Constrained
Delegation in ASP.NET 2.0
http://msdn.microsoft.com/en-us/library/ms998355.aspx
Sehr lesenswert, auch im Hinblick auf andere Authentifizierungsverfahren. - Checklist für Double Hop issues {IIS and SQL Server}
http://blogs.technet.com/b/taraj/archive/2009/01/29/checklist-for-double-hop-issues-iis-and-sql-server.aspx - Resource Based Kerberos Constrained Delegation
http://blog.kloud.com.au/2013/07/11/kerberos-constrained-delegation/