Open Source im professionellen Einsatz

NIS-Authentifizierung mit Kerberos

Misstrauische Tickets

Die Kombination aus Network Information Service (NIS) und Kerberos erlaubt es, viele User zu verwalten und gleichzeitig einen sicheren Login zu gewährleisten. Der Schlüssel dazu liegt in den kryptographischen Fähigkeiten von Kerberos, das zudem sicheren Ersatz für unsichere IP-Dienste mitbringt.

Wer den Network Information Service für die zentrale Benutzerverwaltung einsetzt, hat ein Sicherheitsproblem, vor allem wenn NIS die Shadow-Passwortdatenbank ebenfalls unter seine Fittiche nimmt. Sinn der Shadow-Datei ist es, dafür zu sorgen, dass kein Benutzer Zugriff auf die verschlüsselten Passwörter erhält. Verwaltet jedoch NIS diese Datei, dann fließt bei jeder Benutzeranmeldung der verschlüsselte Passwort-String über das Netzwerk. Sollte jemand den Datenverkehr mithören, kann er diesen String mit einem Sniffer wie Ethereal abfangen und einen Brute-Force- oder einen Wörterbuch-Angriff durchführen. Auch dafür gibt es zahlreiche Programme wie John oder Crack.

An dieser Stelle greift Kerberos[1] ein. Es schützt die Passwörter mit einem besonderen Mix aus Kryptographie und Transportphilosophie. Dieser Artikel bezieht sich auf NIS in der Version 2. Die Authentifizierung übernimmt Kerberos 5. Zwar gibt es NIS bereits in der Version 3, aber für Linux existiert bisher nur ein Client. Die Server-Variante befindet sich noch in Entwicklung. Die Konfiguration von NISv3, auch NIS+ genannt, ist zudem deutlich schwieriger als bei der hier vorgestellten Version. Weitere Informationen zu NIS+ finden sich auf der NIS-Howto-Website[2].

Der dreiköpfige Hund

Viele Admins versuchen ihre Sicherheitsprobleme durch Firewalls zu lösen. Allerdings drohen Gefahren nicht nur von außen. Die meisten nicht autorisierten Zugriffe kommen aus dem lokalen Netzwerk, in dem ein Lauscher einfach Klartextpasswörter abfängt. Diese Lücke schließt die Authentifizierungs-Software Kerberos. Programmierer des Massachusetts Institute of Technology (MIT) haben Kerberos entwickelt, um die sichere Authentifizierung für Client- und Server-Anwendungen zu gewährleisten. Dazu nutzt die Software starke Kryptographie und ein auf Tickets basierendes Authentifizierungsprotokoll.

Typische Netzwerkdienste wie FTP oder POP3 gefährden die Sicherheit im Netzwerk, denn Benutzername und Passwort wandern im Klartext vom Client zum Server. Kerberos bricht diese Tradition, indem es Passwörter erst gar nicht über das Netz sendet. Somit kann es der Sniffer auch nicht abfangen. Andere Angriffe wie Spoofing und Replay-Attacken erschwert Kerberos ebenfalls. Zudem muss sich ein Client nur einmal im Netzwerk authentifizieren und erhält damit Zugang zu allen mit Kerberos gesicherten Diensten.

Kerberos kümmert sich lediglich um den eigentlichen Vorgang der Authentifizierung. Es stellt keine Benutzerinformationen wie beispielsweise die User-ID, eine Login-Shell oder das Heimatverzeichnis bereit. Diese Informationen verwaltet ein Verzeichnisdienst wie NIS (siehe Kasten "NIS aufsetzen").

NIS aufsetzen

Ein NIS-Server verwaltet Benutzer- und Host-Informationen, die Clients in derselben NIS-Domäne abfragen können. Der Administrator erhält durch NIS eine Zentrale für die Benutzer- und Host-Verwaltung. Anwender greifen von einem beliebigen NIS-Client auf diese Datenbank zu, unter anderem um sich zu authentifizieren (siehe Kasten "NIS-Client konfigurieren"). Dazu lässt der Administrator einfach die Dateien »/etc/passwd« und »/etc/group« von NIS verwalten. Auch mit Shadow-Passwörtern kommt der NIS-Server zurecht, sofern eine Glibc installiert ist. Ältere Bibliotheken wie Libc5 verweigern die Zusammenarbeit.

