Kapitel 15. Samba absichern

Andrew Tridgell

Samba Team

John H. Terpstra

Samba Team

Stefan G. Weichinger

Deutsche Übersetzung
German Samba-3-Docs-Translation Team

May 26, 2003

Inhaltsverzeichnis

Einführung
Eigenschaften und Vorzüge
Technische Beschreibung von Schutzmaßnahmen
Host-basierter Schutz
Benutzer-basierter Schutz
Benutzen von Schnittstellen-Schutz
Verwendung einer Firewall
Verwenden von Ablehnungen, die auf IPC$-Freigaben basieren
NTLMv2-Sicherheit
Upgrade von Samba
Häufige Fehler
Smbclient funktioniert auf Localhost, aber das Netzwerk ist tot
Warum können Benutzer auf die home-Verzeichnisse anderer Benutzer zugreifen?

Einführung

Diese Anmerkung wurde zu den Release-Notes zu Samba 2.2.8 hinzugefügt, da sie eine wichtige Sicherheitskorrektur enthält. Die hier enthaltene Information gilt generell für Samba-Installationen.

Ein neuer Lehrling meldete sich beim Chef-Ingenieur eines Kesselhauses zur Arbeit. Er sagte: „Hier bin ich, wenn Sie mir den Boiler zeigen, werde ich daran zu arbeiten beginnen.“ Der Ingenieur antwortete:„Du lehnst daran!

Sicherheitsbedenken sind genau so. Sie müssen ein wenig über das Thema wissen, um anzuerkennen, wie offensichtlich das meiste davon ist. Die Herausforderung für die meisten von uns ist, den ersten Brocken des Wissens zu entdecken, mit dem wir die Geheimnisse der Meister entschlüsseln können.

Eigenschaften und Vorzüge

Es gibt drei Ebenen, auf denen Sicherheitsprinzipien beachtet werden müssen, um eine Installation zumindest einigermaßen sicher zu gestalten. Diese sind die umgebende Firewall, die Konfiguration des Host-Servers, der Samba ausführt, und Samba selbst.

Samba erlaubt einen höchst flexiblen Ansatz zur Netzwerk-Sicherheit. Samba implementiert so weit wie möglich die neuesten Protokolle, um sicherere MS-Windows-Datei- und Druck-Operationen zu ermöglichen.

Samba kann gegenüber Verbindungen abgesichert werden, die von außerhalb des LAN herrühren. Dies kann durch die Verwendung von host-based protection geschehen (unter Verwendung der Samba-Implementation einer Technologie namens „tcpwrappers“) oder durch die Verwendung von interface-based exclusion, so dass smbd sich nur an bestimmte erlaubte Netz-Interfaces bindet. Es ist auch möglich, Ausschlüsse spezifisch für Freigaben oder Ressourcen zu setzen, zum Beispiel für die automatische Freigabe [IPC$]. Diese Freigabe wird für Browsing-Zwecke ebenso verwendet wie zur Herstellung von TCP/IP-Verbindungen.

Eine andere Methode, um Samba abzusichern, ist das Setzen von „Access Control Entries“ (ACEs) in einer Zugriffskontroll-Liste (ACL) auf den Freigaben selbst. Dies wird in ??? beschrieben.

Technische Beschreibung von Schutzmaßnahmen

Die eigentliche Herausforderung bei allen Sicherheitsbestrebungen ist die Tatsache, dass Schutzmaßnahmen nur dazu ausreichen, die Tür für bekannte „exploit“- und „breach“-Techniken zu schließen. Nehmen Sie niemals an, dass der Samba-Server nun eine uneinnehmbare Festung sei, nur weil Sie ein paar Maßnahmen befolgt haben! Wenn man die bisherige Geschichte von Informationssystemen anschaut, ist es nur eine Frage der Zeit, bis jemand einen weiteren Schwachpunkt findet.

Host-basierter Schutz

In vielen Installationen von Samba kommt die größte Bedrohung von außerhalb des unmittelbaren Netzes. Standardmäßig akzeptiert Samba Verbindungen von jedem Host, was bedeutet, dass Sie besonders gefährdet sein können, wenn Sie eine unsichere Version von Samba auf einem Host ausführen, der direkte Verbindung zum Internet hat.

Eine der einfachsten Abhilfen in diesem Fall ist die Verwendung der Optionen hosts allow und hosts deny in der Konfigurationsdatei smb.conf, um den Zugriff auf Ihren Server auf eine spezifizierte Menge von Hosts einzuschränken. Ein Beispiel könnte sein:

hosts allow = 127.0.0.1 192.168.2.0/24 192.168.3.0/24
hosts deny = 0.0.0.0/0

