Ist es möglich, NFS-Dateiberechtigungen mithilfe eines NFS-Clients mit Benutzerbereich zu umgehen?

2

Es gibt einige benutzerbasierte NFS-Clients (z . B. https://stackoverflow.com/questions/2442691/nfs-client-library/2442729#2442729 ). Kann ich Dateiberechtigungen mithilfe eines solchen Clients umgehen?

Zum Beispiel:

Server1 verfügt über ein vom NFS exportiertes Dateisystem mit Dateien

-rwxr-xr-x  user1  file1
-rwx------  user2  file2

Client1 verwendet den üblichen NFS-Client (basierend auf dem Kernel-Modus) und Benutzer1 @ Client1 kann nur lesen file1, aber nicht file2. Wie ich verstehe, sendet client1 die UID in einer NFS-Anfrage, server1 führt eine Berechtigungsprüfung basierend auf den Anforderungsdaten durch. Daher schlage ich vor, dass dies möglich ist, um einen Client2 zu haben:

Client2 verwendet den User-Space-Client, und hacker @ client2 kennt die Benutzer-IDs von Benutzer1 und Benutzer2. Wenn er lesen möchte, kann file1er die Benutzer-ID von user1 senden. wenn er file2 lesen will, schickt er die uid von user2.

Ist das Schema möglich?

osgx
quelle

Antworten:

2

Nein, bis hacker @ client2 root ist, da die Sicherheit von NFS auf dem TCP-Quellport der Anforderung basiert. Wenn die Benutzerbereichsbibliothek von hacker @ client2, aber nicht von root @ client2 gestartet wird, kann sie keine TCP-Ports <= 1024 verwenden. Das Flag securein / etc / exports weist Server1 an, nicht auf Anforderungen von TCP-Ports> 1024 zu antworten. Dieses Flag ist standardmäßig gesetzt.

Eine typische Benutzerauthentifizierung beim nfs (v3) -Server unter Linux ist AUTH_NONE und AUTH_USER. Das zweite bedeutet, dass der Server der UID und der GID in der Anforderung vertraut.

NFSv4 machte diesen Angriff überhaupt nicht möglich, da der Benutzer auf NFS-Servern ein gültiges Kerberos-Ticket haben muss.

Verwendetes Buch: http://www.sans.org/reading_room/whitepapers/linux/nfs-security-trusted-untrusted-environments_1956

osgx
quelle
1
Dies ist alles in Ordnung, wenn Sie davon ausgehen, dass nur Root-Benutzer einen TCP-Socket von einem Port unter 1024 haben können. Dies ist zwar eine Standardeinstellung in den meisten Linux-Systemen, aber ich würde mein Geld nicht darauf verwenden.
Paweł Polewicz