Kerberos Grundlagen

Fangen wir einfach und nicht technisch an.

Die verschiedenen Anmeldeverfahren

Um auf eine Ressource zugreifen zu können, verlangen gut konfigurierte Systeme eine Anmeldung des Zugriffs. Kaum jemand wird, mal abgesehen von Informationen auf einer öffentlichen Webseite, Daten für jeden erreichbar machen. Das Prinzip ist schon sehr alt und gilt nicht nur für Dateien, sondern auch beim Zugriff auf ein Postfach, eine Webseite und andere Dienste. Dabei kommen unterschiedliche Authentifizierungsverfahren zum Einsatz. Am häufigsten sind dabei:

  • Basic/Klartext
    Einfaches Verfahren, was aber bei Webseiten, POP3-Servern, TELNET und anderen Protokollen im Einsatz ist. Oft meldet sich nur der Benutzer (ohne Angaben von Gruppen) an und hoffentlich werden die Daten per SSL verschlüsselt. Gerade im Internet werden solche Daten sonst nur per BASE64 codiert, was aber keine Verschlüsselung darstellt. Von Vorteil hierbei ist, dass das Zielsystem den Benutzernamen als auch sein Kennwort hat und damit stellvertretend auch andere Systeme ansprechen kann. Aus Sicherheitsaspekten ist dies kritisch zu sehen
  • Integriert NTLM
    Lange Zeit konnte nur Windows und IE dieses Verfahren. Mittlerweile können SAMBA-Server ebenfalls mit NTLM authentifizieren und Firefox Browser kann NTLM zur Anmeldung verwenden. Hierbei wird an den Server nur ein mit einem Einmalschlüssel des Servers codierter Wert übermittelt. Das Ziel kann prüfen, ob die Zugangsdaten gültig sind, aber das Kennwort selbst geht nicht über die Leitung. Damit ist die Übertragung "sicherer" aber das Ziel kann nicht im Auftrag des Benutzers auf anderer Ressourcen zugreifen.
  • Integriert Kerberos
    Mit Windows 2000 trat Kerberos auf den Plan. Hier fordert das Ziel den Client auf, sich ein "Ticket" für das Ziel zu holen und dies vorzuweisen. Das Ziel kann dann einfach die Gültigkeit  (Zeit, Aussteller etc.) prüfen, ohne mit dem Aussteller selbst in Kontakt zu treten. Das ist besonders hilfreich in großen Umgebungen mit Trusts etc. Kerberos erlaubt sehr schnelle Anmeldungen und ist das Default Protokoll von Windows 2000 und höher
  • Digest, Zertifikate und andere
    Natürlich gibt es noch eine ganze Menge anderer Authentifizierungsverfahren, auf die ich aber nicht näher eingehen möchte.

Solange sich nur ein Benutzer anmelden muss, reichen einfache Verfahren. Einige Zugriffe werden aber über Gruppen kontrolliert. Hier stellt sich dann die Frage ob der Server selbst anhand des Benutzers dessen Gruppenmitgliedschaften erst ermittelt, oder ob der Benutzer die Liste seiner bei der Anmeldung bereits ermittelten Gruppen bei der Authentifizierung einfach mitgibt.

Die Komponenten

Sie wissen mittlerweile, dass Kerberos seit Windows 2000 das Protokoll der Wahl ist und vielleicht haben Sie noch gar nicht bemerkt, dass unter der Oberfläche die Anmeldung mit "Tickets" funktioniert. für die Funktion Kerberos sind ein paar Begriffe zu zu definieren:

  • Der Client
    Damit ist der Benutzer bzw. der PC gemeint, welcher eine Ressource erreichen will
  • Der Server und SPN
    Damit ist das System gemeint, welches eine Dienstleistung anbietet. Damit ein Client ein Kerberos-Ticket für dieses System erhalten kann, muss der KDC den "Service Principal Name" dieses Systems können
  • Kerberos Distribution Center (KDC)
    Dieser Dienst, welcher auf jedem Domaincontroller mitläuft, verteilt "Fahrscheine"
  • TGT
    Dies ist ein besonderes Ticket, welches ein Client bei der Anmeldung des Servers bekommt. Es ist quasi der Ausweis, mit dem der Client in der Folge Fahrscheine anfordern kann. Damit muss der Client in der Folge sich auch am KDC nicht immer wieder neu anmelden.
  • Ticket
    Ein Fahrschein wird vom KDC für eine bestimmte Ressource eines Servers an einen Client gegeben, der sich vorher durch sein TGT ausgewiesen hat.