Diese Einstellung wird nur SMB-Verbindungen von localhost (Ihrem eigenen Rechner) und von den beiden privaten Netzen 192.168.2 und 192.168.3 erlauben. Alle anderen Verbindungen werden abgelehnt, sobald der Client sein erstes Paket sendet. Die Ablehnung wird als not listening on called name-Fehler gekennzeichnet.

Benutzer-basierter Schutz

Wenn Sie den Zugriff auf Ihren Server nur auf gültige Benutzer beschränken wollen, kann folgende Methode von Nutzen sein. Im Abschnitt [global] der Datei smb.conf setzen Sie:

valid users = @smbusers, jacko

Dies schränkt allen Server-Zugriff auf entweder den Benutzer jacko oder Mitglieder der System-Gruppe smbusers ein.

Benutzen von Schnittstellen-Schutz

Standardmäßig akzeptiert Samba Verbindungen auf jeder Netzwerk-Schnittstelle, die es in Ihrem System findet. Das bedeutet: Wenn Sie eine ISDN-Verbindung oder einen PPP-Tunnel zum Internet haben, wird Samba Verbindungen über diese Schnittstellen akzeptieren. Das könnte etwas sein, das Sie nicht wollen.

Sie können dieses Verhalten ändern:

interfaces = eth* lo
bind interfaces only = yes

Dies weist Samba an, Verbindungen nur auf Schnittstellen zu erwarten, die mit eth beginnen (wie eth0, eth1) sowie auf dem loopback-Interface namens lo. Der zu verwendende Name hängt vom verwendeten Betriebssystem ab. Im Beispiel oben wurden die unter Linux gängigen Namen für Ethernet-Karten verwendet.

Wenn Sie das obige Beispiel verwenden und jemand versucht, eine SMB-Verbindung über eine PPP-Schnittstelle namens ppp0 herzustellen, wird er eine Ablehnung erhalten. In diesem Fall wird keinerlei Samba-Code ausgeführt, da das OS angewiesen wurde, keine Verbindungen von dieser Schnittstelle an irgendeinen Samba-Prozess weiterzuleiten.

Verwendung einer Firewall

Viele verwenden eine Firewall, um Zugriff auf Dienste zu sperren, die sie nicht außerhalb ihres Netzwerks anbieten wollen. Dies kann eine gute Idee sein, obwohl wir empfehlen, die Firewall gemeinsam mit obigen Methoden einzusetzen, so dass Sie auch geschützt sind, wenn die Firewall aus irgendwelchen Gründen nicht aktiv ist.

Wenn Sie eine Firewall aufsetzen, müssen Sie wissen, welche TCP- und UDP-Ports zu öffnen bzw. zu blockieren sind. Samba benutzt die folgenden Ports:

UDP/137 - verwendet von nmbd
UDP/138 - verwendet von nmbd
TCP/139 - verwendet von smbd
TCP/445 - verwendet von smbd

Der letzte Port ist wichtig, da ihn viele ältere Firewall-Setups möglicherweise nicht berücksichtigen, weil dieser Port erst in den letzten Jahren zum Protokoll hinzugefügt wurde.

Verwenden von Ablehnungen, die auf IPC$-Freigaben basieren

Wenn die obigen Methoden nicht anwendbar sind, könnten Sie auch eine spezifischere Ablehnung auf der IPC$-Freigabe setzen, die in einer kürzlich entdeckten Sicherheitslücke verwendet wird. Dies erlaubt Ihnen, Zugriff auf andere Freigaben anzubieten, während Sie den Zugriff von potenziell nicht vertrauenswürdigen Hosts auf IPC$ ablehnen.

Um dies zu tun, verwenden Sie folgendes:

[IPC$]
hosts allow = 192.168.115.0/24 127.0.0.1
hosts deny = 0.0.0.0/0

Dies weist Samba an, dass IPC$-Verbindungen nicht erlaubt sind, außer von den zwei angeführten Netzwerk-Adressen (localhost und dem Subnetz 192.168.115). Verbindungen zu anderen Freigaben sind weiter erlaubt. Da die IPC$-Freigabe die einzige Freigabe ist, auf die anonym zugegriffen werden kann, schafft dies einen gewisse Schutz vor Angreifern, die keine gültige Benutzernamen/Passwort-Kombination für Ihren Server kennen.

Wenn Sie diese Methode anwenden, werden Clients eine 'access denied'-Meldung erhalten, wenn sie versuchen, sich mit der IPC$-Freigabe zu verbinden. Diese Clients werden keine Freigaben durchsuchen können, und sie können auch manche andere Dienste nicht benutzen. Diese Methode wird nicht empfohlen, außer Sie können aus einem bestimmten Grund keine der anderen oben beschriebenen Methoden anwenden.