NIS-Server konfigurieren

Bevor es an die eigentliche Konfiguration des Servers geht, wählt der Administrator den Namen der neuen NIS-Domäne. Er sollte nicht den Namen der DNS-Domäne verwenden, da Einbrecher diesen oft als zuallererst ausprobieren. In diesem Artikel heißt die NIS-Domäne »example«. Sie ist mit der Anweisung »NISDOMAIN=example« in die Datei »/etc /sysconfig/network« einzutragen. Danach erst geht es an die eigentliche Arbeit: die Konfiguration des Makefiles, das im Verzeichnis »/var/yp« liegt.

Die meisten Einträge muss der Verwalter nicht anpassen. Mit der Anweisung »MINUID« legt er fest, ab welcher User-ID NIS die Benutzer verwaltet. Die Option »MINGID« bestimmt entsprechend die Gruppen. »MERGEPASSWD« ist in diesem Beispiel zwingend auf »false« zu setzen, da NIS keine Passwörter verifizieren soll. Im letzten Schritt ist mit Hilfe von »all: passwd group« anzugeben, dass NIS die Benutzerkonten und Gruppen verwalten soll. NIS kann zwar mehr, das ist für die Beispielkonfiguration aber nicht relevant.

NIS arbeitet nicht mit den eigentlichen Ascii-Dateien »/etc/passwd« und »/etc/group«, sondern generiert mit Hilfe des Tools »makedbm« GDBM-Dateien, die im NIS-Jargon Maps heißen. Makedbm erzeugt aus jeder Datei zwei NIS-Maps, die nach verschiedenen Kriterien sortiert sind. Die Passwd-Map ordnet es zum Beispiel nach Login-Namen (»passwd. byname«) und nach User-IDs (»passwd. byuid«). Die NIS-Maps befinden sich nach der Initialisierung des Servers mit dem Kommando

/usr/lib/yp/ypinit -m

in einem Ordner unterhalb von »/var/yp«. Der Ordner trägt den Namen der NIS-Domäne. Die NIS-Datenbank enthält lediglich jene Benutzer, die zu diesem Zeitpunkt vorhanden sind. Kommen später weitere User oder Gruppen hinzu, müssen sie in die NIS-Maps einfließen. Das erreicht der Administrator mit dem Kommando »make -C /var/yp«.

Der NIS-Server nimmt seine Arbeit auf, sobald die Dienste »portmap« und »ypserv« laufen. Den Ablauf stellt der Administrator in den verschiendenen Runlevel-Verzeichnissen unter »/etc/init.d/« ein.

Redundanz und Sicherheit

Bei einem zentralisierten Verzeichnisdienst wie NIS ist es immer geschickt, einen zusätzlichen Server aufzusetzen. Auf diese Weise erreicht der Verwalter, dass sich die Benutzer weiterhin am Netzwerk anmelden können, selbst wenn der primäre NIS-Server ausfällt. Der sekundäre Server lässt sich einfach aufsetzen, beim »ypinit«-Kommando ist die IP-Adresse des Master-Servers anzugeben:

/usr/lib/yp/ypinit -s Master-Server-IP

Fortan bezieht der zweite Rechner alle Maps vom Master-Server. Vorher sind allerdings noch zwei Sachen zu erledigen: Der sekundäre Server muss als NIS-Client arbeiten und die Datei »/var/yp/ypservers« auf dem Master muss auf diesen verweisen.

Außerdem sollte sich der Administrator Gedanken über die Sicherheit seiner NIS-Sever machen. Jeder NIS-Client kann sich jede von NIS verwaltete Datei anzeigen lassen. Ein einfacher Aufruf von »ypcap passwd« genügt, schon präsentiert der Server die Passwd-Map. Passwd ist hier ein Alias für »passwd.byname« und »passwd.byuid«; weitere Aliase befinden sich in der Datei »/var/yp/nicknames«.