Eine einfache Anmeldung

Und weil das alles etwas kompliziert erscheint. spielen wir eine normale Anmeldung einfach einmal durch:

Hier sehen wir einen Client "pc1", welcher eine Ressource auf "server1" öffnen will und sich ausweisen muss.

Schritt Beschreibung

Der Anwender meldet sich auf dem PC an. Der PC übergibt diese Anmeldedaten an den Domaincontroller, welcher die Anmeldung prüft und dann dem Client ein TGT (Ticket Granting Ticket) gibt. Diese besondere Ticket verwendet der Client in Folge, um sich beim KDC zu authentifizieren, wenn er weitere Diensttickets benötigt.
Auch diese Anmeldung ist natürlich mit Zertifikaten gesichert.

Nun möchte der Client eine Verbindung zum Server 1 aufbauen. Nutzt er dazu z.B.: einen Webbrowser, dann versucht der Anwender erst einmal eine anonyme Verbindung.

Der Webserver wird den Client natürlich mit einem 401-Fehler abweisen und ihn zur Anmeldung auffordern. Dabei erhält der Client auch gleich den Namen der Ressource, für den er ein Ticket vorweisen muss

Der Client geht nun mit diesem Namen an das Kerberos Distribution Center (Quasi den Fahrkartenschalter) und bittet um ein Ticket für die Ressource.

Der KDC nun sucht im Active Directory im Feld "ServicePrincipalName" nach der angeforderten Ressource, um das passende Konto zu finden.

Das Ticket wird auf den Namen und mit den Daten des Benutzers ausgestellt, digital signiert und an den Client gegeben, welcher das Ticket in seinem Cache übernimmt.

Der Client stellt nun die Anfrage erneut an den Server und gibt eben dieses Ticket an den Server mit.

Der Server kann nun die Gültigkeit des Tickets überprüfen, ohne direkt in Kontakte mit dem KDC zu treten, da er ja dem KDC "vertraut". Der Benutzer erhält Zugriff.

Ein Ticket ist vergleichbar zu einer Bahnfahrkarte nur für ein bestimmtes Ziel und eine bestimmte Zeit gültig. Läuft ein Ticket ab, dann erneuert der PC dies selbständig. Wichtig ist aber, dass alle beteiligten Systeme eine ziemlich synchrone uhrzeit haben. Siehe auch Zeitsynchronisation in Netzwerken. Der Große Vorteil hierbei ist, dass der Client auch bei Folgezugriffen nicht immer wieder sich neu am Server anmelden muss und der Server diese Daten auch nicht mehr gegen den Domaincontroller gegenprüfen muss. Das war bei NT4 noch sehr viel aufwändiger.

NTLM Anmeldung

Zum Vergleich hier die einfache NTLM-Anmeldung in einem lokalen Netzwerk innerhalb der Domäne.

Schritt Beschreibung

Der Client greift auf den Server zu, welcher ihm einen "Challenge" sendet, quasi eine Zufallszahl. Diese wird vom Client unter Verwendung seines Kennworts verändert und wieder an den Server gesendet.

Der Server muss nun an den DC des Benutzers gehen, um die übermittelten Anmeldedaten prüfen zu lassen. Der DC teilt dem Server dann mit, ob die Anmeldedaten i.O. sind.

Erst dann Teilt der Server dem Client eine SessionID mit, mit der alle weiteren Daten dieser einen Verbindung authentifiziert werden.

Erfolgt ein Zugriff über Trusts, nehmen die Anfragen weiter zu. Zudem wird dieser Ablauf jedes mal durchlaufen, wenn ein Client eine neue Session aufbaut. Wenn ein Client also mehrere Laufwerke mit einem Server verbindet oder mehrere parallele HTTP-Sessions öffnet, dann wird jedes mal diese Authentifizierung durchlaufen.

Spätestens jetzt wird klar, dass ein Kerberos-Ticket, welche der Client einmalig erhält und 6h gültig ist, sehr viel flexibler und vor allem skalierbarer ist, als die alte NTLM-Anmeldung.

Dennoch ist NTLM nicht Tod, denn Kerberos funktioniert nur, wenn der Client für das gewünschte Ziel ein Ticket vom KDC erhalten kann. Der KDC muss dazu vom Client erreichbar sein und einen SPN für den angesprochenen Dienst auflösen können. Und dann müssen Firewalls, Dienste, Proxies etc. Natürlich auch Kerberos anbieten. Selbst die Exchange 2010 CAS-Server können das erst wieder seit SP1 (Siehe E2010CAS und Kerberos)

Weitere Links