NTLMv2-Sicherheit

Um eine NTLMv2-Authentifizierung zu konfigurieren, sind die folgenden Registrierungsschlüssel wichtig:

		[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]
		"lmcompatibilitylevel"=dword:00000003
		

Der Wert 0x00000003 bedeutet, dass nur NTLMv2-Antworten gesendet werden. Clients werden die NTLMv2-Authentifizierung verwenden, und die NTLMv2-Session-Security, wenn es der Server unterstützt. Domänencontroller akzeptieren LM-, NTLM- und NTLMv2-Authentifizierung.

		[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0]
		"NtlmMinClientSec"=dword:00080000
		

Der Wert 0x00080000 bedeutet, dass nur NTLMv2-Session-Security akzeptiert wird. Wenn entweder NtlmMinClientSec oder NtlmMinServerSec auf 0x00080000 gesetzt ist, wird die Verbindung fehlschlagen, wenn die NTLMv2-Session-Security nicht ausgehandelt wird.

Upgrade von Samba

Bitte überprüfen Sie regelmäßig http://www.samba.org/ auf Updates und wichtige Verlautbarungen. Gelegentlich werden Sicherheits-Releases herausgegeben, und wir empfehlen Ihnen dringend, ein Upgrade von Samba durchzuführen, wenn eine Sicherheitslücke entdeckt wird. Prüfen Sie auch die Seiten des Lieferanten Ihres Betriebssystems auf Upgrades, die spezifisch für Ihr Betriebssystem sind.

Häufige Fehler

Wenn die ganze Konfiguration von Samba und seiner Host-Plattform wirklich so intuitiv wäre, wie es sich mancher wünscht, dann wäre dieser Abschnitt unnötig. Sicherheitsfragen sind oft ärgerlich für die Support-Person, die sie zu lösen hat, nicht nur wegen der Komplexität des Problems, sondern aus dem Grunde, dass die meisten Administratoren, die von etwas berichten, das sich dann als Sicherheitsproblem herausstellt, völlig überzeugt davon sind, dass das Problem an Samba liegt.

Smbclient funktioniert auf Localhost, aber das Netzwerk ist tot

Das ist ein verbreitetes Problem. Red Hat Linux (und andere) installiert eine Firewall. Mit der Standard-Firewall wird nur Verkehr auf dem loopback-Adapter (IP 127.0.0.1) durch die Firewall gelassen.

Die Lösung ist es, entweder die Firewall zu entfernen (stoppen) oder das Firewall-Skript so zu modifizieren, dass die Firewall SMB-Netzwerk-Verkehr durchlässt (siehe den obigen Abschnitt hierzu).

Warum können Benutzer auf die home-Verzeichnisse anderer Benutzer zugreifen?

We are unable to keep individual users from mapping to any other user's home directory once they have supplied a valid password! They only need to enter their own password. I have not found any method to configure Samba so that users may map only their own home directory.(((Bitte übersetzen)))

User xyzzy can map his home directory. Once mapped user xyzzy can also map anyone else's home directory.(((Bitte übersetzen)))

Dies ist kein Sicherheitsversäumnis, sondern vom Design so vorgesehen. Samba erlaubt Benutzern denselben Zugriff auf das UNIX-Dateisystem, als wären sie an der UNIX-Maschine angemeldet, mit der Einschränkung, dass es nur Zugriff auf die Dateien erlaubt, die von den definierten Freigaben erlaubt sind.

Wenn Ihre UNIX-home-Verzeichnisse so angelegt sind, dass ein Benutzer einfach per cd in das home-Verzeichnis eines anderen Benutzers gelangen und ls ausführen kann, so ist die UNIX-Sicherheitslösung dafür, die Datei-Erlaubnisse für die home-Verzeichnisse so zu setzen, dass die Befehle cd und ls abgelehnt werden.

Samba ist so eingeichtet, dass es die Sicherheitsrichtlinien des UNIX-Administrators nicht hinterfragt und ihm zu vertraut, dass er die Richtlinien und Erlaubnisse so setzt, wie er es für richtig hält.

Samba erlaubt das gewünschte Verhalten. Setzen Sie einfach die Option only user = %S im Abschnitt der [homes]-Freigaben-Definition.

Die Option only user arbeitet in Wechselwirkung mit users = list, also müssen Sie, um das gewünschte Verhalten zu erzielen, folgende Zeile hinzufügen:

users = %S

Dies ist gleichbedeutend zum Hinzufügen von

valid users = %S

zur Definition der [homes]-Freigabe, wie es in der Manpage zu smb.conf empfohlen wird.