Zwar erhält der Client nicht die verschlüsselten Passwörter der User, da dies die Anweisung »MERGEPASSWD=false« im Makefile verhindert. Was der Server zeigt, reicht jedoch aus, um bereits umfangreiche Informationen über Benutzernamen zu sammeln. Daher sollte der Administrator den Zugriff auf die NIS-Maps unbedingt einschränken.

Speziell für diese Aufgabe gibt es die Datei »/var/yp/securenets« (Listing 2). Die zugelassen Netzwerke finden hier einen Platz. Auf IP-Ebene ist mit entsprechenden Paketfilterregeln eingeschränkter Zugriff auf den Portmapper zu erreichen. Eine Netfilter-Regel auf der Firewall könnte beispielsweise so aussehen:

iptables -t filter -A FORWARD -p udp -dport 111 -s 192.168.0.0/24 -d 192.168.0.100 -j ACCEPT

Dabei entspricht 192.168.0.0/24 dem zugelassenen Netzwerk und auf 192.168.0.100 residiert der Portmapper. Connection Tracking[7] und eine Anpassung der Standardpolicy für diese Chain wird hier vorausgesetzt. Allerdings ist daran zu denken, dass jetzt auch alle anderen Dienste, die vom Portmapper abhängig sind, mit einer Zugangsbeschränkung belegt sind. Gleiches gilt, wenn der TCP-Wrapper den Portmapper schützt.

Listing 2:
Securenets

01 # Zugang für »localhost« explizit erlauben:
02 host            127.0.0.1
03 
04 # Zugang für Rechner aus dem Netz 192.168.0.0/24 erlauben:
05 255.255.255.0   192.168.0.0
06 
07 # Zugang jedem Rechner gestatten (Vorsicht!):
08 #0.0.0.0        0.0.0.0

Verteilter Mechanismus

Die hohe Sicherheit erhält der Administrator durch einen ausgefeilten Mechanismus (siehe Kasten "Ablauf einer Kerberos-Session"). Der Client baut eine Verbindung zu einem Key Distribution Center (KDC) auf (Abbildung 2). Das geschieht entweder für den User transparent über das Anmeldeprogramm »login« oder mit Hilfe des Clients »kinit«. Das KDC besteht aus zwei Teilen: dem Authentication Server (AS) und dem Ticket Granting Server (TGS). Der Authentication Server empfängt die Anfrage des Clients und prüft im Namensraum (Realm), ob der Benutzername (User Principal) überhaupt berechtigt ist, auf die Dienste zuzugreifen.

Ablauf einer
Kerberos-Session

1 Der User meldet sich am System an und sendet eine Login-Anfrage an den Authentication Server (AS).

2 Der Authentication Server antwortet mit einem Ticket Granting Ticket (TGT).

3 Der Client möchte eine Verbindung zu einem Kerberos-Dienst aufbauen und verlangt deshalb ein Service Ticket (ST).

4 Der Ticket Granting Server (TGS) stellt das angeforderte Service Ticket aus.

5 Der Client reicht das Service Ticket an den Kerberos-Dienst weiter.

6 Der User ist authentifiziert, die Verbindung aufgebaut und der User muss sich für die Gültigkeitsdauer des ST nicht mehr anmelden.

Abbildung 2: In einer Kerberos-Session wandert das Passwort nie im Klartext über das Netzwerk.

Abbildung 2: In einer Kerberos-Session wandert das Passwort nie im Klartext über das Netzwerk.

Befindet sich der Principal in der Kerberos-Datenbank, erzeugt der AS einen zufälligen Session Key und ein so genanntes Ticket Granting Ticket (TGT). Dieses TGT enthält verschiedene Informationen wie den Hostnamen und die IP-Adresse des Clients sowie die Gültigkeitsdauer des Tickets, einen Zeitstempel und den eben erzeugten Session Key.

Dieses TGT kodiert Kerberos mit einem Schlüssel, der nur dem Authentication Server und dem Ticket Granting Server bekannt ist. Zusammen mit dem eben erzeugten Session Key schickt der Server das Ticket an den Client. Um Mitleser zu enttäuschen, ist das Ticket mit einem Schlüssel kodiert, den Kerberos aus dem Passwort des Clients berechnet hat.

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook